《Unity Shader入门精要》 第三章学习笔记

Unity Shader基础

  • 材质和UnityShader同时使用,使用流程:
    (1)创建一个材质; (2)创建一个Unity Shader,并把它赋给上一步创建的材质; (3)把材质赋给要渲染的对象; (4)在材质面板设置Unity Shader的属性。

  • Unity Shader 的基础:ShaderLab Unity Shader 是Unity为开发者提供的高级渲染抽象层,ShaderLab则是实现Unity Shader的语言。 

  • Unity Shader 的简单结构:

    Shader "ShaderName" { Properties { // 属性 } SubShader { // 显卡A使用的子着色器 } SubShader { // 显卡B使用的着色器 } Fallback "VertexLit" }

Unity Shader 包含 Properties、SubShader、 Pass、Fallback等语义块:

Properties语义:


    Properties {
        Name ("display name", PropertyType) = DefaultValue  
        Name ("display name", PropertyType) = DefaultValue  
        // ... 
    }

SubShader:


SubShader {
    // 可选
        [tags]
    //  可选
    [RenderSetup]
    Pass {
    }
    //  Other Pass
}  

SubShader的标签:


Tags{ "TagName1" = "Value1" "TagName2"="value2" }

Pass:


 Pass {
    [Name]
    [Tags]
    [RenderSetup]
    // other code
}

Fallback 留一条后路

    Fallback "name"
    // 或:
    Fallback Off
  • Unity Shader的形式:

(1)表面着色器(Surface Shader),Unity 自创 (2)顶点片元着色器(正当壮年) (3)固定函数着色器(淘汰了)

注意:表面着色器被定义在SubShader中,而不是pass.

示例: Surface Shader:

Shader "Custom/Simple Suface Shader" {
    SubShader {
        Tags { "RenderType" = "Opaque" }
        CGPROGRAM
        #pragma surface surf Lambert
        struct Input {
            float4 color:COLOR;
        };
        void surf(Input IN,inout SurfaceOutput o) {
            o.Albedo = 1;
        }
        ENDCG
    }
    Fallback"Diffuse"
}       

Vertex/Fragment: Shader"Custom/Simple VertexFragment Shader" { SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag

                float4 vert(float4 v:POSITION):SV_POSITION {
                    return mul(UNITY_MATRIX_MVP,v);
                }

                fixed4 frag():SV_Target {
                    return fixed(1.0,0.0,0.0,1.0);
                }
                ENDCG
            }
        }
    }

固定函数着色器: Shader"Tutorial/Basic" { Properties { _Color("Main Color",Color) = (1,0.5,0,1.0) } SubShader { Pass { Material { Diffuse[_Color] } Lighting On } } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值