[Shader 着色器]边缘高光

本文分享了一种使用Unity Shader实现卡通轮廓效果的方法。通过自定义Shader代码,调整轮廓颜色及宽度,实现对模型边缘的突出显示。适用于游戏开发中追求特殊视觉风格的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    图片:未命名.jpg

    图片:QQ截图20120830125443.png


    先上图,等会再将研究心得发布,如果想一起研究我有源代码,要的回复
     附上shader代码:
     
    Shader "Toon/Basic Outline" {
        Properties {
            _Color ("Main Color", Color) = (.5,.5,.5,1)
            _OutlineColor ("Outline Color", Color) = (0,1,0,1)
            _Outline ("Outline width", Range (0.005, 0.01)) = .001
            _MainTex ("Texture", 2D) = "white" {}
                    _BumpMap ("Bumpmap", 2D) = "bump" {}
            }
     
        CGINCLUDE
        #include "UnityCG.cginc"
     
        struct appdata {
            float4 vertex : POSITION;
            float3 normal : NORMAL;
        };
     
        struct v2f {
            float4 pos : POSITION;
            float4 color : COLOR;
        };
     
        uniform float _Outline;
        uniform float4 _OutlineColor;
     
        v2f vert(appdata v) {
            v2f o;
            o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
     
            float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
            float2 offset = TransformViewToProjection(norm.xy);
     
            o.pos.xy += offset * o.pos.z * _Outline;
            o.color = _OutlineColor;
            return o;
        }
        ENDCG
     
        SubShader {
            Tags { "RenderType"="Opaque" }
            UsePass "Toon/Basic/BASE"
            Pass {
                Name "OUTLINE"
                Tags { "LightMode" = "Always" }
                Cull Front
                ZWrite On
                ColorMask RGB
                Blend SrcAlpha OneMinusSrcAlpha
     
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                half4 frag(v2f i) :COLOR { return i.color; }
                ENDCG
            }
        }
     
        SubShader {
            Tags { "RenderType"="Opaque" }
            UsePass "Toon/Basic/BASE"
            Pass {
                Name "OUTLINE"
                Tags { "LightMode" = "Always" }
                Cull Front
                ZWrite On
                ColorMask RGB
                Blend SrcAlpha OneMinusSrcAlpha
     
                CGPROGRAM
                #pragma vertex vert
                #pragma exclude_renderers shaderonly
                ENDCG
                SetTexture [_MainTex] { combine primary }
                        }
        }
    SubShader {
          Tags { "RenderType" = "Opaque" }
          CGPROGRAM
          #pragma surface surf Lambert
          struct Input {
            float2 uv_MainTex;
            float2 uv_BumpMap;
          };
          sampler2D _MainTex;
          sampler2D _BumpMap;
          void surf (Input IN, inout SurfaceOutput o) {
            o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
            o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
          }
          ENDCG
        }
     
         Fallback "Diffuse"
    }
     
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值