概要
普通の2D画像から高さマップ(白=高い)を推定する、「手描き絵の3D化」の入口です。
ベタ塗りのスプライトでも、シルエットから風船のように膨らませて立体感を作れます。
出力はライティング系(image_to_surface の高さ入力)や slope_blur のマップに使います。
使い方のポイント
- モードの選び方: ベタ塗りの絵→
Silhouette(輪郭から膨らませる)、 陰影が既に塗ってある絵→Luminance(明るさをそのまま高さに) Silhouetteの形状はprofileで決める: キャラ・丸物→Round、結晶・トゲ→Linear、 レンガ・箱→Round+plateau0.5前後(天面が平らになる)- 定番パイプライン:
image_load → height_from_image → image_to_surface(高さ入力) → surface_light_preview。手描き絵に後から光と影が付けられる - 出力はImage型なので、Surface型を受け取る
surface_light_previewへは直接つながらない。 必ずimage_to_surfaceの高さ入力を経由する slope_blurのマップ用途にも便利: 絵自体の形に沿って模様を流せる
よくある失敗
- 内部の段差(窓のくぼみ等)が出ない: シルエットモードは輪郭情報だけで推定する
仕様(下記「限界」)。内部段差は
Luminanceで陰影塗りを再利用するか、高さを手描きする - 高さがガタガタ: 入力のふちがアンチエイリアスされているとシルエットが暴れる。
前段で
threshold(Alpha)を挟んできれいな2値シルエットにする - 凹ませたいのに膨らむ:
invertをONにすると彫り込み・くぼみになる
技術詳細
- Silhouette: アルファシルエットに chamfer 3-4 距離変換をかけ、「縁から遠いほど高い」高さ場を作る。
Roundは半球の断面カーブ、Linearは円錐状。plateauは中心側を最大高さで頭打ちにする - Luminance: ピクセルの輝度をそのまま高さとして読む。陰影が既に塗られた絵の再利用向け
- Alpha: 不透明度をそのまま高さとして読む
- 透明ピクセルは透明のまま出力される
使用例
画像読み込み → 画像から高さマップ → 画像からサーフェース(高さ入力) → サーフェース光プレビューで、ベタ塗りスプライトに後から光を当てる反転を ON にして、くぼんだ装飾や彫り込みを作る
限界
シルエットの輪郭情報だけから推定するため、絵の内部にある段差(例: 家の窓のくぼみ)は表現できない。内部の段差が必要な場合は高さマップを手描きするか、明るさ モードで陰影塗りを再利用する。
関連ノード
image_to_surface— 高さマップをSurfaceに組み込んでライティングへ渡すquick_shade— 「膨らませて光を当てる」を1ノードで済ませる入門版slope_blur— 高さマップの傾きに沿って模様を流すdistance_field— 距離場そのものが欲しい場合