技術詳細
内部処理は次の3段で、すべて既存の共有基盤を使う薄いラッパー:
pxn_core::height_field::height_from_silhouette()— アルファシルエットの距離変換で高さマップを推定- 推定高さを
SurfaceDocumentに包む surface::render_surface_light()—サーフェース光プレビューと同じレンダラで光を当てる
shading_styleの Steps2/Steps3 は拡散光を段階に量子化し(SurfaceLightSettings::diffuse_steps)、OKLCH 段階トーンも合わせて適用する- 落ち影(キャスト)はシルエット由来の高さではノイズになりやすいため無効
- angle の意味は
サーフェース光プレビューと同一(315 = 左上からの光)
使用例
画像読み込み → かんたん陰影だけでスプライトに立体感がつく光の向きを変数にバインドすれば、複数スプライトの光源方向を一括変更できる- 細かく制御したくなったら
height出力を画像からサーフェースにつなぎ、サーフェース光プレビュー側でライティング定義・パレットスナップを使う
限界
シルエットだけから立体を推定するため、絵の内部の段差(窓のくぼみ等)は反映されない。その場合は 画像から高さマップ の明るさモードや手描き高さマップで Surface 経路を使う。