如何创建基于高度的体积雾?


10

最近,我一直在寻找在游戏世界的某些Y位置上产生体积雾的技术。但是我发现的全部是使用粒子系统或内置引擎雾产生的雾,这些雾并不能真正满足我的需求。

就我而言,我需要一种既高效又浓的雾。它应该遍及整个游戏世界,但是显然,出于性能方面的考虑,它只能作为相机或着色器的一部分进行渲染,尽管它只是一种幻觉,但看起来就像是在移动。如果可以的话,我可以设置一个粒子系统,将其安装到相机上并使其移动。

因此,主要问题仍然存在-如何实现既浓密又有效的体积雾?

作为我正在使用的特定引擎,它是Unity。

例如,我的意思是,这里是我想要的具有效果的游戏的链接:Astromike

使用密集的基于高度的雾的游戏示例屏幕截图。


这里有点GLSL技巧,但是如何根据您从顶点着色器中获取的Y坐标为片段着色器中的像素着色呢?
Quentin

2
您是否查看过Unity关于“深度特效”的演讲?虽然已有数年历史,但这些原则仍然适用。它们涵盖了基于高度的雾和“蓬松的雾”,它们在空的空间中聚集并在障碍物周围变薄,并且由于所有示例均为Unity,因此应易于应用。
DMGregory

@Quentin是的,好主意,尽管它将是每个对象的着色器,对吗?然后,将需要更改很多着色器。我也是着色器编程的新手,所以我可能写了些废话。但是据我所知,顶点着色器适用于对象。并且着色可能不会产生运动效果。我了解,如果我想移动,则内部移动的每个小东西都应该是一个对象,因此粒子系统可能是最好的方法。
坦率的月亮_Max_

@wondra是的,如果确实如此,这可能不是最佳方法,因为透明度会影响性能。
坦率的月亮_Max_

1
列表也不适合我们的问答格式,因为列表何时完整?多少个“不同情况”就足够了?我们以什么标准来判断“最佳”?通常,此格式最适合于明确重点的问题,并且您可以验证答案。因此,如果您觉得自己有一个适合自己需求的答案,那么最好编辑一下您的问题,以首先将其范围缩小为实际需要的内容,而不是让问题过于笼统,回答不完整。其他用户始终可以提出针对其他方面的其他问题,从而获得与他们的案件相关的更集中的答案
DMGregory

Answers:


24

我是Astromike的创作者。:)

实际上,我正在使用一个非常简单的技巧使它看起来像雾。我正在使用Unity开发Astromike,因此,如果您使用Unity,则可以执行相同操作。但是我认为您也可以为其他引擎重新创建相同的着色器。

我要做的是,为雾设置一个平面,然后添加“粒子/ Alpha”混合有“软粒子因子”(在我的情况下为0.32)着色器的材质。而已。

雾飞机:http//imgur.com/a/MAEFW

设置:http//imgur.com/NJVAaIQ

由于摄像机的角度,它对我有用,对其他人可能不起作用。

其余的只是后效果堆栈(Bloom,Vignette等。)希望这会有所帮助。干杯。


1
哇!酷,谢谢您的分享!游戏是惊人的:)
坦率的月亮_Max_

看起来很棒而且非常简单,请尝试在我的项目中进行。似乎只能使用透视相机工作(我们的游戏是正交的)。
杰夫(Jeff)

这真是太好了
难以置信

嗨@ Mikea15,非常漂亮的游戏!不幸的是,我无法重现您提到的效果-我将Bloom添加到后期处理堆栈中,但是即使雾平面在它们后面,它也会散布在对象上(毫不奇怪),而在您的演示中,似乎列清除了绽放效果。另外,在我的“软粒子因子”中,无论其值如何,都不会更改任何内容。如果您可以提供一个演示该场景的小型演示场景,那就太好了。谢谢!
戴维

@Dawid我知道这很晚了,但是您需要将相机渲染路径设置为延迟,并确保在项目设置中检查了软粒子的质量
Rito Ramos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.