该技能面向 Tiny World Builder 中低多边形(low-poly)与风格化 3D 资产的使用,适用于添加、导入、设计、审阅或动画化此类资产,涉及 Three.js 程序化网格等场景。技能明确指出需与多个其他技能配合使用:项目技能 .codex/skills/tinyworld-single-file/SKILL.md(单文件约束)、.codex/skills/tinyworld-render-performance/SKILL.md(GPU/阴影/渲染器限制),以及已安装技能 .agents/skills/3d-modeling/SKILL.md(拓扑、UV、导出、LOD、GLB 规范)、.agents/skills/poly-pizza-api/SKILL.md(从 Poly Pizza 获取低多边形模型)、.agents/skills/lightweight-3d-effects/SKILL.md(添加装饰性轻量 3D 效果)。
艺术方向方面,强调低多边形、玩具感、缩略图尺寸下可读;使用带倒角/圆角的厚重图元而非写实细节;强剪影优先于微细节;色彩明亮但不褪色,使用饱和的局部色加深色饰边/暗面材质;纹理使用保持稀少且有目的,内置对象默认使用 THREE.MeshLambertMaterial 程序化颜色;自定义/生成的体素印章默认不应渲染完整包围盒饰边,仅对显式装饰轮廓印章保留边界框;若生成的体素印章包含大面积地面/平台部分,应将其底座沉入地形;使用与内置 Three.js r185 全局包兼容的 flat/Lambert 光照语义;避免光泽/PBR 写实,除非导入资产已依赖它。
比例规则:一个网格瓦片为 1 x 1 世界单位;小道具约 0.2–0.8 单位宽;房屋可占一个或多个瓦片,但门窗在默认相机下须可读;飞行环境物体应像棋盘上的玩具;导入模型须用 Box3 边界归一化比例后再应用目标跨度;朝向修正应在模型根或命名包装器上做一次,不要在动画循环中叠加临时旋转。
体素头像描述符:保持 engine/world/53-voxel-avatar.js 中的 window.voxelAvatarDescriptor 与 party/index.js 中的 cleanAvatar 同步;网络描述符当前允许 kind、seed、body、skin、hairC、hair、fit、head、height、build、gear;共享装备网格用 userData.sharedAvatarAsset 标记,避免销毁共享资产。
材质与调色板:每个对象优先 2–4 种材质;生成的自定义部件应使用语义化材质族;自定义部件渲染器须在创建后保持语义族可编辑;使用电缆图元做实际连接;用球体/椭球体做圆润气球、穹顶、罐体等;自定义印章默认板级比例约一瓦片宽;不要为单个实例修改共享 M.* 材质颜色(唯一例外 applySeasonFoliage());MeshLambertMaterial 不支持与 Standard/Phong 相同的 flatShading 工作流;内置材质引用应放在 engine/world/04-textures.js 中作为确定性粗糙画布纹理。
还详述了 Cottage 风格默认材质、导入纹理变体、工具栏缩略图、纹理图集色彩空间(twSetTextureSRGB / THREE.SRGBColorSpace)、仓库模型印章的材质水合流程、GLB/GLTF 从 PBR 到 Lambert 的适配(保留 base-color 贴图、顶点色、透明、自发光、蒙皮、morph,丢弃黑色 AO 和法线贴图)、模型印章工厂应用 opts.appearance、经济元数据、矿石作为岩石变体(kind: "rock",appearance.oreMetal)、磨损风格化、悬浮板底部、体素升降/螺旋桨引擎调色板、视觉丰富度来自选择性密度对比、花园围栏作为既有 fence 样式、灯具/聚光灯、爆炸/护盾艺术方向、塔楼与城堡渲染等。
模型导入规范:资产放在 models/ 下,publish.sh 复制到 dist/models/;使用 vendor/three/tinyworld-three.r185.min.js 中的 GLTF 栈;加载后计算 Box3、居中原点、缩放到目标尺寸、设置阴影、标记子部件、销毁克隆材质/几何体;先搜索命名节点。
动画规则:仅动画变换和不透明度;遵循 userData.landing 模式;螺旋桨绕局部叶片轴旋转并加半透明盘;火箭/喷气火焰用块状着色器面片或粒子池;飞机使用浅缓动、俯仰和转弯倾斜;粒子效果须封顶并使用廉价克隆 MeshBasicMaterial,死亡时销毁。
验证清单:内联脚本通过 perl 与 node --check;./publish.sh 复制新资产;默认相机显示预期比例;阴影可见但不噪;工具栏缩略图可读;无材质突变泄漏。
程序化牛/羊动画:由 makeVoxelAnimal() 创建、70-animal-anim.js 动画;保持身体/头/腿枢轴活跃,设置 userData.noVoxelBatch = true,暴露 userData.anim,渲染后注册 window.__tinyworldRegisterAnimal(g);动物移动仅外观,不修改 world[x][z] 或多人资源状态;新增姿势使用本模块局部状态并保留 __tinyworldAnimalTick(t, dt) 钩子。