《一》UnityShader基本结构

通过一个简单的Shader,来了解Shader的基本结构与流程。

//ShaderLab关键字[Shader]:定义一个新的着色器
Shader "Custom/ColorShader" {
    //ShaderLab关键字[Properties]:定义着色器的属性列表,用于在Unity编辑器中修改着色器属性。
    Properties {
        _Color ("Color", Color) = (1, 1, 1, 1)   
    }
    //ShaderLab关键字[SubShader]:,定义一个子着色器,用于实现不同的渲染效果,可以定义多个SubShader。
    SubShader {
        //ShaderLab关键字[Tags]:,定义一些标签信息,用于在Unity编辑器中显示着色器的属性和菜单。  Opaque:表示当前SubShader渲染的是不透明物体
        Tags {"RenderType"="Opaque"}
        
        //ShaderLab关键字[Pass]:,定义一个渲染通道,通常包括顶点着色器、像素着色器和其他渲染状态设置,可以创建多个Pass。
        Pass {
            //ShaderLab关键字[CGPROGRAM]:,在 ShaderLab中嵌入CG/HLSL代码的标记。
            CGPROGRAM
            //使用 #pragma 声明了 vert 和 frag 函数,它们分别是顶点着色器和片元着色器。
            #pragma vertex vert
            #pragma fragment frag
            //定义了一个顶点着色器,使用 appdata 和 v2f 两个结构体分别表示输入和输出数据。
            struct appdata {
                float4 vertex : POSITION;
            };

            struct v2f {
                float4 vertex : SV_POSITION;
            };

            float4 _Color;
            
            v2f vert (appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);   //使用 UnityObjectToClipPos 函数将输入的顶点坐标转换到裁剪空间,输出裁剪空间的坐标。
                return o;
            }
            //定义了一个片元着色器,使用 v2f 结构体表示输入数据。
            fixed4 frag (v2f i) : SV_Target {
                return _Color;      //返回颜色属性 _Color,用于将物体或场景的颜色渲染到屏幕上。
            }
            ENDCG   //结束CG代码
        }
    }
    //ShaderLab关键字[FallBack]:定义一个备用的着色器,在当前着色器无法使用时使用备用着色器。"Diffuse"
    FallBack "Diffuse"
}

具体的过程如下图所示(有点花不要在意)

 

 

 

 

 

基本结构:

以上的Shader包含了5个部分:
Shader:Shader "Custom/ColorShader" 表示这个shader的名字是"ColorShader",并且属于"Custom"这个分类。


Properties:_Color ("Color", Color) = (1, 1, 1, 1) 定义了一个名为"_Color"的属性,类型是Color,初始值是(1,1,1,1),在Shader Inspector中会显示为一个颜色选择器。在这里,我们可以添加自己的shader属性,使shader更加灵活。


SubShader:Shader至少要有一个SubShader,它是Shader的主要部分。这里只有一个SubShader,它包含一个Pass。

Pass:表示一个渲染通道,定义了渲染这个shader所需的所有信息,比如要使用哪个顶点着色器和哪个像素着色器,以及其他渲染状态和参数等。

CGPROGRAM和ENDCG:表示这里是一个HLSL代码块,使用CG语言编写。在这里,我们可以编写一些像素着色器、顶点着色器等渲染函数。#pragma vertex vert和#pragma fragment frag分别定义了使用哪个顶点着色器和哪个像素着色器。

关于上述Shader使用到的一些些关键字(其实看备注就好了,这里就不多说了):

Shader:定义一个新的着色器。

Properties:定义着色器的属性列表,用于在 Unity 编辑器中修改着色器属性。

SubShader:定义一个子着色器,用于实现不同的渲染效果。

Pass:定义一个渲染通道,通常包括顶点着色器、像素着色器和其他渲染状态设置。

CGPROGRAM:在 ShaderLab 中嵌入 CG/HLSL 代码的标记。

Tags:定义一些标签信息,用于在 Unity 编辑器中显示着色器的属性和菜单。

Fallback:定义一个备用的着色器,在当前着色器无法使用时使用备用着色器。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值