但是,此着色器只是采用纹理并将其滑动到对象的表面上。它适用于2D雾,但我还想创建一个填充对象体积的着色器。我知道Unity中的内置雾效果,但是我希望能够集中到一个物体的大小。
这是通过着色器实现的,还是我必须走另一条路?我试过搞乱ShaderLab:Legacy Fog,但似乎已经过时且无法有效工作。
有多种方法可以实现这一点,其中大多数都属于雾量类别。如果您是着色器编程的新手,那么任务可能会有点令人生畏,但您可以使用周围的样本和资产。
问题是着色器只知道正在处理的点的全局常量和局部信息(因此给定的像素无法访问其周围环境的描述)。要实现您想要的效果,像素需要有关其所属形状或其环境的一些信息。
对于任意网格,最简单的方法是在该点采样场景的深度(预渲染并存储在纹理中)。 There are a bunch of macro to help you with that。一旦你知道了点后面的深度和点本身的深度,你就可以做一堆操作来计算出那个点的雾的强度。
您可以查看built-in shaders中的软粒子着色器,它正在执行精确处理以淡化对象,因为它们更接近其他不透明的几何体。