基础的Unity URP Shader

Posted 曾胖神父

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础的Unity URP Shader相关的知识,希望对你有一定的参考价值。

Shader "BaseURPShader"

    Properties
    
        _Color("Color",COLOR)=(1,1,1,1)
        _MainTex("MainTex",2D)="white"
    
    
    SubShader
    
        Tags
        
            "RenderPipeline"="UniversalPipeline"//渲染管线标记,标注当前SubShader是给URP渲染管线使用的
            "RenderType"="Opaque"//渲染方式为不透明
            "UniversalMaterialType" = "Unlit"
            "Queue"="Geometry"
        
        Pass //主Pass
        
            Name "Pass"
            Tags
            
                // LightMode: <None>
            
            Cull Back
            Blend One Zero
            ZTest LEqual
            ZWrite On
            HLSLPROGRAM
            #pragma target 4.5
            //只在以下平台进行编译
            //#pragma exclude_renderers gles gles3 glcore
            //定义顶点着色器
            #pragma vertex vert
            //定义片段着色器
            #pragma fragment frag
            #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
            #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
         
            //顶点着色器的输入(模型的数据信息)类似于appdate
            struct Attributes
            
                float3 positionOS : POSITION;
                float2 uv:TEXCOORD; 
            ;
            //顶点着色器输出
            struct Varyings
            
                float4 positionCS : SV_POSITION;
                float2 uv:TEXCOORD0;
                
            ;
            CBUFFER_START(UnityPerMaterial)
            half4 _Color;
            float4 _MainTex_ST;
            TEXTURE2D(_MainTex);//纹理的定义,如果是编译到GLES2.0平台,则相当于sampler2D _MainTex;否则就相当于Texture2D _MainTex
            SAMPLER(sampler_MainTex);//采样器的定义,如果是编译到GLES2.0平台,就相当于空,否则就相当于SamplerState sampler_MainTex
            // SAMPLER(SamplerState_Point_Repeat);根据传入的名称选择采样模式,比如该传入的名称代表贴图采样的Wrap Mode为Repeat,Fiter Mode为Point
           
            
            CBUFFER_END
            
            //v2f vert(appdata v)
            //顶点着色器      
            Varyings vert(Attributes v)
            
                Varyings o = (Varyings)0;
                float3 positionWS=TransformObjectToWorld(v.positionOS);
                o.positionCS=TransformWorldToHClip(positionWS);
                o.uv=TRANSFORM_TEX(v.uv,_MainTex);
                return o;
            

            //fixed4 frag(v2f i):SV_TARGET
            //片断着色器
            half4 frag(Varyings i) : SV_TARGET 
              
                half4 c;
                half4 mainTex=SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex,i.uv);
                c=mainTex*_Color;
                return c;
            
            ENDHLSL
           
    
    FallBack "Hidden/Shader Graph/FallbackError"

以上是关于基础的Unity URP Shader的主要内容,如果未能解决你的问题,请参考以下文章

Unity商业Shader渲染-URP-基于AmplifyShader Editor

unity URP内置shader lit解析

Unity Build-in管线shader移植到URP管线下

Unity URP Shader 实现几种视差映射

Unity商业Shader渲染-URP之二渲染一个类海水效果

深入URP之Shader篇2: 目录结构和Unlit Shader分析[上]