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

Unity Shader Graph:单个着色器实现光照/无光照过渡及对象自定义雾效?

在Unity 2021.3 URP的ShaderGraph中实现对象级个性化雾效过渡

核心思路

直接在单个ShaderGraph内完成光照渲染结果与固定雾色的线性混合,通过[0…1]范围的控制因子实现平滑过渡,无需依赖全局雾效或复杂渲染扩展,适合新手快速落地需求。

具体实现步骤

1. 初始化ShaderGraph

  • 创建一个URP Lit Shader Graph(保留光照逻辑的基础模板),进入Graph编辑界面。
  • 在Graph Settings中确认Surface Type设为Opaque(半透明对象可按需调整,不透明场景下过渡效果更稳定)。

2. 添加自定义参数

在Blackboard面板新增以下参数:

  • Float类型:命名为FogBlendFactor,设置范围为0到1,默认值0。这是过渡效果的核心控制变量。
  • Color类型:命名为FixedFogColor,预设你需要的固定雾色(比如常用的灰蓝色调)。

3. 搭建混合逻辑节点

按以下顺序连接节点:

  1. 获取Lit Master节点的Base Color与Emission输出(两者之和为对象的最终光照渲染色),可通过Add节点合并这两个输出。
  2. 添加Lerp节点(线性插值):
    • 将Lerp的A端口连接到合并后的光照渲染色;
    • 将Lerp的B端口连接到FixedFogColor参数;
    • 将Lerp的T端口连接到FogBlendFactor参数。
  3. 将Lerp节点的输出连接回Lit Master的Base Color输入端口,替换原有的Base Color连接。

4. 可选:基于距离的自动过渡

如果需要让对象随距离相机的远近自动触发雾效过渡,可把FogBlendFactor替换为动态计算值:

  • 添加Object Space Position和Camera Space Position节点,计算顶点到相机的距离;
  • 添加Remap节点,将距离值映射到[0…1]范围(例如:0-5米对应0,5-10米对应1),把Remap的输出作为Lerp的T值。

5. 测试与调试

  • 将Shader挂载到目标3D对象上,在Inspector面板调整参数:
    • FogBlendFactor=0:对象显示完整光照效果;
    • FogBlendFactor=1:对象完全变为固定雾色;
    • 中间值:平滑过渡两种状态。

方案优势

  • 全Shader内实现,无需后期处理、RendererFeature等复杂机制,新手易理解;
  • 每个对象独立控制雾色与过渡程度,完全不受全局雾效限制,适配多相机、多图层场景;
  • 逻辑简洁,性能开销低,适配大量对象的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:05:30