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的光影阴影效果
如果需要保留实时光影,通过给主相机挂载内置雾效后处理着色器即可实现雾效,不需要修改原有场景配置:
- 保留原有的
lit_with_shadows_shader全局设置 - 导入引擎内置的
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
相关产品推荐
相关产品推荐

