Unity渲染基础篇
Unity渲染的基础知识
坡托
这个作者很懒,什么都没留下…
展开
-
Unity shader常用动效合集(流动/遮罩/溶解/扰动/边缘光)
Shader "TAClass/CommonEffects"{ Properties { [Header(Render)] [Enum(UnityEngine.Rendering.BlendMode)]_SrcBlend("Src Blend",int) = 0 [Enum(UnityEngine.Rendering.BlendMode)]_DstBlend("Dst Blend",int) = 0 [Enum(UnityEn原创 2021-01-13 14:36:59 · 2194 阅读 · 0 评论 -
Unity模板测试Stencil
Stencil模板缓冲区(StencilBuffer)可以为屏幕上的每个像素点保存一个无符号整数值,这个值的具体意义视程序的具体应用而定.在渲染的过程中,可以用这个值与一个预先设定的参考值相比较,根据比较的结果来决定是否更新相应的像素点的颜色值.这个比较的过程被称为模板测试.将StencilBuffer的值与ReadMask与运算,然后与Ref值进行Comp比较,结果为true时进行Pass操作,否则进行Fail操作,操作值写入StencilBuffer前先与WriteMask与运算.公式:(Ref原创 2020-12-16 10:49:19 · 799 阅读 · 1 评论 -
Unity Shader 屏幕抓取,屏幕坐标
GrabPass(“Name”)抓取屏幕,抓取后名字为Name屏幕坐标获取屏幕坐标有3种方法:#####SV_POSITION语义的xy使用SV_POSITION语义,在片元着色器中拿到的pos.xy就是屏幕空间的坐标。struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0;};#####VPOS语义VPOS语义和SV_POSITION冲突,使用VPOS语义,则v2f不能定义SV_POSITION。fi原创 2020-12-11 16:57:51 · 967 阅读 · 0 评论 -
Unity渲染队列
渲染队列数字小于2500的对象认为是完全不透明(从前往后渲染),高于2500的被认为是半透明物体(从后往前渲染)。“Queue” = “Background”值1000,此队列最先渲染。“Queue” = “Geometry”值2000,通常是不透明物体。“Queue” = “AlphaTest”值2450,透贴,要么完全透明,要么完全不透明。“Queue” = “Transparent”值3000,常用于半透明对象,要混合的对象。“Queue” = “Overlay”值4000,最后渲原创 2020-12-11 16:55:47 · 1011 阅读 · 0 评论 -
Unity Shader 变体multi_compile/shader_feature
优缺点优点:可以将多个功能集成到一个shader内。缺点:变体数量过多会导致记载时间过长与内存占用增加。变体类型multi_compile: 无论如何都会编译的变体(根据开关使用)。shader_feature: 通过材质的使用情况来决定是否编译的变体。multi_compile#multi_compile NAME 变体名字全部大写#if NAME xxx#endifInspector开关[Toggle]Name 名字一样,大小写不限原创 2020-12-10 15:32:53 · 428 阅读 · 0 评论 -
Unity 缓冲区
帧缓冲区用于存放一帧中数据信息的容器。片段着色器在写入帧缓冲之前会进行一系列测试:Alpha测试、模板测试、深度测试…,这些测试决定当前像素是否需要写入帧缓冲。片段在写入帧缓冲之时会进行一些操作:混合。显示器的扫描方式:随机扫描显示器(基本被淘汰)和光栅扫描显示器(逐像素扫描显示)。帧缓冲分为单缓冲和双缓冲两种方式,双缓冲为了解决一帧绘制数据太慢,没有绘制完就绘制下一帧的问题。帧缓冲区包括:Depth Buffer、Color Buffer、Stencil Buffer、自定义缓冲区。颜色缓原创 2020-12-10 13:53:19 · 786 阅读 · 0 评论 -
Unity Shader常用内置函数
函数功能示例abs绝对值frac取小数floor向下取整ceil向上取整max取最大值min取最小值power次方power(a, 3)rcp倒数expene^nenexp22n2^n2nfmod取余fmod(5, 2)saturate把值限制在0-1clamp把值限制在起始值和结束值之间clamp(x, start, end)sqrt平方根rsq...原创 2020-12-09 16:14:16 · 3290 阅读 · 3 评论 -
Unity--后处理
亮度颜色值×亮度系数color * brightness饱和度使用特定系数,计算出一个饱和度0的颜色。使用插值lerp计算不同的饱和度。对比度对比度为0时的颜色值,各分量为0.5。使用lerp计算不同的对比度表现。边缘检测通过卷积计算卷积核与卷积。使用一个3×3大小的卷积核对一张5×5大小的图像进行卷积操作,当计算图中红色方块对应的像素的卷积结果时,我们首先把卷积核的中心放置在该像素位置,翻转核之后再依次计算核中每个元素和其覆盖的图像像素值的乘积并求和,得到新的像素值三种常见原创 2020-09-10 16:09:15 · 690 阅读 · 0 评论 -
Unity--高级纹理
反射天空盒创建用于映射的立方体纹理texCUBE折射斯涅尔定律 Snell’s Law>refract(viewdir, normal, refractRatio) params: 入射光线方向、法线方向、入射光线所在介质折射率和折射光线所在介质的折射率比值菲涅尔反射...原创 2020-09-10 16:07:27 · 150 阅读 · 0 评论 -
Unity--复杂光照渲染/渲染路径
前向渲染路径使用深度缓冲区判断一个片元是否可见,如果可见,就更新颜色缓冲区中的颜色值。Unity中的前向渲染:Base Pass + Additional Pass。Base Pass只调用一次,Additional Pass根据影响该物体的光源数调用多次。顶点照明渲染路径前向渲染路径的子集。所有可以在顶点照明中实现的,前向渲染都可以实现。延迟渲染路径使用G-buffer存储我们所关心的表面信息。两个Pass组成,一个Pass如果深度缓冲区可见,则在G-buffer中存储表面信息。在另一个Pa原创 2020-09-10 16:06:29 · 241 阅读 · 0 评论 -
Unity--透明纹理效果
透明度测试clip 舍弃透明度不满足阈值的片元透明度混合使用当前片元的透明度作为混合因子,与颜色缓冲种的颜色值进行混合。透明度混合需要【关闭深度写入】,要十分小心渲染顺序。使用Blend命令。Blend指令说明Blend Off关闭混合(默认)Blend SrcFactor DstFactor片元产生的颜色乘以SrcFactor,加上屏幕上已有的颜色乘以DstFactor,得到最终的颜色(写入颜色缓存)Blend SrcFactor DstFactor,原创 2020-09-10 16:05:02 · 489 阅读 · 0 评论 -
Unity--内置转换矩阵
内置转换矩阵名称说明UNITY_MATRIX_MVP当前模型视图投影矩阵,通常用于把顶点/方向矢量从模型空间转换到裁剪空间UNITY_MATRIX_MV当前模型视图矩阵,通常用于把顶点/方向矢量从模型空间转换到视角(相机)空间UNITY_MATRIX_V当前视图矩阵,通常用于把顶点/方向矢量从世界空间转换到视角(相机)空间UNITY_MATRIX_P当前的投影矩阵,通常用于把顶点/方向矢量从视角(相机)空间转换到裁剪空间UNITY_MATRIX_VP当原创 2020-09-10 16:03:54 · 2056 阅读 · 0 评论 -
Unity--矩阵
###概念行矩阵、列矩阵方块矩阵 n*n单位矩阵:逆矩阵:。可逆:行列式不为0逆矩阵的性质:转置矩阵的逆矩阵是逆矩阵的转置;正交矩阵:正交矩阵的性质:正交矩阵的每一行(列)都是单位矢量正交矩阵的每一行(列)互相垂直...原创 2020-09-09 15:04:51 · 309 阅读 · 0 评论 -
Unity--GPUl流水线
Vertext Shader的主要任务有:坐标变换和逐顶点光照三角形遍历:检查每个像素是否被三角网格覆盖,如果被覆盖,生成一个fragment。Fragment Shader的输入是通过上阶段信息的插值得到。OpenGL 和 DirectX的区别Vertext Shader的主要任务有:坐标变换和逐顶点光照三角形遍历:检查每个像素是否被三角网格覆盖,如果被覆盖,生成一个fragment。Fragment Shader的输入是通过上阶段信息的插值得到。OpenGL 和 DirectX的区.原创 2020-09-09 15:03:35 · 315 阅读 · 0 评论