unity shader之——高级纹理之程序纹理
demi 在 周二, 08/04/2020 - 16:56 提交
程序纹理指的是由那些计算机生成的图像,我们通常使用一些特定的算法来创建个性化图案或非常真实的自然元素,例如木头、石子等。使用程序纹理的好处在于我们可以使用各种参数来控制纹理的外观,而这些属性不仅仅是那些颜色属性,甚至可以是完全不同类型的图案属性,这使得我们可以得到更加丰富的动画和视觉效果。
程序纹理指的是由那些计算机生成的图像,我们通常使用一些特定的算法来创建个性化图案或非常真实的自然元素,例如木头、石子等。使用程序纹理的好处在于我们可以使用各种参数来控制纹理的外观,而这些属性不仅仅是那些颜色属性,甚至可以是完全不同类型的图案属性,这使得我们可以得到更加丰富的动画和视觉效果。
如何在unity中获取深度纹理和法线纹理来实现特定的屏幕后处理效果?深度纹理实际上就是一张渲染纹理,只不过它里面存储的像素值不是颜色值,而是一个高精度的深度值。由于被存储在一张纹理中,深度纹理的深度值范围是[0,1],而且通常是非线性分布的。
透明是很常用的一种效果,在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道。在开启透明混合后,当一个物体被渲染到屏幕上,每个片元除了颜色值和深度值以外,还有一个透明度的属性,为1表示该像素是完全不透明的,当其为0表示该像素完全不会显示。
为了让场景看起来更加真实,具有深度信息,我们通常希望光源可以把一些物体的阴影投射到其他物体上,下面介绍如何让一个物体向其他物体投射阴影,以及如何让一个物体接收来自其他物体的阴影。
在vertex函数中进行的计算就叫逐顶点计算,该计算量只和模型的顶点数量或面的数量有关,而和其他因素(如模型在屏幕上的大小)无关。在unity的表面着色器中,逐像素的计算发生在vertex:vertexfunction所确定的函数中。
在进行屏幕后处理的时候,我们往往会应用很多图像处理的相关算法,例如高斯模糊,sobel边缘检测等等。但是这些图像算法都是基于图像的颜色值来计算的,而我们通过渲染管线得到屏幕图像时,不仅可以得到颜色缓冲,还可以得到深度缓冲以及法线信息等。
Shader渲染流程是CPU和GPU合作渲染一帧的过程,绘制过程分为三个阶段:应用程序阶段(CPU控制)、几何阶段(GPU控制)、光栅化阶段(GPU控制)
选择哪种shader?除非你有非常明确的需求必须要使用固定函数着色器,例如需要在非常旧的设备上运行你的游戏(这些设备非常少见),否则请使用可编程管线的着色器,即表面着色器或顶点/片元着色器。
shader中文名叫着色器,顾名思义就是给物体着色。那给什么物体着色呢?显而易见就是给屏幕上的物品着色。
Shader的LOD技术可以控制使用的Shader等级,原理是,只有Shader的值小于某个设定的值,这个Shader才会被使用,而使用了那些超过设定值的Shader的物体将不会被渲染执行。