Unity功能可以立即从3D管道访问2D盒子?

Fat*_*tie 5 3d unity-game-engine game-physics aabb

在Unity中,假设你有一个3D对象,

在此输入图像描述

当然,获得AABB是微不足道的,Unity有直接的功能,

在此输入图像描述

(您可能必须以通常的方式"添加渲染器的所有边界框",没问题.)

因此,Unity确实具有直接功能,可以在每帧的内部网格/渲染管道中立即为您提供3D AABB框.

现在,对于相关的摄像机,如同定位,AABB确实覆盖了某个2D边界框......

在此输入图像描述

事实上......是否有某种内置的直接方式在Unity中找到橙色的2D盒子?

问题 - Unity是否具有立即从管道中提供2D截头盒的功能?

(请注意,要手动执行此操作,您只需为AABB的8个点制作光线(或使用世界屏幕空间,如Draco提到的那样);将这些光线封装在2D中以制作橙色框.)

我不需要手动解决方案,我问的是引擎是否在每一帧都以某种方式从管道中提供了这个?

有电话吗?

(事实上​​,拥有它会更好......)

在此输入图像描述

我的感觉是一个或全部

  • 特别是闭塞系统
  • 着色器
  • 渲染器

肯定会知道橙色的盒子,甚至是管道内的蓝色盒子,就在显卡的正下方,就像它知道给定网格的AABB一样.

我们知道Unity允许您在给定网格的每一帧中立即点击AABB 3D框:事实上,Unity是否给出了"2D截头",如图所示?

Dra*_*18s 2

据我所知,没有内置的功能。

然而,自己找到极端确实很容易。获取网格的边界框(屏幕截图中显示的长方体)就是这样做的,您只需在变换的空间中进行即可。

  1. 循环遍历网格的所有顶点,执行以下操作:
  2. 将点从本地空间变换到世界空间(这处理缩放和旋转)
  3. 点从世界空间变换到屏幕空间
  4. 确定新点的 X 和 Y 是否高于/低于存储的最小/最大值,如果是,则用新值更新存储的最小/最大值
  5. 循环完所有顶点后,您将得到 4 个值:min-X、min-Y、max-X 和 max-Y。现在您可以构建边界矩形

您可能还希望首先对模型执行礼品包装,然后仅处理生成的凸包(因为不属于凸包的任何点都不会超出凸包的边界)。如果您打算在模型在屏幕上移动、缩放或旋转时绘制此屏幕空间矩形,并且必须重新计算边界框,那么您将需要执行此操作并缓存结果。

请注意,如果模型有动画(例如,如果您的人形机器人站起来并做开合跳),则此方法不起作用。求解动画情况要困难得多,因为您必须将每个动画的每一帧视为原始网格体的一部分,以便进行凸包求解(以确保您的动画不会移动网格体的一部分)在凸包之外),通过幂增加复杂性。