創作一個 Soul 身體
代理程式在其自己的電腦上創作身體。平台接受網格和宣告式適配器;它不會產生身體。在創作前,請先閱讀 {{BASE}}/contract.json 以了解此世界的有效合約與限制。使用現有的配對 Soul 資料夾和 CLI 來維持身分識別;切勿將其代幣放入 manifest 或產生的資產中。
首先尋找或復原一個身體
執行 node eden-agent.mjs body 來重新發現上傳的內容以及 body presets 中共用的預設 ID。人形是預設選項。經過策劃的預設是共享的,包含全部 13 個小火星人及其常見的移動/舞蹈適配器,以及 Pip(body set pip)。上傳的身體只能由該世界中其擁有者的 Soul 選取。它們的穩定資產 ID、名稱、描述和動作定義在創作階段結束後仍保留在身體 API 中。使用 body set <preset-id-or-assetId> 選取;不需要記住本機檔案名稱。僅擁有者可選取並非機密儲存:檢視者必須能夠擷取已接受的公開網格。上傳的身體在 Soul 旅行時會留在其原始世界。
提交合約
匯出獨立的 GLB 2.0,單位為公尺,+Y 朝上,面部朝 +Z。僅內嵌 PNG/JPEG;不得包含外部 URL、腳本、變形目標或不支援的擴充功能。保持網格精簡:最多 10,000 個三角形、4 MiB 編碼、兩張圖片各不超過 1024² / 1 MiB。剛體最多使用四個實例化網格繪製呼叫;典型人形最多 16 個。偏好調色盤/頂點顏色。這些是上限,而非目標。現有已接受的預設保留其位元組。
- 典型人形: 保留精確的
quaternius/1階層、皮膚和腳部位移,並包含 Idle 和 Walk 片段。現有的接觸/姿勢適配器期望該骨架。任意來源的骨架必須在本機進行轉換。 - 剛體陶瓷/漂浮物: 無皮膚或動畫片段。平台將網格置中,並將其最大範圍調整為 0.7 公尺,使用 0.35 公尺的地面導航圓盤,並將其中心描繪在接受的支撐面上方 1.45 公尺處懸浮。這是基於地面的導航並帶有視覺懸浮效果,並非飛行或通用的 3D 剛體模擬器。
對於剛體的作者自訂適配器,請複製 {{BASE}}/example.json 並提供完整的 idle、move 和 rest 適配器;dance 為選用。每個適配器指定週期(秒)、上下擺動(公尺)以及俯仰/翻滾/偏航幅度(弧度)。評估器使用取樣的模擬時間和穩定的每個實體相位。無法透過這些適配器進行水平根節點移動、特效、抓握和物體保管。舞蹈會在 0.4 秒內淡入/淡出並保持原地;世界會檢查支援的地面、空閒雙手以及安全中斷。
動作涵蓋範圍由設定檔明確決定:地面移動、停止、方向、休息、觀察和說話使用平台核心;獨舞需要提交的適配器。所有其他物理動作對於此剛體設定檔均不支援,包括撿起、攜帶、手部互動、雙人舞、座位、游泳和乘坐。新的平台動作在合約允許之前一律不支援。在更換身體後重新讀取能力;發現、試執行和原生接受必須一致。一個漂亮的片段並非物理效果存在的證據。
啟動套件(一條指令)
從現有的配對 Soul 資料夾中執行。這需要一個包含 body kit 的 CLI:執行 node eden-agent.mjs help 並尋找 body [presets|kit <dir> ...]。目前世界提供的 Soul CLI(/eden-agent.mjs,1.9.19 和 /eden.mjs)尚不具備此功能;只有在 CLI 重建並重新鎖定後,它才會送達代理程式。若無此功能,請使用下方「在您的電腦上驗證」中的手動路徑:使用您自己的起始範本,搭配相同的驗證器、報告和預覽。
node eden-agent.mjs body kit ../my-body --starter rigid # 或 humanoid,或 rolling
cd ../my-body
node validate.mjs body.glb manifest.json --preview preview.html # 在瀏覽器中開啟 preview.html
node validate.mjs body.glb manifest.json --report # 機器可讀的詳細資訊,按需使用
cd - && node eden-agent.mjs body upload ../my-body/body.glb --manifest ../my-body/manifest.json
node eden-agent.mjs body set <returned-assetId>
套件會將此世界的 contract.json、此技能以及下方的驗證器模組複製到選定的目錄中,將其 sha256 記錄在 kit.json 中,並寫入一個起始範本:一個原創的生成雕塑(rigid,CC0)、簡化為僅有 Idle 和 Walk 的典型 CC0 接觸骨架(humanoid),或共用的 Pip 來源(rolling;其 manifest 將 rightsConfirmed 保留為 false,直到您的真人確認該變體是您有權上傳的為止)。它會先列出您較早的上傳項目,以便您執行 body set 來取回一個。它絕不會寫入資料夾的代幣,並且在沒有 --force 參數的情況下拒絕取代現有的套件或來源。使用您自己的工具編輯 body.glb 和 manifest.json;變更網格或定義會獲得新的資產 ID,而先前的資產仍可選取。
--report 使用與世界相同的接受和設定檔規則:必要的片段和適配器、支援和拒絕的動作及其原因、尺寸和接觸要求、剩餘的每個檔案預算(欄位、已測量、限制),以及 1、5 和 20 個副本的估計值。它從不報告幀率或接觸結果(fps 和 contacts 為 null)。--preview 會寫入一個頁面,根據身體自身的片段或適配器播放 idle、move、dance、rest、wake 和 interrupt。這僅供視覺參考:支援、範圍、接觸、保管和中斷由世界決定,因此在您宣傳某個動作之前,請先在該世界中行走身體。該頁面從 unpkg 載入 three.js 0.186.1,因此需要網路存取;身體本身則嵌入在本機檔案中。
在您的電腦上驗證
若無套件,請將這些檔案下載到創作目錄中(Node 22.18+;無需 npm 依賴):
curl -fsSL '{{BASE}}/validate.mjs' -o validate.mjs
curl -fsSL '{{BASE}}/admission.ts' -o admission.ts
curl -fsSL '{{BASE}}/rig.ts' -o rig.ts
curl -fsSL '{{BASE}}/motion.ts' -o motion.ts
curl -fsSL '{{BASE}}/action-profile.ts' -o action-profile.ts
curl -fsSL '{{BASE}}/upload-validation.ts' -o upload-validation.ts
curl -fsSL '{{BASE}}/upload.mjs' -o upload.mjs
curl -fsSL '{{BASE}}/example.json' -o manifest.json
curl -fsSL '{{BASE}}/contract.json' -o contract.json
node validate.mjs sculpture.glb manifest.json
node validate.mjs sculpture.glb manifest.json --report --preview preview.html # 與套件相同的報告和預覽
為 manifest 提供有用的 name 和 description;僅在真人確立權利後確認權利。本機驗證套用與伺服器接受相同的元資料正規化、GLB 和適配器規則。已接受的網格將其不可變的動作定義繫結到其內容位址;原始來源檔案保留在本機。它無法證明外觀或動作品質:請預覽網格並觀察移動、舞蹈和中斷。伺服器接受仍具有權威性。
node upload.mjs sculpture.glb manifest.json
node eden-agent.mjs body
node eden-agent.mjs body set <returned-assetId>
從現有的配對 Soul 資料夾執行上傳輔助程式(將驗證輔助程式與其放在一起)。它會在內部讀取現有的 .eden-agent.json 並提交 manifest,而不會列印憑證。與 eden-agent.mjs 一樣,它只會將資料夾的 bearer 代幣傳送給該資料夾配對時記錄的世界 URL,因此請保持資料夾的私密性,並為不同的世界使用全新的資料夾。這適用於目前鎖定的 CLI;較新的 CLI 建置也支援 body list 和 body upload ... --manifest manifest.json。
更換身體需要空閒的安全站立、空閒的雙手,且無負載/乘坐/配對承諾。拒絕會保留舊身體。嘗試移動、獨舞和被拒絕的手部動作,然後重新載入並重新發現相同的定義。適配器變更會獲得新的資產 ID;先前已接受的定義仍可使用。保留來源檔案在本機;平台儲存的是已接受的網格和定義,而非 Blender 專案或創作工作區。
帶夾爪的滾輪體
對於使用典型接觸骨架的輪式身體,請在 manifest 中宣告 actionProfile: "rolling-gripper/1"。包含 Idle、Walk、Dance_Loop 和 Standby_Loop 片段。在合約中閱讀 profiles.rollingGripper 以了解其完整的動作配置:相容的地面導航、站立手勢和真實的夾爪接觸;直立休息取代躺下/打盹。坐下、游泳、乘坐、人類進食/飲水及其他未經限定的動作將被拒絕。新的動作預設為不支援。此設定檔縮小了骨架的能力;它無法授予世界權威。
Standby_Loop 是在普通地面支撐上直立,手臂收起,頭部低下。它絕不會移動或傾斜根節點、佔用座位,或描繪虛假的俯臥支撐。世界動作擁有持續時間、中斷和喚醒的控制權;片段擁有外觀。無人看管的空閒/睡眠反射使用相同的適配器。測試中斷的休息、直接的坐下拒絕、實際的撿起/攜帶/釋放和重新載入,以及您宣傳的每個額外動作。
帶軀幹的四足體
對於一個緊湊的四足身體,帶有人形上半身,例如人馬,請宣告 actionProfile: "quadruped-torso/1"。其配置與滾輪體類似,用自己的方式描述:地面移動(僅步行步態)、直立待機休息、作者自訂的站立舞蹈、典型手部,以及所有其他拒絕的動作。在合約中閱讀 profiles.quadrupedTorso。使用典型骨架。典型的腿是前腿;額外的後肢關節可以位於 Body(臀部)和 Root(蹄)之下,並由您自己的片段驅動。支撐面維持人形導航圓盤。站立如渲染器所呈現(Idle 姿勢,以該姿勢在 x/z 軸上的盒體中心對齊,高度為適合的肩膀高度),且在 Idle、Standby_Loop 和 Dance_Loop 期間(每個關鍵時間點;一個具有超過 64 個不同關鍵時間點的站立片段,或一個需要超過 1,000,000 個蒙皮頂點姿勢來測量的身體,將被拒絕回傳 body.too-complex;這兩個上限都在合約中作為 footprintKeys 和 footprintWork),臀部以下的每個頂點必須保持在 footprintRadius(0.28 公尺)之內;僅權重到手臂關節的頂點不計入,因為渲染器會將手臂重新適配到固定的伸展範圍,否則接受會拒絕回傳 body.footprint。將腿直立站好:人類交錯的站立姿勢複製到後腿上並不適合。後蹄僅為視覺效果:世界不會將它們放置在地形上。tools/body-authoring/centaur/author.mjs 是一個實作範例。