# Material(材质)
# Material
## **Material**
VRM 支持的 材质(着色器) 有三种,`unlit`, `standard`, `MToon`。
UniGLTF 支持 `unlit` 和 `standard` 两种版本。
### **export / import 对应表**[](https://vrm.dev/univrm/shaders/#export--import-%E3%81%AE%E5%AF%BE%E5%BF%9C%E8%A1%A8 "export / import の対応表 への直接リンク")
support | export | gltf | import | |
---|
✅ | Standard(Unity标准) | PBR | Standard | |
❌v0.xx.0 | UniGLTF/StandardVColor | | | UniUnlit 支持顶点色 |
✅ | Unlit/Color(Unity标准) | KHR\_materials\_unlit | UniGLTF/UniUnlit | |
✅ | Unlit/Texture(Unity标准) | KHR\_materials\_unlit | UniGLTF/UniUnlit | |
✅ | Unlit/Transparent(Unity标准) | KHR\_materials\_unlit | UniGLTF/UniUnlit | |
✅ | Unlit/Transparent Cutout(Unity标准) | KHR\_materials\_unlit | UniGLTF/UniUnlit | |
✅ | UniGLTF/UniUnlit(VRMShaders) | KHR\_materials\_unlit | UniGLTF/UniUnlit | |
❌v0.76.0 | VRM/UnlitTexture(UniVRM) | KHR\_materials\_unlit | UniGLTF/UniUnlit | 请使用 UniUnlit |
❌v0.76.0 | VRM/UnlitTransparent(UniVRM) | KHR\_materials\_unlit | UniGLTF/UniUnlit | 请使用 UniUnlit |
❌v0.76.0 | VRM/UnlitCutout(UniVRM) | KHR\_materials\_unlit | UniGLTF/UniUnlit | 请使用 UniUnlit |
❌v0.76.0 | VRM/UnlitTransparentZWrite(UniVRM) | 无法在 gltf 中表现 | | 在MToon 中
有TransparentZWrite
功能
|
✅ | VRM/MToon | extensions.VRM.materialProperties | VRM/MToon | |
🚧 | VRM10/MToon10 | VRMC\_materials\_mtoon | VRM10/MToon10 |
|
# UniUnlit
### **UniUnlit**
大概是 `UnLighting` 的缩写,即 `Unlit`。
####
**Unlit**
将以 glTF 的 [KHR\_materials\_unlit](https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_unlit) 扩展形式保存。
#### **可以在 Unity 中导出为 Unlit 着色器**
功能 | color | texture | vertex\_color | alpha/cutout | no culling |
---|
glTF | ✅ | ✅ | ✅ | ✅ | ✅ |
UniGLTF/UniUnlit | ✅ | ✅ | ✅ | ✅ | ✅ |
Unlit/Color | ✅ | | | | |
Unlit/Texture | | ✅ | | | |
Unlit/Transparent | | ✅ | | blend | |
Unlit/Transparent Cutout | | ✅ | | cutout |
|
> **顶点颜色**
> 只有 `UniGLTF/UniUnlit` 支持顶点颜色。
>
> - 如果 Mesh 包含顶点颜色
> - 并且 Material 被判定为 `Unlit`,
>
> 在导入时将应用顶点颜色。如果在不需要顶点颜色的模型上应用 Unity 的 `Unlit `系列材质并导出,那么在下次导入时,颜色可能会意外改变。在这种情况下,通过在导出时启用 `RemoveVertexColor`,可以导出不包含顶点颜色的 `Mesh`。
# Standard
### **Standard**
`Physically Based Rendering`(基于物理的渲染/PBR )
### **Standard Shader**
`UniVRM` 不会专门创建针对物理基础渲染(PBR)的着色器,而是使用 Unity 的标准 Standard 着色器。
⚠反射太强 闪闪发光
Shader 类型为 `Standard`(Unity 标准),且 `metallic` 和 `smooth` 值较高。将材质的着色器更改为 `Unlit/UniUnlit`,可以直接显示纹理。
###
**Metallic, Roughness, Occlusion 对应表**
用途 | glTF material | | | Unity Standard Shader |
---|
Occlusion | occlusionTexture | R | G | \_MetallicGlossMap |
Roughness | pbrMetallicRoughness.metallicRoughnessTexture | G | A | \_MetallicGlossMap (smoothness = 1 - roughness) |
Metallic | pbrMetallicRoughness.metallicRoughnessTexture | B | R | \_OcclusionMap |
> **将 Metallic Smoothness Occlusion 合并为一张纹理 V0.69.0**
> 从 `v0.69.0` 版本开始,将纹理合并为一张。
>
> - import:将 glTF 的 metallicRoughnessTexture 和 occlusionTexture 合并为一张(参见上表)
> - export:将 Standard 的 \_MetallicGlossMap 和 \_OcclusionMap 合并为一张(参见上表)
>
> `v0.68.0` 及之前
>
> - import:将用于 \_MetallicGlossMap 和 \_OcclusionMap 的两张纹理转换并导入
> - export:将 Standard 的 \_MetallicGlossMap 和 \_OcclusionMap 转换为两张纹理并导出
# MToon
[Mtoon 的使用方法](https://www.bilibili.com/read/cv35352597/?from=readlist&jump_opus=1)
### **MToon 简介**
MToon 旨在实现日本动漫风格的表现。它通过根据 光照参数 和 光源环境 混合 Lit Color(主色) 和 Shade Color(阴影色) 这两种颜色来实现这一目标。
[](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/FRj6LjXzQNtN6t1A-mtoon-about.png)
来自ニコニ立体的使用了MToon的3D角色模型。
### **快速设置**
#### **基本步骤**
- 选择目标材质并将着色器更改为 `VRM/MToon`
- 点击着色器面板
- `Color -> Lit Color, Alpha` 和 `Color->Shade Color` 设置相同的纹理
- `Color -> Lit Color, Alpha` 设置为白色,`Color->Shade Color` 设置为想要的阴影颜色
- `Shading -> Toony` 选择所需的值。如果需要使主色和影色区分更加明显,可以调整为`1`
- `Rim -> Additive` 设置纹理(相当于 Spheremap 和 Matcap )
- `Outline -> Width -> Mode` 如果需要轮廓线,则选择`WorldCoordinates`,否则选择`None`
- `Outline -> Width -> Width` 根据外观选择适当的值
#### **普通的材质**
- `Shading Shift` 设置为 `0`
- `Shading Toony -> Shadow Receive Multiplier` 设置为 `1`
#### **如果不希望角色面部或之类的材质有太多阴影**
- `Shading Shift `设为负值
- 将 `Shading Toony -> Shadow Receive Multiplier` 设为 0
### **设置项目**
#### **准备**
选择要进行修改的材质(Material) 并将着色器(Shader) 更改为 `VRM/MToon`
[](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/RxLu1kwLoFbZRyel-set-mtoon.png)
将材质的着色器更改为 VRM/MToon
#### **Rendering**
[](https://docs.vrcd.org.cn/uploads/images/gallery/2024-08/XfxaDYiBxVDrgHRa-download.png)
Rendering Inspector(检查器) 中包含的项目。
在 Rendering 中,设置主颜色和阴影颜色以及 Cull Mode(剔除模式)。
##### **渲染类型 (RENDERING TYPE)**
这里可以设置材质是不透明还是半透明。
- 不透明 (Opaque)
- 为了渲染性能。通常建议将其设置为 Opaque。
- 裁切 (Cutout)
- 虽然是不透明的,但会根据 `Color -> Lit Color, Alpha` 中的 Alpha 数值来决定是否绘制小于 `Color -> Alpha -> Cutoff` 的部分。(根据 alpha 值进行绘制,透明度小于设定的值的部分会被裁切)
- 透明 (Transparent)
- 这是半透明的。将会根据 `Color -> Lit Color , Alpha` 中的 Alpha 数值来确定不透明度。
- 缺点是描边绘制可能不正确。
##### **剔除模式 (CULL MODE)**
这里可以设置是否渲染多边形的法线反面。
- Back (背面)
- 剔除背面,绘制正面。通常选择此项。
- Front (正面)
- 剔除正面,绘制反面。
- None (无)
- 绘制两面,因此会增加计算量。
##### **Alpha (阿尔法)**
只有当 `Rendering Type(渲染类型)` 是 `Cutout` 时才需要设置。
- Cutoff (`Color->Alpha`)
- 设置渲染阈值。
#### **Color(颜色)**
设置渲染颜色。纹理和颜色将进行乘法计算。将主色`Lit Color, Alpha`为受光照影响的颜色,影色`Shade Color`为未受光照的颜色。此外,设置不透明度信息`Lit Color, Alpha`的alpha值。另外,在`Lit Color, Alpha`的 Alpha 值中设置不透明度信息。
#### **Lighting(照明)**
##### **Shading Shift(阴影偏移)**
调整主色和影色的阈值,以适应光线照射物体的方式。当数值为`0`时,为正常的光照效果。当数值为负时,会呈现类似动漫般、范围广泛的主色光照效果。需要根据显示的警告信息将`Shadow Receive Multiplier`设置为`0`,以禁用自身阴影。
##### **Shading Toony(阴影风格)**
这个设置决定上面介绍的 `Shading Toony(阴影偏移)` 的明暗交界线过渡的平滑程度,当数值为0时,它(阴影过渡)会变得像一般的Lambert(兰伯特) 模型一样写实且平滑。当数值为`1`时,受光面和阴影面会在交界处产生明显的分割,呈现出动画风格的照明效果。(类似二分阴影)
##### **Shadow Receive Multiplier(阴影强度)**
设定自我投影和阴影的影响程度。`0`的时候不受影响。`1`的时候会受到影响。
##### **LightColor Attenuation(灯光颜色衰减)**
设置光源颜色的影响程度。设置为`0`时,受光源颜色的影响。设置为`1`时,不受光源颜色的影响,只反映光源的亮度。
##### **Rim Additive(边缘光追加)**
根据相机和法线之间的关系显示额外的光源。通常被称为 sphere map(球形贴图) 或 MatCap。
##### **Emission(自发光)**
设置与光源环境无关的恒定颜色。
##### **Normal Map(法线贴图)**
设置法线贴图。右侧值设置法线贴图的强度。
#### **Outline(轮廓线)**
轮廓线的设置
##### **Width Mode(宽度模式)**
- None(无)
- 不渲染轮廓
- WorldCoordinates(世界空间坐标系)
- 以世界坐标为基准,渲染出相对于世界空间固定宽度的轮廓线。
- ScreenCoordinates(屏幕空间坐标系)
- 以屏幕空间为基准,渲染出相对于屏幕空间固定宽度的轮廓线。
##### **Width(宽度)**
设置轮廓的宽度。当宽度模式是世界坐标系时,宽度单位为米。
##### **Color Mode(颜色模式)**
- FixedColor(固定颜色)
- 使用固定的颜色进行渲染。
- MixedLighting(混合光照)
- 增加光照颜色进行相乘运算。(简单来说就是轮廓线颜色会受光照颜色影响)。
##### **Color(颜色)**
设置轮廓线颜色。
##### **Color Lighting Mix(色彩灯光混合)**
当轮廓线的 `Color Mode(颜色模式)` 设置为 `MixedLinghting(混合光照)` 时生效,该设置可以调整轮廓颜色与光照颜色混合的乘法系数。