0

我正在尝试实现具有强大单元边界的基于单元的地形渲染(就像在像 Transport Tycoon 这样的旧游戏中一样)。为了优化性能,我通过实际游戏地图传递纹理,在其中我尝试为自定义着色器编码单元类型,因此着色器可以查找每个单元的类型并确定在渲染地形时将哪些纹理应用于特定单元网。

以整数类型传递该映射会很方便,因此我可以使用按位运算符屏蔽特定位,并且基本上只在一个字节中传递大量数据。传递浮点数会导致精度丢失,我无法确定在转换为浮点数并返回 int 后是否具有相同的整数。

有没有办法将整数类型的数组(二维数组甚至纹理更好)传递给着色器,或者他们在 API 中没有 SetIntegerArray 是有原因的,比如缺乏与移动 GPU 的兼容性之类的?

4

1 回答 1

0

不建议使用整数,因为:

根据平台的不同,GPU 可能不支持整数类型。例如,Direct3D 9 和 OpenGL ES 2.0 GPU 仅对浮点数据进行运算,而看起来简单的整数表达式(涉及位或逻辑运算)可能会使用相当复杂的浮点数学指令来模拟。 https://docs.unity3d.com/Manual/SL-DataTypesAndPrecision.html

所以你必须使用浮点类型。使用Material.SetFloatArray()Material.SetVectorArray()分配。

于 2017-10-25T08:36:21.810 回答