Uni0330 发表于 2024-8-12 18:29:35

描边 Outline


Properties
    {
      _MainTex("MainTex", 2D) = "white"{}
      _Diffuse("Color", Color) = (1,1,1,1)
      _Outline("Outline", Range(-2, 2)) = 0.1
      _OutlineColor("OutlineColor", Color) = (0,0,0,0)
}
    SubShader
    {
      Tags {
            "RenderType" = "Opaque"
      }
      LOD 100

       Pass
      {
            Name "OutLine"
            Cull Front
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            
            float _Outline;
            fixed4 _OutlineColor;

            struct v2f
            {
                float4 vertex : SV_POSITION;
            };
            
            v2f vert (appdata_base v)
            {
                v2f o;
                v.vertex.xyz += v.normal * _Outline;
                o.vertex = UnityObjectToClipPos(v.vertex);

                return o;
            }
            
            float4 frag (v2f i) : SV_Target
            {
                return float4(_OutlineColor.xyz, 1);
            }
            ENDCG
      }

      Pass
      {
            Cull Back
            //Blend Zero One

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            #include "Lighting.cginc"
            
            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _Diffuse;

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float2 uv: TEXCOORD0;
                fixed3 worldNormal : TEXCOORD1;
                float3 worldPos : TEXCOORD2;

            };


            v2f vert (appdata_base v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);                         //转换坐标到裁剪空间
                o.worldNormal = UnityObjectToWorldNormal(v.normal);                //物体法线转世界法线
                o.worldPos = mul(unity_ObjectToWorld,v.vertex);                  //顶点位置信息转世界位置信息
                o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);

                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;                     //环境光

                fixed4 albedo = tex2D(_MainTex,i.uv);

                //漫反射
                fixed3 worldLightDir = UnityWorldSpaceLightDir(i.worldPos);      //求光源方向

                float difLight = dot(worldLightDir,i.worldNormal) * 0.5 + 0.5;
                fixed3 diffuse = _LightColor0.rgb * albedo.rgb * _Diffuse.rgb * difLight;

                //fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));

                //fixed3 halfDir = normalize(worldLightDir + viewDir);

                fixed3 color = diffuse + ambient ;
                return fixed4(color,1);
            }
            ENDCG
      }

    }
描边效果 用了两段Pass 这是正常效果 但我的场景中却是红色这个效果
Outline值改为负的也不能出现带有贴图的渲染 我想知道问题出在哪


Uni0330 发表于 2024-8-13 17:19:40

问题解决了 urp下得加tag

虽然不知道这行什么意思

Shiva希瓦 发表于 2024-8-14 15:04:20

{:1_235:}

拍肩大帝 发表于 2024-8-15 00:55:19

从业不识微元素,做遍项目也枉然

DeJaVu-小7 发表于 2024-8-21 10:05:29

{:1_236:}

游戏zx 发表于 2024-8-27 10:12:04

(⊙o⊙)…

可乐茶 发表于 2024-9-3 11:56:57


(⊙o⊙)…

Weidaliya 发表于 2024-10-24 00:25:59

顶个贴 学习一波 感谢大佬分享{:1_236:}
页: [1]
查看完整版本: 描边 Outline