那部分工作确实是我的最喜欢的技术部分之一。

基本上,它只是一个网格:行数、列数、网格大小、间隔、方向。然后Unity在运行时生成实际网格,使用标准的东西,如MeshSetVerticesSetTrianglesSetUVsSetNormalsRecalculateBounds

对于平面墙壁,这很简单。然而,当同样的网格被弯曲成一个弧形或包裹在圆柱体上时,乐趣才刚刚开始。对于向内面的圆柱体,三角形的顺序和法线必须翻转,否则背面剔除和光照/着色假设会变得很快。

很多工作都在小烦人的细节上:保持UV稳定,当面板数量改变时,避免圆柱体关闭时的缝隙,确保曲线面板仍然对齐,打包额外数据到UV通道或顶点颜色中,以便着色器知道如何在顶部绘制LED/像素行为。

这确实是Unity的一个很好的特性。你不必被导入的网格束缚。如果布局改变了,只需重建网格。如果拓扑结构改变了,只需重新映射顶点。如果着色器需要更多信息,只需通过另一个网格流传递。程序网格+自定义着色器在预览真实的LED舞台设置时是一个令人惊讶的好组合。