Community影像github.com

polywright

3D 模型工作的中樞技能。自動判斷最佳製作途徑(尋找、捕捉、生成、撰寫程式碼),建立資產資料夾與清單,並透過數據和圖片驗證每個步驟。

polywright 是什麼?

polywright 是一個專業的 AI 智能體技能,專為處理 3D 模型工作而設計。它作為一個中樞,自動判斷並執行最適合的模型製作途徑,例如尋找現有模型、透過攝影測量法捕捉、使用 AI 生成,或直接撰寫程式碼建立模型。此技能會為每個資產建立一個標準化的資料夾結構,其中包含 `manifest.json` 清單,供其他外掛與技能讀取和使用。它支援多種目標平台,包括 Unity、Roblox、Unreal Engine、three.js、AR、3D 列印和 AI 影片。polywright 的核心腳本 `scripts/pw.py`(以及其 Blender 專用部分 `scripts/pw_bpy.py`)提供了一套完整的指令,用於檢查、檢查、渲染、轉換、預算檢查和資產管理。整個工作流程強調在幾何圖形建立前先收集參考資料、進行初步區塊建模以確認比例,並透過檢查三角形數量、渲染六視圖、以及針對目標平台進行合規性檢查來嚴格驗證每個步驟。它還包含進階功能,例如將模型合成到圖片中、為遊戲產生精靈圖表、為 AI 影片建立人群或戰鬥場景的區塊建模,以及將模型安排到場景插圖中。最後,它會負責將成品移交給其他專門技能(例如用於完成處理、3D 列印或特定遊戲引擎的技能),確保整個生產流程的連貫性。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/polywright/tree/HEAD/skills/polywright

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

polywright 是做什麼的?

3D 模型工作的中樞。它決定模型的製作方式,將每個資產保存在一個帶有清單的資料夾中,並透過數字和圖片驗證每個步驟。相關技能則負責深入細節。

腳本:此技能資料夾中的 scripts/pw.py(Python 3.9+,標準函式庫,每個指令一個 JSON 物件; scripts/pw_bpy.py 是其 Blender 部分,切勿手動執行)。 每次工作階段執行一次 python <此資料夾>/scripts/pw.py doctor:它會尋找 Blender(任何作業系統)、Python 網格 函式庫、切片器和 ComfyUI 主機,並報告缺少的項目。完整指令列表:references/cli.md。

步驟 1:簡報(只問你無法推斷的資訊)

  • 內容:物體或場所,真實或想像,以及其可辨識程度。
  • 目標:pw.py check --list 中的一個或多個目標(game-roblox, game-unity, game-unreal, web-threejs, ar-usdz, commerce-gltf, print-fdm, print-resin, video-blockout, cad-step)。目標決定預算。
  • 實際尺寸(以公尺為單位)(長凳長 1.8 公尺;人高 1.7 到 1.8 公尺)。錯誤的比例是最常見的 隱性錯誤;check --real-size-m 可以捕捉到它。
  • 輸入:提示詞、照片、草圖、測量數據、地圖位置、現有的網格。
  • 精細度與預算:初步區塊建模、遊戲就緒、頂級模型;託管產生器可能花費的時間或金錢。

建立:pw.py new <dir> --name <名稱> --kind real|imagined|hybrid --route <途徑> --targets a,b --real-size-m X。 資料夾:refs/(參考資料,每個記錄為一個來源)、work/(.blend、中間檔案)、out/(每個目標 一個交付物)、renders/(審閱圖表)、brief.md、manifest.json。給其他外掛的合約: references/contract.md。

步驟 2:選擇途徑(滿足簡報需求的最便宜方式)

情境途徑技能
常見物體;許可證允許重複使用尋找:Poly Haven, Kenney, Quaternius (CC0),Sketchfab 和列印網站(檢查每個許可證)此技能, references/routes.md
有尺寸、可配合的零件、銳利邊緣(支架、外殼、建築物、家具)程式碼 (--route procedural):bpy, build123d/CadQuery/OpenSCADpolywright-generate, polywright-blender
真實地點(公園、街道、校園、地形)地點:OSM + 高程 (pw.py place)polywright-capture
可以拍照或掃描的真實物體捕捉:攝影測量法、高斯潑濺、掃描器,或根據測量數據建模polywright-capture
想像的有機體或一次性物體(雕像、生物、道具)生成:先產生參考圖表,再進行影像轉 3Dpolywright-references, polywright-generate
會變形的頂級角色生成或雕刻作為基礎,再進行重拓樸和綁定polywright-generate, polywright-finish

大多數好的結果會混合多種途徑:一個 OSM 公園配上生成的主要道具,一個用程式碼建造的房屋配上生成的 雕像。在清單中記錄每個零件的途徑。

步驟 3:先有參考資料,再有幾何圖形

對於非現成的任何東西,先收集或產生參考資料(polywright-references):在共享的地面線上放置正交視圖, 並帶有高度條、材質樣本、比例參考。產生的輸入決定了影像轉 3D 的大部分結果。

步驟 4:建立,然後驗證(每種途徑)

  1. 先進行區塊建模,使用實際尺寸:用基本幾何體確定輪廓和比例。在此修正比例;現在修正成本很低。
  2. 數字:pw.py inspect <檔案>:三角形數、物件數、尺寸、材質、紋理、UV、水密性、 零件數。在每個破壞性步驟前後讀取它。
  3. 圖片:pw.py render <檔案> --out renders/<步驟>:六個視圖和一張 sheet.png。閱讀這個圖表, 而不是六張截圖。與參考資料比較:輪廓、比例、遺失或浮動的零件、著色異常、錯誤的軸向(側躺)、 錯誤的比例。
  4. 目標:pw.py check <檔案> --target <t> --real-size-m X。失敗意味著在交付前修正;警告 意味著在交接時說明。
  5. 記錄:pw.py manifest <目錄> --add-output out/<檔案> --target <t> --inspect,每個來源使用 --add-source <URL> --licence <l> --author <a>,然後使用 --validate。

規劃、執行和批評是分開的階段:建立完成後,以批評者的角度查看圖表,並在聲稱完成前列出缺陷。 值得花兩輪修復回溯錯誤;超過這個次數,就應該重新考慮方法。 為每個里程碑保存一個編號的 .blend 檔案(work/<名稱>_v03.blend),以便長時間的工作可以從磁碟重新開始。

將模型合成到圖片中

當影像或影片模型一直錯誤地繪製設計好的道具時(例如分鏡圖、場景參考圖、海報),請採用圖片的構圖和模型的形狀:

  1. 僅挑選用於構圖的圖片:人物的站位、光線、目標。使用一個簡單的替代道具即可。
  2. pw.py match model.blend --still pic.png --out work/match.png --anchor-px X,Y --anchor-local=X,Y,Z --aim-px X,Y --aim-local=X,Y,Z --depth M --horizon ROW --hide BOX --mask-add BOX:模型的錨點(一個 握柄)落在手上,其瞄準點(一個尖端)落在精確的像素上,使用圖片的鏡頭和水平線渲染 RGBA。設定 --depth 使其寬度(像素)與替代物相符(寬度 = f_px x 直徑 / depth; f_px 在結果中)。--hide 將零件隱藏在手後面;--mask-add 將手加到遮罩中。
  3. 以 3 倍縮放讀取裁剪後的 match_paste.png:檢查形狀、在畫面中的尺寸、瞄準點。修正 depth 和像素,重新執行(幾秒鐘)。
  4. 在 match_mask.png 內部使用低降噪的遮罩影像編輯進行混合(FLUX.2 Klein 或任何 inpaint 模型: 降噪 0.3 到 0.5,低 cfg),然後將結果透過遮罩貼回,使外部的每個像素保持原樣。整個圖片的編輯會重繪所有內容(HDR 色彩、更大的道具)。
  5. 以全尺寸檢查;保留兩個或更多種子。

道具的參考圖表也來自模型(polywright-references,步驟 2b)。

從模型產生遊戲精靈圖表

當影像模型在遊戲精靈圖表中一直弄錯機械結構時(例如不圓的輪子、屋頂上的葉片),請建立模型,透過遊戲自己的攝影機渲染, 並僅讓影像模型負責上色:

  1. pw.py spritecam <registry.json> --like <精靈圖表> --out camera.json:根據遊戲的地面菱形(L-014)擬合的正交攝影機。 在其中設定 tile_m 為模型每瓷磚的實際公尺數。
  2. 使用每個物件的零件前綴(wheel_、roof_...)在場景屬性 sprite_parts 中建立模型, 將活動零件放在一個在零件自己空間中建立的樞紐空白物件下,並將運動放在場景屬性 loop 中。
  3. pw.py sprite model.blend --camera camera.json --out renders/L1 --scale 10.6667(一個 96 像素精靈圖表使用 1024 像素): 以「sheet」樣式讀取通道和最終圖像,並與遊戲的精靈圖表並排比較;對動畫零件使用 --frames N --frame-passes id,pos, 對不需要輪子的板子使用 --hide wheel_。 然後在上色前,檢查其尺寸是否與遊戲中相鄰的精靈圖表相符:aw.py sprite <96 像素的最終圖像> --refs <同類 精靈圖表> 如果覆蓋率低於其中位數的 0.9 則失敗。菱形擬合設定了地面比例,而不是建築物讀取的大小: 首先增加體積和道具(更高的牆壁、披屋、庭院),然後提高 px_per_tile 並移動 footprint_centre_px, 使邊界框像相鄰的精靈圖表一樣跨越畫布(L-016)。保持細樑遠離圓柱體的輪廓:一個水平的原木越過傾斜的軌道, 看起來像是穿過它們上方和下方(L-017)。
  4. 使用黏土的 Canny 邊緣作為控制(使用 ControlNet 的影像模型)來繪製最終圖像,用渲染的 Alpha 通道裁剪它,使 框架和 groundBase 保持精確,然後根據 sprite.json 中的 ID 和邊緣數據檢查繪圖。

從模型產生場景插圖

一個圍繞已存在模型(建築物、機器)的載入畫面、主視覺或封面:在 Blender 中建立場景,並讓影像模型繪製它, 以便機械結構和佈局保持正確。

  1. 圍繞模型建立場景,使用每個物件的零件前綴放在場景屬性 scene_parts 中,輪子和圓盤放在 rings 中, 關鍵點或路徑放在 scene_points 中。沿著路徑的堤岸、堤防和牆壁每個都是一個 sweep(從 scripts/pw_scene.py 在 pw.py bpy 腳本中匯入),而不是一排盒子(L-020)。
  2. pw.py framecam problem.json --out cameras.json:世界點與螢幕盒子、保持在畫面內且避開 UI 文字區域的點、 要最大化的尺寸度量;將最佳攝影機作為預設值印出。從真實的 UI 檔案(其內邊距和錨點)取得文字區域, 而不是經驗法則(L-018)。
  3. pw.py scene scene.blend --cameras cameras.json --camera framecam_1 --out renders/v1 --size 1280x720( 繪圖工作流程的首次傳遞尺寸):黏土、最終圖像、深度、法線、ID、線條和 scene.json。先讀取黏土和深度; 除非預設需要固定,否則將深度範圍留給場景自己的測量(L-019)。
  4. 使用控制(深度或線條)進行繪製,然後根據 scene.json 檢查繪圖:環形邊緣、點、ID 顏色。

人群和戰鬥場景的區塊建模(AI 影片)

影片模型在處理人群時會出錯;Blender 則不然。讓 Blender 放置軍隊,讓影片模型繪製外觀:

  1. pw.py crowd --out work/crowd --action clash --preview(或 march, advance, charge, hold;--view、--lens、 --move),然後閱讀 work/crowd/sheet.png。
  2. 丟棄 --preview 以獲得完整鏡頭:depth.mp4(主要控制)、pose.mp4(前排)、mask.mp4、 clay.mp4、camera.json;預設為 832x480,81 幀,16 fps(Wan)。
  3. 將黏土的第 1 幀重新繪製成已核准的起始靜止圖像;使用深度影片和該靜止圖像驅動 Wan VACE 或 Wan 2.2 Fun Control。 提示詞包含服裝、每側顏色、光線和霧氣,而非人數。

詳細資訊和未經測試的內容:references/crowd-blockouts.md。鏡頭規劃由 cinewright 負責。

兩個戰士:pw.py duel shot.json --preview 將兩個假人模型放置在場景中它們的標記處,透過鏡頭的攝影機(examples/duel.json); 閱讀 sheet.png,然後丟棄 --preview 以獲得每個控制的 mp4。 更多內容:crowd-blockouts.md,"Two fighters"。

一小批真實人物或玩具(交換側面、額外人物、標記遺失):從照片中為每個人建立網格,使用 pw.py mark 修正顏色和 塗裝標記,給影片模型提供 pw.py turnaround 圖片作為參考,並提供一個 pw.py lineup(隊伍在固定側面,深度和遮罩) 作為其開場:references/figures-for-video.md。

用於電影鏡頭的場景和道具:references/film-and-video.md。

步驟 5:完成與交接

每個目標的完成處理(UV、LOD、法線貼圖慣例、軸向和單位轉換、壓縮)由 polywright-finish 負責; 3D 列印(水密實體、牆壁、底座、分割、3MF)由 polywright-print 負責。將資料夾交給使用它的外掛: three.js 頁面(threewright)、電影和影片(cinewright)、Roblox 場所(roblox-agent)、Unity 專案 (unity-agent)、用於列印設定的特定印表機或切片器技能、用於更多圖片的影像技能。他們讀取 manifest.json 和 out/。

交接訊息:

模型:<名稱> (<途徑>) -> out/<檔案> 用於 <目標>:<三角形數> 個三角形, <尺寸> 公尺, <水密/零件>
檢查:<目標> 通過|警告 (<規則>)   審閱:renders/<步驟>/sheet.png
來源:<數量> 個,附帶許可證;AI 生成的部分:<哪些,哪個模型>   待辦事項:<尚未完成的工作>

規則

  • 在 Blender 和 glTF 中使用實際尺寸(以公尺為單位)(Blender 中 +Z 朝上,glTF 中 +Y 朝上);僅在列印檔案中使用公釐。
  • 絕不要僅憑檔案名稱或產生器的說詞就斷言網格沒問題:檢查、渲染、驗證。
  • 每個下載或產生的輸入都必須有一行來源記錄,附帶其許可證。商店和列印網站(Fab, Unity Asset Store, Sketchfab, MakerWorld, Printables, Steam)要求揭露 AI 生成的內容;清單會記錄它。
  • 透過 MCP 運行的 Blender 橋接會執行任意 Python 程式碼:優先使用 pw.py bpy 操作副本;僅在使用者觀看時 使用即時 MCP 工作階段(polywright-blender)。
  • Google 逼真 3D 圖塊可以被檢視,但絕不能匯出、快取或追蹤(依據其條款)。

維護

常青單元,tier fast(產生器和 Blender 每月更新)。配套檔案:RESEARCH.md, CHANGELOG.md,LEARNINGS.md,TESTS.md 附帶 evals/evals.json, MAINTENANCE.md,狀態在 evergreen.json 中。每次使用時閱讀 evergreen.json;如果到期,先完成任務,然後刷新(evergreen-refresh)。 在發生時將經驗教訓寫入 LEARNINGS.md。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

m4bwav/polywright-blender

Use whenever Blender is scripted, automated or debugged, before writing any bpy code: headless runs that report errors (pw.py bpy), the bpy API traps models still write in Blender 5.x (removed importers, renamed sockets, EEVEE names), tested recipes (modifiers, booleans, remesh, UVs, bakes, turntables, depth passes, batch exports), Blender MCP servers and their risks, and other 3D tools per OS. Use on 'write a Blender script', 'automate Blender', 'batch export .blend', any bpy traceback or...

m4bwav/polywright-finish

Use whenever a mesh must be made ready for a game engine, the web or AR: is it game-ready, too many polygons, LODs, retopology, UVs, baking, PBR and normal-map conventions, collision, rigging, and axis, unit and format export for Roblox, Unity, Unreal, Godot, three.js (meshopt, KTX2), USDZ and video blockouts. Use on 'is this game-ready', 'make this work in Roblox/Unity', 'optimise for the web', 'reduce polygons', 'add LODs', 'retopologise', 'bake normals', 'imports sideways or tiny', 'flip...

m4bwav/polywright-generate

Use whenever an imagined or hypothetical 3D model must be made from a prompt, a drawing, concept art, photos or a blockout: image-to-3D through ComfyUI (TRELLIS.2, Pixal3D, Hunyuan3D-2 via pw.py gen) or hosted (Meshy, Tripo, Rodin), or code (bpy, build123d, CadQuery, OpenSCAD) when it has dimensions; then texturing and the licence record. Use on 'make me a 3D model of a dragon', 'turn this drawing or concept art into 3D', 'image to 3D', 'text to 3D', 'TRELLIS', 'Hunyuan3D', 'Meshy', 'model a...

m4bwav/polywright-references

Use whenever reference images, views or textures for a 3D model are needed, before modelling or image-to-3D: orthographic front, side and back views with a height bar, A-pose turnarounds, multi-view sets, blockout renders repainted into consistent views, seamless textures and quick normal/height/roughness maps (pw.py texture). Use on 'what references do I need', 'reference sheet', 'front side back views', 'turnaround', 'seamless texture', 'PBR maps from this photo'. Not for flat graphic...

相關技能