1

现在我正在做一个项目,该项目涉及将 splatmaps 应用于生成的网格。我正在尝试使用内置的地形着色器来实现这一点,但我遇到了一个涉及“FirstPass”和“AddPass”着色器的问题。

很清楚这些着色器应该如何工作。应用 FirstPass 并处理 4 个纹理和一个控制(splat)纹理。如果用户应用超过 4 个纹理,则 AddPass(与 FirstPass 非常相似)在编译时被“添加”为另一个着色器通道。根据用户对地形应用的纹理数量(每次通过 4 个纹理),添加任意次数的 AddPass。

地形引擎是如何实现这种多通道效果的呢?所需的通行证数量可以在编译时确定,所以我不认为这是不可能的......我只是不知道从这里去哪里。我认为这可能与 FirstPass 底部的 Dependency 属性有关,但我不确定。

Dependency "AddPassShader" = "Hidden/TerrainEngine/Splatmap/Standard-AddPass"
Dependency "BaseMapShader" = "Hidden/TerrainEngine/Splatmap/Standard-Base"

如果有人对此有任何见解,请告诉我。为方便起见,我已将Unity 存档中的FirstPassAddPassTerrainEngine.cginc着色器文件上传到 pastebin。

谢谢!

4

1 回答 1

1

对于那些好奇的人,我实际上自己找到了答案。在内部,地形引擎似乎使用隐藏的 MeshRenderer 来一次包含多个着色器通道。为了实现这种多通道效果,TerrainEngine 将 FirstPass 着色器添加到实例化的材质中,并将其分配给 MeshRenderer 中的材质字段。在需要 > 4 个纹理的情​​况下,AddPass 着色器随后也会添加到材质并附加到材质字段。

请注意,MeshRenderer 会警告您在单个网格上使用多个着色器通道。可以忽略此警告,因为如果需要超过 4 个纹理,则 splatmapping 需要多个着色器通道。

于 2018-01-30T21:48:47.867 回答