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

Ursina引擎如何正确添加雾效?scene.fog参数设置无效怎么办

Ursina雾效设置不生效的原因及解决方法

核心原因

Ursina自带的scene.fog_density、scene.fog_color雾效参数,仅适配引擎默认基础着色器。你在代码中全局设置Entity.default_shader = lit_with_shadows_shader后,这个带实时光影、阴影计算的着色器本身没有写入雾效计算逻辑,不会读取scene下的雾参数,因此无论怎么调整密度、颜色值都不会出现雾效。

可选解决方案

根据你项目是否需要实时光影阴影,二选一即可:

方案1:不需要实时光影/阴影(配置最简单)

直接删除Entity.default_shader = lit_with_shadows_shader这行全局着色器配置,切回引擎默认着色器,你原本写的雾效参数就会直接生效。
参考最小可运行示例:

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController

app = Ursina(development_mode=False, show_ursina_splash_screen=True, fullscreen=True, title="Maze FPS")
random.seed(0)

# 雾效配置直接生效
scene.fog_density = .1
scene.fog_color = color.red

# 测试场景
ground = Entity(model='plane', scale=100, texture='white_cube', collider='box')
for i in range(20):
    Entity(model='cube', position=(random.randint(-30,30), 1, random.randint(-30,30)), texture='white_cube')

player = FirstPersonController()
app.run()

提示:该方案场景不会渲染实时光影与软阴影,适合低多边形、非写实风格的项目。


方案2:保留lit_with_shadows_shader的光影阴影效果

如果需要保留实时光影,通过给主相机挂载内置雾效后处理着色器即可实现雾效,不需要修改原有场景配置:

  1. 保留原有的lit_with_shadows_shader全局设置
  2. 导入引擎内置的fog_shader后处理着色器,挂载到主相机上,手动传入雾的颜色、密度参数即可
    参考代码片段(可直接插入你原有代码中):
from ursina.shaders import fog_shader

# 原有配置保留
Entity.default_shader = lit_with_shadows_shader
scene.fog_color = color.red
# 注意后处理雾的密度取值范围和原生雾不同,建议从0.001开始逐步上调,0.001-0.01区间就会有明显效果
scene.fog_density = 0.005

# 给主相机添加后处理雾效
camera.shader = fog_shader
camera.set_shader_input('fog_color', scene.fog_color)
camera.set_shader_input('fog_density', scene.fog_density)

提示:后处理雾密度不要设置过高,数值过大会直接让整个场景被雾颜色完全覆盖,看不到任何物体。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:57:38