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

Unity 6中Shader转Shader Graph实现战争迷雾问题求助

用Shader Graph复刻俯视角战争迷雾Shader的解决方案

原CG实现的战争迷雾Shader代码如下:

Shader "Hidden/FogOfWar"
{
    Properties
    {
        _MainTex ("Main Texture", 2D) = "white" {}
        _SecondaryTex ("Secondary Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags
        {
            "Queue" = "Transparent+1" //  makes it sort using sorting layer and not default to z value
        }
        Pass
        {
            Blend SrcAlpha OneMinusSrcAlpha
            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;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            sampler2D _MainTex;
            sampler2D _SecondaryTex;

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                col.a = 1 - col.r;
                return fixed4(0,0,0,col.a);
            }
            ENDCG
        }
    }
}

这段Shader通过纯红色精灵对象搭配纯黑色输入材质显示迷雾区域,设置"Queue" = "Transparent+1"时效果正常,但改用Shader Graph复刻时无法实现预期效果;将原Shader Queue改为"Transparent"可正常工作,但需求是仅通过Shader Graph生成的Shader解决问题。


Shader Graph复刻步骤

1. 初始化Shader Graph

  • 新建Unlit Graph(原Shader为无光照逻辑),在Graph Settings中设置:
    • Surface Type: Transparent
    • Blend Mode: Alpha Blend(对应原Shader的Blend SrcAlpha OneMinusSrcAlpha)

2. 还原片段着色逻辑

  • 添加Texture2D节点,命名为MainTex(对应原Shader的_MainTex属性)。
  • 添加Sample Texture 2D节点,连接MainTex与默认的UV节点,完成纹理采样。
  • 提取采样结果的R通道,接入One Minus节点取反(对应原Shader的1 - col.r),将输出连接到Graph的Alpha端口。
  • 将Graph的RGB端口固定为(0, 0, 0)(对应原Shader返回的黑色迷雾颜色)。

3. 配置渲染队列(匹配Transparent+1)

原Shader的Transparent+1队列是为了让迷雾渲染在普通透明物体之后,Shader Graph中按以下方式设置:

  • 在Graph Settings的Render Queue选项中,选择Custom并输入3001(Transparent队列默认值为3000,+1即3001);或选择Transparent后手动修改为Transparent+1。
  • 确保Sorting Layer设置与原场景一致,保证渲染按排序层而非Z值排序。

4. 材质与场景验证

  • 给Shader Graph生成的材质赋值纯黑色的MainTex。
  • 使用纯红色精灵对象测试,确认迷雾区域显示正常。

常见问题排查

  • 检查Shader Graph的Z Write是否关闭(透明Shader默认关闭,与原Shader逻辑一致),避免遮挡问题。
  • 确认精灵的Sorting Layer和Order in Layer与原场景设置匹配,防止渲染顺序错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:42:34