版本: Unity 6 (6000.0)
语言英语
  • C#

BillboardAsset

UnityEngine 中的类

/

继承自:Object

/

实现于:UnityEngine.CoreModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们确实会阅读用户提出的每项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

描述

BillboardAsset 描述了看板的渲染方式。

看板是一种细节层次 (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 来渲染它。

属性

bottom看板低于地面的高度。
height看板的高度。
imageCount看板从不同角度观看时可以切换的预渲染图像的数量。
indexCount看板网格中索引的数量。
material用于渲染的材质。
vertexCount看板网格中顶点的数量。
width看板的宽度。

构造函数

BillboardAsset构造一个新的 BillboardAsset。

公共方法

GetImageTexCoords获取看板图像纹理坐标数据的数组。
GetIndices获取看板网格的索引。
GetVertices获取看板网格的顶点。
SetImageTexCoords设置看板图像纹理坐标数据的数组。
SetIndices设置看板网格的索引。
SetVertices设置看板网格的顶点。

继承的成员

属性

hideFlags对象是否应隐藏、与场景一起保存或可由用户修改?
name对象的名称。

公共方法

GetInstanceID获取对象的实例 ID。
ToString返回对象的名称。

静态方法

Destroy移除游戏对象、组件或资源。
DestroyImmediate立即销毁对象 obj。强烈建议您使用 Destroy 代替。
DontDestroyOnLoad加载新场景时不要销毁目标对象。
FindAnyObjectByType检索任何已加载的类型为 type 的活动对象。
FindFirstObjectByType检索第一个已加载的类型为 type 的活动对象。
FindObjectsByType检索所有已加载的类型为 type 的对象的列表。
Instantiate克隆原始对象 original 并返回克隆。
InstantiateAsync捕获原始对象(必须与某个游戏对象相关)的快照,并返回 AsyncInstantiateOperation。

运算符

bool对象是否存在?
operator !=比较两个对象是否引用不同的对象。
operator ==比较两个对象引用,查看它们是否引用同一个对象。