带蒙皮的网格渲染器 (Skinned Mesh Renderer) 组件可渲染可变形网格。可变形网格包括蒙皮网格(具有骨骼和绑定姿势的网格)、具有混合形状的网格以及运行布料模拟的网格。
要渲染常规网格,请改用网格渲染器 (Mesh Renderer) 和网格过滤器 (Mesh Filter)。
将可变形网格或具有可变形网格的模型添加到场景时,Unity 会将带蒙皮的网格渲染器 (Skinned Mesh Renderer) 组件添加至生成的游戏对象。
在 C# 代码中,SkinnedMeshRenderer 类表示 带蒙皮的网格渲染器 (Skinned Mesh Renderer) 组件。SkinnedMeshRenderer 类的大部分功能继承自渲染器 (Renderer) 类。因此,该组件与其他从 Renderer 继承的组件(例如线渲染器 (Line Renderer) 和轨迹渲染器 (Trail Renderer))有很多共同之处。
| 属性 | 描述 | |
|---|---|---|
| Bounds | 设置 Unity 用于判定网格是否超出屏幕外的包围体积。在模型 (Model) 文件中导入网格和动画时,Unity 会预先计算构成此包围体积的边界,并在场景 (Scene) 视图中将这些边界显示为模型 (Model) 周围的线框。 如果将在屏幕外时更新 Update When Offscreen 设置为真 (True),Unity 会在每一帧重新计算这些边界,并使用这些计算值来覆盖此属性。 此属性对应于 Mesh.Bounds API。 |
|
| BlendShapes | 存储 Unity 与网格中定义的混合形状一起使用的权重值。 | |
| Quality | 为可影响顶点的最大骨骼数量设置运行时上限。 Unity 导入网格时,Unity 可以使用从 1 到 32 不等的多个骨骼对每个顶点进行蒙皮。有影响力的骨骼数量越多,运动时的效果就越好。但是,这也会增加所需的计算资源,并因此可能会影响性能。 出于性能考虑,最好在导入时设置会影响顶点的骨骼数量,而不是使用运行时上限。为此,请使用模型导入设置 (Model Import Settings) 窗口的 Rig 选项卡并调整蒙皮权重 (Skin Weights) 设置。 除了使用此设置为每个组件设置运行时上限之外,还可以在“编辑 (Edit) > 项目设置 (Project Settings) > 质量 (Quality) > 其他 (Other) > 蒙皮权重 (Skin Weights)”下为项目设置全局限制。 此属性对应于 SkinnedMeshRenderer.quality API。 |
|
| Auto | 使用质量设置 (Quality Settings) > 蒙皮权重 (Skin Weights) 中设置的全局限制。 注意:如果导入了自定义数量的蒙皮权重,并且您希望允许使用四个以上有影响力的骨骼,则必须选择此选项并确保将蒙皮权重 (Skin Weights) 设置为无限制 (Unlimited)。 |
|
| 1 Bone | 每个顶点仅使用一个骨骼。 | |
| 2 Bones | 每个顶点使用最多两个骨骼。 | |
| 4 Bones | 每个顶点使用最多四个骨骼。要允许四个以上的骨骼来影响单个顶点,请使用自动 (Auto) 设置。 | |
| Update When Offscreen | 启用此选项可在每一帧计算包围体积,即使网格对任何摄像机都不可见。禁用此选项可在游戏对象在屏幕外时停止蒙皮,并在游戏对象再次可见时恢复蒙皮。 出于性能考虑,此选项默认禁用。 此属性对应于 SkinnedMeshRenderer.updateWhenOffscreen API。 |
|
| Mesh | 设置此渲染器使用的网格。网格应包含有效的绑定姿势和蒙皮权重,使用混合形状,或运行布料模拟。如果网格不使用任何此类技术,请考虑使用网格渲染器 (Mesh Renderer) 和网格过滤器 (Mesh Filter)。 对应于 SkinnedMeshRenderer.sharedMesh 属性。 |
|
| Root bone | 设置作为骨架“根”的变换。边界随此变换一起移动。 | |
| Rendering Layer Mask | 此属性确定 Unity 将此渲染器分配给哪个渲染层。可以使用此属性指定额外的特定于渲染的层遮罩。这会根据渲染器具有的遮罩过滤渲染器。 此属性对应于 Renderer.renderingLayerMask API。 Unity 仅在您使用可编程渲染管线时显示此属性。 |
|
| Renderer Priority | 按优先级对渲染器排序。首先渲染较小值,最后渲染较大值。 此属性对应于 Renderer.rendererPriority API。 Unity 仅在使用高清渲染管线 (High Definition Render Pipeline) 时显示此属性。 |
|
材质 (Materials) 部分列出了此组件使用的所有材质。
| 属性 | 描述 |
|---|---|
| Size | 材质列表中的元素数量。 如果减少元素数量,Unity 会删除列表末尾的元素。如果增加元素数量,Unity 会在列表末尾添加新元素。同时 Unity 会使用列表末尾元素所使用的材质来填充这些新元素。 |
| Element | 列表中的材质元素。您可以为每个元素分配一个材质资源。 默认情况下,Unity 会根据材质名称按字母顺序对列表进行排序。此列表是可重新排序的,当您更改元素的顺序时,Unity 会自动更新元素的编号。 |
注意:如果材质多于子网格,则 Unity 会使用剩余的每个材质逐一渲染最后一个子网格,使一个材质加在下一个材质之上。如果材质不是完全不透明的,则可以将不同的材质分层并创建有趣的视觉效果。但是,完全不透明的材质会覆盖之前的层,因此 Unity 应用于最后一个子网格的任何其他不透明材质都会对性能产生负面影响,且不会带来任何好处。
光照 (Lighting) 部分包含与光照相关的属性。
| 属性 | 描述 | |
|---|---|---|
| Cast Shadows | 指定当合适的光源 照射到此渲染器时,它是否以及如何投射阴影。 此属性对应于 Renderer.shadowCastingMode API。 |
|
| On | 当有投射阴影的光源照射到此渲染器时,它会投射阴影。 | |
| Off | 此渲染器不投射阴影。 | |
| Two-sided | 此渲染器投射双面阴影。这意味着单面物体(如平面或四边形)即使光源位于网格的背面,也能投射阴影。 对于支持双面阴影的烘焙全局光照或 Enlighten 实时全局光照,材质必须支持双面全局光照。 |
|
| Shadows Only | 此渲染器投射阴影,但渲染器本身不可见。 | |
| Receive Shadows | 指定 Unity 是否显示投射到此渲染器上的阴影。 此属性仅在场景启用了烘焙全局光照或实时全局光照 时生效。 此属性对应于 Renderer.receiveShadows API。 |
|
| Contribute Global Illumination | 将此渲染器纳入全局光照 (Global Illumination, GI) 的计算中,该计算在烘焙时进行。 此属性仅在场景启用了烘焙全局光照 或实时全局光照 时生效。 启用此属性后,将在游戏对象的静态编辑器标志 中设置 Contribute GI 标志。它对应于 StaticEditorFlags.ContributeGI API。 |
|
| Receive Global Illumination | 指定 Unity 是否从烘焙光照贴图或运行时光照探针向此渲染器提供全局光照数据。 此属性仅在您启用 Contribute Global Illumination 时后可编辑。此属性仅在场景启用了烘焙全局光照 或实时全局光照 时生效。 此属性对应于 MeshRenderer.receiveGI API。 |
|
| Lightmaps | Unity 从光照贴图向此渲染器提供全局光照数据。 | |
| Light Probes | Unity 从场景中的光照探针 向此渲染器提供全局光照数据。 | |
| Prioritize Illumination | 启用此属性可确保此渲染器始终被包含在 Enlighten 实时全局光照计算中。这使得渲染器能够受到远处发光体的影响,即使这些发光体通常因性能原因被排除在全局光照计算之外。 此属性仅在以下条件下可见:游戏对象的静态编辑器标志 中启用了 Contribute GI,项目使用内置渲染管线 (Built-in Render Pipeline),并且场景启用了实时全局光照。 |
|
探针 (Probes) 部分包含与光照探针 (Light Probe) 和反射探针 (Reflection Probe) 有关的属性。
| 属性 | 描述 | |
|---|---|---|
| Light Probes | 设置此渲染器如何从光照探针 系统接收光照。 此属性对应于 Renderer.lightProbeUsage API。 |
|
| Off | 渲染器不使用任何插值光照探针。 | |
| Blend Probes | 渲染器使用一个插值光照探针。这是默认值。 | |
| Use Proxy Volume | 渲染器使用插值光照探针的 3D 网格。 | |
| Custom Provided | 渲染器从材质属性块 提取光照探针着色器 uniform 值。 | |
| Proxy Volume Override | 设置对另一个带有光照探针代理体积组件的游戏对象的引用。 仅当光照探针设置为使用代理体积 (Use Proxy Volume) 时,此属性才可见。 |
|
| Reflection Probes | 设置渲染器如何从反射探针系统接收反射。 此属性对应于 Renderer.probeAnchor API。 |
|
| Off | 禁用反射探针。Unity 将天空盒用于反射。 | |
| Blend Probes | 启用反射探针。混合仅在反射探针之间发生。在室内环境中,如果角色可能在具有不同光照设置的区域之间过渡,此设置会很有用。 | |
| Blend Probes and Skybox | 启用反射探针。混合发生在反射探针之间或反射探针与默认反射之间。这对于室外环境很有用。 | |
| Simple | 启用反射探针,但存在两个重叠的探针体积时,反射探针之间不会发生混合。 | |
| Anchor Override | 设置变换组件,Unity 在使用光照探针 或反射探针 系统时,将使用该组件来确定插值位置。默认情况下,这个位置是渲染器几何体的包围盒中心。 此属性对应于 Renderer.probeAnchor API。 |
|
光线追踪 (Ray Tracing) 部分包含与光线追踪效果相关的属性。
仅当显卡支持光线追踪并在播放器设置窗口中将项目升级到使用 DirectX 12 时,才显示此部分。
除非通过以下方式之一配置项目,否则这些属性无效:
| 属性: | 功能: | |
|---|---|---|
| 光线追踪模式 (Ray Tracing Mode) | 指定 Unity 在光线追踪期间是否以及多久更新一次此渲染器。更频繁的更新会增加渲染时间。 | |
| Off | Unity 将此渲染器排除在光线追踪计算之外。例如,此选项会导致渲染器不会出现在光线追踪反射中。 | |
| Static | 如果游戏对象的变换或网格几何体发生更改,Unity 不会更新光线追踪加速结构。这意味着光线追踪效果在运行时不会改变。 | |
| 动态变换 (Dynamic Transform) | 如果游戏对象的变换发生更改,Unity 会更新光线追踪加速结构,但如果网格几何体发生更改,则不会更新。这是网格渲染器的默认值。如果您的项目使用 HDRP,此设置与动态几何体相同,因为 HDRP 每帧都会重新构建加速结构。 | |
| 动态几何体 (Dynamic Geometry) | Unity 使用游戏对象的变换和网格几何体每帧更新光线追踪加速结构。这是蒙皮网格渲染器的默认值。 | |
| 程序化几何体 (Procedural Geometry) | Unity 使用交叉着色器而不是网格过滤器组件中的网格,以程序化方式渲染此渲染器。 | |
| 加速结构生成标志 (Acceleration Structure Build Flags) | 指定此渲染器是否覆盖在创建光线追踪加速结构时指定的默认构建标志。 | |
其他设置 (Additional Settings) 部分包含额外的属性。
| 属性 | 描述 | |
|---|---|---|
| Skinned Motion Vectors | 启用此选项将对网格蒙皮数据进行双重缓冲,以便 Unity 能够插入蒙皮运动并将其置于运动矢量纹理中。这会使用更多的 GPU 内存,但会带来更正确的运动矢量。 | |
| Dynamic Occlusion | 启用 Dynamic Occlusion 后,当一个渲染器被静态遮挡物阻挡在摄像机的视野之外时,Unity 的遮挡剔除 系统将剔除该渲染器。如果未启用 Dynamic Occlusion,即使渲染器被静态遮挡物阻挡,系统也不会将其剔除。 默认情况下启用 Dynamic Occlusion。如果需要实现如绘制墙后角色轮廓的效果,可以禁用此选项。 |
|
SkinnedMeshRenderer