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)

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页