1.底层的VertexShader和Pixel Shader
Shader中的
顶点着色器只是代替了模型到投影之间的顶点变换和动画移动缩放旋转,和uv,法向量,切线,颜色,光照的设置, 但不能生成新的顶点。而最新的geometry shaders和tessellation shaders却可以在顶点着色后进行顶点生成和减少的强大功能。
图形api将顶点从4D裁剪空间变换到ndc坐标系和屏幕坐标系,并将三角形顶点数据数据进行光栅化为像素数据。
简单来说像素着色器是在图形API光栅化顶点插值(uv,法向量,光照材质,颜色)之后
在每个像素上进行uv采样着色融合,设置光照和阴影着色,修改深度缓存值,获取前一帧的纹理后期处理等,接着Pixel Shader将像素输出给
图形API进行雾计算,depth/alpha/stencil测试,Blend融合设置,写入后台缓存和反转交换链,提交结果给monitor。
Shader的效果文件中还可以 进行渲染状态的设置。
Shader的效果文件中还可以 进行渲染状态的设置。
2.U3D Shader
unity shader存在三种类型,surface, vertex&frament,fixed funtion前面都是经典的用cg/hlsl,后面是给不支持可编程渲染管道用的用unity特有的shaderlab来实现,其中unity中cg/hlsl需要放在shaderlab中实现。
shaderlab中的属性其实是关联的gameobject中的mesh或vertexlist中的顶点,uv,法向量,颜色或者纹理对象,光照材质,光源 ,雾等,unity中的材质其实是包含了纹理对象和光照属性,很多是material中才有shader,因为顶点着色器需要更多的顶点,转换,光照,渲染状态等计算和集成。
属性有shader名称,显示名称,键值对。subshader是使用第一个,fallback是默认最后一个也不支持那么不使用不会报错。pass是每次都渲染一次对象,提供多次渲染获得效果。pass名称可以在其它着色器中重用它usepass,grappass供后续使用,渲染设置参考文档,纹理设置只在fixed funtion shader中使用。
category是让多个子着色器继承的命令提高重用。子着色器不用声明继承也可以继承。
1)固定着色器用shaderlab
在不支持高级着色器特性的老旧硬件上。一般设置渲染状态,材质和纹理渲染参数,在pass中。