Nvidia Isaac Sim搭建仿真环境 入门教程 2024(4)

Nvidia Isaac Sim 入门教程 2024

版权信息

Copyright 2023-2024 Herman Ye@Auromix. All rights reserved.

This course and all of its associated content, including but not limited to text, 
images, videos, and any other materials, are protected by copyright law. 
The author holds all rights to this course and its contents.

Any unauthorized use, reproduction, distribution, or modification of this course 
or its contents is strictly prohibited and may result in legal action. 
This includes, but is not limited to:
Copying or distributing course materials without express written permission.
Reposting, sharing, or distributing course content on any platform without proper attribution and permission.
Creating derivative works based on this course without permission.
Permissions and Inquiries

If you wish to use or reproduce any part of this course for purposes other than personal learning, 
please contact the author to request permission.

The course content is provided for educational purposes, and the author makes no warranties or representations 
regarding the accuracy, completeness, or suitability of the course content for any specific purpose. 
The author shall not be held liable for any damages, losses, 
or other consequences resulting from the use or misuse of this course.

Please be aware that this course may contain materials or images obtained from third-party sources. 
The author and course creator diligently endeavor to ensure that these materials 
are used in full compliance with copyright and fair use regulations. 
If you have concerns about any specific content in this regard, 
please contact the author for clarification or resolution.

By enrolling in this course, you agree to abide by the terms and conditions outlined in this copyright notice.

学习目标

  • 熟悉Isaac Sim中物理场景的创建与处理
  • 熟悉Isaac Sim中仿真对象的创建与处理
  • 熟悉Isaac Sim中USD文件的创建与处理

难度级别

初级中级高级

预计耗时

50 mins

学习前提

对象类型状态
Ubuntu22.04操作系统软件已确认
Isaac Sim环境软件已配置
Isaac Sim基本概念知识已了解
Isaac Sim图形界面知识已了解

在进行机器人仿真时,搭建一个相对真实的仿真环境是很重要的。一个完整的仿真环境不仅能提高仿真的精确度,还能提供更为直观的可视化效果。
接下来,我们将讨论如何创建这样一个场景。

物理环境

添加物理场景

在仿真中,物体通常受到各种物理力,时间也在不断地流逝,通常来说,世界需要一般的物理模拟属性,例如重力和物理时间的步进,依次点击Create->Physics->Physics scene来添加物理场景
在这里插入图片描述

随后,在Property->Physics里修改这个物理环境的基本属性,因为这是简单的测试,所以不需要GPU的强大能力,取消选中Enable GPU Dynamics,并将Broadphase Type改为MBP

注意:如果你对这些概念感到疑惑,可以参考相关知识章节。

在这里插入图片描述

添加地面

与其他仿真软件类似,Isaac Sim 也需要在仿真场景中添加地面。即使设置了重力等物理环境参数,并在开始仿真前将物体置于合适的位置,如果场景中缺乏地面,物体将会穿过地平面持续坠落。

依次点击Create->Physics->Ground Plane来添加一个地面
在这里插入图片描述

可以看到地面被添加了,通过鼠标中间缩放,发现地面只有一部分,这是因为超出范围的地面不需要渲染,以此减少性能开销,但即使是在不可视的地面,依然会有碰撞属性,物体在坠落到地面时不会再继续向下坠落。
在这里插入图片描述

添加光照

每个Stage都带有默认的环境光照(defaultLight),否则看不见东西。
此时我们来尝试添加另一个光照,来感受光照对于环境和物体的影响。
依次选择Create->Light->Dome Light来添加一个均匀环境光
DomeLight 模拟了从所有方向照射到场景中的均匀光源,类似于天空光。
DomeLight 通常用于创建自然的、全方位的环境照明效果,以提升场景的真实感。

在这里插入图片描述

因为默认光照较强,此时在属性面板中将新添加的均匀环境光的颜色更改为浅绿色,这样可以使得测试对比更清晰明了。
在这里插入图片描述

仿真对象

添加仿真物体

在菜单中创建一个普通的立方体(Cube Mesh)作为搭建仿真环境中的测试仿真对象。

在这里插入图片描述
再添加一些其他的物体,并且将这些物体随意放置,可以让其中一些悬空,方便观察在重力作用下从初始位置坠落到地面,和地面发生接触的过程。

在这里插入图片描述

添加刚体和碰撞体属性

尝试点击Isaac Sim左侧的工具栏中的Play来使仿真开始步进。

在这里插入图片描述

令人疑惑的是,这些物体并没有按预料中的方式下坠,这是因为虽然设置了物理环境,但并没有设置仿真物体自身的物理属性,因此它们并不遵循物理规律。

接下来,为这些物体添加带有预设碰撞体配置的刚体属性(Rigid Body with Colliders Preset)

添加Rigid Body with Colliders Preset会为对象引入两个新的属性API,一个是静态碰撞体(Static collider),另一个是带有动力学属性的刚体(dynamics-related rigid body)。

注意: 对于仅有碰撞体属性而不具备刚体属性的对象,将会被视作质量无限大,速度无限小的对象,一个非常简单的静态碰撞体案例是物理地面,您可以使用Create > Physics > Ground Plane将其添加到场景中。
而对于仅有刚体属性而没有碰撞体属性的对象,可以具备线速度、角速度等,在仿真世界中运动,但像幽灵一般不与其他碰撞体发生碰撞行为。

Stage中批量选中物体,并添加Physics里的Rigid Body with Colliders Preset
在这里插入图片描述

观察添加完刚体和碰撞体的方块的属性面板,在Physics下能够发现新增的RigidBodyCollider属性,可以发现刚体属性所带来的一些更细的如角速度、线速度的新属性,以及以Covex Hull(凸包)等方式进行碰撞体近似的碰撞体属性。
在这里插入图片描述
依次选中GUI界面中的眼睛->Show By Type->Physics->Colliders->All来在视口Viewport中启用碰撞体可见模式,观察绿色及紫色线条,这是Isaac Sim对于仿真对象的碰撞体的可视化。
在这里插入图片描述
此时再次点击Isaac Sim左边的Play按钮,将会观察到悬空的物体在时间开始流动时不断下坠,直到撞击地面。
在这里插入图片描述

添加物理材质

对于需要涉及到摩擦力等的问题,例如箱子在斜坡上滑动,机器人夹爪夹取物体,仿真器给定的物理材质在其中起到了重要的作用。
如果没有添加物理材质,将会使用Physics Scene中的物理材质属性,或者是使用默认的物理材质配置(dynamic friction = static friction = restitution = 0.5),可以通过将物理材质绑定到物理场景(Physics Scene)来更改默认材质属性。

依次点击Create->Physics->Physics Material来创建一个物理材质
在这里插入图片描述

在添加物理材质时会提示不同类型材质的选项,"rigid body material""deformable body material""PBD Particle Material"是可选的三种类型。

  • Rigid Body Material(刚体材质)

    • 刚体材质用于模拟刚性物体,这些物体不会发生形变,其形状在运动过程中保持不变。
    • 刚体通常用于模拟硬物体,如石头、金属、木头等。
    • 物体之间的碰撞会产生弹性反应,而且刚体通常不会发生变形。
  • Deformable Body Material(可变形材质)

    • 可变形材质用于模拟具有弹性的物体,它们可以发生形变,如橡胶、布料、软泥等。
    • 这些物体在受到外部力或碰撞时可以发生形状的变化,通常会遵循弹性和塑性行为。
    • 通常需要更复杂的物理模型来模拟可变形物体的行为,如有限元分析。
  • PBD Particle Material(基于粒子的动力学材质)

    • PBD(Position-Based Dynamics)是一种用于模拟可变形和弹性物体的方法,通常用于模拟细粒度的物体,如液体、布料等。
    • PBD通过在模拟中使用一组粒子来表示物体,并应用基于位置的动力学来模拟其行为,可以处理大变形和复杂物体。
    • PBD通常比传统的有限元分析更高效,但也可能缺少精确性。

在这里插入图片描述

在这里,方块等物体被视作普通的刚体,因此在PhysicsMaterial的资产中选择Rigid Body Material
在新引入的PhysicsMaterialProperty面板里的Physics里将会发现刚体材料相关的一些属性,例如动摩擦力、静摩擦力等,这些属性可以被设置。

在这里插入图片描述

随后我们将新引入的PhysicsMaterial赋予给方块Cube,找到方块Cube的属性面板Physics下的Physics Materials on selected models,并选中新引入的PhysicsMaterial,这样,方块就具备了刚体的物理材质属性。

在这里插入图片描述

关于物理材质更深入的内容,可参考Omniverse物理材质

添加外观材质

除了物理材质,物体也可以添加用于外观展示的材质
依次选中Create->Material->OmniPBR来添加一个OmniPBR材质,可以理解为普通的外观材质。

注意:类似OmniPBR材质的术语,将在相关知识章节部分补充

在这里插入图片描述

OmniPBR材质的Property里有海量的可调选项,此处就以简单地修改颜色为例。
选中OmniPBR->Property->Albedo->Albedo color修改为你喜欢的颜色。
在这里插入图片描述
随后将Stage中这个材质拖动到场景物体或者通过选中物体并在属性面板的Materials on selected models中选择材质,即可赋予外观的材质。

在这里插入图片描述
同理,你可以利用MDL语言或者现有的Omniverse材质包,为物体添加更为真实的外观材质。

在这里插入图片描述

文件的保存与使用

保存/打开USD文件

在菜单的File->Save可以保存和打开USD文件,现在试试保存刚才所创建的仿真场景。

在这里插入图片描述

保存地址可以放在诸如本地Nucleus服务器上或者本机的其他位置。
在这里插入图片描述

对于使用了多个外部素材的USD文件,建议将它所涉及的素材全部打包到一个文件夹内
通过右键USD文件并选中Collect Asset来收集相关素材并打包,以免在迁移时发生部分素材的缺失,这方便了在其他机器环境下使用情况。

在这里插入图片描述

使用USD文件

在这里插入图片描述

在Nvidia Isaac Sim中,官方提供了许多USD资产,将其他USD文件作为引用的步骤如下图所示:

  • 选择菜单栏中的 File
  • 在下拉菜单中选择 Add Reference 选项
    添加引用图片
    一旦加载完成,引用的USD文件将以与文件名相同的Prim名称加载到舞台上。这意味着整个USD文件的内容,包括PhysicsScene、defaultLight和GroundPlane等内容,都会被加载到新的舞台上。
    使用 Reference 的主要优势在于文件的可复用性和场景的模块化管理。多个场景可以引用同一个 USD 文件,当引用的 USD 文件被更新时,所有引用它的场景都会自动反映这些变化。

注意: 这可能导致混淆,特别是当您需要加载多个USD引用时,每个引用包含自己的PhysicsScenes和defaultLights。由于这些内容是通过Add Reference加载的,被视作是一个整体,您不能直接在新的Stage上删除它们。
同时,在原始USD文件中删除PhysicsScene、defaultLight和GroundPlane等内容也不是一个理想的解决方案,因为这可能会导致在创建USD文件时更加复杂。

为了更好地管理加载的USD文件和避免加载原始世界的环境内容,USD中存在名为defaultPrim的概念,在一个USD文件被其他USD文件引用时,只有defaultPrim部分会被拉取。
因此,在制作USD时,可以考虑当它被引用时,您希望它的哪些内容被引出(例如机器人本体),哪些内容不被引出(例如测试机器人本体时所用的周遭环境),具体的步骤类似:

  1. 创建一个名为 my_robot 的新 Xform,用于容纳机器人的相关组件。
  2. 将所需的机器人的所有组件拖动到 my_robot 这个 Xform 下。
  3. 在舞台中点击对象,右键将 my_robot 设置为新的defaultPrim

这样,当您在其他舞台上将机器人作为引用导入时,只会导入机器人的主体,而不会包含原始世界的环境内容。这一步确保了您只加载了所需的机器人部分,而不会混淆或加载多余的内容。

在这里插入图片描述

结尾语

恭喜你,已经学习了Isaac Sim的仿真场景的相关内容,了解了如何创造一个带有物理环境、材质、光照之类的更加真实的世界,并能够自主搭建一个简单的物理仿真场景。
在下一章节,你将学习Isaac Sim的机器人和传感器组装。
本章在后面的部分还提供了可选的个人练习和相关知识小章节,如果你希望更深入地掌握本章节学习的内容,请查看后面的内容。

如需企业内训定制、项目开发合作或个人学习支持,请联系:hermanye233@icloud.com

个人练习(可选的)

练习目标

制作出一个简单的两轮机器人,由一个Cube通过拉伸操作得到身体,两个Cylinder作为左右轮,并为这个机器人制作出简单的测试环境,并将他们保存作为USD文件
在这里插入图片描述

练习参考

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关知识(可选的)

注意: 限于作者所涉及的领域,以下内容可能存在不准确或者谬误,仅供参考,欢迎指正。

  • Rigid Body 刚体
    刚体(Rigid Body)在物理学和工程学中,是指一种理想化的物体,其内部任意两点之间的距离无论受到什么外力都保持不变。换句话说,刚体不会变形,不会弯曲、拉伸或压缩。刚体是经典力学中的一个基本概念,用于描述和分析物体的运动和力学行为。
    刚体可以由无数个质点组成,每个质点的位置相对于刚体的质心都是固定的,它的运动可以分解为平移运动和旋转运动。平移运动是刚体的所有点都以相同的速度和方向移动;旋转运动是刚体绕着某个固定轴旋转。它的惯性矩描述了其对旋转运动的抵抗能力,取决于刚体的质量分布和旋转轴的位置。
    在游戏引擎中,如Unity或Unreal Engine或者仿真器中,将刚体属性添加到对象,可以使其具备一些物理性质。

  • Collider 碰撞体
    碰撞体(Collider)是一种用于物理模拟的组件,它定义了物体的形状和物理特性,使物体在模拟环境中能够发生碰撞和相互作用。Collider通常用于确保虚拟物体不会互相穿透,并能产生现实中的物理行为,如碰撞、反弹等。
    碰撞体预设(Colliders preset)是预定义的碰撞体配置,包含了常用形状和物理参数设置。使用碰撞体预设可以简化碰撞体的创建过程,让用户快速应用常见的碰撞体类型,比如Box Collider(盒子碰撞体)、Sphere Collider(球形碰撞体)、Mesh Collider(网格碰撞体)等。

  • Collsion Approximation 碰撞体近似
    碰撞体近似指的是使用简化的几何形状来近似物体的实际形状,以便于更高效地进行碰撞检测和物理模拟。直接使用Mesh计算碰撞虽然精度高,但是对于复杂物体开销非常大,碰撞体近似方法通过减少计算复杂度,提高模拟的性能,同时保持合理的物理行为。

  • Convex Hull 凸包近似法
    Convex Hull(凸包)是计算几何中的一个基本概念。它是指一个给定点集的最小凸多边形或多面体,包含了点集中所有的点,并且任何两点之间的连线都在这个凸多边形或多面体的内部或边界上。
    凸形状的碰撞检测算法简单高效,比非凸形状快得多,并且在物理模拟中有较小的误差积累。但凸包仅能提供一个粗略的外部近似,对于复杂形状或内部凹陷较多的物体,精度较低,比如机器人的夹爪,可能会被试做一团夹爪,从而在精细灵巧操作上表现不佳。
    想象一下你有一堆钉子随机地插在平面上的一个木板上,每个钉子代表一个点。然后你用一根橡皮筋围绕这些钉子,把橡皮筋拉紧,使其尽可能地包住所有的钉子。橡皮筋最终形成的形状就是这个点集的凸包。
    在三维空间中,凸包就像是你用一张伸展的薄膜包裹住一堆散落的球(代表点)。薄膜在各个方向上紧紧包住这些球,形成的就是三维点集的凸包。

  • Convex Decomposition 凸分解近似法
    Convex Decomposition (凸分解)是一种将复杂的几何形状分解成一组较小的凸形状的方法。通过将一个复杂的非凸形状分解成多个凸多边形或凸多面体,可以更高效地进行物理模拟和碰撞检测。
    将复杂形状分解为多个凸形状,凸形状的碰撞检测算法简单且高效。
    但对于非常复杂或高度不规则的形状,凸分解可能仍然无法完美近似。
    想象一下你有一块形状复杂的大饼干(复杂的非凸形状),上面有许多凹陷和凸起,它不是一个典型的整体的适合用粗略的凸包解决的三维结构。
    于是你使用小刀持续切割,直到把整个大饼干分解成许多小块,并且使得每一块都是规则的形状(凸形状),这些均为小块凸形状的饼干块能够近似地代表大饼干的复杂形状。

  • SDF 有符号距离场近似法
    有符号距离场 (SDF) 碰撞检测功能允许模拟使用高细节三角形网格作为碰撞形状的动态和运动刚体。Nuts and Bolts和Chair Stacking等演示利用 SDF 功能来模拟高度非凸形状的动态对象之间的接触丰富的交互。SDF 可以帮助大大加快动态三角形网格之间的碰撞检测速度,并且是动态对象上三角形网格碰撞器的必要条件,使得在处理复杂形状时能够获得更高的精度和效率。
    SDF Mesh可以精确描述复杂几何体的表面和体积,但生成和优化SDF网格需要大量的预处理时间和计算资源,在使用时也有较大的内存占用。
    有符号距离函数是一个数学函数,对于三维空间中的每一个点,该函数返回该点到最近表面的有符号距离,通过正/负/零值来代表点在表面的外部/内部/表面上。
    关于SDF更详细的说明,可查看PhysX SDF Collision

  • PCM 碰撞系统算法
    PCM(Persistent Contact Manifold)是一种基于接触持久化的算法,它在物体碰撞时,通过保持接触信息来提高后续碰撞检测的效率。它保留了物体之间的接触信息,后续的碰撞检测可以利用这些信息,从而减少计算量。对于持续接触的物体,如堆叠的物体或滑动接触,能够提供更加稳定的模拟结果。

  • SAT 碰撞系统算法
    SAT(Separating Axis Theorem)是一种基于分离轴的碰撞检测算法,通过检查可能的分离轴来确定两个凸多边形是否发生碰撞。算法相对简单且直观,适合处理凸形物体的碰撞检测。对于复杂场景或非凸多边形,SAT 可能需要更多的计算资源。

  • Solver求解器
    物理求解器通过迭代解决约束(关节、接触等)来实现物理上准确的解决方案,确保物体不会重叠或关节不会断开。可以使用场景API来配置求解器。求解器提供了两种不同的策略:PGS(Projected Gauss-Seidel)和TGS(Temporal Gauss-Seidel)。PGS收敛速度较慢,但相比TGS不易发生过冲。过冲是指在复杂碰撞场景中,物体获得了过大的速度,即使不应该发生这种情况。求解器有多种设置选项。

迭代次数定义了求解器在一个时间步长内可以进行多少次迭代来获取物理状态。更多的迭代次数会带来更准确的结果,但也需要更长的计算时间。位置迭代确保物体不会重叠,而速度迭代避免物体在相互作用时人为地增加速度。对于TGS,建议使用非常少的速度迭代(大约1次),但TGS求解器受益于“每次迭代启用外部力”选项,因为它可以略微改善收敛性。

  • TGS 求解算法
    TGS(Temporal Gauss-Seidel) 是一种结合时间步长方法和 Gauss-Seidel 迭代的数值求解方法,主要用于精确度要求较高的动力学模拟,如柔性体和流体动力学。其优点是收敛速度较快,能够更好地处理复杂约束问题,提供更高的稳定性和精度。缺点是计算复杂度较高,适合离线计算或对精度要求较高的模拟场景。
    这种求解器提供了更好的收敛性和对高质量比的更好处理,在修正穿透时能最小化引入的能量,并提高关节对过度拉伸的抵抗力。当使用PGS求解器时遇到模拟中的一些不稳定行为时,通常可以使用这种求解器来帮助解决问题。
    更深入的信息可以参考Unity文档Omniverse求解器说明

  • PGS 求解算法
    PGS(Projected Gauss-Seidel) 是一种迭代方法,用于求解物理模拟中的约束优化问题,特别是在刚体动力学中的碰撞和接触处理中。其主要优点是计算复杂度较低,适合实时应用。然而,PGS 的收敛速度较慢,在处理复杂约束时可能会出现不稳定性。它常用于需要快速响应的场景,如游戏物理引擎,是默认的 PhysX 解算器。

  • CCD 连续碰撞检测
    连续碰撞检测(Continuous Collision Detection)是一种方法,用于在仿真中精确检测物体在连续时间步长内是否发生碰撞,而不仅仅是在离散的时间步长上进行检测。这样可以避免快速运动的物体“穿越”其他物体的问题,提供更精确和真实的模拟效果。启用CCD可以大幅提高碰撞检测的准确性,但也可能增加计算开销。

  • Broad Phase 粗略阶段
    在物理引擎和碰撞检测系统中,Broad Phase(粗略阶段)是碰撞检测过程的第一个阶段。其主要目的是快速筛选出可能发生碰撞的物体对,抛弃不可能发生碰撞的情况,减少后续需要进行详细碰撞检测的物体对数量,从而提高整体碰撞检测的效率,这对于处理大量物体的仿真非常重要,因为详细碰撞检测是计算密集型的操作。
    Broad Phase的任务是识别可能碰撞的物体,而不是确认它们是否确实碰撞。
    Broad Phase常见的方法包括基于空间分区的算法(如网格法)、层次包围体法(如八叉树或四叉树)、基于排序和剔除的算法(如 Sweep and Prune)等。
    举例来说,如果你想模拟整个世界的人口,就需要检查每个代表人的对象是否与其他人发生碰撞。但显然,伦敦的人不可能与北京的人发生碰撞,因此没有必要检查这两个城市的所有人之间的碰撞。Broad Phase阶段会尝试将世界分成离散的区域,其中我们知道这些区域不会重叠,因此区域内的物体也不会发生碰撞。这样可以大大减少需要进行详细碰撞检测的对象数量,从而提高性能。
    具体细节可参考Nvidia physX 中的说明
    对于Broad Phase更深入的理解可参考Newcastle University相关研究

  • Narrow Phase 精细阶段
    Narrow Phase(精细阶段)是碰撞检测过程的第二个阶段,紧随 Broad Phase(粗略阶段)之后。在 Narrow Phase 中,对在粗略阶段筛选出的可能发生碰撞的物体对进行精确的碰撞检测。其主要目的是计算物体之间的实际接触点、碰撞深度和碰撞响应,由于Broadphase已经大大减少了需要检测的物体对的数量,这一步通常较为高效。
    Narrow Phase使用更复杂和精细的算法,如 GJK(Gilbert-Johnson-Keerthi)算法、EPA(Expanding Polytope Algorithm)、SAT(Separating Axis Theorem)等。

  • GPU 粗略阶段算法
    PhysX 中 GPU 加速的 Broad Phase 算法通常采用的是基于栅格化的策略。这种算法的核心思想是将整个场景划分成多个小的栅格单元,然后在每个栅格单元内进行碰撞检测。
    更细地说,它将三维空间划分成一系列小的栅格单元。每个单元包含一定数量的物体,物体的位置决定了它们被分配到哪个栅格,随后将所有物体根据其位置分配到对应的栅格单元中,并在每个栅格单元内,进行细粒度的碰撞检测。
    对于跨越栅格边界的物体,这些物体可能与多个栅格单元中的物体发生碰撞。需要对这些物体进行额外的检测以确保碰撞检测的准确性。

  • MBP 粗略阶段算法
    MBP (Multi Box Pruning)是一种基于轴对齐包围盒(AABB)的碰撞检测算法,通过多重剔除法进行 Broadphase 处理。
    MBP 将物理世界划分为多个轴对齐的包围盒(AABB,Axis-Aligned Bounding Boxes),并对这些包围盒进行管理和检测。
    它在常规场景中表现良好,特别是在动态场景中,能够快速剔除不可能碰撞的物体。但在极大规模的场景中,例如成百上千机器人与刚体的场景,可能不如 GPU 加速效果好。

  • SAP 粗略阶段算法
    SAP(Sweep and Prune)是一种常用的 Broadphase 碰撞检测算法,通过在各个坐标轴上排序和检查重叠来进行碰撞检测。
    SAP将所有物体的轴对齐包围盒(AABB)的起始和结束点(即最小和最大坐标)分别投影到某个坐标轴上。随后对这些投影点进行排序,通常按 X 轴进行排序。可以对每个轴进行排序以提高精度,但通常一个轴就足够了。然后依次检查排序后的投影点,找出所有重叠区间。
    它在物体移动不频繁或物体分布较为均匀的场景中表现良好。但在物体频繁移动的动态场景中,性能可能不如 MBP 或 GPU。

  • Omni PBR材质
    Omni PBR材质是一种基于物理的渲染(Physically-Based Rendering,PBR)材质,用于实现更逼真的图形渲染效果。PBR是一种图形渲染技术,旨在模拟光线如何与物体表面交互以产生更真实的视觉效果。这种技术考虑了光的物理特性,包括漫反射、镜面反射、折射等,以在虚拟环境中模拟材质的外观和光照交互。

  • 33
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值