本文へスキップ

ラフネスをスムースネスに変換 · Unity向けチャンネル反転

Unityのメタリックワークフローはスムースネスを読みますが、多くのテクスチャツールはラフネスを書き出します。反転は単純な計算ですが、バイトが残ることが前提です。テクスチャラボはPNGを直接読むので、保存される値は正確に255 − ラフネスです。

テクスチャマップをドロップ(PNGはチャンネルのバイトをそのまま保持)
テクスチャラボを開く
ブラウザ内で処理し、ファイルはアップロードされません。
テクスチャラボ:CC0テクスチャから生成したノーマルマップとOpenGL/DirectXの規約表示
CC0アセット(ambientCG)を開いた実際のテクスチャラボ画面です。
出力
  • Channel PNGs測定確認· numpy
  • Normal map測定確認· numpy
  • Packed mask / ORM測定確認· Pillow
  • Engine import未検証

できること

  • 正確に255 − vを書くチャンネル反転(ダウンロードしたファイルをnumpyで確認)。
  • ブラウザのCanvasなら失う、完全に透明なテクセル下のバイトを保持。
  • Unity HDRP(マスクマップ)やURP(アルファにメタリック+スムースネス)での意味つきのチャンネルプレビュー。
  • パッカーへ続けて:スムースネスはURPメタリックマップかHDRPマスクマップのアルファに入ります。

使い方

  1. ラフネスマップ(PNG)をドロップ。
  2. チャンネルを反転。
  3. スムースネスマップを保存するか、マスクパッカーを開く。
  4. Unityプリセットでメタリック(HDRPならAOも)と一緒にパック。

出力ファイルと検証方法

「測定確認」は、ダウンロードしたファイルをページ外(Pillow・numpy・独立したパーサー)で開き直して性質を測ったという意味です。ゲームエンジンでの読み込みは試していません。

書き出し先ファイル検証
Channel PNGs<name>-r/g/b/a.png (8-bit grey)測定確認 numpyチャンネルごとにバイト一致。完全に透明なテクセル下のRGBも保持。
Normal mapPNG · OpenGL (+Y) or DirectX (−Y)測定確認 numpyデコードしたベクトルは単位長(最大誤差0.0002)。OpenGLとDirectXは緑だけが異なります。
Packed mask / ORMUnity HDRP mask · URP metallic · ORM (glTF, Godot)測定確認 Pillowパック後のバイトを確認:ORMプリセット、AO 10 / ラフネス 80 / メタリック 220 → (10, 80, 220, 255)。
Engine importUnity · Unreal · Godot未検証どのエンジンでも読み込んでいません。

検証の根拠

チャンネル分解は4チャンネルすべてでバイト一致(最大差0)、透明テクセル2048個のRGBを保持。エッジブリードはアルファ0のテクセル448個だけを変更し、アルファは一切変更なし。OpenGL ↔ DirectXは緑(255 − g)だけが異なり、変換後の法線は単位ベクトル。

制限

  • チャンネルのバイトを正確に扱えるのはPNGだけです。JPEG・WebPはブラウザがデコードし「バイト一致ではない」と表示します。
  • インターレースPNGと16ビット出力は非対応。正確な経路は3,355万ピクセルまで。
  • ノーマルマップの規約はピクセルから判定できず、変換のみ可能です。
  • Unity・Unreal・Godotへの読み込みは行っていません。チャンネル順は各ドキュメントとエンジンのソースに基づきます。

よくある質問

Unityはスムースネスをどのチャンネルから読みますか?

URPメタリックはメタリックマップのアルファ、HDRPマスクマップもアルファです(Rメタリック・G AO・Bディテールマスク)。どちらの順序もUnityのドキュメントに基づき、ラボで引用しています。

Unityで読み込みましたか?

いいえ。バイトは確認しましたが、ここではUnityへの読み込みは行っていません。

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

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

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

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

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

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