本文へスキップ

Laigter代替 · ブラウザでスプライトのノーマルマップ作成

Laigterは2Dスプライト用のノーマルマップ(法線マップ)を作るデスクトップソフトです。itch.ioでは有料、GitHubにはGPL-3の無料ビルドがあり、Godotでドット絵ゲームを作る人によく使われています。StudioのTextureワークスペースは同じ作業をブラウザのタブで行い、そのままエンジンの設定まで進めます。同じCC0素材を両方ともデフォルト設定で処理し、実際の正解ノーマルマップと比べたところ、3DレンダリングのスプライトではLaigter、繰り返しレンガとハイトマップではStudioのほうが近い結果でした。

Laigterは、2Dスプライト用のノーマル・スペキュラー・オクルージョン・パララックスのマップを作り、複数のライトでプレビューし、--no-gui で画面なしでも動くフリーソフトウェアのデスクトップアプリです(GPL-3、GitHubにビルド、itch.ioに有料ビルド)。Nerulio Studioのテクスチャ作業画面はブラウザのタブでノーマルマップを作り、検証済みのGodot 4シーンやUnity 6インポーターまでつなげます。同じCC0素材を既定設定で測ると、3Dから描画したスプライトではLaigter(18.3°対20.0°)、タイル状のレンガと高さマップではStudioのほうが近い結果でした。どちらが合うかは作業しだいです。

スプライト、スプライトシート、繰り返しテクスチャ(PNG)をドロップ
空のStudioを開く
ブラウザ内で処理し、ファイルはアップロードされません。
Studio のテクスチャ作業画面:6フレームに切ったドット絵のたいまつを、生成したノーマルマップと点光源で照らした画面
CC0アセット(OpenGameArt)を開いた実際のStudio画面です。
書き出し先
  • Godot 4 2D lights検証済み· Godot 4.7.2
  • Unity 6 URP 2D検証済み· Unity 6000.5.3f1 (URP 17.5)
  • PNG set + JSON通常ファイル

2つのツールがスプライトに対して行うこと

どちらのツールも絵から高さを推定し、その傾きを求めます。Laigterの既定はアルファの輪郭からドーム形を立ち上げるもので、丸い物体にはよい出発点であり、色からの細部も加えます。プリセットに設定(1.6リリース以降はライトも)を保存でき、1.12.0からアプリでフレーム数かグリッドサイズでシートを分割でき、1.13.0でライトのアニメーションが加わりました。READMEにはノーマル・パララックス・スペキュラー・オクルージョンの各マップと、それぞれのコマンドラインの指定が載っています。

Nerulio Studioはスプライトの大きさに合わせた面取り(128px以下のフレームは1.5px、それより大きければ代表的な内接半径の約0.9倍)を提案し、切ったフレームを1枚ずつ処理し、Godot 4の2Dの式で照らすので、プレビューがGodotの出力と1/255以内で一致します。よそで作ったマップのOpenGL・DirectXの判定、高さブラシ、量子化したドット絵向けの法線、16ビットの高さ入力もあります。

タイル状のテクスチャでは縁が違いを生みます。Laigterの既定は画像の縁をスプライトの縁のように扱い、四辺に3pxの帯を傾けます(レンガでロール誤差63.8)。Tileプリセットで消え(ロール0、正解との差16.5°)、Wrapを使ったStudioは14.7°でした。

Godot 4.7.2で正解の法線と比べて照らすと、スプライトでの差は小さいものです。3Dから描画した小惑星ではLaigterの既定が6.32段階、Studioが6.98段階のずれでした。手描きのたいまつではどの生成ツールも平らなマップより悪く(平ら26.6、Studio 36.2、Laigter 51.0)、どちらも様式化した法線を手で描く作業の代わりにはなりません。

ロール誤差
生成し、テクスチャを半分ずらして再生成して戻し、縁の帯を比べた値。0なら継ぎ目なく繰り返せます。
平均角度
ツールの法線と実際の正解の法線がなす角の平均。低いほど近い。
Tileプリセット
繰り返しテクスチャ用のLaigterのプリセット。縁に面取りが付かないようにします。

できること

  • ベベルの推奨値はスプライトの大きさに合わせて変わります。128px以下のドット絵は1.5px、大きな絵は典型的な内接半径の約0.9倍。この規則はLaigterとの小惑星の比較から生まれました(固定4pxのベベルでは36.6°)。
  • 透明ピクセルのない画像にはWrapを推奨するので、繰り返しテクスチャの境目に明るい帯が出ません(レンガでロール誤差0)。
  • Spriteワークスペースで分割したフレームを1枚ずつ同じピクセル単位の設定で処理。アニメーション全体で立体感がそろい、フレーム同士がにじみません。
  • 書き出しはPNGだけではありません。ライト付きのGodotシーン(Sprite2D・CanvasTexture・ライトごとのPointLight2D)とUnity 6 URP 2D用インポーターで、どちらもエンジンで確認済み。

同じ素材で比べたNerulio StudioとLaigter

実際の正解ノーマルマップとの平均角度で、低いほど正確です。Laigter 1.14.0はコマンドラインのデフォルト、Studioは開いたときの推奨設定のままで、素材ごとの調整はしていません。

Nerulio StudioLaigter 1.14
小惑星(3Dモデルから描画した法線)20.0°18.3° — 比較した4ツールで最も近い
手描きのドット絵のたいまつ38.1°41.6°(どの生成ツールも37〜42°ずれ)
カラー画像から作った繰り返しレンガ14.7°、ロール誤差027.3°、継ぎ目24.0、ロール誤差63.8。Tileプリセットで16.5°、ロール0
8ビットのハイトマップから作ったレンガ8.8°(ハイトマップとして読むと7.7°)29.8°、Tileプリセットで26.0°
動作環境ブラウザのタブ、無料、ファイルは手元にデスクトップ。itch.ioで有料、GitHubにGPL-3の無料ビルド
Godotのライト付きシーン書き出して_lit.tscnを開く(Godot 4.7.2で検証)CanvasTextureとライトを自分で組む
Unity 6 URP 2DインポーターとLight2Dプレビュー(Unity 6で検証)手作業で設定
スプライトシートフレームごとに個別処理アプリでフレーム数かグリッドサイズでシートを分割(1.12.0リリース)。フレーム境界の扱いは未測定、コマンドラインはシートを1枚の画像として処理
開いたマップのOpenGL・DirectX判定信頼度つきで判定し、確認するまで適用しない機能なし

この数値の出典: docs/STUDIO-TEXTURE.md (Head-to-head, 2026-09-24)

Laigterのほうが向いている場合

  • 実際に3Dの形があるスプライトでは、デフォルトが正解に最も近い結果でした。小惑星で18.3°とStudio(20.0°)より良く、デフォルトのドーム型ベベルも良い出発点です。
  • プリセットと、アプリ内で複数のライトを当てて見られる独自のプレビュー。
  • コマンドライン(--no-gui)でフォルダ単位の一括処理ができ、ビルド工程に組み込みやすい。
  • ソースがGPL-3で公開されたデスクトップソフトで、サイトなしでも使えること。

使い方

  1. スプライトをこのページにドロップ(シート全体ならまずSpriteワークスペースで分割)。Textureワークスペースがすぐにノーマルマップを作ります。
  2. Normal mapパネルで推奨ベベルを絵と見比べ、幅やプロファイルを変更。またはハイトブラシ(TextureではB)で凹凸を描く。
  3. ライトツール(L)で光を置き、Normal・Lit表示を切り替えるか、Compare(C)で画面を分割して確認。
  4. Export(Ctrl+E)して、Godotで_lit.tscnを開くか、Unityでインポーターを実行。

ほかの方法

方法こんなときに向いています
Laigterビルドスクリプトでの一括生成(--no-gui)、パララックスとオクルージョンのマップ、ライトのアニメーション、ブラウザ不要のデスクトップアプリ、そして既定のドームが最も近かった(18.3°)3D描画のスプライト。
Nerulio Studioのテクスチャ手作業の配線なしのGodot 4ライト付きシーンやUnity 6 URP 2Dの設定、Wrapを自動で提案するタイル状テクスチャ、フレームごとのシート処理、よそで作ったマップの規約チェック、インストール不要。
SpriteIlluminator(有料、デスクトップ)法線を塗りたいとき。AngleとStructureのブラシや選択ツールに当たる機能はStudioになく、あるのは高さブラシだけです。
3Dからベイク、または手描き描画したスプライト(ベイクが正解)や様式化したドット絵(作者のたいまつに近い生成ツールはなかった)。

エンジン別の書き出しと検証方法

「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。

書き出し先ファイル検証
Godot 4 2D lights_lit.tscn · CanvasTexture .tres · normal / specular PNG検証済み Godot 4.7.2実在のCC0ケース6件をGodot(gl_compatibility)で描画し、確認した全フレームがStudioのライティングプレビューと1/255以内で一致。緑を反転した同じ描画は3.8〜37段階ずれるため、規約の誤りを検出できます。
Unity 6 URP 2DPNG · nerulio-texture.json · Editor/NerulioNormalMapImporter.cs検証済み Unity 6000.5.3f1 (URP 17.5)12回中12回合格(6ケース×ガンマ・リニア色空間):URPが適用したライティングが書き出したノーマルマップと一致(平均誤差0.0037〜0.0085)。光の減衰はURP独自なので、明るさはプレビューではなくUnityの基準です。
PNG set + JSONalbedo · _n (OpenGL) · _n_dx (DirectX) · 16-bit height · AO · specular · manifest通常ファイルどのエンジン・ツールでも使える通常ファイルで、エンジンでの実行検証はうたっていません。

検証の根拠

Godot 4.7.2で実在のCC0ケース6件(ドット絵、HDスプライト、繰り返しテクスチャ、読み込んだDirectXマップ)を描画し、確認した全フレームがStudioのプレビューと1/255以内。Unity 6000.5 URP 2D:12回中12回合格(6ケース×ガンマ・リニア)。規約が分かっている実在のマップでOpenGL/DirectX判定:1Kのマップ128枚で100%正解、1,562サンプル中で誤った「高」判定は0件(「緑が明るければOpenGL」という単純な規則は46%)。

制限

  • コマンドラインや一括処理はありません。Studioはブラウザで絵を1枚ずつ処理します。
  • パララックスマップはなく、スペキュラーマップの書き出しはGodot向けだけです。
  • ライトのアニメーションはありません。プレビューと書き出しのライトは固定です。
  • 3Dから描画した小惑星では、Laigterの既定のほうが実際の法線に1.7°近い結果でした。
  • 確認したのはChromiumだけで、Firefox・WebKitは試していません。
  • 透明な縁がない絵(繰り返しテクスチャ)では、赤の反転とDirectXの緑を区別できません。チェックパネルがそれを伝え、「赤を反転」を用意しています。
  • シートはスプライト作業画面でフレームを切るまで1枚の絵としてライティングされます。テクスチャ作業画面ではフレームを切りません。
  • リムライトはプレビュー専用で、Unityにはスペキュラーマップを書き出しません(Godotには書き出し)。
  • Unityは独自の光の減衰を使います。書き出したノーマルマップはUnityで検証済みですが、明るさの曲線はUnityのものです。

バージョンと出典

Laigter 1.14.0(GitHubのWindows版を --no-gui で既定とTileプリセットで実行)とNerulioを2026-09-24に実際の正解の法線と比べ、Godotで照らした比較は2026-09-25にGodot 4.7.2で行いました。どちらも素材ごとの調整はしていません。上のLaigterの機能はREADMEとリリースノートによるものです。

参照した公式ドキュメント

よくある質問

Laigterのオンライン版はありますか?

Laigter自体はデスクトップソフトです。ブラウザで済ませたい場合は、Textureワークスペースが画像をアップロードせずタブ内でノーマルマップを作ります。どちらが正確だったかは表のとおりです。

Laigterで作ったレンガのノーマルマップの縁に帯が出るのはなぜ?

デフォルト設定が画像の境界をスプライトの輪郭とみなし、四辺に3pxの傾いた帯を作るためです(ロール誤差63.8)。Tileプリセットで解消します(ロール0)。Studioは透明ピクセルのない画像にWrapを推奨します。

Laigterで作ったノーマルマップを持ち込めますか?

はい。スプライトと一緒に開き、ソースとして選んでください。Checkパネルが規約を判定し、今回のLaigterの出力は「OpenGL、高」でした。その後はライトのプレビューと書き出しにそのまま使えます。

無料ですか?アカウントは必要ですか?

このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。

スプライトはアップロードされますか?

いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。

Asepriteやエンジンのプラグインは必要ですか?

いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。