我正在尝试在 Unity 4 Pro中实现这一点。
但我被困在混合部分。我不明白如何在一个对象上使用多个体积来混合多个纹理/颜色。您如何访问着色器中的这些体积并检查“碰撞”?
它似乎与顶点/像素照明非常相似。但也许我错了。
这是我正在尝试创建的简单效果。
看起来这种方法是关于在不同环境贴图(以立方体贴图形式给出)之间进行插值的方法。发布的图像看起来像是插值策略的可视化。也就是说,当一个点在世界中移动时,使用具有不同权重的各种环境图(例如,一个的 10%、另一个的 70% 和三分之一的 20%)以提供平滑的过渡。不是真正的点,而是在片段中实现的表面,它使用许多环境贴图来近似该片段位置的环境贴图。
要回答您的问题,“检查碰撞”可能应该在 CPU 端完成,并传入一个体积列表(真正的 3D 形状)。例如,如果您绘制的东西可能与环境贴图的贡献区域相交,则将地图添加到一个列表并将它们全部传递给绘制对象的着色器。统一使用物理触发器可能是开始此操作的最简单方法。
获得权重列表后,对每个环境贴图进行采样(按方向和可能的 mip 级别),按权重缩放样本并对结果求和。