将对象的体积创建为雾

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将对象的体积创建为雾相关的知识,希望对你有一定的参考价值。

我在Unity中使用雾着色器,我创建了以下着色器:enter image description here

但是,此着色器只是采用纹理并将其滑动到对象的表面上。它适用于2D雾,但我还想创建一个填充对象体积的着色器。我知道Unity中的内置雾效果,但是我希望能够集中到一个物体的大小。

这是通过着色器实现的,还是我必须走另一条路?我试过搞乱ShaderLab:Legacy Fog,但似乎已经过时且无法有效工作。

答案

有多种方法可以实现这一点,其中大多数都属于雾量类别。如果您是着色器编程的新手,那么任务可能会有点令人生畏,但您可以使用周围的样本和资产。

问题是着色器只知道正在处理的点的全局常量和局部信息(因此给定的像素无法访问其周围环境的描述)。要实现您想要的效果,像素需要有关其所属形状或其环境的一些信息。

对于任意网格,最简单的方法是在该点采样场景的深度(预渲染并存储在纹理中)。 There are a bunch of macro to help you with that。一旦你知道了点后面的深度和点本身的深度,你就可以做一堆操作来计算出那个点的雾的强度。

您可以查看built-in shaders中的软粒子着色器,它正在执行精确处理以淡化对象,因为它们更接近其他不透明的几何体。

以上是关于将对象的体积创建为雾的主要内容,如果未能解决你的问题,请参考以下文章

阴影体积 - 非流形对象

3D 封闭网格汽车对象的体积

HMC Core 6.0全球上线图形计算服务新插件,助力高画质3D手游创新

HMC Core 6.0全球上线图形计算服务新插件,助力高画质3D手游创新

Three.js如何计算Mesh的体积

体积数据如何优于多边形数据?