Unity Shader深度纹理、法线纹理的使用
在进行屏幕后处理的时候,我们往往会应用很多图像处理的相关算法,例如高斯模糊,sobel边缘检测等等。但是这些图像算法都是基于图像的颜色值来计算的,而我们通过渲染管线得到屏幕图像时,不仅可以得到颜色缓冲,还可以得到深度缓冲以及法线信息等。
在进行屏幕后处理的时候,我们往往会应用很多图像处理的相关算法,例如高斯模糊,sobel边缘检测等等。但是这些图像算法都是基于图像的颜色值来计算的,而我们通过渲染管线得到屏幕图像时,不仅可以得到颜色缓冲,还可以得到深度缓冲以及法线信息等。
Shader渲染流程是CPU和GPU合作渲染一帧的过程,绘制过程分为三个阶段:应用程序阶段(CPU控制)、几何阶段(GPU控制)、光栅化阶段(GPU控制)
选择哪种shader?除非你有非常明确的需求必须要使用固定函数着色器,例如需要在非常旧的设备上运行你的游戏(这些设备非常少见),否则请使用可编程管线的着色器,即表面着色器或顶点/片元着色器。
shader中文名叫着色器,顾名思义就是给物体着色。那给什么物体着色呢?显而易见就是给屏幕上的物品着色。
Shader的LOD技术可以控制使用的Shader等级,原理是,只有Shader的值小于某个设定的值,这个Shader才会被使用,而使用了那些超过设定值的Shader的物体将不会被渲染执行。
【渲染流程】应用阶段:该阶段由CPU负责实现。开发者有三个主要任务:准备场景数据、 粗粒度剔除(将不可见的物体剔除出去)、设置每个模型的渲染状态(即渲染图元) ;几何阶段 :这阶段在GPU上进行,负责与每个渲染图元打交道,进行逐顶点,逐多边形的操作。该阶段重要任务是将顶点坐标变换到屏幕空间去,再交给光栅器进行处理。该阶段会输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息。
Opaque:用于渲染所有不透明的物体;Cutout:作用:用于渲染有镂空的物体;Transparent:用于渲染有透明效果的物体;Fade:用于渲染实现物体的渐隐和渐现。
lightmode为forwardbase、forawardadd的pass内,_WorldSpaceLightPos0只会含有pixel光源,在forwardbase pass内,只有场景中存在rendermode为important的pixel平行光时,才会含有有效的_WorldSpaceLightPos0和_LightColor0的组合......
一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。本文将列举一系列贴图,并且初步阐述其概念,理解原理的基础上制作贴图,也就顺手多了。
前向渲染是通过深度缓冲和颜色缓冲来实现的,使用深度缓冲来决定一个片元是否可见,如果可见,则更新颜色缓冲区中的颜色值。如果场景中有n个物体受m个光源的影响,那么要渲染整个场景,则需要n*m个pass,如果m较多的话,这个开销还是比较大的。