1.UnityBuild-in渲染管线
当双摄像机的时候,注意Camera中的Clear Flags 和 Depth。
其中Clear Flags在摄像机在渲染时,会进行清屏的操作。选择skybox是除了天空盒都会被清除。
Depth数值越小越先被渲染。
层级剔除:culing mask选择被剔除的层级
2.渲染队列
RenderQueue 越小越先被渲染。
不透明队列(RenderQueue < 2500) RenderQueue相同,按摄像机从前到后渲染。
半透明队列(RenderQueue > 2500) RenderQueue相同,按摄像机从后到前渲染。
3.CPU打包数据传GPU
SetPass Call:设置渲染状态(让GPU知道使用哪个shader,混合模式,背面剔除等)
Draw Call:让GPU知道使用哪个模型数据
顶点shader最基本要完成:将顶点坐标转换到裁剪空间(2x2x1的长方体cvv),投影成像。
片段shader:输出颜色值
GPU阶段:
背面剔除阶段:三角形的索引顺序是顺时针就是背面。逆时针是正面。
4.片元shader
纹理技术:
1.纹理采样,纹理在计算机中就是数组的形式。eg:(纹理坐标u,v) = (0.5,0.5),那对应32x32的纹理就是:x = 32 * 0.5,y = 32*0.5(真实不是这样,简单这样理解)。纹理坐标是在建模软件中展uv得到。
当x = 0.4*32时就是12.8 如果采用4舍5入就可能会产生失真(明显锯齿状)解决看下方纹理过滤机制。
2.纹理过滤机制:在Unity中Point就是4舍5入的方式,双线性插值,三线性插值。
3.Mipmap:勾选即可Generate Mip Maps就可。
4.纹理寻址模式
5.纹理压缩格式
光照计算
光照分析:直接光漫反射(eg:phong光照模型)+直接光镜面反射(eg:GGX高光方程)+间接光漫反射(eg:球谐SH)+间接光镜面反射(eg:反射球,ibl技术)+More(更多的光照技术eg:环境遮挡AO,SSR屏幕空间反射,SSS次表面散射)。
5.输出合并
处理遮挡关系,处理半透明混合。Unity中有Z-Buffer和color-Buffer,Zwrite关闭了深度写入的物体不会被写入到Z-buffer中,但会被写入到color-Buffer中。
提前深度测试:Early-Z,在顶点着色器后发生。(是否支持与硬件有关)
混合:从后到前,关闭Zwrite。控制公式: