Thinking in Shader(1)
开发环境
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)相关推荐
- 绘制多边形_XDGE_RayMarchine 1- 利用Frag Shader绘制图形
转载于小道的博客园 XDGE_RayMarchine 1- 利用Frag Shader绘制图形www.cnblogs.com # Render/RayMarchine/Base 1- 利用Frag绘 ...
- 早上突然看明白 shader和材质球的关系
计算机的世界不外乎 指令+数据 shader即Gpu指令,材质即数据 转载于:https://www.cnblogs.com/jiahuafu/p/7348663.html
- unity中使用自定义shader进行光照贴图烘培无法出现透明度的坑爹问题
最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏 ...
- (转)径向模糊效果shader
转自:http://blog.csdn.net/xoyojank/article/details/5146297 最先在这里看到:http://www.gamerendering.com/2008/1 ...
- 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但
片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但片元着色器是一个更合适的名字, 因为此时的片元并不是一个真正意义上的像素.
- unity加载ab后,场景shader不起效问题(物件表现黑色)
需要把unity自带的shader,加入到默认列表 转载于:https://www.cnblogs.com/lancidie/p/9293827.html
- DX11 preprocessor Dynamic shader linkage
(参照例子DXSDK sample:DynamicShaderLinkage11) 一.preprocessor 实现shader静态分支的经典方法,代码示例如下 shader中(如果显卡不支持DX1 ...
- 编写和调试Shader程序(1)
编写和调试Shader程序 (1)DirectX EffectEdit JohnsonFeng 常用的Shader编写程序有ATI Render Monkey和NVIDIA FX Composer,另 ...
- 【OpenGL】向Shader中传递数据
传递顶点属性信息 之前讲过,vertex shader会被每个顶点调用,通常一个顶点会包含很多信息,例如顶点坐标.顶点法向量.纹理坐标等等,我们称这些信息为顶点的属性.在之前的OpenGL版本里,每个 ...
- osg中运用Shader(osg初级篇2)
关于shader的概念,可以参见我的另一篇博客<opengl版本发展史及各种概念的厘清>,这里列举一个例子,用来实现一个特效,屏幕的左半部显示为红色.首先我们准备好两个shader程序: ...
最新文章
- yii2快速導出phpexcel
- async js 返回值_JS异步编程 | Async / Await / Generator 实现原理解析
- Oracle 11.2.0.2新特性——用户重命名(Rename User)
- FPGA学习之路—应用程序—原码二位乘法器及Verilog代码分析
- python脚本转换成apk_使用Python-For-Android将Python脚本导出到Android可执行文件(.apk)...
- forever不重启 node_运维监控Prometheus,部署安全的node_exporter监控主机
- 第一次Sprint总结
- 虎贲计算机二级视频解析百度云,详解虎贲T7520:5G为什么需要全场景覆盖增强技术?...
- 使用securecrt在本地与服务器之间上传下载数据
- Spring的入门学习笔记 (注解)
- 【新功能发布】事件监控升级-支持自动化处理云产品异常
- [C#]用Forms.TreeView显示Icon会有黑边
- PS基础冷门小技巧,巧用“标尺工具”…
- 索尼 电视 android 8,索尼电视停止安卓8.0固件下载:因存在无法连接Wi-Fi的情况...
- asp存入当前时间mysql_asp当前日期时间
- 浅析C++外部链接和内部链接
- 计算机停车管理系统界面,智慧停车管理系统-智慧停车整体解决方案
- RSA密钥BEGIN CERTIFICATE、BEGIN RSA PRIVATE KEY和BEGIN PRIVATE KEY的区别
- unicode字符的转换
- 学python多大年龄可以学车_考驾照的最小年龄,多少岁可以考驾照