US3S10L1——网格、网格渲染器、材质、着色器等之间的关系
US3S10L1——网格、网格渲染器、材质、着色器等之间的关系
网格(Mesh)
网格是一个 3D 对象的几何数据。它由顶点、边和面组成。网格描述了对象的形状和结构,定义了3D模型的轮廓。
网格中包含了模型的关键数据,比如:顶点、法线、切线、纹理坐标、顶点颜色、骨骼权重、骨骼索引、网格边界等等信息
例如,这个枪械模型下的 GunTwo,就是一个网格:
我们在 Shader 中使用的模型的数据就来自于 Mesh,其中:
- Unity 中不带骨骼动画的模型网格数据一般在 Mesh Filter(网格过滤器)组件中进行关联
- 带骨骼动画的模型网格数据一般在 Skinned Mesh Renderer(蒙皮网格渲染器)中进行关联
网格渲染器(Mesh Renderer)
网格渲染器是 Unity 中的一个组件,用于将网格绘制到屏幕上,它主要用来:
-
引用一个网格对象来获取几何数据
MeshRenderer
组件会自动寻找同一GameObject
上MeshFilter
组件中的网格(Mesh
)并将其渲染出来
-
引用一个或多个材质,用于定义对象的外观
一般不带骨骼动画的模型都使用网格渲染器来进行渲染
比如:游戏中的建筑物,箱子,地面等等不需要骨骼动画的模型
关于 Mesh Renderer 的具体参数,详见:Mesh Renderer 组件 - Unity 手册
-
Materials 材质
该属性允许你指定一个或多个材质(Material),它们定义了网格在场景中的外观。
-
Lighting 光照相关
-
Cast Shadows 投射阴影,控制网格是否能够投射阴影
- On:总是投射阴影。
- Off:从不投射阴影。
- Two Sided:双面投射阴影,适用于非封闭物体。
- Shadow Only:仅当计算阴影时才考虑网格。
-
Receive Shadows 接收阴影,决定是否接收其他对象投射的阴影
-
Global Illumination 全局光照(GI)相关
Global Illumination(简称GI)是全局光照,是一种渲染技术,旨在模拟光线在场景中反弹的物理行为,包括直接光和间接光的效果。
仅在为该场景启用了烘焙全局光照(Baked Global Illumination)或 Enlighten 实时全局光照(Enlighten Realtime Global Illumination)时,以下属性才有作用。
-
Contribute Global Illumination 添加到全局光照内
将此渲染器包含在全局光照计算中,这些计算是在烘焙时进行的
启用此属性会在
GameObject
的静态编辑器标志(Static Editor Flags)中启用“添加GI”(Contribute GI)标志。它对应于StaticEditorFlags.ContributeGI
API。 -
Receive Global Illumination 接收全局光照
让 Unity 从 烘焙的光照贴图 或者从 运行时光照探针 向此渲染器提供全局光照数据。此属性仅在启用了 Contribute Global Illumination 的情况下,此属性才可编辑。
- Lightmaps 从烘焙的光照贴图接收全局光照
- Light Probes 从运行时光照探针接收全局光照
-
-
-
Lightmapping 光照贴图相关(使用光照贴图接收全局光照才显示)
仅当上文中的 Receive Global Illumination(接收全局照明)设置为 Lightmaps(光照贴图)时,此部分才可见。
-
Scale in Lightmap 在光照贴图中缩放
指定此渲染器的 UV 在光照贴图中的相对大小
值为 0 意味着该渲染器不会被光照贴图处理,但它仍然会对场景中的其他渲染器的光照做出贡献。大于1.0的值会增加为此渲染器使用的像素数量(即光照贴图分辨率),而小于1.0的值则会减少它。
可以使用这个属性来优化光照贴图,使得重要的和细节丰富的区域能够更准确地被照亮。例如,一个孤立的建筑如果有平坦且暗色的墙面,可以使用较低的光照贴图缩放比例(小于1.0),而一组紧密排列、色彩鲜艳的摩托车则需要较高的缩放比例值。
-
Stitch Seams 是否启用光照贴图接缝缝合
为此渲染器启用 Lightmap seam stitching(光照贴图接缝缝合)
-
Lightmap Parameters 为此渲染器选择或创建光照贴图参数资源
-
-
Probes 探针相关
-
Light Probes 光照探针
设置网格如何与光照探针(Light Probes)交互以获得间接光照
- Off:不使用任何插值光照探针
- Blend Probes:使用一个插值光照探针(默认)
- Use Proxy Volume:使用代理体积
- Custom Provided:自定义条件
-
Reflection Probes 反射探针
确定网格是否以及如何使用反射探针(Reflection Probes)
- Off:不使用反射探针
- Blend Probes:混合周围反射探针
- Blend Probes and Skybox:混合反射探针和天空盒
- Simple:使用反射探针,但不混合
-
Anchor Override 锚点覆盖
重新设置 Unity 在使用光照探针(Light Probes)或反射探针(Reflection Probes)系统时用来确定插值位置的
Transform
。
默认情况下,这是渲染器几何体的边界框中心。
-
-
Additional Settings 其他设置
-
Motion Vectors 运动矢量
控制是否使用运动矢量来跟踪此渲染器的每像素屏幕空间运动,这对于后期处理效果,例如运动模糊很重要。
并非所有平台都支持运动矢量。有关更多信息,请参阅 SystemInfo.supportsMotionVectors。
- Camera Motion Only:仅使用摄像机运动来跟踪
- Per Object Motion:使用特定过程跟踪此渲染器的运动
- Force No Motion:不跟踪运动
-
Dynamic Occlusion 动态遮挡剔除
启用或禁用动态遮挡剔除,动态遮挡剔除可以帮助优化性能。
但如果需要在墙后绘制角色轮廓等效果,则此项需要禁用
-
蒙皮网格渲染器(Skinned Mesh Renderer)
蒙皮网格渲染器是一种特殊的网格渲染器,用于处理带有骨骼动画的网格。
它不仅处理网格的几何数据,还处理骨骼和权重,允许网格根据骨骼动画进行变形。
使用蒙皮网格渲染器的对象不需要再使用 MeshFilter
组件,它可以直接关联对应的网格信息
一般带有动画的模型都使用蒙皮网格渲染器来进行渲染,比如:游戏中的角色、怪物、机关等等
关于 Skinned Mesh Renderer 的具体参数,详见:Skinned Mesh Renderer component - Unity 手册
-
Bounds 边界
设置 Unity 用于确定网格何时离开屏幕的包围盒边界。在 Model 文件中导入网格和动画时,Unity 会预先计算这个边界,并在 Scene 视图中将边界显示为 Model 周围的线框。
如果将 Update When Offscreen 设置为 True,则 Unity 会在每帧中重新计算这些边界,并使用这些计算值覆盖此属性。
-
Quality 质量
设置运行时每个顶点使用的骨骼数的上限
- Auto 自动
- 1 Bone 每个顶点仅使用一个骨骼
- 2 Bones 每个顶点最多使用两个骨骼
- 4 Bones 每个顶点最多使用四个骨骼
-
Update When Offscreen 在屏幕外时更新
启用此选项可计算每帧的 Bound,即使网格在任何一个 Camera 都不可见也是如此。禁用此选项可在游戏对象离开屏幕时停止蒙皮,并在游戏对象再次可见时恢复蒙皮。
-
Mesh 网格,设置此渲染器使用的网格
此网格应包含有效的绑定姿势和蒙皮权重、使用混合变形或运行布料模拟。如果网格不使用这些技术中的任何一种,请考虑使用 Mesh Renderer 和 Mesh Filter。
-
Root Bone 根骨骼
设置作为根骨骼的
Transform
。Bounds 将随此Transform
移动 -
Materials 材质
该属性允许你指定一个或多个材质(Material),它们定义了网格在场景中的外观。
-
Lighting 光照相关
-
Cast Shadows 投射阴影,控制网格是否能够投射阴影
- On:总是投射阴影。
- Off:从不投射阴影。
- Two Sided:双面投射阴影,适用于非封闭物体。
- Shadow Only:仅当计算阴影时才考虑网格。
-
Receive Shadows 接收阴影,决定是否接收其他对象投射的阴影
-
-
Probes 探针相关
-
Light Probes 光照探针
设置网格如何与光照探针(Light Probes)交互以获得间接光照
- Blend Probes:混合附近光照探针的颜色。
- Use Proxy Volume:使用代理体积来获取光照信息。
- Override Bounds:覆盖默认边界并使用自定义边界。
- Sample Position:使用变换位置采样光照探针。
-
Reflection Probes 反射探针
确定网格是否以及如何使用反射探针(Reflection Probes)
- Off:不使用反射探针。
- Blend Probes:混合周围反射探针。
- Blend Probes and Skybox:混合反射探针和天空盒。
- Simple:仅使用最近的反射探针。
-
Anchor Override 锚点覆盖
重新设置 Unity 在使用光照探针(Light Probes)或反射探针(Reflection Probes)系统时用来确定插值位置的
Transform
。
默认情况下,这是渲染器几何体的边界框中心。
-
-
Additional Settings 其他设置
-
Skinned Motion Vectors 蒙皮运动矢量
启用此选项会对网格蒙皮数据进行双重缓冲,以便 Unity 可以插入蒙皮运动并将其放入运动矢量贴图中。这会使用更多的 GPU 内存,但会产生更正确的运动矢量。
-
Dynamic Occlusion 动态遮挡剔除
启用或禁用动态遮挡剔除,动态遮挡剔除可以帮助优化性能。
但如果需要在墙后绘制角色轮廓等效果,则此项需要禁用
-
材质(Material)
材质我们也可以称为材质球,它定义了模型网格的外观
材质包含对一个着色器的引用,并通过一组属性(例如颜色、纹理等等信息)来配置着色器
一个模型可以有多个材质,每个材质应用于模型的不同部分
详细内容可见:US2S2L1——材质与Shader
着色器(Shader)
Shader 是一种用于描述如何渲染图形和计算图形外观的程序,主要用于控制图形的颜色、光照、纹理和其他视觉效果
它是运行在 GPU 上的程序,用于计算每个像素的颜色,这套课中学习的知识都是和着色器有关的
详细内容可见:US2S2L1——材质与Shader
网格、(蒙皮)网格渲染器、材质、着色器之间的关系
-
Mesh Renderer(网格渲染器)
-
Mesh(网格) —— MeshFilter(网格过滤器组件进行关联)
- Geometry Data(几何数据)
-
Material(材质)
-
Shader(着色器)
-
Properties(属性)
颜色、纹理等属性,由 Shader 决定哪些属性暴露在材质上
-
-
-
Skinned Mesh Renderer(蒙皮网格渲染器)
-
Mesh(网格)
- Geometry Data(几何数据)
-
Bones & Weights(骨骼与权重)
-
Material(材质)
-
Shader(着色器)
-
Properties(属性)
颜色、纹理等属性,由 Shader 决定哪些属性暴露在材质上
-
-
从关系中我们可以得出,由于 MeshRenderer
和 SkinnedMeshRenderer
都是 Unity 中的组件
如果想要获取、修改一个对象 Mesh(网格)、Material(材质)、材质上属性、材质关联的Shader(着色器)等等信息,都可以利用这两个组件去获取