概要
Surface をゲームエンジン用のPNGテクスチャセット(albedo/normal/height等)として 一括書き出しするノードです。HD-2D系の表現をエンジン側で行うための出口で、 命名規約(Godot/Unity等)と法線のY軸規約を選べます。
- 副作用: あり(
has_side_effects: true、ファイル書き込み)
使い方のポイント
- エンジン別の定番設定: Godot(StandardMaterial3D)→ naming=Godot / normal=OpenGL、 Unity(Lit)→ naming=Unity / normal=DirectX(下の使用例参照)
- 書き出し系共通の作法: 組み立て中は
save_mode = Disabled、出すときだけ Overwrite CreateIfMissingは不足mapだけを既存setへ追加する互換モードで、既存mapと今回追加した mapの世代が混在する場合は警告する。set全体を新規時だけ作るならCreateSetIfMissingを選ぶ- ドット絵をエンジンで大きく表示するなら整数倍拡大(scale)もここで指定できる
- 「PixPipeline内でライティングまで完成させてPNG1枚」なら
surface_light_preview→batch_export。エンジン側でライトを当てるならこのノード、と出口を使い分ける
よくある失敗
- エンジンで法線が凹んで見える: 法線のY軸規約の不一致。OpenGL/DirectXを エンジンに合わせる(内部保持はOpenGL、DirectX選択時のみG反転)
- ファイルが出ない: save_mode が Disabled のまま(他のExport系と同じ)
- 選んだマップの一部が出ない: 入力Surfaceにそのmapデータがありません。
warningsと内部結果_omitted_mapsで省略されたmap IDを確認してください
技術詳細
- 内部のノーマルマップは OpenGL 規約(+Y up)で保持しており、DirectX 選択時のみ
flip_normal_map_y()(pxn-core)で G チャンネルを反転する - 拡大は
scale_image_nearest()(pxn-core)による最近傍補間 - 有効でも入力Surfaceに存在しないマップはneutral画像を生成せず明示的に省略し、
warningsと_omitted_maps: List<Text>へ安定IDを返す。_written_maps: List<Text>は今回実際に書いたmapだけを返し、unchanged/already-existsは既存の_effect_outcomeで区別する
使用例
画像からサーフェース → サーフェース書き出しで、HD-2D 系エンジンのマテリアルに読み込めるマップセットを作る- Godot の StandardMaterial3D へは naming=Godot / normal=OpenGL、Unity の Lit へは naming=Unity / normal=DirectX
関連ノード
solid_render/model_render/image_to_surface— 書き出すSurfaceの供給源surface_light_preview+batch_export— アプリ内でライティング済みPNGを出す別ルートmodel_gltf_export— メッシュごと持ち込むならこちらtiled_tileset_export— タイルセット形式での出力