scenario-zbrush-retopology-export について
scenario-zbrush-retopology-exportは、ZBrushの造形をクリーンで低解像度の交換用メッシュに整えるスキルです。サブディビジョンレベルやマップでディテールを保ちながら、リトポロジー、投影、UV、ベイク、出力、検証を進めます。
主な機能
- 01リトポロジー入力の準備と監査
- 02対称性を指定したZRemesher実行
- 03再構築したレベルへの造形投影
- 04UV作成とマップのベイク
- 05スケールを確認してメッシュ出力
活用シーン
- 01リギングや受け渡し用の造形準備
- 02リメッシュ後のサブディビジョン再構築
- 03UV付きメッシュとマップの出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-zbrush-retopology-exportインストール後、Claude Code で/scenario-zbrush-retopology-exportを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/zb_retopology_export.py詳細
ZBrush のリトポロジーとエクスポート(パイプラインスカルプター)
エキスパートレベルでは、スカルプトを、最小レベルの軽量でクリーンな交換用メッシュとして ZBrush から出力し、ディテールは再構築したサブディビジョンスタックまたはマップに保持し、実寸に合わせ、すべてのファイルをパースして検証します。大部分はエージェントが得意とする決定的なパレット操作です。クリック単位のトポロジー操作、モディファイアーのクリック操作、いくつかのダイアログ操作は、人間またはコンピューター操作エージェントが担当します。ここに記載されている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください
(npx skills add scenario-labs/skills --skill <name>)。無人で処理を進める場合は、ツールスキーマに基づいて作業し、不足している点を明示してください。
必須の背景知識: scenario-zbrush-expert(ブリッジ、ストロークエンジン、レビューのループ、2026 年の注意点)。
ツールキット:scripts/zb_retopology_export.py(rx)。リードの zb_ops、zb_audit、zb_launch の上に構築されています。ZBrush 内で rx.zcall("func", ...) を呼び出し、エージェント側で監査します。すべての投影パスでは、リードの安全な zb_ops.project_all(バージョン管理されたチェックポイント、ネット、ゲート)を使用します。ZBrush ではまだ実行していません(オフラインテスト 88 件はすべて合格。ライブテストについてはreferences/procedures.mdを参照してください)。
スタンス(専門家が重視するポイント)
- ZRemesherを実行する前に、必ず対称性を意図的に設定します。 対称をオンにすると、ZRemesherは半分をリメッシュしてミラーリングします。これにより、ポーズ付きまたは非対称のメッシュが壊れる、暗黙のMirror And Weldが発生します(Drust、Kjce71jjWJU 00:01:11)。
rx.zremeshではsymmetricが必須引数です。 - ZRemesherに簡単な問題を与えます。 アニメーションする顔はニュートラルな状態にし、折り目はリラックスさせ、新しいトポロジー上で表情をスカルプトし直します(Pavlovich n5_cZK-9peg 00:01:39)。耳と手は単独でリメッシュし、開いた境界は先に整えます(00:44:36)。意図しない穴は先に閉じます。穴は残ってポリゴン数を増やしてしまいます(ZRemesherのドキュメント)。
- ZRemesherはエッジフローを整えるためのもので、ディテールは投影で戻します。 低い値を目指します(Gaboury:腕は5kから18k、34D6VljTjBs 00:02:18)。その後、Dist 0.1でProject Allを実行すると、アーティファクトの「90パーセント」が修正されます(Drust nxMYYsyJt3o 00:02:19)。Soloモードでも、表示するのはソースとターゲットだけにします(Pavlovich 01:07:26)。AdaptをオンにしてKeep Groupsを使用し、Targetを5にすると、8.0kから9.4kのポイントになりました(フレーム00:18:50、00:22:09)。Adaptをオフにすると、指定した数になります。
- 投影には危険な箇所があります。 目、口、脇の下、指の間、股間です。そこに残ったものは、ディスプレイスメントでくっきりした線になります(FlippedNormals Zp07GW3rND0 00:07:43)。まぶたを少し越えるまで広げた、目の内側のグループをマスクします。モーフターゲットまたはマスクを使った再投影で修正し、スムージングは決して使いません(00:05:31、00:06:36)。
- ポリグループで誘導し、先に境界をスムージングします。 ZRemesherはギザギザの境界をループに取り込みます(Pavlovich 00:05:27)。きれいな境界ではSmooth Groupsを0にし、ギザギザしたDynaMeshグループでは1にします(Drust 8D-xqasgUws 00:02:17)。うまくいかなかったまぶた、口角、鼻孔は削除して作り直します(Pavlovich 00:21:36)。Retopoブラシの「No」を選ぶと、軽量なZRemesherメッシュを編集できるようになります(Pablo Munoz Gomez、I4nePXDTrhQ 00:06:36)。
- 最低レベルが受け渡し用メッシュです。 UVはそのレベルで作成します(Gaboury cemmalvugFk 00:00:51)。マップは現在のレベルと同じSubToolの最上位レベルを比較するもので、2つのSubToolを比較するものではありません(Drust n0qqpwvn-jA 00:01:14)。レベル1にはフォームを、max-1にはマイクロディテールだけを保持します(2zDAtaQqwh8 00:02:53)。
- フィルム用ディスプレイスメントは固定の手順です(FlippedNormals -ThBTEc8L_M)。Flip Vをオンにします(「絶対に必要」)。Adaptiveはオフにします(24時間ではなく、約1時間で100 UDIMs)。DpSubPixは0、32-bit EXRを使用し、3 Channelsはオフにします。レンダラーのゼロ値はMidです(MMEのドキュメント:32-bitではMid 0。FlippedNormalsでは0.5を維持し、記録しておきます)。
- エクスポート後のサイズ=内部の範囲 x Export Scale(Drust n2xPrwI9o1U 00:04:19)。XYZ Sizeは1から4の間にします(Gallagher EXjfH_X2hkM 00:28:23)。Export ScaleとオフセットはSubToolごとに設定するため、すべてのSubToolに同じ値を設定します[追加]。
- 生成またはスキャンしたメッシュは形状の参照用であり、修復するトポロジーではありません。 薄いシェルを厚くしてから、早い段階でDynaMeshを行います。DynaMeshの穴埋めは「まっすぐ反対側まで突き抜ける」ためです(Drust PrFQXjs_6_w 00:02:53)。ノイズのある元データではなく、クリーンアップしたDynaMeshからスタックを再構築します[追加]。
最初に決めること
| 入力 | 変更する項目 | ブリーフに指定がない場合のデフォルト |
|---|---|---|
| 出力先 | メッシュタイプ、マップ、単位、軸 | Maya:OBJ レベル1の四角形ポリゴン、単位は cm + 32-bit EXR ディスプレイスメント、Mid 0.5 |
| デフォームの有無:顔、関節 | 正確なループ(人間のリトポロジーパス)、ニュートラルな顔 | キャラクターでは「はい」。表情を付ける場合は scenario-zbrush-character-creature に戻します(ニュートラル版、またはそのレイヤーをオフにします) |
| 予算 | ZRemesher の目標値、Adapt | リグ用または映画用のボディ:15k~25k 四角形ポリゴン[追加]、アニメーション用の頭部:10k~20k(Retopo ドキュメント)、ゲーム用:ブリーフに従います |
| ポーズまたは非対称 | 対称をオフにする | ポーズが付いておらず、対称にデザインされている場合にのみ対称にします |
| 実寸 | エクスポートスケール | 人間の身長は180 cm(Gallagher の例) |
| マップとタイル | MME プリセット、UDIM プラン | SubTool ごとに4096タイルを1つ使用します。UDIM のレイアウトは Maya または Blender で設定します |
| ソースの種類 | 手順 | レベルがある場合:2M 未満のレベルを使用。ない場合:DynaMesh コピーを使用。AI またはスキャンの場合:最初にクリーンアップします |
ワークフロー
- 事前チェックとチェックポイント。
rx.zcall("preflight", 180.0);zb_ops.save_ztl。GATE:フラグが解決済みであること(頂点数が8M超、XYZ Sizeが1〜4の範囲外、Export Scaleが0、名前の重複)。 - ZRemesherの入力。
remesh_input("auto", max_points=2_000_000)はスカルプトを複製し、元のメッシュ(投影元)を非表示にします;意図しない穴がある場合は、fill_holes=TrueでClose HolesとFix Meshを追加します。DynaMeshとClose Holesは目の窪みや口の袋状部分も閉じます:openings_closedで穴のゲートを設定します(0、それ以外は意図した開口部)。GATE:コピーの頂点数が8M未満で、元のメッシュがそのまま残り、面がニュートラルであること。 - ガイド。 ボタンでポリグループを作成(Auto Groups、Groups By Normals、From Polypaint);人が描いたマスクは、Edgeloop Masked Borderでサポートループ付きのグループになります(Drust IpTYcGxxsdM 00:05:08);
polish_band("groups")。耳と手:個別のSubToolにする(Groups Split、Split Hidden)、polish_band("border")、個別に実行する(手のAdaptive Sizeは約14:Pavlovich 00:59:42)、その後merge_down_run(..., weld=True);Freeze Borderは、境界を正確に再溶接する必要がある場合に限り、手足全体をリメッシュした後に使用します。アニメーションには不利です(01:03:44)。GATE:Polyframeシートで、閉じた滑らかなループが確認でき、再結合後にシームループがないこと。 - ZRemesher。
zremesh(target_k, symmetric, keep_groups=True, smooth_groups=0)(Half、Same、Doubleはオフ)。その後、retry(adaptive_size=...)を0、5、21で実行します。Keep Groups、Keep Creases、Smooth Groupsを変更したり、スカルプトしたりするとRetryキャッシュが無効になります。スイープでは最後のバリアントが残ります:pick_retry、retry(**pick["retry"])、confirm_retry。任意でAdaptをオフにしたHalfパスを実行するか、リトポロジーの上にさらにリトポロジーを行います(Drust R2MzFqWMaWY 00:01:44)。うなじや眉の中心線が不良な場合:Alt+ZRemesher。モディファイアのクリック操作pressでは送信できないため、コンピューターの使用を依頼し、centre_line_componentsを比較します(Pavlovich 00:48:31)。snap_backがtrueの場合、判定前にproject_stack(copy, source, levels=0, checkpoint=ztl)を実行します(00:22:05)。GATE:in_band;GrpをオンにしたQAエクスポートでtopo_reportとretopo_verdict(purpose="rig", expected_holes=...)を実行し、ループが形状に沿っていること。穴の処理に失敗した場合、スクリプトは停止し、人によるRetopoパスを求めます。 - スタックの再構築。
project_stack(target, source, checkpoint=ztl):両方を表示し、Dist 0.1、レベル1から開始して、ソースの半分の数まで各レベルでDivide + Project Allを行い、パスごとにモーフターゲットを作成します。最後に両方のSubToolでColorizeをオンにして色を付けます(Drust PrFQXjs_6_w 00:16:35)。危険領域またはフィルムのように薄い顔の場合:order="top_first", stop_after="nets"(分割後、StoreMTと最上部のレイヤーを作成:FlippedNormals 00:02:13)。人が目の内側のグループを分離し、protect_isolated(grow=1)、project_levels(..., nets_done=True)を実行します。GATE:projection_from_stack(レベル1は変更なし、バウンディングボックス0.5パーセント、体積2パーセント[追加]);同じ視点からのシートと、各レベルの危険領域のクローズアップ。破損箇所:zb_ops.morph_repair;ターゲットがソースの内側にある場合は、マスクしたInflate、またはInnerとDist 1を設定したProjectionShellを使用します(Gaboury pQbPtH0p5Bg 00:02:30)。次にdrop_morph_target()を実行します:ベイク処理では保存済みのモーフターゲットがあると拒否されます。マップのベースとして使える可能性があります(Drust 2zDAtaQqwh8 00:01:44)[要検証]。 - レベル1のUV(UVは各レベルに引き継がれます。Gaboury cemmalvugFk 00:03:30)。簡易方式:
zb_ops.uv_unwrap("native")。シームを明示的に指定する場合:unwrap_creases()(Pavlovich cvqoVUX5aBw)。Painterのアイランド:uvmaster_roundtrip()。目には個別のシンプルなUVを設定します。GATE:Txrエクスポートでuv_verdictを実行し、シームが見えず、顔が分割されていないことを確認します。 - マップ。
mme_create_all(dir, name, settings="arnold")またはbake_normal_map/bake_displacement_map。GATE:ファイルごとにmap_verdictを実行します(サイズ、ビット数、Midでフラット、法線は128/128/255でフラット:Polycount);向きはビルドごとに一度キャリブレーションします(live_rx_04 fixture)。 - スケール、名前、エクスポート。
set_export_scale(180, axis=1)(すべてのSubTool);set_export_switches(quads=True, uvs=True, groups=False);export_subtools(dir, level="lowest")。FBX:ZScriptではオプションウィンドウを抑制できず、Pythonは未検証です(Maxonフォーラム)。AppleScriptのSystem Eventsで、このMacのZBrushダイアログをクリックします[この環境で要検証];デフォルトはOBJで、scenario-maya-expertまたはscenario-blender-expertで変換します。GATE:obj_headerが#Auto scale(2026.2.1で書き込まれた、リードのv03エクスポート)からExport Scaleを読み戻すこと;scale_reportに合格すること(1パーセント、足元が0、中央揃え)。 - 引き継ぎ。
handoff_report(json, ...):メッシュ、マップ、単位、軸、Midとスケール、法線の規約、監査、シート、未検証リスト。
生成またはスキャンしたメッシュ(Z6)
- scenario-3d の GLB:
glb_to_obj、triage_ai_mesh(obj, expected_parts)、続いてorient_for_import:Z-up のヒントがある場合のみ回転し、中心からずれたメッシュのみを中央に配置します(glTF は Y-up)。 インポートするファイルに名前を付けます。 import_mesh(Weld;Tri2Quad は AI の三角形から四角形を再構築します[範囲を確認]);未加工の ZTL;duplicate_keep():コピーをフォームと色のソースとして保持し、名前で追跡します(index_of)。分割や結合で SubTool の番号が振り直されるためです。fix_mesh;split_parts、hide_small_parts(protect_names=[raw])。異なる色のパーツが融合している場合:color_to_groups、Groups Split[追加];そうでなければ scenario-3d のセグメンテーション、または人手での SliceCurve カットを使います。- パーツごとに
close_holesを実行します。DynaMesh の後でスイスチーズ状になった場合は、薄すぎます。まず厚みを増やしてください。 - Tool 内で、同一ボディのパーツを
merge_down_runで結合します(Drust 00:09:27)。dynamesh_keep(res, keep="groups"):ポリペイントがオンの場合、DynaMesh はポリグループの代わりにペイントを保持します(DynaMesh doc;一般則:scenario-zbrush-sculpting)。Blur は 0、Project はオフにします。穴が残る場合:書き出したモデルにhole_plugs(obj)を実行し、plug_hole(center, diameter)、merge_into(body, [plug])を実行して、再度 DynaMesh を適用します(Drust PrFQXjs_6_w 00:07:16)。Polish を適用し、対称な場合は Mirror And Weld を使います。局所的な再構築には Sculptris Pro を使います(scenario-zbrush-sculpting)。 - ゲート:
cleanup_verdict(raw, clean)(閉じていること、マニフォールドであること、シェル、バウンディングボックスの差が 2 パーセント、粗さが未加工モデルの 0.8 倍以下[追加]);シートは MatCap Gray、Double はオン、Colorize はオフにします(シートのみ。set_displayは以前の値を返します)。 - パーツごとに ZRemesher(5~20 千ポリゴン)を適用し、元の形状に戻してから、クリーンアップした DynaMesh からジオメトリを投影し、未加工のコピーからのみ色を投影します:
project_levels(..., geometry=False, color_last=True)[確認]。scenario-zbrush-sculpting に引き継ぎます(大きな変更は SDiv 1、二次的な変更は 2~3)。
数値
| 値 | 対象 | 出典 |
|---|---|---|
| ZRemesher の目標値(千単位);5 の場合は 4,963 | Target Polygons Count | Pablo rArw79xEpvE 00:03:16 |
| Adaptive Size のデフォルトは 50;0 は均一な四角形、5~21 は曲線的;手動設定は約 14 | 密度 | ZRemesher doc;Pavlovich n5 |
| Color Density は 2 で多い(ピンク)、0.25 で少ない(青)、白は中立 | ポリペイントの密度 | Pavlovich n5 01:01:32 |
| XYZ Size は 1~4;インポート時に 2 に正規化 | 内部サイズ | Gallagher;Drust |
| Export Scale = target / internal extent(180 / 2 = 90) | 単位 | Drust;Gallagher 00:28:55 |
ターゲット別の設定
| ターゲット | メッシュ | ディスプレイスメント | 法線 |
|---|---|---|---|
| Maya + Arnold | OBJ level 1, Qud, Txr, Grp off; cm | 32-bit EXR, Mid 0.5 = Scalar Zero Value, Catmull-Clark about 3, Auto Bump | tangent, OpenGL [added] |
| Unreal, Unity | triangulated, FBX via Maya or Blender; cm, meters [added] | none | engine tangent basis; Unreal DirectX green [added] |
| Substance Painter | Substance Bridge Low & High, Auto-Bake, Force Auto-Unwrap off | none | baked by Painter |
| Blender | OBJ; meters | 32-bit EXR, Midlevel = Mid [added] | OpenGL; game bakes with scenario-blender-uv-baking |
Redshift、vector displacement、すべての行については、rx.RENDERERS、references/procedures.md を参照してください。
品質ゲート
- コード:エクスポートするすべてのファイルで、
topo_report、projection_verdict、uv_report、scale_report、map_verdict、names_report、cleanup_verdictを確認します。 - ビジュアル(
zb_review.reviewシート):ループを確認するため、正面、側面、斜め前からPolyframeを表示します。投影後は、同じ視点でソースとターゲットを確認し、各レベルで危険箇所を拡大して確認します。クリーンアップでは、DoubleをオンにしたMatCap Grayを使います。判断にはreferences/critique.mdを参照してください。
よくある間違い
| 間違い | 見た目 | 修正方法 |
|---|---|---|
| 対称がオンのまま | ポーズを付けた手足が左右反転する | zremesh(symmetric=False) |
| 笑顔の顔をリメッシュする | ループがリグではなく笑顔に沿う | まずニュートラルにし、新しいメッシュで表情を戻す |
| リトライスイープをそのままにする | 保持されたメッシュが選択したものと異なる | pick_retry、リトライを戻し、confirm_retry |
| Distが小さすぎる | ディテールに穴が開き、斑点ができる | Dist 0.1にし、ソース全体を包み込む |
| 投影をスムージングする | 異常な頂点が残る | モーフターゲット、マスク付き再投影 |
| 片側でColorizeがオフ | 投影カラーが表示されない | color_last=True で両側をオンにする |
| ベイク時にモーフターゲットが残っている | 誤ったベースに対するマップになる [verify] | drop_morph_target() |
| SDKの法線ベイクがデフォルト設定 | ワールド空間のマップになる | create_normal_map(..., local_coordinates=True) |
| Maya用OBJでGrpがオン | メッシュがパーツに分割される | Grpをオフにする(FlippedNormals 00:15:08) |
| 1つのSubToolだけでExport Scaleを設定 | 目が頭から浮いて見える | set_export_scale(..., all_subtools=True) |
| レイヤーのあるキャラクターでUnifyを実行 | レイヤーとモーフが壊れる | MultiAppendでスケール済みのツールに追加(Gallagher 00:27:16) |
| AIメッシュのDynaMeshでPolypaintがオン | 一部のポリグループが消える | dynamesh_keep(keep="groups") |
| クリーンアップ中にMergeVisibleを実行 | カラーソースのない新しいMerged_ Toolができる | Toolでmerge_down_runを実行 |
引き継ぎ
- 受け取るもの:scenario-zbrush-sculpting、scenario-zbrush-character-creature、
scenario-zbrush-stylized、scenario-zbrush-hard-surfaceから、名前付きSubToolsを含むバージョン管理されたZTL、
stats()、最後のシート。scenario-3dから、GLBまたはOBJ。 - 引き渡すもの:scenario-maya-retopology-uvとscenario-maya-riggingへ、SubToolごとのレベル1 OBJ、
cm、Yアップ、中央配置、足元を0に配置、目は別パーツ。scenario-maya-lookdevへ、マップと
handoff_report。scenario-blender-uv-bakingまたはSubstanceへ、名前を一致させた低ポリゴン版と デシメートした高ポリゴン版。scenario-zbrush-paint-renderへ、UV付きのスタック。 scenario-zbrush-pose-printへ、閉じたコピー。
ZBrush 2026の注意点
- リトポロジーブラシ(2026.1)。ポリグループを使用するUV Masterは2026.2.0で修正。Substance Bridge(2026.2)のラベルは「Auto-Bake」と「Force Auto-Unwrap」[uistr]です。「Force Auto-Unwrap」は全体に適用され、良好なUVを削除します。
- SDK:
press()は修飾キーを受け取りません(Altクリックはコンピューター操作に回されます)。create_normal_map()のデフォルトはワールド空間です。 - macOS:Control+Wでポリグループを作成します。Command+WでZBrushを終了します(バージョン間の差異は3.13)。
- Freeze Borderを有効にした部分的なZRemeshでは、サブディビジョンレベルが削除されます(Drust 0TlG4Ex9lQA 00:02:26)。その前後で
freeze_levels()を使用してください。
参考資料
references/procedures.md:ブリッジの全手順(Z4、Z6、ターゲットごとのマップ、フィクスチャ)、テストパス、パスの根拠です。各ステージの実行前に読み込んでください。references/expert-notes.md:専門家による判断とタイムスタンプ、判断を左右する条件です。ルートを選択するときに読み込んでください。references/critique.md:レビュー基準(ループ、投影、UV、マップ、スケール、クリーンアップ)です。各ゲートで読み込んでください。references/gui-paths.md:人間またはコンピューター操作エージェント向けのパレット、ホットキー、リトポロジーブラシのジェスチャーです。references/sources.md:認証情報、URL、最適なタイムスタンプを含むすべての出典です。