You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动画专业自学C#:Unity中合并两个Shader脚本的技术求助

嘿,作为动画专业还自己啃C#和Shader的同学必须点个赞!我把你要的两个Shader效果合并好了,直接看下面的代码就行——它同时实现了基于世界空间范围的淡入淡出和主纹理Alpha通道裁剪+忽略光照的效果:

合并后的完整Shader代码
Shader "Custom/CombinedFadeAndAlphaClip"
{
    Properties
    {
        _MainTex ("Main Texture (Alpha for Clip)", 2D) = "white" {}
        _FadeCenter ("Fade Center (World Space)", Vector) = (0,0,0,0)
        _FadeRange ("Fade Range", Float) = 5.0
        _FadeFalloff ("Fade Falloff", Float) = 2.0
    }

    SubShader
    {
        Tags { "RenderType"="TransparentCutout" "Queue"="AlphaTest" }
        LOD 100
        Lighting Off // 直接忽略场景光照设置

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                float3 worldPos : TEXCOORD1;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float3 _FadeCenter;
            float _FadeRange;
            float _FadeFalloff;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; // 获取顶点的世界空间坐标
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // 主纹理Alpha通道裁剪逻辑
                fixed4 col = tex2D(_MainTex, i.uv);
                clip(col.a - 0.5); // 裁剪Alpha低于0.5的区域,可根据需求调整阈值

                // 世界空间范围淡入淡出逻辑
                float distanceToCenter = distance(i.worldPos, _FadeCenter);
                float fadeFactor = saturate((_FadeRange - distanceToCenter) / _FadeFalloff);
                col.a *= fadeFactor; // 将淡出因子叠加到纹理透明度上

                return col;
            }
            ENDCG
        }
    }
    FallBack "Transparent/Cutout/VertexLit"
}

关键效果说明

  • 忽略光照:通过Lighting Off标签直接禁用了光照计算,确保物体完全不受场景灯光影响
  • Alpha裁剪:用clip(col.a - 0.5)实现纹理Alpha通道的裁剪,你可以修改0.5这个数值来调整裁剪的严格程度
  • 世界空间淡入淡出:在顶点着色器中把顶点坐标转换为世界空间,片元着色器计算顶点到指定中心的距离,通过_FadeFalloff控制淡出的平滑过渡效果

你直接把这个Shader导入Unity,给物体挂上后就能在Inspector面板调整参数:

  • _MainTex:拖入带Alpha通道的纹理
  • _FadeCenter:设置世界空间中的淡出中心点
  • _FadeRange:控制淡出效果生效的范围
  • _FadeFalloff:调整淡出过渡的平滑程度

内容的提问来源于stack exchange,提问作者Mauritz Seerden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:39:33