使用CustomForwardRendererData做描邊效果

搭建MrsFu123發表於2022-05-21

1,編寫描邊程式碼並建立材質球

    
    
    Shader 
    "Unlit / OutLine"
    
    
    {
    
      
    Properties
    
      
    {
    
        
    _Color("outline 
    color",color) = (1,1,1,1)
    
        
    _Width("outline 
    width",range(0,1)) = 0.2
    
      
    }
    
      
    Subshader
    
      
    {
    
        
    Pass
    
        
    {
    
        
    Tags 
    {"LightMode" = "LightweightForward" "RenderType" = "Opaque" "Queue" = "Geometry + 10"}
    
                    
    //Tags可不新增,只是為了演示
    
    
    
        colormask 0 //不輸出顏色     ZWrite Off     ZTest Off
        Stencil     {       Ref 1       Comp Always       Pass replace     }
          HLSLPROGRAM      #pragma vertex vert      #pragma fragment frag
         #include "Packages/com.unity.render-pipelines.lightweight/ShaderLibrary/Core.hlsl"       struct appdata       {         float4 vertex: POSITION;       };
          struct v2f       {         float4 vertex: SV_POSITION;       };
          v2f vert(appdata v)       {         v2f o;                                 o.vertex = TransformObjectToHClip(v.vertex.xyz);         return o;       }
          half4 frag(v2f i) : SV_Target       {         return half4 (0.5h, 0.0h, 0.0h, 1.0h);       }       ENDHLSL     }
        Pass     {             Tags {"RenderType" = "Opaque" "Queue" = "Geometry + 20"}
          ZTest off
          Stencil {         Ref 1         Comp notEqual         Pass keep       }
          HLSLPROGRAM      #pragma vertex vert      #pragma fragment frag
         #include "Packages/com.unity.render-pipelines.lightweight/ShaderLibrary/Core.hlsl"       struct appdata       {         float4 vertex: POSITION;         float3 normal:NORMAL;       };
          struct v2f       {         float4 vertex: SV_POSITION;       };
          half4 _Color;       half _Width;
          v2f vert(appdata v)       {         v2f o;         //v.vertex.xyz += _Width * normalize(v.vertex.xyz);
            v.vertex.xyz += _Width * normalize(v.normal);         o.vertex = TransformObjectToHClip(v.vertex.xyz);         return o;       }
          half4 frag(v2f i) : SV_Target       {         return _Color;       }       ENDHLSL     }   } }


    Default Layer Mask:設定預設渲染的層級,視訊裡通過遮蔽“Character”圖層,然後在Renderer Features裡對“Character”圖層單獨控制。我的需求是對選中的物體描邊,不需要對選中物體做其他處理,因此用“Everything”就可以。

    Overrides:覆蓋選中的層。

    • Stencil:覆蓋Default層的設定,特殊需求時使用。

    • Renderer Features:設定某些層的渲染。


    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009264/viewspace-2895900/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章