开发环境

Window7

羽化的第十七篇博客,这周过得异常诡异,由于项目启动,预演计划接近工作开始慢慢变得繁忙,本来打算专心看Shader但发现能研究的时间越来越少,但自己还是要看下去,C++看了个基础,现在看起还是没那么容易,总之给自己加油吧~ ~ 这周印象最深的是看了一个叫《尸鬼》的动画和漫画,至于好不好看这还是要看个人欣赏水平来,整部作品给人的感觉十分压抑,封闭的村庄,离奇的死亡,鲜明的人物,悲惨的命运,是一部给人看清人性的作品,给羽化很大的感触-0- 其次是终于玩到了传说中的《战地3》,很多人把它和快要发售的《现代战争3》做比较,羽化个人认为,寒霜引擎确实给力尤其是在光晕方面,十分写实,画面效果基本上超过目前所有射击游戏,包括孤岛危机没有这种艳丽的效果,但这作战地明显是仿照使命召唤系列做的,可惜剧情没有想象中精彩,虽然有很多新奇体验,但劣质的AI实在是拿不出手啊,只能当作大餐前的点心。

既然开始看Shader,那就从基础开始吧=。= 羽化不准备按照一般套路写,因为羽化也是初学者,所以这里只做学习记录,基本上是重要的知识点吧,多半出自看过的一些书中,至于真正想学习的人,还是去看一些关于这方面的专业书籍。

图形数字化概念

把颜色的信息转换成数字,转换的原则是使用一个0~1之间的数值来显示不同色光的强度,越黑就越接近0,越白就越接近1。可以分为红、绿、蓝三种基本颜色色光,实现不同颜色只要改变三种色光的强度,计算机中基本使用8bits精确度,也就是1Byte的整数来存储一个基本色光,所以内存中实际看到的是0~255的整数。

 

分辨率的影响

考虑到每个像素各使用1Byte来存储三种色光的画,对于1024*768分辨率来说就需要1024*768*3Bytes= 2.25MB,但一般数据放在硬件内存以“4”为倍数的地址,所以每个像素强迫使用4Bytes的内存,实际使用1024*768*4Bytes = 3MB,多出来的Byte被用来存储Alpha值。

 

动画

电视、电影、卡通、游戏的动态图像实际上都是由许多张静态的画面组成的,每一帧是一张图片,以电影来说,每秒会有24帧,游戏画面更新就不一定,一般的Xbox360和PS3游戏都在30~60帧,PC由于硬件规格不统一,根据配置决定执行速度快慢,但一般都在30帧以上。游戏程序方面实际上是配置两块画面内存,一块用来放已经画好的图,负责此时播放,另一块则交给程序准备下一个画面,就是所谓的double buffer,back buffer的画面准备完毕后才会更新到front buffer。

 

GPU存在的意义

由于GPU 具有高并行结构(highly parallel structure),所以GPU 在处理图形数据和复杂算法方面拥有比CPU 更高的效率。图1 展示了GPU 和CPU 在结构上的差异,CPU 大部分面积为控制器和寄存器,与之相比,GPU 拥有更多的ALU(Arithmetic Logic Unit,逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理。CPU 执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行,而GPU 具有多个处理器核,在一个时刻可以并行处理多个数据。


几何阶段坐标变换

根据GPU处理流程中顶点坐标变换的先后顺序,主要有如下几个坐标空间:Object space,模型坐标空间;World space,世界坐标系空间;Eye space,观察坐标空间;Clip and Project space,屏幕坐标空间。

Zbuffer

Z buffer 应该是大家最为熟悉的缓冲区类型,又称为depth buffer,即深度缓冲区,其中存放的是视点到每个像素所对应的空间点的距离衡量,称之为Z值或者深度值。可见物体的Z 值范围位于【0,1】区间,默认情况下,最接近眼睛的顶点(近裁减面上)其Z 值为0.0,离眼睛最远的顶点(远裁减面上)其Z值为1.0。使用z buffer 可以用来判断空间点的遮挡关系,著名的深度缓冲区算法(depth-buffer method,又称Z 缓冲区算法)就是对投影平面上每个像素所对应的Z 值进行比较的。

Shade Language

目前,shader language的发展方向是设计出在便捷性方面可以和C++\JAVA相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”同时“利用图形硬件的并行性,提高算法的效率”。Shader language 目前主要有3 种语言:基于OpenGL 的GLSL,基于Direct3D 的HLSL,还有NVIDIA公司的Cg 语言。使用shader language编写的程序称之为shader program(着色程序)。着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序)。

先看些基础的东西,羽化后面的学习基本上都是从图形学和CG入手,最后的目标当然是写出好的Shader,提供Unity的项目使用。

下集预告:

Thinking in Shader(2)

Thinking in Shader(1)相关推荐

  1. 绘制多边形_XDGE_RayMarchine 1- 利用Frag Shader绘制图形

    转载于小道的博客园 XDGE_RayMarchine 1- 利用Frag Shader绘制图形​www.cnblogs.com # Render/RayMarchine/Base 1- 利用Frag绘 ...

  2. 早上突然看明白 shader和材质球的关系

    计算机的世界不外乎 指令+数据 shader即Gpu指令,材质即数据 转载于:https://www.cnblogs.com/jiahuafu/p/7348663.html

  3. unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题

    最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏 ...

  4. (转)径向模糊效果shader

    转自:http://blog.csdn.net/xoyojank/article/details/5146297 最先在这里看到:http://www.gamerendering.com/2008/1 ...

  5. 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但

    片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但片元着色器是一个更合适的名字, 因为此时的片元并不是一个真正意义上的像素.

  6. unity加载ab后,场景shader不起效问题(物件表现黑色)

    需要把unity自带的shader,加入到默认列表 转载于:https://www.cnblogs.com/lancidie/p/9293827.html

  7. DX11 preprocessor Dynamic shader linkage

    (参照例子DXSDK sample:DynamicShaderLinkage11) 一.preprocessor 实现shader静态分支的经典方法,代码示例如下 shader中(如果显卡不支持DX1 ...

  8. 编写和调试Shader程序(1)

    编写和调试Shader程序 (1)DirectX EffectEdit JohnsonFeng 常用的Shader编写程序有ATI Render Monkey和NVIDIA FX Composer,另 ...

  9. 【OpenGL】向Shader中传递数据

    传递顶点属性信息 之前讲过,vertex shader会被每个顶点调用,通常一个顶点会包含很多信息,例如顶点坐标.顶点法向量.纹理坐标等等,我们称这些信息为顶点的属性.在之前的OpenGL版本里,每个 ...

  10. osg中运用Shader(osg初级篇2)

    关于shader的概念,可以参见我的另一篇博客<opengl版本发展史及各种概念的厘清>,这里列举一个例子,用来实现一个特效,屏幕的左半部显示为红色.首先我们准备好两个shader程序: ...

最新文章

  1. yii2快速導出phpexcel
  2. async js 返回值_JS异步编程 | Async / Await / Generator 实现原理解析
  3. Oracle 11.2.0.2新特性——用户重命名(Rename User)
  4. FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
  5. python脚本转换成apk_使用Python-For-Android将Python脚本导出到Android可执行文件(.apk)...
  6. forever不重启 node_运维监控Prometheus,部署安全的node_exporter监控主机
  7. 第一次Sprint总结
  8. 虎贲计算机二级视频解析百度云,详解虎贲T7520:5G为什么需要全场景覆盖增强技术?...
  9. 使用securecrt在本地与服务器之间上传下载数据
  10. Spring的入门学习笔记 (注解)
  11. 【新功能发布】事件监控升级-支持自动化处理云产品异常
  12. [C#]用Forms.TreeView显示Icon会有黑边
  13. PS基础冷门小技巧,巧用“标尺工具”…
  14. 索尼 电视 android 8,索尼电视停止安卓8.0固件下载:因存在无法连接Wi-Fi的情况...
  15. asp存入当前时间mysql_asp当前日期时间
  16. 浅析C++外部链接和内部链接
  17. 计算机停车管理系统界面,智慧停车管理系统-智慧停车整体解决方案
  18. RSA密钥BEGIN CERTIFICATE、BEGIN RSA PRIVATE KEY和BEGIN PRIVATE KEY的区别
  19. unicode字符的转换
  20. 学python多大年龄可以学车_考驾照的最小年龄,多少岁可以考驾照

热门文章

  1. 吐血力作:平台云deis之准备
  2. Linux实战教学笔记08:Linux 文件的属性(下半部分)
  3. JAVA POI Word转PDF convert方法 NullPointException
  4. el-table表格动态合并行、合并行列及详解
  5. Owin webApi合作
  6. python计算总价_vue 实现购物车总价计算
  7. java 处理树形结构数据
  8. python量化投资-技术指标的计算
  9. cocos2dx lua编辑器
  10. navicat 怎么调试存储过程_Navicat中如何调试存储过程