看板是一种细节层次 (LOD) 方法,用于在远处以更简单的方式绘制复杂的 3D 对象。由于对象距离较远,因此由于其在屏幕上的大小以及在相机视图中成为焦点的可能性较低,因此通常不需要以完整的细节绘制对象。相反,对象可以预先渲染到纹理,并将该纹理用于非常简单的面向相机的平面几何体网格(通常只是一个四边形),称为看板。在很远的距离处,对象相对于相机的方向不会发生明显变化,因此看板看起来与它在帧与帧之间所代表的对象非常相似,而无需从模型中重新绘制。BillboardAsset 类允许创建从多个方向渲染的看板,从而使 BillboardAsset 能够有效地从任何近似水平的视点表示对象,以较低的细节层次进行表示。
BillboardAsset 通常是通过导入 SpeedTree 资源创建的。您也可以在了解看板描述后创建自己的看板。
SpeedTree 看板几何体通常比普通的四边形更复杂。通过使用更多顶点来裁剪看板图像的空部分,渲染性能可能会得到提高,因为图形系统不必绘制太多冗余的透明像素。您可以通过 BillboardAsset.vertices 和 BillboardAsset.indices 访问几何体数据。
所有顶点都被认为是在 UV 空间中(请参见下图 1),因为几何体将由看板图像进行纹理化。通过知道看板的宽度、高度、底部以及看板当前面向的方向,可以轻松地将 UV 顶点扩展到 3D 空间顶点。假设我们有一个位于 (0,0,0) 处并面向负 Z 轴的看板,则 3D 空间坐标计算如下
X = (u - 0.5) * width
Y = v * height + bottom
Z = 0
图 1:UV 顶点如何扩展到 3D 顶点
为了显示类似于被看板化的真实 3D 网格的内容,SpeedTree 看板根据当前的视图方向从多个预渲染图像中选择合适的图像。下图 2 中的图像是在不同的视角下捕获渲染的 3D 树的图像创建的,这些视角均匀分布在 Y 轴周围。第一张图像始终从正 X 轴方向开始(如果您想象从上方看到的单位圆,则为 0°)。
图 2:八张看板图像如何烘焙
所有图像应在一个单一纹理中进行图集化。每个图像都表示为一个 Vector4,其值为 {left u, top v, width in u, height in v},位于图集中。您可以通过 BillboardAsset.imageTexCoords 访问所有图像。SpeedTree Modeler 始终导出与漫反射纹理一起的普通纹理,以更逼真地近似光照,并且它与漫反射纹理共享相同的图集布局。
构建 BillboardAsset 后,请使用 BillboardRenderer 来渲染它。