研发实战:如何用Oculus Medium快速雕刻模拟3D形状
作者:网友投稿 时间:2019-05-31 01:02
Oculus Medium的Move Tool允许用户移动,扭捏和拉伸虚拟粘土。艺术家可以用双手轻松平移,旋转和缩放。通过这样的方式,你可以避免繁琐的操作模式或键盘快捷键,从而能够直观地专注于创作过程。
在这篇博文中,Oculus Medium的软件工程师David Farrell将概述新Move Tool的功能,以及它们是如何帮助用户快速轻松地移动和拉伸3D形状。以下是映维网的具体整理:

我最近在GDC大会探讨了Move Tool。我同时将演示文稿托管至Github,其中包含用于工具变形的数学运算的大量信息(请留意相关注释)。你同时可以查看最近发布的Medium示例代码 ,其中包括Move Tool的非弹性变形和弹性变形。它采用了BSD许可协议,并使用C ++和GLSL进行编译。
最后,你在阅读本文之前可以参考我先前撰写的关于Move Tool的博文。
我们希望你会觉得这篇博文有趣和有用。
1. 全新的Elastic Move
对于Medium 2.0,我们为Move Tool添加了一个名为Elastic Move的模式。借助Elastic Move,Move Tool可以实现基于物理的弹性材质模拟,从而给艺术家带来一种自己正在与真实对象进行交互的感觉。我们将这种模拟调整为应用体积保持变形。通过Elastic Move,艺术家可以调整雕塑,改变其比例,并摆出不同的姿势。
有效的模拟涉及多个方面,例如头显的视觉和音频质量,精确的双手追踪和舒适度。Elastic Move表明,优化的模拟可以提升沉浸感,因为你的大脑会意识到形状正在以逼真和可预测的方式移动。这能够提供一种自己仿佛置身于现实环境中的感觉。
2. 对Nonelastic Move的优化
我们同时优化了Move Tool在非弹性模式中的行为,使得衰减区域(Move Tool的内外层之间)的粘土能够更多地遵循扫掠曲线。所述曲线由手部开始移动的方向和结束结束的方向之间的旋转量控制,并且能够支持用户通过手部移动来创建各种形状。以下视频说明了新旧行为的差异:
我们实际上是无意中构思出这种行为,但我们对结果感到非常满意,所以我们保留了这种行为。
对于Move Tool的网格变形,其工作原理是将三角形网格中的每个顶点视为一个点,并将该点与时间相关矢量场求解积分。矢量场表示从移动手势从开始到结束的动作。我们使用虚构时间,使得手势从t=0开始,并且在t=1结束。然后我们使用数值积分器来确定该点的最终位置。
非弹性和弹性移动工具都使用这种框架,只是两种模式选择不同的矢量场。我们现在将讨论如何为非弹性模式构造矢量场。
首先,我们记录用户移动网格的每一帧的Touch控制器姿态。每个姿势包括Touch控制器的平移和面向,以及记录姿势时的比例(通过拇指摇杆控制)和时间。第一个姿态和最后一个姿态用于计算Move Tool变形,中间的姿态放弃。

接下来,我们通过这个函数来定义时间相关矢量场:

最后,我们使用数值积分为三角形网格中的每个顶点与矢量场求解积分。对于通过所述矢量场求解点的积分,其可以产生与3D相对变换相同的结果,但通过对各个矢量场进行求和,我们可以来轻松地添加衰减效果,并将多个变形器混合在一起。这意味着点在对称平面能够流畅地混合,就像Medium启用镜像模式时一样。有关如何有效为每个顶点求解积分的示例,请参阅Sculpting and Simulations示例代码。
上述函数是通过求解从t= 0到t=falloff的积分,其中falloff是基于点从内层到外层之间的距离的0-1因子。我们在开发代码时使用了不同的技术,我们求解从t=0到t=1的积分,并将由NonElasticEvaluateODE()返回的位移矢量乘以衰减因子。但要精确匹配仿射变换,我们本应该修改NonElasticEvaluateODE(),以便将原点的偏移量乘以衰减,如下所示:

放弃这个乘法恰巧创建了一个会产生上述视频中的曲线的矢量场。当衰减项为1时,这一小小的差异没有影响。但当衰减项介于0和1之间时,这会产生相当大的影响,并生成具有平滑曲线的形状。
对于更为完整的解释,请参阅上文提及的Sculpting and Simulations演示文稿,以及相关的示例代码。
3. Nonelastic Move和Elastic Move
Move Tool的非弹性模式和弹性模式可以互为补充:
对于非弹性模式,Move Tool属于体积创建,并且添加了新的虚拟粘土对于弹性模式,Move Tool属于体积保持,并且用于拉伸挤压粘土
你可以通过Move Tool的UI切换所述的两种模式。我们同时添加了一个快速方式(双击绿色按钮)。
Medium用户已经通过各种不同的方式来利用这种体积创建/保持功能。
4. Elastic Move幕后的工作原理



