Unity3d边框高亮Shader

这篇博客详细介绍了如何使用Unity3D的Shader语言实现模型边缘描边效果,包括调整轮廓颜色和宽度的方法。通过修改_OutlineColor和_Outline属性,可以自定义轮廓的视觉效果。同时,博客还提供了相关的CG片段代码,展示了如何在顶点着色器中计算轮廓偏移,并在两个Pass中分别处理轮廓和基础渲染。
摘要由CSDN通过智能技术生成

Unity3d实现模型描边效果Shader

Shader "Outlined/Silhouetted Diffuse" {  
    Properties {  
        _Color ("Main Color", Color) = (1,1,1,1)  
        _OutlineColor ("Outline Color", Color) = (0,0,0,1)  //改变这个能改变轮廓边的颜色  
        _Outline ("Outline width", Range (0.0, 0.03)) = 0.008   //改变这个能改变轮廓边的粗细  
        _MainTex ("Base (RGB)", 2D) = "white" { }  
    }  

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) {  
    // just make a copy of incoming vertex data but scaled according to normal direction  
    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 { "Queue" = "Transparent" }  

        // note that a vertex shader is specified here but its using the one above  
        Pass {  
            Name "OUTLINE"  
            Tags { "LightMode" = "Always" }  
            Cull Off  
            ZWrite Off  
            ZTest Always  
            ColorMask RGB // alpha not used  

            // you can choose what kind of blending mode you want for the outline  
            Blend SrcAlpha OneMinusSrcAlpha // Normal  
            //Blend One One // Additive  
            //Blend One OneMinusDstColor // Soft Additive  
            //Blend DstColor Zero // Multiplicative  
            //Blend DstColor SrcColor // 2x Multiplicative  

CGPROGRAM  
#pragma vertex vert  
#pragma fragment frag  

half4 frag(v2f i) :COLOR {  
    return i.color;  
}  
ENDCG  
        }  
        Pass {  
            Name "BASE"  
            ZWrite On  
            ZTest LEqual  
            Blend SrcAlpha OneMinusSrcAlpha  
            Material {  
                Diffuse [_Color]  
                Ambient [_Color]  
            }  
            Lighting On  
            SetTexture [_MainTex] {  
                ConstantColor [_Color]  
                Combine texture * constant  
            }  
            SetTexture [_MainTex] {  
                Combine previous * primary DOUBLE  
            }
        }  
    }  

    SubShader {  
        Tags { "Queue" = "Transparent" }  

        Pass {  
            Name "OUTLINE"  
            Tags { "LightMode" = "Always" }  
            Cull Front  
            ZWrite Off  
            ZTest Always  
            ColorMask RGB  

            // you can choose what kind of blending mode you want for the outline  
            Blend SrcAlpha OneMinusSrcAlpha // Normal  
            //Blend One One // Additive  
            //Blend One OneMinusDstColor // Soft Additive  
            //Blend DstColor Zero // Multiplicative  
            //Blend DstColor SrcColor // 2x Multiplicative  

            CGPROGRAM  
            #pragma vertex vert  
            #pragma exclude_renderers gles xbox360 ps3  
            ENDCG  
            SetTexture [_MainTex] { combine primary }  
        }

        Pass {  
            Name "BASE"  
            ZWrite On  
            ZTest LEqual  
            Blend SrcAlpha OneMinusSrcAlpha  
            Material {  
                Diffuse [_Color]  
                Ambient [_Color]  
            }  
            Lighting On  
            SetTexture [_MainTex] {  
                ConstantColor [_Color]  
                Combine texture * constant  
            }  
            SetTexture [_MainTex] {  
                Combine previous * primary DOUBLE  
            }  
        }  
    }  

    Fallback "Diffuse"  
Unity3D是一款功能强大的游戏引擎,可以用于开发各种类型的游戏和应用程序。URP(Universal Render Pipeline)是Unity3D的一种渲染管线,用于实现高质量的图形渲染效果。高亮插件是一种用于在游戏中突出显示特定物体或区域的工具。 在Unity3D中,URP渲染管线可以与高亮插件结合使用,以实现高质量的高亮效果。高亮插件通常通过在物体或区域周围绘制边框、改变颜色或添加光晕等方式来进行突出显示。这可以帮助玩家注意到重要的物体、位置或任务,并提供更好的视觉体验。 URP渲染管线使用高亮插件需要以下几个步骤: 1. 导入高亮插件的Unity3D项目。 2. 在场景中选择要高亮显示的物体或区域。 3. 在脚本中添加逻辑,以触发高亮效果。例如,可以通过玩家的操作或特定条件来激活高亮效果。 4. 调整高亮插件的参数以获得所需的效果,例如高亮的颜色、强度和尺寸等。 使用高亮插件可以为游戏增加更多的交互性和视觉效果,提高用户体验。例如,在解密游戏中,玩家可以通过高亮插件强调可疑物体或线索。在战争策略游戏中,高亮插件可以帮助玩家快速定位重要的资源或单位。 总之,Unity3D的URP渲染管线与高亮插件的结合可以为游戏增加更多的视觉效果和交互性,提供更好的用户体验。无论是开发个人项目还是商业项目,都可以利用这些工具来创造出更具吸引力和沉浸感的游戏体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值