1基础篇
2-4基础篇 为初学者普及基本的理论知识以及必要的数学基础
5-8初级篇 从最简单的shader开始,讲解Shader中基础的光照模型、纹理和透明效果等初级渲染效果。
9-16中极篇 讲解Unity中的渲染路径、如何计算光照衰减和阴影、如何使用高级纹理和动画等一系列内容。
17-22扩展篇 进一步扩展读者的视野。
2渲染流水线
渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即我们在电脑屏幕上看到的所有效果。他的输入是一个虚拟摄影机、一些光源、一些Shader以及纹理等。
《Render-Time Rending,Third Edition》书中将渲染流程分为3个阶段:
应用阶段(CPU 绝对控制权)(输出渲染图元)、
几何阶段(GPU)(输出屏幕空间的顶点信息)、
光栅化阶段(GPU)
Tessellation Shader 是一个可选着色器,
顶点着色器是完全可编程的,它通常用于实现定点的空间变换、定点着色的等功能。
曲面细分着色器是一个可选的着色器,它用于细分图元。
几何着色器是一个可选的着色器,它可以用于执行逐图元的着色操作,或者被用于产生更多的图元。
顶点着色器的处理单位是顶点,输入进来的每个顶点都会调用一次顶点着色器。工作主要有:坐标变换和逐顶点光照。
屏幕映射 OpenGL(左下Unity) DirectX(左上微软)
三角形遍历(检查像素是否被三角网格所覆盖,覆盖生成一个片元)(扫描变换)
片元着色器在DirectX中又被称为像素着色器,它仅可以影响单个片元,但是可以访问到导数信息。
模板测试和深度测试
GLSL使用显卡驱动的着色器编译器,
HLSL只有微软平台可以使用且要求版本一致。
CG是真正意义上的跨平台,但缺点是可能无法完全发挥出OpenGL的最新特性。
3Unity Shader基础
材质(Material)和Unity Shader共同作用才能达到需要的效果
Unity Shader定义了渲染所需的各种代码(如顶点着色器和片元着色器)、属性(如使用那些纹理等)和指令(渲染和标签设置等),而材质则允许我们调节这些属性,并将其最终付给相应的模型。
材质需要结合一个GameObject的Mesh(网格)或者Particle Systems(粒子特效)组件来工作。
Shader:
Standard Surface Shader会产生一个包含了标准光照模型的表面着色器模板。
Unlit Shader则会产生一个不包含光照的基本的顶点/片元着色器。
Image Effect Shader则为我们实现各种屏幕后处理效果提供了一个基本模块。
Compute Shader会产生一种特殊的Shader文件,这类Shader旨在利用GPU的并行性来进行一些与常规渲染流水线无关的计算。(http://docs.unity3d.com/Manual/ComputeShaders.html)
Unity Shader的导入面板还可以方便地查看其使用的渲染列队(Render queue)、是否关闭批处理(Disable batching)、属性列表(Properties)等信息。
ShaderLab类似CgFX和.FX语言。他们都定义了要是显示一个材质所需的所有东西,而不仅仅是着色器代码。
Shader的结构:
Shade