polywright-finish 是做什麼的?
一個網格在通過目標平台的檢查、在渲染器中看起來正確,並以正確的大小和方向匯入時,就算是完成了。回到中心:../polywright/SKILL.md。引擎詳細資料:references/engines.md。針對單一引擎逐步製作與完成:references/roblox.md、references/unity.md、references/web-threejs.md。彎曲、著色和紋理表現良好的網格:references/topology.md。
步驟 1:測量,然後決定
pw.py inspect <file> 和 pw.py check <file> --target <t> --real-size-m X。失敗訊息會指出該做什麼:三角形太多、沒有 UV、材質太多、尺寸錯誤、開放邊緣,以及針對遊戲、網頁和 AR 目標的翻轉或堆疊面、不均勻的 UV 密度(inspect --topology;翻轉的面:convert --fix-winding)。在每個破壞性步驟前後都要渲染(pw.py render)。
步驟 2:縮放、方向、樞紐點
- 以公尺為單位的實際尺寸:
pw.py convert in out --size-m X --ground --center(將最長邊設為 X;對於不規則形狀,使用一個已知的尺寸)。一扇門是 2.0 到 2.1 公尺,一個椅子座墊是 0.45 公尺,一張桌子是 0.75 公尺,一個人約 1.7 到 1.8 公尺。 - 道具的樞紐點在底部中心,門的樞紐點在鉸鏈,輪子的樞紐點在軸心,武器的樞紐點在握把。
- 軸向:Blender 是 Z 軸向上且前面朝向 -Y;glTF 是 Y 軸向上且前面朝向 +Z;Unreal 是 Z 軸向上並使用公分;Unity 是 Y 軸向上的左手座標系;Roblox 是 Y 軸向上,1 個 stud = 0.28 公尺。若有疑問,匯出一個 1 公尺的立方體和一個方向箭頭進行測試。
步驟 3:目標平台的幾何處理
| 需求 | 做法 |
|---|---|
| 較少的三角形,靜態道具 | pw.py convert --max-tris N(塌陷式減面可保留輪廓);使用 pw.py lods 產生 LOD(每層約減少一半) |
| 較少的三角形,可彎曲網格 | 不要使用減面:合併不會彎曲的迴圈,保留關節周圍的迴圈(references/topology.md) |
| 用於變形或雕刻的乾淨四邊面 | 先使用體素網格重製(會封閉模型),然後使用 QuadriFlow(polywright-blender 中的配方)、Instant Meshes、Quad Remesher(付費)或託管的四邊面重製服務;角色:手動處理 |
| 生成的網格(密集、凹凸不平、邊緣柔和) | 靜態道具:減面並重新烘焙;英雄物件或動畫模型:重新拓撲並重新烘焙;或使用更好的參考圖重新生成 |
| 應合併為一個的許多部件 | --join;對於實體,使用 pw.py union |
| 碰撞 | 每個部件一個盒子、膠囊或凸包;Unreal 使用 UCX_ 前綴;Roblox 使用 CollisionFidelity Box 或 Hull;對於移動中的物體,永遠不要使用渲染網格 |
步驟 4:UV 與紋理
- UV:道具使用
pw.py convert --uv(智慧 UV 投影);用於烘焙光照貼圖的第二組不重疊 UV(配方);整個套件的紋理密度保持一致;使用減面貼圖和圖集來減少材質和繪製呼叫。 - 從高密度網格烘焙到低密度網格:法線、AO、顏色(配方
bake-high-to-low)。重新拓撲會破壞 UV,因此務必重新烘焙。 - PBR 金屬粗糙度工作流程:金屬值為 0 或 1,粗糙度決定外觀,漫射色永不為純黑或純白;glTF 將遮擋、粗糙度和金屬值分別打包到 R、G、B 通道(ORM)。
- 法線貼圖:Blender、Unity、Godot、glTF、three.js、Roblox 使用 OpenGL(Y+);Unreal 使用 DirectX(Y-)。反轉綠色通道來修正不符的情況。紋理使用 2 的冪次方;對於網頁和 AR,每個材質使用 1024 到 2048 像素。
步驟 5:骨架(當網格會動時)
輸入為 A-Pose 姿勢,網格需為乾淨的流形網格。使用 UniRig(MIT 授權,本機運算,8 GB)或託管服務 Tripo、Meshy、AccuRIG(最乾淨的人形權重)、Mixamo(人形,最佳重定位文件)。2026 年的比較發現 Meshy 的臀部樞紐點偏移 5 到 15 公分(導致腳步滑動),而 AccuRIG 在匯入時有一次比例變為 0.01:骨架化後請檢查比例和樞紐點。Roblox:每個頂點最多 4 個骨骼影響,根骨骼位於原點。Rigify 骨架匯出的骨骼數量遠多於其變形骨骼組(在僅啟用變形骨骼的情況下,706 個骨骼中有 278 個是變形骨骼):對於遊戲,請建立僅含變形骨骼的骨架,或使用上述方法。
動畫片段:每個片段的起點和終點應落在少數幾個共享的核心姿勢上,這樣片段之間無需融合即可串聯;循環片段的第一影格應等於最後一影格;決定每個片段是使用根運動還是原地運動,並記錄下來;將加法片段(瞄準、注視、傾斜)作為獨立動作存放在基礎姿勢之上(Gregory, Game Engine Architecture 2e (2014), sec. 11.6)。
步驟 6:匯出與驗證
pw.py convert 可寫入 GLB、FBX、OBJ、USD/USDZ、STL 格式。各目標平台對應:
| 目標 | 匯出格式 | 接著做 |
|---|---|---|
| game-roblox | 每個 MeshPart 使用 FBX、OBJ 或 GLB,三角形數量低於 20k,使用一種材質 | check --target game-roblox;由 roblox-agent 放置 |
| game-unity | GLB(glTFast)或 FBX --fbx-bake-axes | 在專案中進行匯入測試(unity-agent) |
| game-unreal | FBX 或 GLB;對於密集的不透明網格使用 Nanite | 匯入時檢查比例 |
| web-threejs | GLB,然後執行 gltf-transform optimize in.glb out.glb --compress meshopt --texture-compress ktx2 --join-named false | 使用 gltf_validator;在頁面上檢查(threewright) |
| ar-usdz | convert in.glb out.usdz | 當 usd-core 已安裝時,執行 usdchecker --arkit |
| video-blockout | 使用真實比例的 GLB 或 .blend,加上旋轉台與深度/法線通道(配方) | 交給影片外掛程式(cinewright) |
| commerce-gltf | GLB,真實比例,原點在底部中心,僅使用三角形 | check --target commerce-gltf |
「依角度平滑」是 Blender 4.1 及更高版本中的幾何節點修改器:匯出時需套用修改器,否則硬邊緣會以平滑方式匯出(glTF、FBX 和 OBJ 均受影響,已在 5.2.1 版驗證)。記錄每個輸出:pw.py manifest <dir> --add-output out/<file> --target <t> --inspect。
維護
Evergreen 單元,層級 moderate。伴隨檔案:RESEARCH.md、CHANGELOG.md、LEARNINGS.md、TESTS.md 與 evals/evals.json、MAINTENANCE.md,狀態記錄在 evergreen.json。每次使用時讀取 evergreen.json;需要更新時重新整理。