Shaders Outline в Unity3d для персонажа который состоит из компонентов

245
28 января 2020, 15:50

мне для проекта нужно сделать шейдер который бы показывал персонажа за стеной или же любым другим объектом. Проблема состоит в том что наш персонаж состоит из нескольких объектов к примеру: голова, волосы, тело, одежда, оружие. И каждый со своим материалом. И когда они находятся рядом, то они считаю друг друга за перекрывающие объекты.

Shader "Lightweight Render Pipeline/LitShadersTest" { Properties { // Specular vs Metallic workflow [HideInInspector] _WorkflowMode("WorkflowMode", Float) = 1.0 _Color("Color", Color) = (0.5,0.5,0.5,1) _MainTex("Albedo", 2D) = "white" {}

    _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
    _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
    _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
    _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0
    [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
    _MetallicGlossMap("Metallic", 2D) = "white" {}
    _SpecColor("Specular", Color) = (0.2, 0.2, 0.2)
    _SpecGlossMap("Specular", 2D) = "white" {}
    [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
    [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
    _BumpScale("Scale", Float) = 1.0
    _BumpMap("Normal Map", 2D) = "bump" {}
    _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
    _OcclusionMap("Occlusion", 2D) = "white" {}
    _EmissionColor("Color", Color) = (0,0,0)
    _EmissionMap("Emission", 2D) = "white" {}
    // Blending state
    [HideInInspector] _Surface("__surface", Float) = 0.0
    [HideInInspector] _Blend("__blend", Float) = 0.0
    [HideInInspector] _AlphaClip("__clip", Float) = 0.0
    [HideInInspector] _SrcBlend("__src", Float) = 1.0
    [HideInInspector] _DstBlend("__dst", Float) = 0.0
    [HideInInspector] _ZWrite("__zw", Float) = 1.0
    [HideInInspector] _Cull("__cull", Float) = 2.0
    _ReceiveShadows("Receive Shadows", Float) = 1.0
    _OutlineColor("Outline Color", Color) = (1,1,1,1)
}
    SubShader
    {
        // Lightweight Pipeline tag is required. If Lightweight render pipeline is not set in the graphics settings
        // this Subshader will fail. One can add a subshader below or fallback to Standard built-in to make this
        // material work with both Lightweight Render Pipeline and Builtin Unity Pipeline
        Tags{"RenderType" = "Opaque" "RenderPipeline" = "LightweightPipeline" "IgnoreProjector" = "True"}
        LOD 300
        // ------------------------------------------------------------------
        //  Forward pass. Shades all light in a single pass. GI + emission + Fog
            Pass
        {
        Tags{}
        ZTest Greater
        ZWrite Off
        Cull Front
        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
        {
            UNITY_FOG_COORDS(1)
            float4 vertex : SV_POSITION;
            //float3 normal : NORMAL;
        };

        float4 _OutlineColor;
        v2f vert(appdata_full v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            //Scroll the texture acording to world space
            UNITY_TRANSFER_FOG(o,o.vertex);
            return o;
        }
        fixed4 frag(v2f i) : SV_Target
        {
            return  _OutlineColor;
        }
        ENDCG
        }
        Pass
        {
            // Lightmode matches the ShaderPassName set in LightweightRenderPipeline.cs. SRPDefaultUnlit and passes with
            // no LightMode tag are also rendered by Lightweight Render Pipeline
            Name "ForwardLit"
            Tags{"LightMode" = "LightweightForward"}
            Blend[_SrcBlend][_DstBlend]
            ZWrite[_ZWrite]
            Cull[_Cull]

            HLSLPROGRAM
            // Required to compile gles 2.0 with standard SRP library
            // All shaders must be compiled with HLSLcc and currently only gles is not using HLSLcc by default
            #pragma prefer_hlslcc gles
            #pragma exclude_renderers d3d11_9x
            #pragma target 2.0
            // -------------------------------------
            // Material Keywords
            #pragma shader_feature _NORMALMAP
            #pragma shader_feature _ALPHATEST_ON
            #pragma shader_feature _ALPHAPREMULTIPLY_ON
            #pragma shader_feature _EMISSION
            #pragma shader_feature _METALLICSPECGLOSSMAP
            #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
            #pragma shader_feature _OCCLUSIONMAP
            #pragma shader_feature _SPECULARHIGHLIGHTS_OFF
            #pragma shader_feature _GLOSSYREFLECTIONS_OFF
            #pragma shader_feature _SPECULAR_SETUP
            #pragma shader_feature _RECEIVE_SHADOWS_OFF
            // -------------------------------------
            // Lightweight Pipeline keywords
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
            #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
            #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS
            #pragma multi_compile _ _SHADOWS_SOFT
            #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE
            // -------------------------------------
            // Unity defined keywords
            #pragma multi_compile _ DIRLIGHTMAP_COMBINED
            #pragma multi_compile _ LIGHTMAP_ON
            #pragma multi_compile_fog
            //--------------------------------------
            // GPU Instancing
            #pragma multi_compile_instancing
            #pragma vertex LitPassVertex
            #pragma fragment LitPassFragment
            #include "LitInput.hlsl"
            #include "LitForwardPass.hlsl"  
            ENDHLSL
        }
        Pass
        {
            Name "ShadowCaster"
            Tags{"LightMode" = "ShadowCaster"}
            ZWrite On
            ZTest LEqual
            Cull[_Cull]
            HLSLPROGRAM
            // Required to compile gles 2.0 with standard srp library
            #pragma prefer_hlslcc gles
            #pragma exclude_renderers d3d11_9x
            #pragma target 2.0
            // -------------------------------------
            // Material Keywords
            #pragma shader_feature _ALPHATEST_ON
            //--------------------------------------
            // GPU Instancing
            #pragma multi_compile_instancing
            #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
            #pragma vertex ShadowPassVertex
            #pragma fragment ShadowPassFragment
            #include "LitInput.hlsl"
            #include "ShadowCasterPass.hlsl"
            ENDHLSL
        }
        Pass
        {
            Name "DepthOnly"
            Tags{"LightMode" = "DepthOnly"}
            ZWrite On
            ColorMask 0
            Cull[_Cull]
            HLSLPROGRAM
            // Required to compile gles 2.0 with standard srp library
            #pragma prefer_hlslcc gles
            #pragma exclude_renderers d3d11_9x
            #pragma target 2.0
            #pragma vertex DepthOnlyVertex
            #pragma fragment DepthOnlyFragment
            // -------------------------------------
            // Material Keywords
            #pragma shader_feature _ALPHATEST_ON
            #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
            //--------------------------------------
            // GPU Instancing
            #pragma multi_compile_instancing
            #include "LitInput.hlsl"
            #include "DepthOnlyPass.hlsl"
            ENDHLSL
        }
            // This pass it not used during regular rendering, only for lightmap baking.
            Pass
            {
                Name "Meta"
                Tags{"LightMode" = "Meta"}
                Cull Off
                HLSLPROGRAM
            // Required to compile gles 2.0 with standard srp library
            #pragma prefer_hlslcc gles
            #pragma exclude_renderers d3d11_9x
            #pragma vertex LightweightVertexMeta
            #pragma fragment LightweightFragmentMeta
            #pragma shader_feature _SPECULAR_SETUP
            #pragma shader_feature _EMISSION
            #pragma shader_feature _METALLICSPECGLOSSMAP
            #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
            #pragma shader_feature _SPECGLOSSMAP
            #include "LitInput.hlsl"
            #include "LitMetaPass.hlsl"
            ENDHLSL
        }
    }
FallBack "Hidden/InternalErrorShader"
CustomEditor "UnityEditor.Experimental.Rendering.LightweightPipeline.LitShaderGUI"

}

READ ALSO
Вопрос по AdMob в Unity. Не работает реклама

Вопрос по AdMob в Unity. Не работает реклама

Скрипт висит на объекте сцены Game, при старте вызывает метод Реквест, чтобы сразу загрузить рекламу, когда игрок умирает из его скрипта вызывается...

300
Unity EventSystem

Unity EventSystem

Я использую один код для карточек, что снизу -

209
Тачи(touch) в юнити

Тачи(touch) в юнити

При таче персонаж двигается , но только один разПосле даже при повторном нажатии ничего не происходит

188
Получения интервала времени из словаря C#

Получения интервала времени из словаря C#

Совсем недавно начал программировать, столкнулся с трудностьюУ меня есть заполненный данными словарь, внутри которого ключи - названия нужных...

219