Unity Shader 学习笔记(009)RenderSteup渲染设置

| 发布     | 分类 Shader  | 标签 Shader 



Unity Shader 之 Amplify Shader Editor

Unity Shader学习笔记(3)Unity Shader模板、结构、形式

ShaderLab: Pass

ShaderLab:剔除和深度测试

ShaderLab:混合

ShaderLab:混合

ShaderLab: other commands

词汇表


设置图形硬件的各种状

官方文档给出以下8个, 其他的还有固定着色器命令

  • Cull (设置剔除模式)
  • ZTest (深度测试)
  • ZWrite (设置深度缓冲区写入模式开关)
  • Offset (设置Z缓冲深度偏移)
  • Blend (混合模式)
  • BlendOp (混合操作)
  • AlphaToMask On:打开alpha-to-coverage。
  • ColorMask (设置颜色通道写入掩码)


    Pass {
        Cull Back
    }

可选值

功能
Cull Back 只显示正面
Cull Front 只显示背面
Cull Off 双面显示


设置 深度缓冲区 测试模式。

深度缓冲区: 保存每个像素的z值深度的存储器存储器中的图像,其中z值是投影平面中每个渲染像素的深度。

    Pass {
        ZTest Always
    }
    Pass {
        ZTest LEqual
    }
    Pass {
        ZTest LEqual
    }
    SubShader {
        ZTest [unity_GUIZTestMode]
    }
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

// Simple "just colors" shader that's used for built-in debug visualizations,
// in the editor etc. Just outputs _Color * vertex color; and blend/Z/cull/bias
// controlled by material parameters.

Shader "Hidden/Internal-Colored"
{ 
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _SrcBlend ("SrcBlend", Int) = 5.0 // SrcAlpha
        _DstBlend ("DstBlend", Int) = 10.0 // OneMinusSrcAlpha
        _ZWrite ("ZWrite", Int) = 1.0 // On
        _ZTest ("ZTest", Int) = 4.0 // LEqual
        _Cull ("Cull", Int) = 0.0 // Off
        _ZBias ("ZBias", Float) = 0.0
    }

    SubShader
    {
        Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
        Pass
        {
            Blend [_SrcBlend] [_DstBlend]
            ZWrite [_ZWrite]
            ZTest [_ZTest]
            Cull [_Cull]
            Offset [_ZBias], [_ZBias]

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0
            #pragma multi_compile _ UNITY_SINGLE_PASS_STEREO STEREO_INSTANCING_ON STEREO_MULTIVIEW_ON
            #include "UnityCG.cginc"
            
            struct appdata_t {
                float4 vertex : POSITION;
                float4 color : COLOR;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };
            struct v2f {
                fixed4 color : COLOR;
                float4 vertex : SV_POSITION;
                UNITY_VERTEX_OUTPUT_STEREO
            };
            float4 _Color;
            v2f vert (appdata_t v)
            {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.color = v.color * _Color;
                return o;
            }
            fixed4 frag (v2f i) : SV_Target
            {
                return i.color;
            }
            ENDCG  
        }  
    }
}

可选值

功能
ZTest Less 小于
ZTest Greater 大于
ZTest LEqual 小于等于
ZTest GEqual 大于等于
ZTest Equal 等于
ZTest NotEqual 不等于
ZTest Always 总是


    SubShader {
        ZWrite Off
    }

可选值

功能
ZWrite Off
ZWrite On


允许您使用两个参数指定深度偏移。因素和单位。因子相对于多边形的X或Y缩放最大Z斜率,并且单位缩放最小可分辨深度缓冲值。这允许您强制将一个多边形绘制在另一个多边形上,尽管它们实际上位于相同位置。例如,Offset 0, -1将多边形拉近摄像机忽略多边形的斜率,而Offset -1, -1 在观察掠射角时,将拉近多边形。

Offset OffsetFactor, OffsetUnits

显示在前面

    SubShader {
        Offset  0 , -1
    }


显示在后面

    SubShader {
        Offset  0 , 1
    }



Blend sourceBlendMode destBlendMode
Blend sourceBlendMode destBlendMode, alphaSourceBlendMode alphaDestBlendMode
BlendOp colorOp
BlendOp colorOp, alphaOp
AlphaToMask On | Off

AlphaToMask On

AlphaToMask On:打开alpha-to-coverage。使用MSAA时,alpha-to-coverage会根据像素Shader结果alpha值修改多重采样覆盖率。这通常用于比常规alpha测试更少的别名轮廓; 对植被和其他经过alpha测试的着色器非常有用。

混合颜色RPGA

    SubShader {
        Blend One One , SrcAlpha OneMinusSrcAlpha
        BlendOp Add , Max
    }

只混合颜色RPG

    SubShader {
        Blend One One
        BlendOp Add
    }
    SubShader {
        Blend One One
    }

Blend 选项

功能
Zero 使用此值删除源值或目标值
One 源颜色 或者 目标颜色
DstColor 此阶段的值 * 帧缓冲区源颜色
SrcColor 此阶段的值 * 源颜色
OneMinusDstColor 此阶段的值 * (1 - 目标颜色)
OneMinusSrcColor 此阶段的值 * (1 - 源颜色)
SrcAlpha 此阶段的值 * 源alpha
DstAlpha 此阶段的值 * 帧缓冲源alpha值
OneMinusDstAlpha 此阶段的值 * (1 - 目标alpha)
OneMinusSrcAlpha 此阶段的值 * (1 - 源alpha)
SrcAlphaSaturate  

BlendOp 选项

功能
Add sourceBlendMode + destBlendMode
Sub sourceBlendMode - destBlendMode
RevSub destBlendMode - sourceBlendMode
Min Min(sourceBlendMode, destBlendMode)
Max Max(sourceBlendMode, destBlendMode)


设置颜色通道写入掩码。编写ColorMask 0会关闭渲染到所有颜色通道。默认模式是写入所有通道(RGBA),但对于某些特殊效果,您可能希望不修改某些通道,或完全禁用颜色写入。

使用多个渲染目标(MRT)渲染时,可以通过在末尾添加索引(0-7)为每个渲染目标设置不同的颜色掩码。例如,ColorMask RGB 3将渲染目标#3仅写入RGB通道。

    SubShader {
        ColorMask RG
    }


上一篇: Unity Shader 学习笔记(008)Pass 之 Tags
下一篇: Unity Shader 学习笔记(010)RenderSteup渲染设置之固定着色器命令