首页 理论教育 渲染引擎与物理引擎接口

渲染引擎与物理引擎接口

时间:2023-11-21 理论教育 版权反馈
【摘要】:渲染引擎和物理引擎之间接口高效实现应至少包含3个基本功能。第一个功能是渲染引擎用仿真引擎注册物体,并根据实际情况更新状态。注册过程包括向仿真引擎传递一些待注册物体的基本信息,并在仿真引擎中接受物体内部表达法的句柄。渲染引擎和仿真引擎之间接口所需第二个功能是让渲染引擎指定限制动态仿真引擎的场景尺寸,目的是在仿真引擎内施加物体能够移动的距离边界。

渲染引擎与物理引擎接口

渲染引擎和物理引擎之间接口高效实现应至少包含3个基本功能。

第一个功能是渲染引擎用仿真引擎注册物体,并根据实际情况更新状态。注册过程包括向仿真引擎传递一些待注册物体的基本信息,并在仿真引擎中接受物体内部表达法的句柄。句柄(唯一识别号)用于将仿真引擎中物体的内部表达法映射到渲染引擎中的内部表达法。

在注册物体时,从渲染引擎传递给仿真引擎的基本信息应包括定义边界表达的几何形状,以及用户可调整物理属性,如密度(或总质量)、摩擦系数恢复系数和物体的初始状态(可能是仿真开始前已经处于运动状态)。根据应用的不同,如果渲染引擎所用的几何可以在仿真引擎注册前进行简化,就可以获得显著的性能提升。这种简化包括创建一个低分辨率的几何表达的物体或通过一组简单包围体近似物体的形状。

在注册对象后,不管是原几何模型还是简化模型,仿真引擎计算对象的扩展表达,除了包含已经从渲染引擎获得的几何属性信息和物理属性信息外,还包含以下信息。

(1)质心和惯量张量。这两个参数用于计算物体以质心为原点的局部坐标,坐标轴和主惯性轴对齐。惯性张量的对称矩阵在局部坐标系中为对角阵,进一步简化了旋转矩阵的计算。

(2)从世界坐标系到局部坐标系的几何转换。

(3)面片列表规定了属于一个面的顶点和边。

(4)指向物体外的面片法线向量。面片顶点按逆时针定义,这样右手法则可用于确定外法线方向。

(5)边列表定义了属于边的顶点,以及共享边的面。边顶点用“from”和“to”标记,定义了关于左边面的边的正确方向。左边的面为包含这条边且在面列表中第一个找到的面。

(6)局部坐标系中对象的分层表达。

(7)边界旋转球。用一个球替换对象的几何形状,这个球包围了对象绕质心的任何可能旋转。球的半径定义为顶点和对象质心(旋转球的中心)之间的最大距离。计算旋转球半径的最简单方法是:首先计算局部坐标系中对象的正则旋转球,然后把球心平移到坐标原点。此时,旋转球的半径为包围球半径和球心与局部坐标系原点距离之和。(www.xing528.com)

(8)(非凸)对象的可选凸分解。

相对于物体的局部坐标系,所有上述信息仅在注册物体时运算一次。随着物体在世界坐标系移动,该信息用于整个仿真引擎的多个模块,以便加速运算,优化总体效能。

在每个仿真时间间隔结束时,仿真引擎向渲染引擎返回一个对象句柄列表以及最新的位置和方向信息。渲染引擎使用物体句柄,快速指向物体的内部表达,运用必要的变换,调整场景中物体的位置和旋向。列表并非涵盖注册到仿真引擎的所有物体,而只涉及上个时间间隔中位置和方向变化的物体。从效能的角度,在渲染引擎和仿真引擎中实施快速机制,从句柄中(如哈希表)检索物体结构,这一点非常重要。

渲染引擎还应当能够更新注册到仿真引擎的物体的状态,包括执行各种操作,如从仿真引擎中移除物体,更新当前位置、方向和速度,调整物理属性和仿真状态。仿真状态可能的值有休止、静止、动态动画。在默认情况下,所有已注册的物体初始设置为休止状态。在该状态中,即使物体在仿真引擎中,在运行过程中也会被忽略。另外,在仿真执行过程中会考虑静止的物体,但是被视为场景中的固定物体。只有动态物体的位置和方向是由动态仿真引擎使用基于物理的运算确定的。

物体动画和动态的区别,使得仿真引擎和基于脚本的运动连接成为可能。动画是通过预定义基于脚本运动的所有物体的动态状态,并根据脚本在每个时间间隔间更新物体的位置和速度。当根据脚本更新动画物体的位置时,需要留意防止与任何其他物体重叠或阻挡其他动态物体。在每个时间间隔中,动态仿真引擎对所有已注册的物体强制实施非穿透性约束,如果基于脚本的物体被迫移动到另一个物体的上面,并完全阻止它的运动,则仿真引擎无法正常工作,将对后续的仿真时间间隔产生异常结果。

渲染引擎和仿真引擎之间接口所需第二个功能是让渲染引擎指定限制动态仿真引擎的场景尺寸,目的是在仿真引擎内施加物体能够移动的距离边界。落在边界外物体的状态自动设为休止,在随后的仿真中不再执行。所有边界也可以在仿真引擎中表示为静止物体。此时,动态物体可以碰撞,从这些静止的边界弹开,并在后续仿真时间内保持活动。

为了简化操作,场景的大小可由包含整个仿真空间的包围盒坐标确定。包围盒一旦确定,仿真引擎将其分解成多个子区域(或单元),用于加速碰撞检测。仿真空间的分解可以是单层,也可以是多层。如果是单层,根据包含整个仿真空间的包围盒构建一个均匀的粗网格。每个单元的尺寸结合仿真物体大小确定。如果是多层的,则构建多个均匀网格,每层单元的尺寸各不相同,从而构成仿真场景由粗到细的分层,然后将物体分配到网格中,使得单元能够完全包含这些物体。

渲染引擎和仿真引擎之间接口所需第三个功能是让渲染引擎能指定时间间隔,即动态仿真引擎在两个连续帧之间执行时间量。在通常情况下,采样时间设置为所需帧速率的倒数,以便动态仿真引擎在每个帧结束后返回系统的状态,且渲染引擎可相应地更新计算机显示结果。系统的状态可返回自上次时间间隔以来发生移动的物体列表,并分别由平移向量和旋转矩阵给出新的位置和方向信息。

值得注意的是,在仿真引擎中对各动态物体的运动微分方程进行数值积分的实际间隔可能因时间间隔的不同而有所不同。若积分误差估计值不同,当数值方法中采用自适应时间间隔去调整当前使用的时间间隔时,这个情况最为常见。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈