ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

MMD模型导入Unity全流程:材质、动画、VR打包与性能优化实战

MMD模型导入Unity全流程:材质、动画、VR打包与性能优化实战 很多做 MMD 的伙伴第一次把角色模型放进 Unity 时都会遇到类似的困惑照着教程一步步操作模型却发红发紫动画要么滑步要么穿模表情怎么调都出不来。更别提后面打包 Android、接 Pico 4 这类 VR 设备时还会有一堆工程化问题。如果你也卡在这些环节说明你没有把“MMD 资产”和“Unity 运行时”看成一条完整链路来设计而只是零零散散地拖文件、换插件。这个“老吃家”的说法其实有两层意思一是对 MMD 模型结构、VMD 动画、材质表达已经很熟悉二是对 Unity 里的 Avatar、SkinnedMeshRenderer、Animator、Shader、ParticleSystem 这些运行机制也有足够的踩坑经验。真正能把 MMD 角色搬到 Unity 并稳定运行的人靠的不是某个“万能插件”而是理解两套体系之间如何映射。这篇文章就围绕这一点展开并以一个名为“伊格蕾塔”的 MMD 角色模型作为贯穿示例从环境准备、模型导入、材质修正、动画绑定一直聊到 Android/VR 打包和性能验证。读完这篇文章你会得到一个可复用的操作路径用什么工具、按什么顺序、每一步要检查什么、常见报错怎么排查。如果你正准备做 Unity 里的 MMD 角色展示、VTuber 形象、VR 虚拟角色或者 URP 渲染实验这篇文章应该能帮你省下大量到处搜教程的时间。1. 这篇文章真正要解决的问题先给问题定性。MMD 模型进入 Unity 后表现不对绝大多数不是某一个工具坏了而是资产链路没打通。所谓资产链路指的是从.pmx/.vmd这类 MMD 原生文件到 Unity 能够稳定解析的GameObjectSkinnedMeshRendererAnimator的过程。链路里的每一个节点都有它自己的数据规则PMX 模型的数据结构是“顶点 骨骼 变形Morph 材质”但它的骨骼和 Unity 的 Humanoid Avatar 并不完全一致。VMD 动画记录的是关键帧位置和旋转如果目标模型的分组名、骨骼名不匹配导入后就会出现错位。MMD 材质通常依赖 MToon 或者一些特殊 ShaderUnity 默认的 Standard Shader 并不能完全还原它所以经常出现发紫、发粉或者亮度异常。Morph 在 MMD 里负责表情在 Unity 中对应的是 BlendShape。这个字段一旦在导入设置中被关掉表情就全部丢掉了。这篇文章要解决的就是把这些“不对齐”的地方逐一补上。我们以“伊格蕾塔”作为示例角色就是为了把问题具体化角色名不重要真正重要的是你手里那个模型和它存在同样的结构问题。哪些读者最应该读刚接触 MMD 导入 Unity遇到模型黑脸、材质不对、动作乱飞的新手。已经能导入模型但不清楚怎么优化做了几个角色后项目体积变大、帧率下降的中级开发者。准备把角色模型发布到 Android 或 Pico 4但还不熟悉 IL2CPP、纹理压缩、Profiler 的进阶创作者。它不是一篇插件使用说明而是一套通用工作流。你可以把其中任何一步迁移到其他模型上。2. 核心概念与适用场景2.1 MMD 里的关键概念PMX / PMD角色模型文件。PMD 是旧格式PMX 是扩展后的常用格式包含顶点、材质、骨骼、物理引擎参数如刚体、Joint。VMD动作数据文件记录骨骼、变形、相机和灯光的关键帧信息。VPD姿势数据文件通常用于单帧姿势而不是动态动作。Morph表情形态比如闭眼、张嘴、微笑本质是一组顶点的位移量。刚体 / Joint用于模拟头发、裙摆等部位的物理物理效果。在 MMD 里制作“伊格蕾塔”的动作本质上就是播放一段 VMD 数据。但如果只是播放那 MMD 本身已经够用了。为什么要进 Unity因为 Unity 可以让你把角色放到实时 3D 场景、交互应用、VR 设备或游戏战斗系统中也不再受 MMD 软件本身渲染管线的限制。2.2 Unity 侧的对应关系Unity 使用一套完全面向游戏引擎的资产体系GameObject对应场景中的每一个物体模型本身就是由多个GameObject组成的层级结构。SkinnedMeshRenderer对应 MMD 中经过蒙皮计算的网格骨骼权重也会在这里体现。BlendShape对应 MMD 的 Morph常见做法是把 eye、mouth 等表情做成 BlendShape。Animator和Humanoid Avatar负责把骨骼数据变成 Unity 的动画状态机并把任何 Humanoid 动画重定向到当前角色上。Material和Shader决定渲染表现。关键点在于MMD 是“数据创作工具”Unity 是“实时运行引擎”。创作时自由度可以很高运行时要考虑性能、兼容性和可交互性。两边的定位不一样所以不能直接把文件拖进去就指望一切正常。2.3 VRM 为什么成为桥梁VRM 是一种面向人形 VR 角色应用的开放标准格式。它把模型网格、材质、人体骨骼、表情、甚至视线控制都打包到一起专门为了解决“MMD 模型在 Unity 等引擎之间互通”而生。你会在网上下载到.vrm文件或者看到VRM to MMD Converter、MMD Tools这类工具就是因为 VRM 可以看成是封装后的标准化 MMD 模型。如果拿到的是 VRM导入 Unity 通常比直接导入 PMX 更顺因为 VRM 已经定义好了统一的人形骨骼和表情界面。但要注意VRM 也不是银弹。它为了跨引擎一致对材质选择有约束很多 MMD 原生的复杂特效材质并不能完整保留。所以我的建议是做一个简单角色可以走 VRM但如果你有大量自定义 Shader 和复杂物理建议还是用 PMX 导入工作流或者把 VRM 转换后再做二次适配。2.4 适用场景这套流程适合角色展示类应用用户可以用鼠标或手柄触发动作角色播放 MMD 舞蹈。VR 虚拟形象把模型接入 Pico 4 / Quest 等设备通过面捕或动捕驱动角色。数字人 / VTuberUnity 里做表情、口型、姿势与声音或摄像头数据联动。游戏项目把 MMD 角色改造成可控制角色或者当作 NPC 放入关卡。不适合的场景也要说清楚如果你要做的是高精度影视渲染级角色建议走主流的骨骼绑定和自动绑定工具比如 Maya/Blender不要依赖 MMD 这条链路如果你要发布到非常低端的安卓设备除非精简到极限否则 MMD 模型的高面数和多材质可能撑不住。3. 环境准备与前置条件3.1 工具链清单要把“伊格蕾塔”这类 MMD 角色导入 Unity至少要准备这么几类工具用途工具说明Unity 引擎Unity Hub 安装 LTS 版本优先选长期支持版比如 2021.3/2022.3 这类稳定性更好PMX 转换/导入Blender MMD Tools 插件用于预览模型、修正材质、导出 FBX/VRM 作为中转VRM 转换UniVRM 或在线转换工具如果拿到的模型是 VRM可以用 UniVRM 导入 UnityMMD 动画导入MMD4Mecanim / PMX Importer 插件不同插件支持范围不同安装前确认 Unity 版本Android 打包Android SDK / NDK / JDK在 Unity Hub 中勾选 Android Build SupportVR 调试Pico 4 开发者模式 ADB通过 USB 连接用 Logcat 看日志性能分析Unity Profiler / Frame Debugger检查 DrawCall、GPU 耗时、内存占用需要注意MMD Tools 这类插件版本更新很快。比如有些教程写的是 MMD Tools v2.10.3 以下的操作方式放到新 Blender 里可能完全不兼容。依赖插件版本时以实际项目为准不要照搬旧参数。3.2 Unity 项目配置打开 Unity 创建项目时需要考虑管线选择内置渲染管线Built-in兼容性最好很多 MMD 相关 Shader 直接可用适合快速验证。URPUniversal Render Pipeline性能好适合移动端和 VR但需要把材质 Shader 换成 URP 版本。HDRP画质上限高但移动端基本不推荐VR 设备上性能开销也大。如果你打算发布到 Pico 4 这类安卓 VR 设备我更推荐用 URP。原因很简单移动端 GPU 的算力有限URP 在性能和画面之间平衡得好而且支持 Single Pass Instanced 渲染对 VR 是刚需。在项目设置里还要注意Player Settings Other Settings Color Space建议选 Linear不要在 Gamma 下长时间调试否则颜色在移动端会出现明显偏差。Auto Graphics API在 VR 打包时建议不要迷信默认值可以根据目标设备勾选 Vulkan 或 OpenGL ES 3.x。Android 包名、最小 API Level 要按设备要求配置Pico 4 是安卓设备通常需要 API Level 29 以上。3.3 插件和转换工具的选择处理 MMD 转 Unity 的插件主要有两类MMD4Mecanim比较老牌的 PMX/VMD 导入方案社区讨论多支持 Mocopi、表情、物理。但它对最新 Unity 版本的兼容性需要测试。PmxImportermika-n 的 Unity-PmxImporter在 Unity 内直接导入 PMX支持中文属性名也能导入 VMD适合不想在 Blender 里做中转的人。还有一类是 Blender 中转方案Blender 里安装 MMD Tools打开 PMX再导出 FBX 给 Unity。这种方案的好处是自由度高可以在 Blender 里修顶点组、减面、合材质。缺点是多了一道转换可能出现纹理路径、骨骼命名丢失的问题。我以前做“伊格蕾塔”这个模型时最稳妥的路径是先在 Blender 里确认模型骨骼命名再导出带骨骼和 Blendshape 的 FBX最后到 Unity 里做 Avatar 配置。这样即使 Unity 侧的插件版本变了资产本身也大概率是安全的。4. 核心流程拆解4.1 模型检查与素材整理拿到一个 MMD 模型第一步不是急着导入而是先确认三件事授权范围这个模型能不能用于 Unity 项目能否商用能否发布到 VR 平台具体看模型制作者的规定这是底线问题。贴图路径解压后有没有包含贴图文件如果没有模型打开后就是灰色或粉色的。骨骼结构用 Blender 或 MMD 模型预览工具打开确认骨骼命名是否符合常见规范。如果骨骼名已经被改乱后面导入 Unity 的 Avatar 时会很痛苦。把模型和贴图放在同一个目录然后在 Blender 里打开 PMX 预览。先用 MMD Tools 插件载入模型再检查模型面数、材质数量、物理刚体数。如果材质数量过多比如几十个建议先做合并否则到 Unity 里 DrawCall 会非常感人。4.2 从 PMX 到 Unity到底怎么导有三种常见路线路线一PMX 直接导入 Unity。通过 Unity 插件导入省事但插件要兼容 Unity 版本且手动配置 Avatar 时容易漏。路线二PMX - Blender - FBX - Unity。可控性强适合需要清理骨骼或修网格的情况。路线三PMX - VRM - Unity。适合需要跨引擎共用、表情通用、后续要配合面捕工具的情况。我更推荐大多数第一次做的人走路线二或者路线三。路线一不是不行而是新手一旦遇到问题很难判断是插件兼容性问题还是模型本身问题。先转成 FBX 或 VRM可以让你绕开插件差异把所有问题收敛在 Blender 和 Unity 这两层。4.3 材质与 Shader 处理MMD 的材质默认依赖 MToon 这类半透明卡通 Shader。从 Blender 导出 FBX 后贴图和材质信息大概率不会完美同步到 Unity。最实际的方案是把 MMD 的贴图当作普通贴图在 Unity 中重建或修复材质。具体操作是在 Unity 中把模型导入后检查每个Material的Albedo是否对应正确贴图。如果是 URP 项目把材质 Shader 换成Universal Render Pipeline/Lit并把Smoothness、Metalness改到合适数值。如果要保留卡通风格可以找兼容 URP 的 MToon 分支实现比如MToon URP或自定义 Toon Shader。最怕的情况是材质上一堆 MMD 特有的法线贴图、透贴、自发光参数没有正确关联最后颜色全乱。所以导入后第一件事不是调动作而是把材质清一遍确认渲染效果正常。4.4 VMD 动画的导入与重定向VMD 是 MMD 的动作数据。导入方式取决于你是从插件导入还是把动画帧烘焙到 FBX。如果使用 MMD4Mecanim 插件可以在导入 VMD 后自动转换成 Mecanim 动画片段。然后你需要把动画片段放到 Animator Controller 里给角色用状态下切换。这就是最标准的 Unity 动画流程。如果你的模型是 FBX 且动画也烘焙在 FBX 里Unity 会把它识别为AnimationClip但要注意骨骼名称。只要骨骼名与 FBX 一致动画就能正常播放。如果出现滑步、错位先检查骨骼名对应关系而不是急着调动画曲线。4.5 表情与骨骼绑定MMD 的 Morph 在 Blender 里对应 Shape Key。导出 FBX 时必须确保 Shape Key 保留。在 Unity 中导入 FBX 后打开模型的Import Settings Model Import BlendShapes选项BlendShape 就会出现在 SkinnedMeshRenderer 上。表情的控制方式有两种用 Animator 动画驱动 Blendshape适合预设表情动画。用代码实时驱动SetBlendShapeWeight适合对接面捕数据或用户交互。骨骼绑定方面在 Unity 中把模型的根节点挂好后设置Rig Animation Type Humanoid让 Unity 自动生成 Avatar。如果骨骼识别不完整就在Avatar Configuration里手动对应。4.6 性能优化与打包配置完成可运行版本后还需要关注移动端性能。需要做的优化包括减少材质数量把相同的贴图合并到一个材质球上减少 Draw Call。开启 GPU Instancing适合批量的装饰物件。精简角色面数。MMD 模型动辄数万面VR 端可能要减到合理范围。压缩贴图使用 ASTC 格式。关闭不必要的阴影或者只保留 1-2 个实时灯光。物理刚体数量过多时在移动端考虑禁用或简化。到打包阶段Android 构建时是否开启 IL2CPP 需要取舍。IL2CPP 的 C# 性能更好、代码也更难被反编译但打包时间和体积会变大。如果只是本地展示Mono 也不是不能用如果担心源码安全再开 IL2CPP。5. 完整示例与代码实现下面提供几个能直接复制到项目里使用的示例。它们只是一个基础框架建议你理解后根据项目结构修改。5.1 用 Animator 控制“伊格蕾塔”的角色动画这个脚本用于在运行时通过按键切换角色的 MMD 舞蹈动作。前提是Animator Controller里已经定义好了Idle和Dance两个状态。// Assets/Scripts/MMDCharacterController.cs using UnityEngine; public class MMDCharacterController : MonoBehaviour { [Header(角色动画组件)] public Animator animator; [Header(动画状态名)] public string idleState Idle; public string danceState Dance; [Header(切换方式)] public KeyCode switchKey KeyCode.Space; private bool isDance; private void Start() { if (animator null) animator GetComponentAnimator(); } private void Update() { if (Input.GetKeyDown(switchKey)) { isDance !isDance; string targetState isDance ? danceState : idleState; animator.CrossFadeInFixedTime(targetState, 0.25f); Debug.Log($[MMDCharacter] 切换到 {targetState}); } } }解释一下这段代码里的关键点CrossFadeInFixedTime会按固定时间完成动画过渡比直接Play更平滑。状态名必须与 Animator Controller 中状态名一致否则会播放失败。animator的Avatar必须配置为 Humanoid这套逻辑才能对所有角色通用。把脚本挂在“伊格蕾塔”预制体的根节点上然后在 Inspector 中绑定 Animator 和状态名。运行后按空格键就能在两个动作之间切换。5.2 导入后批量修正材质 Shader 的编辑器脚本在导入模型后很多时候会自动生成一堆默认材质颜色和透明效果都不对。可以用一个 Editor 脚本批量修正省去手工点几十个材质球的时间。// Assets/Editor/MMDMaterialFixer.cs using UnityEngine; using UnityEditor; public static class MMDMaterialFixer { private const string URP_LIT Universal Render Pipeline/Lit; private const string STANDARD Standard; [MenuItem(Tools/MMD/批量修复材质 Shader)] public static void FixMaterials() { // 查找场景中所有角色相关的 SkinnedMeshRenderer SkinnedMeshRenderer[] renderers Object.FindObjectsOfTypeSkinnedMeshRenderer(); int fixedCount 0; foreach (SkinnedMeshRenderer renderer in renderers) { Material[] materials renderer.sharedMaterials; for (int i 0; i materials.Length; i) { if (materials[i] null) continue; Shader targetShader Shader.Find(URP_LIT); if (targetShader null) targetShader Shader.Find(STANDARD); materials[i].shader targetShader; fixedCount; } } Debug.Log($[MMDMaterialFixer] 共修复 {fixedCount} 个材质球); AssetDatabase.SaveAssets(); } }这个脚本会把场景中所有带蒙皮网格的材质统一替换成 URP Lit 或 Standard Shader。替换之后你还需要手动调整贴图、透明属性和法线设置但它至少能解决“模型发紫”的问题。在 Unity 里点击菜单栏Tools/MMD/批量修复材质 Shader即可运行。5.3 一键打包 Android 的构建脚本如果你要把项目发布到 Pico 4 或普通安卓设备可以用命令行或菜单一键构建 APK。构建脚本还可以集成到 CI 中。// Assets/Editor/AndroidBuilder.cs using UnityEditor; public static class AndroidBuilder { [MenuItem(Build/Build Android APK)] public static void BuildAndroid() { BuildPlayerOptions buildOptions new BuildPlayerOptions { scenes new[] { Assets/Scenes/Main.unity }, locationPathName Builds/MMD_Igretha.apk, target BuildTarget.Android, options BuildOptions.CompressWithLz4HC }; BuildReport report BuildPipeline.BuildPlayer(buildOptions); if (report.summary.result UnityEditor.Build.Reporting.BuildResult.Succeeded) { UnityEngine.Debug.Log([AndroidBuilder] Android 构建成功); } else { UnityEngine.Debug.LogError([AndroidBuilder] Android 构建失败); } } }使用之前需要在 Unity Hub 里安装Android Build Support以及对应 SDK/NDK。如果构建时出现 IL2CPP 相关错误先检查是否安装了对应的 NDK 版本。Player Settings Additional IL2CPP arguments里是否有残留的自定义参数。是否开启了Development Build如果不需要调试可以关掉。5.4 运行验证与日志查看在 Pico 4 上调试时先开启开发者模式然后用 ADB 连接设备。在命令行执行adb devices adb logcat -s UnityUnitytag 会输出Unity Debug和Debug.Log的日志。如果模型加载失败或动画状态不存在可以在这里快速看到原因。6. 运行结果与效果验证6.1 编辑器验证完成“伊格蕾塔”模型导入和动画配置后在编辑器里按 Play 运行。重点检查模型是否为正常颜色而不是粉色或紫色。播放动画时脚底是否稳定是否出现滑步或扭曲。表情 BlendShape 能否切换例如眨眼、嘴巴开合。角色阴影是否正确有没有黑脸或呼吸感丢失的问题。如果模型颜色正常但性能不行可以在 Profiler 里看渲染耗时不用等真机。6.2 Pico 设备验证在 Pico 4 上安装 APK 后观察以下内容头显画面是否卡顿帧率是否稳定在 72fps 或以上。镜头转动时角色是否有闪烁或撕裂。点击交互或按键切换动画是否及时响应。设备发热和耗电情况如果温度增长过快说明性能优化不够。建议先用 Profiler 抓一次 Editor 或真机数据确认 CPU 耗时和 GPU 耗时是否均衡。有时候 CPU 大部分时间花在主线程的序列化上和渲染无关。6.3 判断成功标准一个 MMD/Unity 角色项目可以算跑通至少满足角色在一台中端安卓设备上能稳定进入场景不崩溃。动画播放过程中骨骼位置和表情变化符合预期。材质渲染效果接近 MMD 原画面的八成以上。构建和安装流程都是可重复的不是这次成功下次就失败。如果达不到先不要急着加新功能把资产链路里的问题清干净再往前。7. 常见问题与排查思路问题现象可能原因排查方式解决方案模型整片变粉或变紫材质 Shader 在目标渲染管线中不存在检查材质球使用的 Shader替换为 URP Lit 或 Standard并重新绑定贴图动画播放后角色滑步或错位骨骼命名不匹配Humanoid Avatar 识别错误打开 Avatar Configuration 查看骨骼映射重新指定骨骼对应关系或者回到 Blender 修正命名表情一直无法切换FBX 导入时未开启 BlendShapes检查模型 Import Settings 里的 BlendShapes 选项勾选Import BlendShapes后重新导入真机上黑色块或阴影闪烁材质透明度、阴影设置不正确查看 Frame Debugger 和材质属性关闭阴影投射或将渲染队列调整到透明队列打包后 APK 体积巨大纹理和音频资源没压缩查看 Build Report使用 ASTC 纹理压缩关闭不必要的资源IL2CPP 构建失败NDK 版本不匹配或安装不完整在 Unity Hub 重新安装 Android Build Support使用 Unity 自带的 SDK/NDK 配置避免手动环境变量覆盖Pico 4 画面频繁掉帧Draw Call/渲染耗时过高复杂角色资源过多Profiler 抓取 GPU 耗时合并材质、减少实时阴影、使用 LOD 或简化模型打开软件右下角出现水印使用了未激活或试用版 Unity查看 Unity 许可证状态在 Unity Hub 中登录并激活合适的许可证这里的每一条都来自实际项目里常见的现象。排查时不要一次改多个变量。比如模型发紫和动画错位是两类问题先修材质再调动画这样能更准确判断每一步的效果。8. 最佳实践与工程建议8.1 项目目录与命名规范MMD 角色会同时包含模型、贴图、动画、材质、预制体、脚本等多类资源。建议按下面结构组织Assets/ Art/ Characters/ Igretha/ Materials/ Meshes/ Textures/ Animation/ Prefabs/ Scripts/ Runtime/ Editor/ Scenes/角色相关资源全部放在一个文件夹下且贴图、材质、网格分离。命名统一用角色名_资源类型比如Igretha_face.jpg、Igretha_idle.anim。这样当一个项目里有多个 MMD 角色时不会出现“同名贴图互相覆盖”的问题。8.2 预制体与资源管理每次从 FBX 导入模型后不要直接把 FBX 拖进场景使用。正确做法是在 FBX 上设定好导入规则如 Humanoid Avatar、材质提取。创建一个预制体把 FBX 实例作为子物体。在预制体上挂载动画控制、场景交互、表情控制脚本。把预制体放进 Resources 或 Addressables 系统便于运行时加载释放。如果你担心内存占用使用Resources.Load会简单一些但热更新和资源管理效率不如 Addressables。团队项目里更推荐一上来就用 Addressables只是学习成本稍高。8.3 版权与合规这一步必须强调。MMD 模型通常有非常严格的再配布规则。你想在 Unity 项目、视频、直播或虚拟现实应用里使用某个角色必须确认以下几点模型是否允许用于 Unity 等游戏引擎是否允许展示在公开的平台/直播中是否允许修改材质、骨骼是否允许商用像“伊格蕾塔”这类模型如果从公开渠道下载很可能作者有明确限制。建议在项目 README 里记录模型来源和授权情况避免日后发布时产生纠纷。8.4 团队协作与版本管理MMD 角色资产文件通常很大贴图和 FBX 动辄几十 MB。如果团队用 Git建议使用 Git LFS 管理大文件。不提交Library、Temp、Logs目录。对 Shader 和材质变更写清提交信息方便回滚。不同角色放在独立分支合并降低冲突概率。另外Unity 的.meta文件必须随代码一起提交否则场景引用会全部断掉。8.5 设计上的边界提醒如果你的目标是“尽可能还原 MMD 原画面的质感”不要忽略原模型使用的 MToon 参数。MMD 的很多材质效果依赖半透明反射和描边在默认 Standard 或 URP Lit 下会丢失风格。建议找到对应管线的 Toon Shader 方案或者在导入前把模型重新导出为 VRM 以保留更多语义信息。如果你追求“能在移动端稳定运行”则反过来要敢于删减。比如头发上的物理刚体数量、裙子摆动的模拟精度在 VR 场景里都可以开更简化模式。9. 总结与后续学习方向这篇内容没有去讲某个特定插件的一百种按钮用法而是把 MMD 到 Unity 这条路拆成了几条关键链路模型格式、材质 Shader、动画绑定、表情映射、移动端优化和打包验证。因为你只有理解了这些链路里到底发生了什么换一个新模型、换一台新设备时才不会手足无措。如果你刚做完第一个“伊格蕾塔”角色下一步我建议按这个顺序继续深入先试一个真正有多个舞蹈动作和表情切换的完整案例把 Animator 状态机用好。再学习 BlendShape 的实时驱动方式尝试用简单的 Unity 脚本模拟口型。有条件的话用 Pico 4 做一次真机测试把 Profiler 录下来看看哪个环节是主要瓶颈。最后可以研究 URP 下的卡通渲染 Shader试着把 MMD 的描边效果在移动端复现出来。MMD 本身是很好的动作和角色创作起点Unity 又是能把创意推向实时交互、多端发布的成熟引擎。两者的结合靠的就是每个环节都有人在踩坑、填坑、总结成经验。希望这篇“老吃家”的工作流笔记能让你少踩几个坑多留一点时间给真正好玩的创作部分。
返回列表