用途:本技能面向使用 three-vrm(@pixiv/three-vrm)渲染 VRM 模型的开发者,解决 MToon 材质描边粗细不合适的问题,例如模型放大或相机靠近时描边显得过粗、不同缩放级别下描边粗细不一致,以及在运行时以程序方式调整描边。
主要能力与关键概念:MToon 描边宽度有两种模式。'worldCoordinates' 使用世界空间物理尺寸,模型放大或相机靠近时描边看起来更粗;'screenCoordinates' 相对屏幕像素计算,缩放时描边尺寸保持一致。相关属性包括 material.outlineWidthMode('none' | 'worldCoordinates' | 'screenCoordinates')、material.outlineWidthFactor(宽度数值)、material.isMToonMaterial(是否为 MToon 材质),修改属性后需设置 material.needsUpdate = true。还有 outlineColorFactor、outlineLightingMixFactor、outlineWidthMultiplyTexture 等描边相关属性。
使用方式:遍历 vrm.scene,对 isMesh 或 isSkinnedMesh 对象取其材质(可能为数组),筛选 isMToonMaterial 的材质;通过 outlineWidthFactor > 0 且 outlineWidthMode !== 'none' 判断是否启用了描边,然后切换为 'screenCoordinates' 并设置 outlineWidthFactor,最后置 needsUpdate。调试时可遍历材质打印名称、类型、模式与宽度因子。screenCoordinates 模式下的宽度因子参考:0.002–0.003 约 1 像素,0.005 约 1–2 像素,0.01 约 2–3 像素,0.02 以上为粗描边。
适用场景与限制:适合需要在运行时统一或动态调整 VRM 描边观感的场景。注意调用时机——相关函数必须在 currentModel 被设置之后调用;在 vrm-core.js 中 loadModel() 约在第 923 行设置 manager.currentModel。名为 "XXX (Outline)" 的材质是 three-vrm 自动创建的描边通道材质,与主材质共享部分属性。上述像素效果为近似值,实际显示受渲染分辨率影响;资料未提供安装命令、收费信息或与其它库的集成说明。