Orbit 角色着色结构:共享材质、参考实例与渲染管线
Orbit 在 UE 原生渲染流程上实现了可复用的角色着色框架,再用参考角色验证材质和纹理配置。通用能力属于 Orbit,针对千夏、Cici 和佩丽卡的适配内容按参考来源归属。
本文以 2026 年 10 月 10 日的工程代码、渲染配置及 139 个角色资产的原生引用审核为依据。“当前位置”是已经存在的结构;“整理方案”已经采用,尚未执行迁移。参数和最新实现以工程为准。
从角色的外观理解文件
看到一个角色时,模型决定几何形状,动画使骨骼和表情变化,材质描述表面如何显色、反光或透明,灯光及后处理参与形成最后的画面。
材质编辑器里的节点执行计算,连线传递结果。材质函数把一组可复用的节点组织起来;材质实例选择已有材质,再调整贴图、颜色、开关和其他参数。UE Substrate 材质概览。
几个常见前缀可用于辨认文件:
| 前缀 | 文件类型 | 例子 |
|---|---|---|
M_ |
材质,组织完整的表面或后处理计算 | M_Character_Soft |
MF_ |
材质函数,保存可复用的计算块 | MF_CharacterFace |
MI_ |
材质实例,保存具体对象的配置 | 佩丽卡某个部位的研究实例 |
TP_ |
Toon Profile,配置明暗及高光响应 | TP_Soft |
T_ |
贴图或纹理数组,提供采样数据 | T_WhiteMatcapArray |
Toon Profile 是 UE 原生 Toon BSDF 使用的外观配置。UE 5.8 Toon 节点接口。
运行时的 MID 是动态材质实例,用来更新实时参数;保存到 Content 的
MI_* 是可编辑资产。
共享框架的十九个资产
这些资产目前都位于
Content/Orbit/Characters/Shading,直接依赖中没有
Reference 内容,可以继续作为项目通用角色着色能力。
| 分组 | 文件 | 职责 |
|---|---|---|
| Functions,3 项 | MF_CharacterSurface、MF_CharacterFace、MF_CharacterHair |
组织表面、脸部及头发相关的通用计算 |
| Materials,3 项 | M_Character_Graphic、M_Character_Illustrated、M_Character_Soft |
三套可配置的主要外观风格 |
| Materials,5 项 | M_CharacterDetail、M_CharacterFace、M_CharacterHairColor、M_CharacterHidden、M_CharacterOutline |
细节、脸部、彩色头发高光、隐藏层和描边用途 |
| Profiles,7 项 | Graphic、Illustrated、Soft 的表面/头发 Profile,以及
TP_HairColor |
用 UE 配置控制明暗与高光响应 |
| Textures,1 项 | T_WhiteMatcapArray |
通用默认 Matcap 采样数据 |
Matcap 是按视线与表面法线计算采样位置的纹理表达方式,可以提供绘制的高光或颜色响应。白色默认数组给材质提供中性的输入;具体参考角色需要的采样数据由其适配实例配置。
高光优先由 UE Profile 曲线和材质参数配置。第一方源模型负责几何、UV 与需要的贴图,最终着色在 UE 中维护。
九十一项角色适配为何跟 Reference 走
当前 Shading/Study 有 92 项:90
个材质实例、一个佩丽卡专属 Profile、一个实验地面材质。
| 研究对象 | 内容 | 原生审核确认的来源 |
|---|---|---|
| 千夏 | 12 个实例:4 组配置 × 3 种风格 | Reference/ZenlessZoneZero 的纹理 |
| Cici / Hayakawa | 45 个实例:15 个部位 × 3 种风格 | Reference/CiciToon 的纹理 |
| 佩丽卡 | 33 个实例:11 个部位 × 3 种风格;另有
TP_PerlicaHair |
Reference/Endfield 的纹理 |
| 实验地面 | M_StudyFloor |
供 L_CharacterShadingLab 使用 |
数量来自不同材质槽和三套外观配置。90 个实例均被着色实验关卡引用;专属头发 Profile 被三个佩丽卡头发实例引用。
通用材质提供计算,角色实例提供贴图及参数,网格的材质槽决定使用哪个实例。例如一个佩丽卡研究实例可以同时引用 Orbit 的通用材质和 Endfield 的研究纹理。
1 | Orbit 通用材质与函数 |
因此,把适配实例按来源整理,仍然可以共用 Orbit 的着色框架。
C++ 和编辑器工具分别做什么
| 文件位置 | 职责 |
|---|---|
Source/orbit/Private/Player/Characters/CharacterShadingComponent.* |
更新主光方向、头部坐标、动态材质参数,以及辅助网格各 LOD 的可见材质槽 |
Source/orbit/Private/Player/Characters/MaterialExpressionCharacterToon.* |
扩展 UE 原生 Toon 材质节点的编译,补齐方向性高光需要的切线基底 |
Source/orbitEditor/Private/Player/Characters/CharacterShadingAuthoringLibrary.* |
编辑器中设置材质实例的 Toon Profile,补充 Python 未直接开放的接口 |
CharacterShadingComponent
读取角色的头骨朝向和主光,将参数传给材质。附加头发高光层还需要正确的网格、姿势同步及材质槽可见性配置。骨骼动画的职责见Motion Matching
结构。
自定义 Character Toon BSDF 节点最终仍调用 UE 的
Substrate Toon 编译能力。当前标准材质编译路径补齐了切线信息,MIR
分支尚未实现同等支持。
之前搭建的渲染管线在哪里
可以沿一帧的生成过程理解这些内容:
1 | 动画更新骨骼姿势与表情 |
这是理解职责的流程示意。具体渲染阶段、并行关系和合成顺序应以引擎配置及实际 GPU 捕获为准。
| 部分 | 当前落地位置 |
|---|---|
| 深度、阴影、光照和透明等底层渲染执行 | UE 原生渲染器 |
| Substrate、Adaptive GBuffer、Custom Depth/Stencil、Sorted Pixels OIT 等项目选择 | Config/DefaultEngine.ini |
| 项目可复用角色着色能力 | Orbit 的 C++ 扩展和 Characters/Shading 共享资产 |
| 参考角色的模型、贴图及适配配置 | 对应来源的 Reference 内容 |
| 用来观察和比较效果的场景 | Maps/Tests/L_CharacterShadingLab |
Orbit 当前实现的是角色着色框架及材质节点扩展。渲染工作由 UE 执行,项目配置和内容决定这些能力怎样用于角色;参考角色用来提供可追溯的对照案例。
当前位置与已采用的整理方案
19 个共享资产保留原有分组:
1 | Content/Orbit/Characters/Shading/ |
91 项角色适配的目标位置按来源分开:
1 | Content/Reference/ |
实验地面材质随着色实验关卡组织。原装素材继续保留;这些整理只改变配置资产的位置与引用。
怎样阅读与验证
先打开 L_CharacterShadingLab,选中角色,找到网格的
Materials,打开一个
MI_*。查看它选择了哪个父材质、哪些贴图和
Profile,再沿父材质进入
MF_*,最后检查角色着色组件里的主光、头骨与附加网格配置。
验证时需要分别检查 Shader 编译、引用和实际画面。脸部阴影应随头部与主光变化;发束高光、透明边缘、描边及正常投影需要固定机位对照。研究纹理的通道和色彩空间以来源证据为准。
本轮引用审核确认了共享框架与研究适配的边界,没有重新完成所有动态画面和 GPU 性能验收。现有工程文档仍记录 OIT 空透明批次的渲染图校验问题;MIR 支持、完整原作光照及景深效果恢复也仍有边界。后续优化应以对应检查和真实画面对照确认。