Material(材质)
Material
Material
VRM 支持的 材质(着色器) 有三种,unlit
, standard
, MToon
。
UniGLTF 支持 unlit
和 standard
两种版本。
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 扩展形式保存。
可以在 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 简介
MToon 旨在实现日本动漫风格的表现。它通过根据 光照参数 和 光源环境 混合 Lit Color(主色) 和 Shade Color(阴影色) 这两种颜色来实现这一目标。
来自ニコニ立体的使用了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
将材质的着色器更改为 VRM/MToon
Rendering
Rendering Inspector(检查器) 中包含的项目。
在 Rendering 中,设置主颜色和阴影颜色以及 Cull Mode(剔除模式)。
渲染类型 (RENDERING TYPE)
这里可以设置材质是不透明还是半透明。
- 不透明 (Opaque)
- 为了渲染性能。通常建议将其设置为 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(灯光颜色衰减)
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(混合光照)
时生效,该设置可以调整轮廓颜色与光照颜色混合的乘法系数。