去年,Genesis是一种令人兴奋的新工具,用于创建现实的物理模拟,Interactive 4D Worlds等。我渴望尝试,但是让它上班并不容易。我必须承认,在设置过程中,我面临很多挑战。
>在本教程中,我将简要分享我遇到的问题,并展示我最终如何使用Google Colab和几个技巧来运行它。
如果您只想概述Genesis,请查看我以前的文章《 Genesis Physics Engine:一个带有示例的指南》。
我最初的创世纪的设置经验
>但新问题弹出了。它不会渲染任何东西,我在OpenGL上遇到了几个问题。即使我尝试从他们的github运行示例文件时,我也面临更多的错误和冲突。
> 然后,当我以为我已经整理出来时,我开始遇到诸如“统一找不到”之类的错误,这意味着某些渲染设置缺失了。> 在此过程中,我在网上进行了研究,以查看其他人是否遇到了同样的问题。事实证明,我不是唯一的人 - 许多人面临着同样的困难,许多人似乎找不到解决方案来使他们的脚本正常工作。
我如何使创世纪起作用:Google Colab进行救援最初的挫败感后,我决定尝试使用一个Pro帐户的Google Colab,事实证明这正是我所需要的。使用COLAB的GPU资源,我能够:
安装所有必需的依赖项,没有任何问题。
>我选择了NVIDIA A100-SXM4-40GB,事实证明,它足够强大,可以有效地处理创世纪模拟。
>
>正如错误消息所建议的那样,我修改了代码以禁用查看器:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
>
在网上查看后,我发现其他人遇到了同样的问题。许多提出的解决方案涉及配置远程OpenGL环境或使用XVFB创建虚拟显示。不幸的是,我无法获得这些方法可以在COLAB中可靠地工作,这可能是由于依赖性冲突和环境的局限性。 在这一点上,我需要更实用的解决方法!>
>由于COLAB不是实时渲染,因此我决定按框架作为图像保存渲染的输出。有了这些想法,我能够生成一系列图像,这些图像后来可以合并为动画。>实现和输出
在本节中,我将引导您完成代码的实现和我获得的输出。设置GPU环境
然后,我用CUDA后端初始化了GPU加速度的Genesis。
这是我得到的输出:>GenesisException: No display detected. Use show_viewer=False for headless mode.
创建和构建场景
scene = gs.Scene(show_viewer=False)
我需要的第一件事是一个文件夹,创世纪可以保存其呈现的图像。
pip install genesis-world
接下来,我需要创建一个可以添加对象并与它们进行交互的场景。
>import genesis as gs gs.init(backend=gs.cuda)
gs.scene()初始化了一个新的仿真空间,而show_viewer = false disable dis time实时可视化。在这一点上,我准备了一个空的场景来开始建造。
添加一个平面和一个盒子
>该平面是模拟的平坦基础。默认情况下,它是无限的,沿x-y轴平坦。
[Genesis] [INFO] Running on [NVIDIA A100-SXM4-40GB] with backend gs.cuda. Device memory: 39.56 GB. [Genesis] [INFO] ? Genesis initialized. Version: 0.2.1, Seed: None, Precision: 32.
接下来,我在场景中添加了一个盒子:
现在,我有一个简单的设置:一架平面作为地面,一个放在其顶部的盒子。
import os save_dir = "/content/simulation_frames" os.makedirs(save_dir, exist_ok=True)
为了捕获场景中发生的事情,我添加了一个相机。
>
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
>我将图像分辨率设置为320x240像素,这是测试的实用选择,并将相机定位在(3.5、2.0、2.5),从而使其从略微上方和侧面清晰地看到了场景。为了确保盒子保持在焦点中,我将相机的瞄准位于盒子中心的上方(0、0、0.5)。具有30度的视野(FOV),摄像机捕捉了场景的狭窄而专注的视角。
下一步是构建场景以准备模拟和渲染。
>GenesisException: No display detected. Use show_viewer=False for headless mode.
此步骤至关重要,因为创世纪使用了即时(JIT)汇编来优化仿真。当我构建场景时,创世纪:
>渲染和保存输出
为了可视化模拟,我呈现并逐帧保存了输出。每个帧都作为图像存储在Simulation_Frames目录中。这是我得到的输出:
scene = gs.Scene(show_viewer=False)
这些是我得到的图像:
pip install genesis-world
>如通过相机所示,盒子如何随着时间的推移而与平面相关。模拟以步骤运行,每个步骤都会改变框的位置,使其看起来像框在移动。
这个示例强调了创世纪如何模拟和显示简单的物理相互作用。尽管此设置是基本的,但它很好地了解了对象在场景中的行为方式。但是,您可以通过创世纪完全创建更复杂和现实的场景!我们将在下一部分中探索其中的一些功能。>
形状原语:
录制视频
运动任务的地形生成
>您还可以通过多种方式自定义模拟。您可以向对象添加逼真的纹理,从而使它们看起来更加栩栩如生。它还支持许多用于导入模型的文件格式,如果不支持格式,则可以要求将其添加。此外,您可以使用个性化文件和设置来创建自己的自定义对象形状(称为morphs)。
本教程提供了一个简单的示例,可以帮助您开始创世纪。我们介绍了基础知识,例如创建场景,添加对象和渲染输出,以说明这种功能强大的物理引擎如何工作。 但是,这只是创世纪可以做的事情的开始。有了正确的硬件,例如强大的GPU和足够的内存,就有很多可能性。您可以将其用于复杂的机器人模拟或创建用于AI培训的高质量数据集。尽管设置它可能很棘手,但它绝对是一种具有巨大潜力的工具!
>以上是创世纪物理引擎:设置创世纪的分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!