Claude AI Opus 5可纯代码生成Three.js游戏角色
所以……@claudeai Opus 5 可以只用代码,在@threejs 中构建游戏角色、做装备、绑骨骼和做动画。提示词和演示链接见下文 👇
如果你想要和其他模型对比,可以看看这个提示词 👇
---
目标:单个独立 HTML 文件。Three.js。构建一个程序化人形 RPG 角色,做成分层骨骼绑定:蒙皮身体网格,独立护甲网格绑定到同一副骨架,武器挂在手部插槽上。
做交互式展示台,支持分层隔离、切换动画、重新生成角色。
硬性约束
- 单个 .html 文件,无需构建步骤。Three.js 通过 CDN 固定版本 ESM import map 引入,仅添加 OrbitControls 插件。无其他运行时依赖。
- 零外部资源。无 GLTF/FBX/OBJ,无图片文件,无 base64 baked 资源。所有网格、纹理、动画片段都在运行时由代码生成。
- 所有轮廓都通过参数化构建为 BufferGeometry(车削、挤出、放样、扫描截面)。基本体仅用作积木,不能作为最终形状。
- 确定性。单个整数种子通过一个带种子的伪随机数生成器驱动所有随机决策。相同种子每次生成完全相同的角色。
- 性能预算:三角面少于 250k,绘制调用少于 40 次,在集成显卡上 1080p 分辨率能跑 60fps。
骨架与蒙皮
- 骨骼层次结构由代码构建:根、骨盆、3段脊柱、脖子、头部,每侧包含锁骨、上臂、前臂、手、大腿、小腿、脚、脚趾。默认A姿势。
- SkinnedMesh 带有计算得到的 skinIndex/skinWeight 属性。权重通过胶囊段距离衰减计算,最大 4 个影响权重,归一化到 1.0,再对相邻顶点做拉普拉斯平滑处理,避免手肘、膝盖、肩膀出现糖纸收缩变形。
- 保证没有顶点总权重为零,没有骨骼矩阵出现 NaN。
护甲层
这是核心要求,不许简化。
- 护甲是独立的一组网格。绝对不能合并到身体几何体中,绝对不能做成身体上的材质区域或顶点颜色遮罩。
- 可变形部件(胸甲、裙甲、护手袖口)是和身体共享同一 Skeleton 实例的 SkinnedMesh。刚性部件(头盔、肩甲顶盖、护臂、护胫、铁鞋)是普通 Mesh,通过偏移父级绑定到对应骨骼。
- 通过收缩包裹身体生成护甲壳:对区域内的身体顶点采样,沿平滑顶点法线偏移部件自身的厚度,然后用内表面和边缘封闭壳体。结果在任何动画任何姿势下都不能产生 z 轴冲突,也不能让身体穿出护甲。
- 每个部件都可以在运行时独立开关,不需要重建骨骼绑定。
- 需要包含一件基于 verlet 或弹簧求解、叠加在蒙皮之上的披风或战袍。
武器
- 参数化生成剑、斧、钉头锤、矛、盾。剑刃由带血槽的挤出截面生成,额外做护手、缠绕握柄、剑尾。
- 挂载在父级绑定到手骨的 Object3D 插槽上,让武器变换独立于蒙皮计算。支持吸附到后背或髋部剑鞘插槽。
动画
程序化生成,由代码编写,不能直接粘贴关键帧数据。选一种方案坚持做:(a) 由参数化姿势函数计算得到的 QuaternionKeyframeTrack 构建 AnimationClip,通过 AnimationMixer 播放,支持真实交淡,或者 (b) 由相位驱动的姿势系统直接逐帧调整骨骼姿势,支持显式状态混合。
- 状态: idle 呼吸、走路、跑步、攻击挥砍、格挡、受击反应。
- 移动需要通过腿部链的双骨解析 IK 实现脚步落点固定。不能出现脚滑。
- 叠加层:头部跟随摄像机注视,脊柱反向旋转。
展示UI
OrbitControls,自动旋转开关,网格背景。面板包含:种子输入框和重新生成按钮、带交淡的动画选择器、逐个护甲部件开关、分层隔离(仅身体/仅护甲/两者都显示)、骨架辅助线、蒙皮权重热图视图、线框模式、武器选择器、剑鞘开关、播放速度、金属色调。实时显示三角面数、绘制调用、骨骼数量、单帧毫秒数。
渲染
PBR 材质由代码生成。通过 canvas 或着色器噪声为磨损金属、皮革、布料生成程序化法线和粗糙度细节。三灯设置,带一个投影主光源。ACES 色调映射,sRGB 输出。
验收标准
完成前逐一验证:
1. 移除所有护甲部件后,剩下完整、蒙皮正确的身体,没有孔洞。
2. 任何动画任何帧中,都没有身体顶点穿进护甲。
3. 走路时蒙皮护甲随肩膀和髋部变形;刚性部件保持刚性,没有抖动。
4. 用相同种子生成两次,第一帧完全一致。
5. 无控制台错误,无 NaN。
6. 可以通过 file:// 直接运行,不需要服务器。
自动不合格情形
- 加载任何外部模型或纹理。
- 护甲直接用绑定到骨骼的盒子,没有做适配收缩包裹。
- 护甲合并到身体网格,或用材质区域伪造。
- 刚性身体段绑定到骨骼,而非逐顶点蒙皮。
- 动画只旋转整体网格,忽略骨架。
- 用占位注释代替未编写的系统。
输出
一个完整可运行的 HTML 文件。用大写字母做节标题注释。代码外不要有其他文字。
演示链接 👇
本文由 AI 翻译自英文原帖,技术名词保留英文。
查看 X 原帖