微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity-URP学习笔记四赛璐珞高光

Unity-URP学习笔记(四)赛璐珞高光

URP卡通赛璐璐高光

结果展示

在这里插入图片描述

Shader展示

Shader "MyURP/CharMainCellPlus"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _OutlineColor("OutlineColor", Color) = (0,0,0,1)
        _Outlinewidth("Outlinewidth", Range(0, 10)) = 0.1
        _ShoWrenderQueue("ShoWrenderQueue",Int)= -1
        _CellWidth("CellWidth",Range(-1,1))=0.5
        _CellColor("CellColor",Color) = (0,0,0,0)
        _HighLightWidth("HighLightWidth",Range(-1,1))=0.5
        _HighLightColor("HighLightColor",Color) = (1,1,1,1)
    }
    SubShader
    {
        Pass
        {
            Name "BASE"
            Tags 
            {
                "RenderType" = "Opaque"
                "Queue" = "Geometry"
                "lightmode" = "LightweightForward"
            }

            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
            #pragma target 3.0
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
            //传入顶点着色器的数据
            struct a2v
            {
                float4 vertex   : POSITION;
                float2 uv       : TEXCOORD0;
                float3 normal       : norMAL;
            };
            //传入片元着色器的数据
            struct v2f
            {
                float4 worldPos : SV_POSITION;
                float2 uv       : TEXCOORD0;
                float3 viewDir      : TEXCOORD1;
                float3 worldnormal  : TEXCOORD2;
            };
            TEXTURE2D(_MainTex);
            SAMPLER(sampler_MainTex);
            CBUFFER_START(UnityPerMaterial)
                float4 _Color;
                float4 _MainTex_ST;
                float4 _OutlineColor;
                float _Outlinewidth;
                int _ShoWrenderQueue;
                float _HighLightWidth;
                float4 _HighLightColor;
                float _CellWidth;
                float4 _CellColor;
            CBUFFER_END
            //顶点着色器
            v2f vert(a2v v)
            {
                v2f o;
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.worldPos = TransformObjectToHClip(v.vertex);
                o.worldnormal = TransformObjectToWorldnormal(v.normal);
                o.viewDir = normalize(_WorldspaceCameraPos.xyz-TransformObjectToWorld(v.vertex.xyz));
                return o;
            }
            //片元着色器
            half4 frag(v2f i) : SV_Target
            {
                Light mainLight = GetMainLight();
                half LdotN = dot(mainLight.direction,i.worldnormal);
                LdotN = saturate(step(0,LdotN-_CellWidth));
                ///
                half3 halfAngle = normalize(normalize(mainLight.direction)+normalize(i.viewDir));
                half HdotN = saturate(dot(halfAngle,i.worldnormal));
                HdotN = saturate(ceil(HdotN-_HighLightWidth));
                ///
                half4 Albedo = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
                ///
                half4 BaseColor = lerp(_CellColor,_Color,LdotN)*Albedo;
                half4 FinalColor= lerp(BaseColor,_HighLightColor*Albedo,HdotN);
                return FinalColor;
            }
            ENdhlSL
        }
        UsePass "MyURP/Outline/OUTLINE"
        //UsePass "MyURP/NewOutline/NEWOUTLINE"
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐