From 09ef80cd235bffb3f34ef782e84afd7c8ebe0e40 Mon Sep 17 00:00:00 2001 From: Linghong Date: Wed, 10 Jun 2026 19:56:57 +0800 Subject: [PATCH] =?UTF-8?q?PRD=E8=A1=A5=E5=85=85=E8=87=AA=E9=80=82?= =?UTF-8?q?=E5=BA=94blob+gradient=E7=AE=97=E6=B3=95=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=EF=BC=8C=E4=BF=9D=E7=95=99AI=20prompt=E4=BE=A74x3=20UV?= =?UTF-8?q?=E5=B8=83=E5=B1=80=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...玩法创作】跳一跳俯视角玩法模æ¿PRD-2026-05-19.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/prd/ã€çŽ©æ³•åˆ›ä½œã€‘è·³ä¸€è·³ä¿¯è§†è§’çŽ©æ³•æ¨¡æ¿PRD-2026-05-19.md b/docs/prd/ã€çŽ©æ³•åˆ›ä½œã€‘è·³ä¸€è·³ä¿¯è§†è§’çŽ©æ³•æ¨¡æ¿PRD-2026-05-19.md index 34f39319..e510514a 100644 --- a/docs/prd/ã€çŽ©æ³•åˆ›ä½œã€‘è·³ä¸€è·³ä¿¯è§†è§’çŽ©æ³•æ¨¡æ¿PRD-2026-05-19.md +++ b/docs/prd/ã€çŽ©æ³•åˆ›ä½œã€‘è·³ä¸€è·³ä¿¯è§†è§’çŽ©æ³•æ¨¡æ¿PRD-2026-05-19.md @@ -2,7 +2,7 @@ ## 1. 目标 -`jump-hop` é‡å®šä¹‰ä¸ºç«–å±ä¿¯è§†è§’å¹³å°è·³è·ƒæ¸¸æˆã€‚创作者åªè¾“入主题,系统生æˆä¸€å¼ è¯¥ä¸»é¢˜çš„ `1024x1536` 立方体主题物体 UV 展开图集,按 `3列*6行` 容纳 18 个方å—,æ¯ä¸ªæ–¹å—冿Œ‰å›ºå®š `4列*3行` UV ç½‘åˆ‡æˆ top/front/right/back/left/bottom å…­å¼ é¢è´´å›¾ï¼›è¿è¡Œæ€ä½¿ç”¨ Three.js å¤ç”¨æ ‡å‡† `1x1x1` 等比æžå°å€’角立方体几何体,把六é¢è´´å›¾è´´åˆ°ç«‹æ–¹ä½“地æ¿ä¸Šç»„æˆæ— é™å¹³å°æµï¼ŒåŒæ—¶ä½¿ç”¨é™¶æ³¥å„¿ logo 逿˜Ž PNG 作为玩家角色。 +`jump-hop` é‡å®šä¹‰ä¸ºç«–å±ä¿¯è§†è§’å¹³å°è·³è·ƒæ¸¸æˆã€‚创作者åªè¾“入主题,系统生æˆä¸€å¼ è¯¥ä¸»é¢˜çš„ `1024x1536` 立方体主题物体 UV 展开图集,按 `3列*6行` 容纳 18 个方å—,æ¯ä¸ªæ–¹å—内部å†ç”¨è‡ªé€‚应 blob+gradient 算法æå– top/front/right/back/left/bottom å…­å¼ é¢è´´å›¾ï¼›è¿è¡Œæ€ä½¿ç”¨ Three.js å¤ç”¨æ ‡å‡† `1x1x1` 等比æžå°å€’角立方体几何体,把六é¢è´´å›¾è´´åˆ°ç«‹æ–¹ä½“地æ¿ä¸Šç»„æˆæ— é™å¹³å°æµï¼ŒåŒæ—¶ä½¿ç”¨é™¶æ³¥å„¿ logo 逿˜Ž PNG 作为玩家角色。 首版目标: @@ -35,10 +35,10 @@ - å•图资产槽ä½ï¼šæ— ç‹¬ç«‹è§’色图槽ä½ï¼›v1 固定使用陶泥儿 logo 逿˜Ž PNG 角色 - ç³»åˆ—ç´ ææ§½ä½ï¼š - `batchId = jump-hop-tile-atlas` - - `sheetSpec = 1024x1536 / 3列*6行大å•å…ƒ / æ¯æ ¼4列*3行UV网 / PNG / 纯洋红 #FF00FF 安全ç¼ä¸Žå¤–圈背景 / åŽç«¯åˆ‡å›¾ä¸ºé¢è´´å›¾ PNG` + - `sheetSpec = 1024x1536 / 3列*6行大å•å…ƒ / æ¯æ ¼å†…自适应blob+gradientæå–å…­é¢ / PNG / 纯洋红 #FF00FF 安全ç¼ä¸Žå¤–圈背景 / åŽç«¯åˆ‡å›¾ä¸ºé¢è´´å›¾ PNG` - `slotSpecs = tile-01 ... tile-18`,æ¯ä¸ª tile å†åŒ…å« `top/front/right/back/left/bottom` å…­ä¸ªé¢ slot,所有 slot 必须对应唯一 OSS path / `assetObjectId` - - 切图规则:先按原图宽高å‡åˆ†ä¸º 3 列 6 行,从上到下ã€ä»Žå·¦åˆ°å³å¾—到 18 个大å•元;æ¯ä¸ªå¤§å•元内部固定 4 列 3 行 UV 网,`top` 在第 1 行第 2 列,`left/front/right/back` 在第 2 行第 1-4 列,`bottom` 在第 3 行第 2 列;æ¯ä¸ªé¢è¾“出 `256x256` ä¸é€æ˜Ž PNG - - 逿˜ŽåŒ–è§„åˆ™ï¼šç”Ÿæˆæ—¶è¦æ±‚纯洋红 key 安全ç¼å’Œ UV 空ä½ï¼ŒåŽç«¯ä¸åšé€æ˜ŽåŒ–æŠ å›¾ï¼ŒåªæŠŠè£åˆ‡åŽæ®‹ç•™çš„æ´‹çº¢ key 色转为ä¸é€æ˜Žæè´¨åº•色,ä¿ç•™ç»¿è‰²ã€ç™½è‰²ã€é›ªåœ°ã€äº‘朵ã€è‰åœ°ã€èŠ±æœµã€æžœè‚‰ç²‰è‰²å’Œæµ…é»„è‰²ç­‰ä¸»é¢˜çº¹ç† + - 切图规则:先通过 density ç§å­ç‚¹ç²¾ä¿®è‡ªé€‚应检测 3 列 6 行大å•元边界(`SeedRefinement`);æ¯ä¸ªå¤§å•元内部先用 BFS 连通域æå–主 blobã€æ¸…除éžä¸» blob 噪点,å†å¯¹è¡Œ density 和列 height profile åš gradient åˆ†æžæ£€æµ‹è¾¹ç•Œï¼ˆyâ‚€/yâ‚/yâ‚‚/y₃ã€xâ‚€/xâ‚/xâ‚‚/x₃),按此边界划分为 3×3 block å¹¶ä¿ç•™ 5 个有效 blockï¼Œå°†å« Right+Back çš„ block 从中点拆分为两å—,对æ¯ä¸ª block å–æœ€å¤§ä¸é€æ˜ŽçŸ©å½¢åŽç¼©æ”¾ä¸º `256x256` ä¸é€æ˜Ž PNG + - 逿˜ŽåŒ–è§„åˆ™ï¼šç”Ÿæˆæ—¶è¦æ±‚纯洋红 key 安全ç¼å’Œ UV 空ä½ï¼›åŽç«¯å…ˆå¯¹å›¾é›†åšæ´‹çº¢åŽ»èƒŒï¼ˆBFS 漫水 + 镂空洞检测),å†å¯¹æ¯ä¸ªå¤§å•元内æå–主 blob åŽè¿›è¡Œè‡ªé€‚应é¢åˆ‡åˆ†ï¼›åˆ‡åˆ†åŽåœ¨ block 内喿œ€å¤§ä¸é€æ˜ŽçŸ©å½¢ï¼Œæ¶ˆé™¤é€æ˜Žè¾¹ç¼˜ - 失败回写:生æˆå¤±è´¥æ—¶ session ä¿æŒ failed,å¯ä»Žç”Ÿæˆé¡µé‡è¯• - 局部é‡ç”Ÿæˆï¼šç»“果页å…许é‡ç”Ÿæˆåœ°æ¿è´´å›¾å›¾é›†ï¼Œä»åªè°ƒç”¨ä¸€æ¬¡ image2ï¼›å‰ç«¯å±•示生æˆå›¾æ—¶ä»¥ `assetObjectId` 作为刷新键,é¿å…åŒä¸€è·¯å¾„é‡å†™åŽçš„æ—§ç­¾å或旧缓存 - API 命å空间:`/api/creation/jump-hop/*`ã€`/api/runtime/jump-hop/*` @@ -60,11 +60,11 @@ ## 5. 地æ¿è´´å›¾å›¾é›† -image2 åªç”Ÿæˆä¸€å¼  `1024x1536` 竖版图片,画é¢ä¸º `3列*6行` å‡åŒ€åˆ†å¸ƒçš„立方体主题物体 UV 展开包装;实际æç¤ºè¯å¿…须先约æŸâ€œç”»é¢åªåŒ…å« 18 个用于跳一跳地æ¿çš„立方体主题物体 UV 展开包装图â€ï¼Œå¹¶æ˜Žç¡®è¿™æ˜¯ä¾› Three.js 标准 1x1x1 等比æžå°å€’角立方体使用的 cube object UV unwrap atlas。æ¯ä¸ªå¤§å•元格代表一个完整方å—化主题物体,并在固定 `4列*3行` UV 网中æä¾›å…­å¼ é¢è´´å›¾ï¼›ä¸æ˜¯å•纯æè´¨è´´ç‰‡ã€å•张图é‡å¤å…­é¢ã€åœ°å—æˆå“图ã€è·³æ¿ã€ç‰©ä½“å‰ªå½±ã€æ¸¸æˆç•Œé¢ã€æ£‹ç›˜ã€èƒŒåŒ…ã€è£…å¤‡æ æˆ–图标集页é¢ã€‚ +image2 åªç”Ÿæˆä¸€å¼  `1024x1536` 竖版图片,画é¢ä¸º `3列*6行` å‡åŒ€åˆ†å¸ƒçš„立方体主题物体 UV 展开包装;实际æç¤ºè¯å¿…须先约æŸâ€œç”»é¢åªåŒ…å« 18 个用于跳一跳地æ¿çš„立方体主题物体 UV 展开包装图â€ï¼Œå¹¶æ˜Žç¡®è¿™æ˜¯ä¾› Three.js 标准 1x1x1 等比æžå°å€’角立方体使用的 cube object UV unwrap atlas。æ¯ä¸ªå¤§å•元格代表一个完整方å—化主题物体,并在固定 `4列*3行` UV 网中æä¾›å…­å¼ é¢è´´å›¾ï¼ˆAI prompt ä¾§ä¸å˜ï¼‰ï¼›åŽç«¯é€šè¿‡è‡ªé€‚应 blob+gradient 算法检测é¢çš„实际ä½ç½®å¹¶åˆ‡å›¾ï¼Œä¸å†ä¾èµ–固定åƒç´ åæ ‡å‡åˆ†ã€‚䏿˜¯å•纯æè´¨è´´ç‰‡ã€å•张图é‡å¤å…­é¢ã€åœ°å—æˆå“图ã€è·³æ¿ã€ç‰©ä½“å‰ªå½±ã€æ¸¸æˆç•Œé¢ã€æ£‹ç›˜ã€èƒŒåŒ…ã€è£…å¤‡æ æˆ–图标集页é¢ã€‚ å›¾é›†è¦æ±‚: -1. æ¯ä¸ªå¤§å•元内部固定使用 `4列*3行` UV ç½‘ï¼Œåªæœ‰å…­ä¸ªä½ç½®æœ‰è´´å›¾ï¼šç¬¬ 1 行第 2 列是 `top`;第 2 行第 1-4 åˆ—ä¾æ¬¡æ˜¯ `left / front / right / back`;第 3 行第 2 列是 `bottom`;其它ä½ç½®ä¿æŒçº¯æ´‹çº¢ `#FF00FF`ï¼› +1. æ¯ä¸ªå¤§å•元内部固定使用 `4列*3行` UV ç½‘ï¼Œåªæœ‰å…­ä¸ªä½ç½®æœ‰è´´å›¾ï¼šç¬¬ 1 行第 2 列是 `top`;第 2 行第 1-4 åˆ—ä¾æ¬¡æ˜¯ `left / front / right / back`;第 3 行第 2 列是 `bottom`;其它ä½ç½®ä¿æŒçº¯æ´‹çº¢ `#FF00FF`。以上为 AI 生图的 layout è¦æ±‚(prompt ä¾§ä¸å˜ï¼‰ã€‚åŽç«¯åˆ‡å›¾æ”¹ä¸ºè‡ªé€‚应 blob+gradient 算法检测é¢çš„实际åƒç´ åŒºåŸŸï¼Œä¸å†ä¾èµ–固定åƒç´ åæ ‡å‡åˆ†ã€‚ 2. æ¯ä¸ªé¢éƒ½æ˜¯ full-bleed ä¸é€æ˜Žæ­£æ–¹å½¢è´´å›¾ï¼Œå››è§’ã€è¾¹ç¼˜å’Œä¸­å¿ƒéƒ½è¦æœ‰å¯è¯†åˆ«å†…容;六个é¢å…±åŒç»„æˆåŒä¸€ä¸ªå®Œæ•´æ–¹å—化主题物体,ä¸èƒ½æŠŠåŒä¸€å¼ çº¹ç†é‡å¤å…­æ¬¡ï¼Œä¹Ÿä¸èƒ½å…­é¢å„画互ä¸ç›¸å…³çš„å°å›¾æ ‡ï¼› 3. 贴图ä¸ç”Ÿæˆå·²ç»æ¸²æŸ“好的é€è§† 3D å—体æˆå“,ä¸åŒ…嫿‘„åƒæœºè§’度ã€å·²çƒ˜ç„™ä¾§å£ã€å·²çƒ˜ç„™åŽšåº¦ã€è‡ªèº«æŠ•å½±ã€æŽ¥è§¦é˜´å½±æˆ–çƒ˜ç„™é«˜å…‰ï¼›çœŸå®žå€’è§’ã€ä¾§å£ã€é€è§†å’Œé˜´å½±ç”±è¿è¡Œæ€ Three.js 生æˆï¼› 4. 18 ä¸ªæ–¹å—æ¥è‡ªåŒä¸€ä¸»é¢˜ã€åŒä¸€å“‘光手绘包装体系,但应表达ä¸åŒæ–¹å—化主题物体或明显ä¸åŒçš„包装识别特å¾ï¼›æ°´æžœä¸»é¢˜è¦æ··æŽ’æ–¹å—è‹¹æžœã€æ–¹å—é¦™è•‰ã€æ–¹å—æ©™å­ã€æ–¹å—è¥¿ç“œã€æ–¹å—è‰èŽ“ã€æ–¹å—è‘¡è„ã€æ–¹å—å¥‡å¼‚æžœã€æ–¹å—è èã€æ–¹å—æŸ æª¬ã€æ–¹å—桃å­ã€æ–¹å—æ¢¨ã€æ–¹å—è“èŽ“ã€æ–¹å—èŠ’æžœã€æ–¹å—椰å­ã€æ–¹å—ç«é¾™æžœã€æ–¹å—æ¨±æ¡ƒã€æ–¹å—å“ˆå¯†ç“œã€æ–¹å—石榴,ä¸è¦ 18 个方å—éƒ½åªæ˜¯åŒä¸€ç§æžœçš®ã€æžœè‚‰æˆ–å¶è„‰çº¹ç†ï¼› @@ -187,7 +187,7 @@ successfulJumpCount desc -> durationMs asc -> updatedAt asc 1. åˆ›ä½œé¡µåªæ˜¾ç¤ºä¸»é¢˜è¾“入; 2. 生æˆé“¾è·¯åªè°ƒç”¨ä¸€æ¬¡åœ°æ¿è´´å›¾å›¾é›† image2,ä¸å†è°ƒç”¨è§’色生图; -3. 地æ¿è´´å›¾å›¾é›†ä¸º `1024x1536 / 3列*6行 / æ¯æ ¼4列*3行UV网`,åŽç«¯åˆ‡å‡º 18 组ã€å…± 108 å¼ é¢è´´å›¾ PNGï¼› +3. 地æ¿è´´å›¾å›¾é›†ä¸º `1024x1536 / 3列*6行`,åŽç«¯é€šè¿‡è‡ªé€‚应 blob+gradient 算法切出 18 组ã€å…± 108 å¼ é¢è´´å›¾ PNGï¼› 4. 结果页ä¸ä¾èµ–旧角色图片槽; 5. è¿è¡Œæ€ä¸ºç«–å±ä¿¯è§†è§’,首å±ä¿æŒ 3 个地å—å¯è§ï¼› 6. 长按蓄力值影å“è½ç‚¹è·ç¦»ï¼Œ`dragVectorX/dragVectorY` 影哿­£å¼è½ç‚¹æ–¹å‘ï¼›