将Integer数组/纹理传递给Unity着色器的方法

时间:2017-10-25 08:00:24

标签: unity3d shaderlab

我正在尝试使用强大的细胞边界来渲染基于细胞的地形(就像像运输大亨这样的旧游戏)。为了优化性能,我传递了一个带有实际游戏地图的纹理,我在其中尝试为自定义着色器编码单元格类型,因此着色器可以查找每个单元格的类型,并确定在渲染地形时应用于特定单元格的纹理啮合。

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

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

1 个答案:

答案 0 :(得分:0)

建议不要使用整数,因为:

  

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

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