Unity入门之--UnityShader基础

本文深入介绍了Unity中的ShaderLab语言,包括其基本结构、Properties语义块、SubShader的使用以及Pass的渲染流程。ShaderLab是Unity为Shader提供的一种专用语法,允许开发者创建自定义的着色器效果。文章通过一个简单的Unlit Shader示例,展示了如何定义纹理属性、设置渲染类型和雾效,并解释了CG程序段中的顶点和片段着色器工作原理。

ShaderLab

Unity提供了ShaderLab专门为Shader服务。

UnityShader结构

Shader "Unlit/NewUnlitShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
            ENDCG
        }
    }
}

1、Properties语义块中包含了一系列属性(property)
在这里插入图片描述

SubShader

每一个Unity Shader文件可以包含多个SubShader语义块,但最少一要有一个。当Unity需要加载这个UnityShader时,Unity会扫描所有的SubShader语义块,然后选择第一个能够在目标平台上运行的SubShader。如果都不支持的话,Unity就会使用Fallback语义指定的Unity Shader。

SubShader中定义了 一系列Pass以及可选的状态([RenderSetup])和标签([Tags])设置。 每个
Pass定义了一次完整的渲染流程, 但如果Pass的数目过多, 往往会造成渲染性能的下降。

状态设置
在这里插入图片描述
SubShader的标签
在这里插入图片描述
Pass的标签
在这里插入图片描述

Fallback

紧跟在各个 SubShader 语义块后面的,可以是一个 Fallback 指令。它用于告诉 Unity, "如果
上面所有的 SubShader 在这块显卡上都不能运行,那么就使用这个最低级的 Shader 吧!”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值