3D Model
Prompt
主提示词(修订版):照片级真实感3D多金属多枚奖牌翼伞下降模拟(Three.js版) **角色:** 高级3D WebGL / Three.js 创意开发工程师 & 程序化几何引擎工程师。 > **本次修订核心变更:** 在原有金牌基础上新增 **银牌、铜牌** 材质配色切换能力,并支持用户自由选择 **悬挂奖牌数量(1–6枚)**,形成多枚奖牌叠挂的真实场景(如运动员多次夺冠佩戴多枚奖牌的效果)。以下仅标注新增/修改章节,其余章节(§1、§2、§5、§8、§9等未提及部分)维持原文不变。 --- ## 3. 核心资产真值规范(§3.4 替换为以下内容) ### 3.4 金/银/铜牌 — 三种材质配色的官方SVG真值来源 几何轮廓(丝带、扣环、圆形奖牌本体、浮雕环、数字字形占位区)在三种材质间**完全一致**,仅切换:① 面/边缘渐变配色,② 浮雕环描边色,③ 高光弧线色,④ 数字字形本体("1"/"2"/"3")及其配色。厚度与直径比仍为≈0.11,正反两面图案一致且均正立。 #### 配色矩阵 | 类型 | 面渐变 (goldFace/silverFace/bronzeFace) | 边缘渐变 (Rim) | 内环描边(18.75r / 17.55r) | 高光弧线 | 数字 | |------|------|------|------|------|------| | 🥇 金牌 | `#FFD24A→#FFC83D` | `#FFC53B→#FFB52E` | `#FFA83A` / `#FFD75B` | `#FFF9D9` / `#FFFBE4` | "1",`#FF9E35`/`#FFA23A` | | 🥈 银牌 | `#F2F3F5→#C9CDD2` | `#DADDE1→#AEB2B8` | `#9BA0A6` / `#E6E8EA` | `#FFFFFF` / `#F4F6F8` | "2",`#8A9099`/`#A7ACB2` | | 🥉 铜牌 | `#E8955B→#C97A3E` | `#D98A4C→#B56A33` | `#9C5324` / `#F0B07A` | `#FFE9CF` / `#FFF2E0` | "3",`#9C5324`/`#B56A33` | 丝带路径(蓝色V形+金色扣环部分,`M60.85 39.45...`与`M42.55 65.90...`等)在三种材质间**保持不变**,仅奖牌圆形主体部分(`r=23.05`起)的渐变ID与数字路径随类型替换。 #### 银牌 SVG(结构与金牌同源,替换渐变与数字路径) ```svg <svg xmlns="http://www.w3.org/2000/svg" width="1180" height="1530" viewBox="0 0 118 153"> <defs> <linearGradient id="silverFace" x1="0" y1="0" x2="0.75" y2="1"><stop offset="0" stop-color="#F2F3F5"/><stop offset="1" stop-color="#C9CDD2"/></linearGradient> <linearGradient id="silverRim" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#DADDE1"/><stop offset="1" stop-color="#AEB2B8"/></linearGradient> </defs> <path d="M60.85 39.45 L79.75 39.45 L64.05 68.05 L48.05 68.05 Z" fill="#2F7FC9"/> <path d="M30.45 39.45 L50.15 39.45 L63.05 68.05 L48.05 68.05 Z" fill="#42A5F4"/> <circle cx="55.70" cy="98.55" r="23.05" fill="url(#silverRim)"/> <circle cx="55.70" cy="98.55" r="20.65" fill="url(#silverFace)"/> <circle cx="55.70" cy="98.55" r="18.75" fill="none" stroke="#9BA0A6" stroke-width="1.55" opacity="0.96"/> <circle cx="55.70" cy="98.55" r="17.55" fill="none" stroke="#E6E8EA" stroke-width="0.55" opacity="0.90"/> <path d="M38.20 91.15 C40.55 84.75 45.05 80.55 50.15 78.95" fill="none" stroke="#FFFFFF" stroke-width="1.65" stroke-linecap="round" opacity="0.98"/> <path d="M69.95 107.45 C72.25 104.45 73.45 101.10 73.70 97.20" fill="none" stroke="#F4F6F8" stroke-width="1.85" stroke-linecap="round" opacity="0.98"/> <path d="M49.5 89.5 C49.5 85.0 53.0 82.5 56.5 82.5 C60.5 82.5 63.5 85.0 63.5 88.5 C63.5 92.0 61.0 94.5 57.5 97.5 L50.0 104.5 L50.0 106.5 L64.0 106.5 L64.0 111.0 L44.5 111.0 L44.5 106.0 L54.5 96.5 C57.0 94.2 58.5 92.3 58.5 89.8 C58.5 87.8 57.2 86.3 55.0 86.3 C52.8 86.3 51.3 87.8 51.2 90.3 Z" fill="#8A9099"/> <path d="M44.5 106.0 L54.5 96.5 L54.5 111.0 L44.5 111.0 Z" fill="#A7ACB2" opacity="0.35"/> </svg> ``` #### 铜牌 SVG(结构与金牌同源,替换渐变与数字路径) ```svg <svg xmlns="http://www.w3.org/2000/svg" width="1180" height="1530" viewBox="0 0 118 153"> <defs> <linearGradient id="bronzeFace" x1="0" y1="0" x2="0.75" y2="1"><stop offset="0" stop-color="#E8955B"/><stop offset="1" stop-color="#C97A3E"/></linearGradient> <linearGradient id="bronzeRim" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#D98A4C"/><stop offset="1" stop-color="#B56A33"/></linearGradient> </defs> <path d="M60.85 39.45 L79.75 39.45 L64.05 68.05 L48.05 68.05 Z" fill="#2F7FC9"/> <path d="M30.45 39.45 L50.15 39.45 L63.05 68.05 L48.05 68.05 Z" fill="#42A5F4"/> <circle cx="55.70" cy="98.55" r="23.05" fill="url(#bronzeRim)"/> <circle cx="55.70" cy="98.55" r="20.65" fill="url(#bronzeFace)"/> <circle cx="55.70" cy="98.55" r="18.75" fill="none" stroke="#9C5324" stroke-width="1.55" opacity="0.96"/> <circle cx="55.70" cy="98.55" r="17.55" fill="none" stroke="#F0B07A" stroke-width="0.55" opacity="0.90"/> <path d="M38.20 91.15 C40.55 84.75 45.05 80.55 50.15 78.95" fill="none" stroke="#FFE9CF" stroke-width="1.65" stroke-linecap="round" opacity="0.98"/> <path d="M69.95 107.45 C72.25 104.45 73.45 101.10 73.70 97.20" fill="none" stroke="#FFF2E0" stroke-width="1.85" stroke-linecap="round" opacity="0.98"/> <path d="M49.0 89.0 C49.0 85.0 52.5 82.3 56.5 82.3 C60.5 82.3 63.8 84.8 63.8 88.5 C63.8 91.2 62.0 93.0 59.5 93.8 C62.5 94.5 64.5 96.5 64.5 99.8 C64.5 104.5 60.8 107.5 56.3 107.5 C52.0 107.5 48.5 105.0 48.0 100.8 L52.8 100.0 C53.2 102.3 54.5 103.5 56.3 103.5 C58.3 103.5 59.6 102.2 59.6 100.0 C59.6 97.5 58.0 96.3 55.3 96.3 L53.3 96.3 L53.3 92.5 L55.3 92.5 C57.8 92.5 59.0 91.3 59.0 89.3 C59.0 87.3 57.6 86.2 55.8 86.2 C54.0 86.2 52.8 87.3 52.5 89.6 Z" fill="#9C5324"/> <path d="M53.3 96.3 L59.6 96.3 L59.6 107.5 L53.3 107.5 Z" fill="#B56A33" opacity="0.35"/> </svg> ``` --- ## 4. 几何构建(新增/修改章节) ### 4.2 SVG到3D实体奖牌挤压建模(在原有基础上追加"材质切换"能力) 在原有构建流程基础上,新增一个 **`MEDAL_PALETTES`** 配置映射表(代码内定义),键为 `'gold' | 'silver' | 'bronze'`,值包含:`faceGradientStops`、`rimGradientStops`、`ringColors[2]`、`highlightColors[2]`、`numeralPathD`、`numeralColors[2]`、`metalness`、`roughness`: ```js const MEDAL_PALETTES = { gold: { metalness:0.90, roughness:0.28, faceColor:[0xFFD24A,0xFFC83D], rimColor:[0xFFC53B,0xFFB52E], ring:[0xFFA83A,0xFFD75B], hi:[0xFFF9D9,0xFFFBE4], numeral:'1', numeralColor:[0xFF9E35,0xFFA23A] }, silver: { metalness:0.92, roughness:0.20, faceColor:[0xF2F3F5,0xC9CDD2], rimColor:[0xDADDE1,0xAEB2B8], ring:[0x9BA0A6,0xE6E8EA], hi:[0xFFFFFF,0xF4F6F8], numeral:'2', numeralColor:[0x8A9099,0xA7ACB2] }, bronze: { metalness:0.75, roughness:0.38, faceColor:[0xE8955B,0xC97A3E], rimColor:[0xD98A4C,0xB56A33], ring:[0x9C5324,0xF0B07A], hi:[0xFFE9CF,0xFFF2E0], numeral:'3', numeralColor:[0x9C5324,0xB56A33] } }; ``` - 奖牌**几何体**(圆柱边框/正面、浮雕环Torus、扣环挤压体)只需构建一次并复用;**切换材质类型时**仅需:① 重设 `MeshStandardMaterial.color/metalness/roughness`,② 用 `canvas`重新烘焙渐变贴图(`CanvasTexture`,按选中调色板实时重绘径向/线性渐变),③ 销毁旧数字网格并重新 `extrude` 对应的 `numeralPathD`("1"/"2"/"3"),正反两面镜像规则(`rotation.y=Math.PI`防镜像)保持不变。 - 切换动作需在不打断飞行模拟状态(高度/速度/时间)的前提下**平滑热替换**,避免整帧卡顿(建议材质/贴图切换放入 `requestIdleCallback` 或下一帧执行)。 - 默认类型为 `gold`。 ### 4.4(新增)多枚奖牌挂载与扇形排布系统 支持用户选择悬挂奖牌数量 `N∈[1,6]`,默认 `N=1`。 - **结构**:`Pendulum(摆锤根节点) → MedalRig[0..N-1]`,每个 `MedalRig = {Ribbon(V形缎带), Clasp(金色扣环), MedalAssembly(选中类型的奖牌实例)}`,彼此独立但共享同一 `riserL`/`riserR` 汇聚锚点作为丝带顶端起点。 - **扇形排布公式**: - 水平角度偏移:`angleOffset_i = (i - (N-1)/2) * FAN_ANGLE`,`FAN_ANGLE≈9°~13°`(随N增大自动略微收窄,避免重叠过宽:`FAN_ANGLE = clamp(70/N, 8, 14)` 度) - 深度偏移(前后堆叠防z-fighting):`zOffset_i = (i - (N-1)/2) * 0.065`,中间一枚最靠前/最大,两侧依次略微缩小、后移:`scale_i = 1 - 0.06*|i-(N-1)/2|` - 每枚奖牌的丝带/扣环/本体整体绕 `riser` 锚点做刚体旋转 `angleOffset_i`,并叠加局部微小随机初始相位 `φ_i = i*0.37 + rand()*0.2`,用于下方摆锤运动解相位。 - **摆锤运动解同步**:§6.1中摆锤的"相位滞后次级振荡"公式需对每个 `MedalRig[i]` 引入独立相位 `φ_i` 与微扰频率(`freq_i = BASE_FREQ*(1+0.04*sin(i))`),使多枚奖牌呈现自然的非同步摇摆,避免机械感的整齐划一摆动;但仍共享同一根总体阻尼衰减包络。 - **N=1时**必须与原始单枚金牌布局完全一致(居中、无角度偏移、无深度偏移),保证向下兼容。 - **碰撞/穿插规避**:当 `N≥4`时丝带宽度需按 `ribbonWidth_i *= clamp(1.0 - 0.05*(N-3), 0.75, 1.0)` 略微收窄,避免相邻奖牌缎带视觉重叠过厚。 --- ## 6. 飞行动力学、场景图与相机编排(§6.1 更新) ### 6.1 场景图与运动学(更新版) `Scene → Root(Canopy + Lines + Pendulum) → Pendulum(MedalRig[0..N-1])`,其中每个 `MedalRig` 内部为 `Ribbon + Clasp + MedalAssembly`(见§4.4)。 - **Root**:周期性俯仰/滚转摇摆 + 垂直升沉,逻辑不变。 - **Pendulum**:除原有整体"continuous slow self-rotation (`t*0.45`)"外,新增对每个子 `MedalRig[i]` 的独立相位滞后振荡(见§4.4解同步公式),确保多枚奖牌各自自然摆动、互不同步、互不穿模。 - 每帧需对**所有** `MedalRig[i]` 内的奖牌本体同步执行自转展示(揭示正反面浮雕细节),且总数 `N` 变化时需动态增删场景节点并重新计算扇形排布,不可触发整体重建画布或丢失当前飞行状态(高度/速度/相机状态保持连续)。 --- ## 7. HUD遥测与交互(新增控制项,追加至原控制栏) - **奖牌材质切换器**:三态分段控制按钮 `🥇金牌 / 🥈银牌 / 🥉铜牌`,点击即时热切换当前所有悬挂奖牌的材质配色(见§4.2),默认选中金牌。 - **奖牌数量选择器**:步进器或下拉选择,范围 `1–6`,默认`1`;切换时触发§4.4扇形排布重算,并带一个 `0.4s` 的缓动过渡动画(新增奖牌从中心位置淡入+展开到目标角度,移除的奖牌反向收拢+淡出),避免生硬跳变。 - 其余原有控制项(暂停/恢复、速度选择、风声开关、相机重置、重生按钮、轨道/平移/缩放交互)维持不变。 - **左侧HUD面板**新增一行文本信息:当前奖牌类型 + 数量(如 `"🥇 ×3"`)。 --- ## 9. 质量标准(追加条款) - 三种材质(金/银/铜)在相同PBR光照环境下须呈现**可辨识的材质差异**:金牌暖色高反光、银牌冷色高亮锐利镜面、铜牌暖铜色哑光偏漫反射,三者切换时质感差异应清晰可信,而非仅更换贴图颜色了事。 - 多枚奖牌悬挂时,须保证扇形排布**无几何穿插/无z-fighting/无缎带重叠失真**,整体摆动须呈现自然非同步的物理可信感(如同真实运动员佩戴多枚奖牌时的轻微错位晃动),而非刚体同步平移。 - 材质切换与数量切换操作须在**60FPS不掉帧**的前提下完成,且不可中断/重置当前飞行模拟的时间轴、相机状态与随机种子(风场扰动等)。“ 参考素材 https://cloudflareimg.cdn.sn/i/6abe4dab46165_1790856619.jpg https://cloudflareimg.cdn.sn/i/6abe4dab0692a_1790856619.jpg https://cloudflareimg.cdn.sn/i/6abe4d98eab0b_1790856600.webp
A system prompt was added to support web rendering
Response not available