概要
Solid(SDFで作った立体)をドット絵の素材に変換するカメラです。1ピクセル=1レイの オルソ投影で撮影し、法線・高さ・深度・素材IDを持つ Surface(ドット絵用Gバッファ)を 出力します。2:1アイソメのブロック素材や8方向キャラ素材など、「3D→ドット絵」レーンの 中心に立つノードです。
- ライティングはしない: 光を当てるのは後段(
サーフェース光プレビュー等)の仕事
使い方のポイント
- 最小構成は
ソリッドボックス → ソリッドレンダリング → サーフェース光プレビュー。 まずこれで「立体がドット絵になる」感覚をつかむ - ドット密度は
pixels_per_unitで決める(16なら1×1×1のボックスが約16px)。 素材のサイズ感はカメラを動かすのではなくこの値で合わせる - 角度は「3Dビューアでドラッグして探し、
この角度を採用で書き戻す」のが速い - 静止画1枚なら
AutoFit、アニメ・8方向・ターンテーブルなら必ずFixedCanvas。 自動フィットは立体の向きでサイズが変わるため、複数フレームでガタつく image出力(ベタ塗り)は当たり確認用。本命はsurface出力+ライティング系ノード
よくある失敗
- フレームごとにサイズ・中心がずれる:
frame_mode = AutoFitのまま回している。FixedCanvasにしてframe_world_*を対象が全フレーム収まる大きさに取る - 画面が真っ白/真っ黒で立体感がない: このノードはライティングしない仕様。
surfaceをsurface_light_previewやライティング定義につないで光を当てる - 8方向素材の角度が中途半端:
camera_angle_snap = 45を設定して丸める (アニメ駆動時の浮動小数の揺れも吸収される) - 輪郭がぼやける: ぼやけない仕様(AAなし・点サンプリング)。にじんで見えるなら 表示側の拡大フィルタを疑う
技術詳細
AutoFitでは出力サイズを立体のバウンディングから自動フィット(上限1024px)FixedCanvasでは出力サイズと注視中心を固定する。ターンテーブルや8方向素材ではこちらを使う- 1出力ピクセル=1レイ、点サンプリング、AAなし(ドット絵前提)
- normal_map はビュー空間(x右・y画像下・z画面手前)で、
サーフェース光プレビューの規約と一致 - height_map はワールドzの正規化(白=高い)、depth_map はビュー深度(白=手前)
- curvature_map はスクリーンスペース曲率(0.5=平坦、>0.5=凸エッジ)。エッジハイライト生成用
- face_ids は
{solid_id}:top/:left/:right/:front/:back/:bottom。各生成ノードのsolid_idが空欄ならsolid:0のような自動IDを使う - 実装は
crates/pxn-core/src/sdf_render.rs(rayon並列)。参考性能: 129×81px・素体20個で約3.3ms(release)
3Dビューア連携
- Inspector またはプレビューウィンドウの 3D 表示では、接続されている Solid 入力を
Solid3DStageで直接レイマーチ表示する - ビューア内でドラッグして角度を探し、
この角度を採用を押すとazimuth、elevation_preset=Custom、custom_elevationに書き戻される - ビューアの checker と light gizmo は表示専用であり、
surface/image出力には焼き込まれない
使用例
ソリッドボックス → ソリッドレンダリング → サーフェース光プレビューがアイソメブロックの最小構成TimeSource → SawtoothWave → ソリッド変換.回転Z → ソリッドレンダリング.image → AnimationRenderでターンテーブルのスプライトシート- 8方向素材は
VariantRange(key=render:azimuth, start=0, end=315, count=8) → BatchRender.itemsとし、camera_angle_snap=45とFixedCanvasを併用する サーフェース書き出しにつなぐとHD-2Dエンジン用マップセットになる
アニメーション時の推奨
frame_mode = FixedCanvasfixed_canvas_width/fixed_canvas_heightを最終1フレームのサイズにする- 対象が全フレームで収まるように
frame_world_width/depth/heightを広めに取る - 8方向素材では
camera_angle_snap = 45
関連ノード
solid_box/solid_sphere/solid_combine— 撮影対象の立体を作るsurface_light_preview— 出力Surfaceに光を当てる定番の次段model_render— Model(メッシュ)レーンの同型カメラ。パラメータ語彙は共通surface_export— Surfaceをゲームエンジン用テクスチャセットへ書き出す