ノード一覧に戻る

サーフェース合成

surface_composite

別のサーフェースを上に重ね、見た目・各マップ・素材ID・面IDをまとめて合成します。

確認済み
解説あり

入力ポート

名前説明
下地
base
Surface
必須
下地になるサーフェースです。
重ねるサーフェース
overlay
Surface
必須
上に重ねるサーフェースです。
マスク
mask
Image
重ねる場所を制限する任意のマスクです。

出力ポート

名前説明
サーフェース
surface
Surface
合成したサーフェースです。
プレビュー
preview
Image
見た目の画像を確認するプレビューです。

パラメータ

名前既定値範囲説明・選択肢
ブレンド
mode
Enum
Normal

重ねるサーフェースの見た目の色をどう混ぜるかです。

  • 通常Normal
    重ねるサーフェースの色をそのまま載せます。
  • 乗算Multiply
    下地を暗くします。影や汚れ向けです。
  • スクリーンScreen
    下地を明るくします。光やハイライト向けです。
  • オーバーレイOverlay
    コントラストを強めます。
  • 加算Add
    色を加算します。発光表現向けです。
  • 減算Subtract
    上の色を差し引いて暗くします
  • 差の絶対値Difference
    2色の差を取り出します。違い比較や特殊効果に有用
  • 比較(暗)Darken
    チャンネルごとに暗い方の色を残します
  • 比較(明)Lighten
    チャンネルごとに明るい方の色を残します
  • ソフトライトSoftLight
    やわらかいコントラスト。淡い陰影や色付けに有用
  • ハードライトHardLight
    強いコントラスト。はっきりした光と影に有用
  • 覆い焼きColorDodge
    下の色を強く明るくします。強い光の表現に有用
  • 焼き込みColorBurn
    下の色を強く暗くします。深い影の表現に有用
不透明度
opacity
Float
10–1 / step 0.01

重ねるサーフェース全体の強さです。

オフセットX
offset_x
Int
0-4096–4096

重ねるサーフェースを横にずらす量です。

オフセットY
offset_y
Int
0-4096–4096

重ねるサーフェースを縦にずらす量です。

前後の決め方
order_mode
Enum
LayerOrder

通常は重ね順のまま使います。立体同士は契約深度、Isoや外部画像は手動リマップを選びます。

  • 重ね順LayerOrder
    常に重ねるサーフェースを手前にします。既存プロジェクトと同じ動きです。
  • 契約深度で自動ContractDepth
    同じカメラ角と縮尺で描いたSolid/Modelのワールド深度を自動比較します。合わない入力はエラーにします。
  • 深度を手動で揃えるManualDepth
    Iso・外部深度・2D高さを、個別の倍率と基準位置で同じ比較範囲へ揃えます。
下地の深度元
base_depth_source
Enum
DepthMap

下地の前後判定に使うマップです。Iso深度なら深度、2D凹凸なら高さを選びます。

  • 深度マップDepthMap
    Surfaceの深度マップを使います。白ほど手前です。Isoの深度マスクは通常こちらです。
  • 高さマップHeightMap
    相対高さを前後判定へ明示転用します。2Dの盛り上がりを重ねたい時だけ選びます。
重ね側の深度元
overlay_depth_source
Enum
DepthMap

重ねる側の前後判定に使うマップです。下地と同じ意味のマップを選びます。

  • 深度マップDepthMap
    Surfaceの深度マップを使います。白ほど手前です。Isoの深度マスクは通常こちらです。
  • 高さマップHeightMap
    相対高さを前後判定へ明示転用します。2Dの盛り上がりを重ねたい時だけ選びます。
下地の深度倍率
base_depth_scale
Float
1-4096–4096 / step 0.01

黒から白までを共通範囲の何単位として扱うかです。まず1、白黒が逆なら-1を目安にします。

下地の深度基準
base_depth_offset
Float
0-4096–4096 / step 0.01

下地マップの黒を共通範囲のどこに置くかです。重なり位置がずれる時に0.1ずつ動かします。

重ね側の深度倍率
overlay_depth_scale
Float
1-4096–4096 / step 0.01

重ね側の黒から白までを何単位として扱うかです。Iso同士なら下地と同じ値から始めます。

重ね側の深度基準
overlay_depth_offset
Float
0-4096–4096 / step 0.01

重ね側マップの黒を置く基準です。全体を手前へ出すなら少し増やし、奥へ送るなら減らします。

重ね側の前後補正
depth_bias
Float
0-4096–4096 / step 0.001

深度を揃えた後、重ねる側だけ全体を前後へ動かします。面がちらつく時は0.001〜0.01から試します。

同じ深度とみなす幅
depth_tolerance
Float
00–4096 / step 0.001

この幅より小さい差は同じ深度として重ね側を優先します。通常は0のまま、細いちらつきが残る時だけ0.001ずつ増やします。

深度境界のぼかし幅
depth_feather
Float
00–4096 / step 0.001

前後が切り替わる境界だけをなじませます。ドット絵は0、半透明の煙や光は0.01前後から試します。IDはぼかしません。

マップの扱い
map_policy
Enum
AllMaps

重ね順モードで、見た目以外の高さ・法線・発光なども合成するかを選びます。深度モードは全Gバッファを常に一体で扱います。

  • 全マップAllMaps
    見た目、高さ、法線、発光などをまとめて合成します。
  • 見た目だけAlbedoOnly
    見た目の色だけを合成し、他のマップは下地のまま残します。
高さの合成
height_mode
Enum
OverlayMap

重ねるサーフェースが高さマップをどう変えるかです。

  • 重ねるマップを使うOverlayMap
    重ねるサーフェースの高さマップを、そのまま下地になじませます。従来の挙動です。
  • 下地より高くするRaised
    重ねた部分を下地より高くします。壁に窓枠、床に敷石を付ける時に向きます。
  • 高さを足すAdd
    下地の高さに、重ねるサーフェースの高さを足します。
  • 高い方を使うMax
    下地と重ねるサーフェースを比べて、高い方を使います。
重ねる高さ
height_offset
Float
0-1–1 / step 0.01

重ねた部分を下地からどれくらい出すかです。窓枠や装飾を少し手前に出したい時に使います。

重ねる高さの強さ
overlay_height_scale
Float
10–4 / step 0.01

重ねるサーフェースが持つ高さマップをどれくらい効かせるかです。

高さから法線を作り直す
rebuild_normal_from_height
Bool
false

合成後の高さマップから光の当たり方用の法線マップを作り直します。出っ張りのハイライトを合わせたい時に使います。

IDの扱い
id_policy
Enum
OverlayVisible

重ね順モードで素材IDと面IDをどう合成するか選びます。深度モードは色と同じ勝者側のIDを使います。

  • 重ねた場所を使うOverlayVisible
    重ねたサーフェースが見えている場所では、素材IDと面IDも上書きします。
  • 下地を残すKeepBase
    素材IDと面IDは下地のまま残します。
マスクの見方
mask_source
Enum
Alpha

マスク画像のどの値で重ねる強さを決めるかです。

  • アルファAlpha
    透明度で重ねる場所を決めます。
  • 明るさLuminance
    白黒の明るさで重ねる場所を決めます。
  • Red
    赤チャンネルで重ねる場所を決めます。
  • Green
    緑チャンネルで重ねる場所を決めます。
  • Blue
    青チャンネルで重ねる場所を決めます。
左右ループ
wrap_x
Bool
false

重ねるサーフェースの左右端がつながっているものとして読みます。

上下ループ
wrap_y
Bool
false

重ねるサーフェースの上下端がつながっているものとして読みます。

概要

2つの Surface を重ねて、1つの Surface にまとめるノードです。

画像だけを重ねるのではなく、高さ、法線、発光、ざらつき、素材ID、面IDも一緒に合成できます。たとえば、床のサーフェースに汚れパーツを重ねたり、壁の上に金属パーツを置いたり、アイソメ面の一部に別の面パーツを足したい時に使います。

出力サイズは常に base のサイズです。overlayoffset_x / offset_y で置く位置を決めます。

使い方のポイント

  • 通常画像の blend に相当するSurface版。ライティング前に部品を重ねるのが正しい 順序(ライティング後の画像を重ねると光の整合が崩れる)
  • SolidとModelを立体として交差させる時は、両方のRenderでカメラ角と pixels_per_unitを揃え、order_mode=ContractDepthを選ぶ。各ピクセルで手前のAlbedo・ Normal・Height・AO・Emission・Roughness・Curvature・IDがまとめて採用される
  • Iso Sceneのdepth_maskや外部深度を使う時は、Image to Surface.depth_mapへ接続して order_mode=ManualDepthを選ぶ。まず両倍率1・基準0で確認し、全体位置は0.1ずつ、 同一面のちらつきだけはdepth_bias=0.001〜0.01を目安に調整する
  • ドット絵ではdepth_feather=0が基本。煙や半透明エフェクトの境界だけ0.01前後から試す。 Material IDとFace IDはフェザー中も混ざらず、前後のどちらか一方を保つ
  • 高さの扱いが鍵: height_mode で「下地より高く置く」等を選び、重ねた部品が 出っ張るのか埋まるのかを決める
  • 重ねた後に rebuild_normal_from_height をONにすると、段差の法線が作り直されて 光の当たりが自然になる
  • 確認はサブマッププレビュー(H=高さ、N=法線)を切り替えながら行う

よくある失敗

  • 契約深度でエラーになる: Renderのカメラ角またはpixels_per_unitが異なるか、 Image to Surface由来で深度契約がない。設定を揃えるか、意図を確認して手動深度へ切り替える
  • Isoと立体の前後が逆: 手動深度の倍率が逆。該当側のdepth_scale=-1を試し、 depth_offsetで基準面を揃える。高さと深度を同じ0〜1という理由だけで自動比較しない
  • 重ねたのに光で浮き上がらない: 高さを上げていない(height_mode/offset)か、 法線を再構築していない。画像として重なっても、光は高さ・法線を見ている
  • overlayが切れる: 出力サイズは常にbase基準。overlayはoffsetで位置決めし、 はみ出しは切れる

使用例

  • Grid Pattern で作った床サーフェースを base にし、汚れや水たまりのサーフェースを overlay にして重ねる。
  • Surface Plane で作った壁に、別の小さな金属パーツのサーフェースを重ね、id_policy=OverlayVisible で金属IDも一緒に入れる。
  • 壁に窓枠を貼る時は、height_mode=下地より高くするheight_offset=0.05〜0.15rebuild_normal_from_height=ON にする。Surface Light Preview で落ち影を強めると、窓枠が壁より少し出ているように見えます。
  • 見た目だけステッカーのように貼りたい時は、map_policy=AlbedoOnlyid_policy=KeepBase にする。
  • タイル素材として端をまたいで重ねたい時は、wrap_xwrap_y をONにする。

確認方法

  1. Solid RenderModel Renderを同じカメラ角・密度・64×64固定キャンバスにし、 order_mode=ContractDepthで重ねる。
  2. SurfaceプレビューのA/N/H/D/C/ID/Fを切り替え、交差境界で全マップの勝者が一致するか確認する。
  3. 片方のカメラ角を変え、暗黙合成されず互換エラーになることを確認してから元へ戻す。
  4. Iso Sceneのimageとdepth_maskをImage to Surfaceへ渡し、手動深度で上の結果へ加える。
  5. depth_biasを前後に動かし、Iso部品が交差面の前後を連続して移ることを確認する。
  6. Surface Light Previewにつなぎ、境界をまたいでも法線・素材ID・面IDが色と食い違わないか確認する。

関連ノード

  • blend — 通常画像の重ね合わせ(Surfaceでなくてよい場合)
  • surface_light_preview — 合成結果のライティング
  • surface_rebuild_normal — 法線の再構築を単独で行う
  • surface_set_map — サブマップの個別差し替え
ノード一覧に戻る
サーフェース合成 — PixPipeline ノード解説