1.引导画家算法:以一个画布为背景,从远到近画一个画面,先画最远的背景,也就是天空然后假如是雪山,然后再画上树木,树木在雪山上然后山下是若干个居民的房屋,以及若干条道路其次房屋门前可能有树木又当道部分房屋其中某片区域一定会进行若干次上色,这样在Unity中是非常耗费性能的。反画家算法:所以Unity中出现反画家算法。这个算法有两个辅助数组,以像素为单位,分别为深度缓冲数组和颜色缓冲数组假设为deep[][]和color[][],如果像素为1024*1024,那么这两个数组就是1024*1024大小仍然拿上副画来看假设某个像素点已经是最近的一个房子的某个点已经呈现出来的,它的坐标为(i,j),这
文章目录前言一、正交相机视图空间转化到裁剪空间干了什么1、正交相机裁剪的范围主要是这个方盒子2、裁剪了之后,需要把裁剪范围内的坐标值化到[-1,1]之间,这就是我们的裁剪空间。3、在Unity中,设置相机为正交相机4、在这里设置相机的近裁剪面和远裁剪面二、把正交相机的方盒子内的坐标转化到裁剪空间1、我们在Unity创建两个游戏对象来解释2、正交相机坐标到裁剪坐标的映射关系3、化简X轴坐标4、化简Y轴坐标5、化简Z坐标(OpenGL下[-1,1])6、化简Z坐标(DirectX下[0,1])三、把转化后的坐标转化为矩阵1、OpenGL下2、DirectX前言我们把顶点坐标信息转化为裁剪空间。有可
目录一、标准光照模型(Phong光照模型)1、环境光 2、自发光3、漫反射4、高光反射(1)Phong模型(2)Blinn模型5、光照模型实现方法——逐顶点和逐像素二、UnityShader漫反射光照模型的实现1、实践:逐顶点2、实践:逐像素3、半兰伯特模型4、漫反射光照模型效果展示三、UnityShader高光反射光照模型的实现1、实践:逐顶点2、实践:逐像素3、Blinn-Phong光照模型4、高光反射光照模型效果展示四、Unity的内置函数一、标准光照模型(Phong光照模型)1、环境光 在标准光照模型中,使用环境光来近似模拟间接光照。间接光照就是指,光线通常会在多个物体之间反射,
文章目录前言一、SRPBatcher是什么二、SRPBatcher的使用条件1、可编程渲染管线2、我们用URP作为例子3、URP设置中UseSRPBatcher开启4、使SRPBatcher代码路径能够渲染对象5、使着色器与SRPBatcher兼容:三、不同合批之间的区别BuildInRenderPipeline下:UniversalRenderPipeline下:四、对比BRP和SRP每一批次渲染间的区别1、BRP下2、SRP下(CPU部分就是SRP的核心)在这里插入图片描述五、在Unity中,测试一下开启和不开启SRPBatcher的效果1、不开启SRPBatcher(需要关闭HDR)2、
文章目录前言一、制作思路法1:使用纹理采样后,修改重铺效果法2:计算实现二、粗略计算实现棋盘格效果1、使uv.x2、使uv.y3、使两个颜色相加4、取小数部分5、乘以2三、去除if条件语句后的精简方法1、我们在图形计算器中看一下2、向下取整3、乘以24、我们在属性面板使用参数控制棋盘格重复度5、使棋盘格Shader适用于Cube6、使棋盘格颜色从下到上渐变7、我们可以给棋盘格Cube加一个父对象,使缩放时,不会Cube中心为调整的位置(按需使用)8、可以在属性面板加一个颜色来调整棋盘格颜色(按需使用)四、测试代码前言我们展示我们Shader效果,一般放于棋盘格中来展示。我们在这篇文章中,制作棋
UnityShaderEarly-Z技术Early-Z技术Unity渲染顺序总结AlphaTest(Discard)在移动平台消耗较大的原因Early-Z技术传统的渲染管线中,ZTest其实是在Blending阶段,这时候进行深度测试,所有对象的像素着色器都会计算一遍,没有什么性能提升,仅仅是为了得出正确的遮挡结果,会造成大量的无用计算,因为每个像素点上肯定重叠了很多计算。因此现代GPU中运用了Early-Z的技术,在Vertex阶段和Fragment阶段之间(光栅化之后,fragment之前)进行一次深度测试,如果深度测试失败,就不必进行fragment阶段的计算了,因此在性能上会有很大的提
文章目录前言一、旋转矩阵的原理1、我们以原点为中心,旋转坐标轴θ度2、求P~2x~:3、求P~2y~:4、最后得到P~2~点的点阵5、该点阵可以拆分为以下两个矩阵相乘的结果二、在Shader中,使用该旋转矩阵实现围绕z轴旋转1、在属性面板定义float变量作为旋转的角度θ2、在常量缓冲区申明该变量3、在顶点着色器定义旋转矩阵4、用旋转矩阵乘以顶点的xy实现围绕z轴旋转5、效果三、测试代码前言在Shader中,我们经常对顶点进行旋转变换。我们在这篇文章中了解一下旋转使用的旋转矩阵。一、旋转矩阵的原理我们先在2D平面下,了解2D原理1、我们以原点为中心,旋转坐标轴θ度我们需要求的就是坐标系旋转后,
文章目录前言一、精简ShaderGraph所有冗余代码后的最简URPShader二、我们来对比一下URPShader与BuildInRPShader的对应关系与区别1、"RenderPipeline"="UniversalPipeline"2、面片剔除、深度测试、深度写入、颜色混合和BRP下一致3、必须引入的库变了4、顶点着色器输入5、片元着色器输入6、顶点着色器7、片元着色器8、变量类型变化最终效果前言在上篇文章中,我们主要把ShaderGraph转化为URPShader,并进行了最简化。在这篇文章中,我们来解析一下URP最简Shader中做了什么。Unity中ShaderURP最简Shad
文章目录前言一、BRDF中的镜面反射项二、分别解析每一个参数1、D、G函数:speclarTerm2、其他中间步骤3、光照颜色4、F函数(菲涅尔函数):FresnelTermIBL在下篇文章中继续解析三、最终代码.cginc文件:Shader文件:前言在上篇文章中,我们解析了BRDF的漫反射项,这篇文章我们继续解析BRDF中的镜面反射Unity中Shader的BRDF解析(二)一、BRDF中的镜面反射项我们返回specular,看一下高光效果:returnfixed4(specular,1);二、分别解析每一个参数1、D、G函数:speclarTerm//镜面反射中的DV项的计算//最后乘以P
文章目录前言一、直接相乘缩放1、在属性面板定义一个四维变量,用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘,来缩放变换4、我们来看看效果二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵2、把我们需要平移的点变为列矩阵3、M~scale~*P得到缩放变换后的结果4、我们在图形计算器中看看效果三、在URPShader中实现1、在属性面板定义一个四维变量,用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器中得到缩放矩阵4、因为Attribute接收顶点格式为(x,y,z,1)且mul相乘规则的原因。所以,我们的列