ばーちゃるなれっじ Unityのエラー、アバター改変、イベントを検索 アプリで開く
‹ 戻る#アバター

ベースカラー・ノーマル・PBRの基礎と、迷子にならないファイル管理

アバターを狙った質感に見せるには、色(ベースカラー)だけでなく複数のテクスチャを組み合わせます。ところが種類が増えるほど「この紫の画像は何」「どれが最新のファイル」と迷子になりがちです。この記事では、PBR(物理ベースレンダリング)で使う主なテクスチャの役割、Unity に入れるときのインポート設定、そして後から自分が困らないファイル管理のルールをまとめます。

主なテクスチャの種類と役割

テクスチャの種類と役割 ベースカラー・ノーマル・メタリック/スムースネス・AO・エミッション・マスク

ベースカラー(Albedo): 色そのものです。色替えや模様入れで触るのは基本的にこれだけです。

ノーマルマップ: 面の向きを記録した画像で、ポリゴンを増やさずに布のしわや金属の傷のような細かい凹凸を表現します。紫がかった見た目をしています。

メタリック / スムースネス: 金属感とツヤの強さです。Unity の Standard シェーダーではメタリックを R チャンネル、スムースネスを A(アルファ)チャンネルに入れた1枚の画像で扱います。Substance 3D Painter などが書き出す「Roughness(粗さ)」はスムースネスの反転なので、そのまま入れるとツヤが逆になります。

AO(アンビエントオクルージョン): 入り組んだ部分の陰の落ち込みを表す白黒画像です。無くても表示はできますが、あると立体感が増します。

エミッション: 自発光する部分です。黒い部分は光らず、色が付いた部分がその色で光ります。目のハイライトや模様の発光に使います。

マスク: 効果をかける範囲を指定する白黒画像です。lilToon などのトゥーン系シェーダーでは、色替えの範囲、反射の範囲、アウトラインの太さなど、多くの機能がマスクで制御されます。

ここで押さえておきたいのは、VRChat のアバターの多くは lilToon のようなトゥーン系シェーダーを使っており、「ベースカラー+ノーマル+マスク」で完結することが多いという点です。メタリックや AO は、リアル寄りの質感や金属パーツに使うときに足すもので、必須ではありません。テクスチャと UV の関係は「テクスチャとUVの基礎知識 色替えでできること・できないこと」を参照してください。

引用記事テクスチャとUVの基礎知識 色替えでできること・できないこと技術・制作

ノーマルマップの注意

ノーマルマップは色として編集してはいけません。RGB の値が「その点の面がどちらを向いているか」を表しているので、明るさや色相を変えると凹凸の向きが壊れます。塗り替えるのはベースカラー、へこみや出っ張りを足したいときだけノーマルを扱う、と役割を分けて考えましょう。

もう一つの落とし穴が、緑(G)チャンネルの向きです。ノーマルマップには OpenGL 形式(Y+)と DirectX 形式(Y-)があり、Unity は OpenGL 形式を前提にしています。DirectX 形式のノーマルをそのまま使うと、へこみが出っ張りに見えます。他のソフトから持ってきたノーマルで陰影が逆に見えたら、G チャンネルを反転してください。

Unity のインポート設定

テクスチャを Assets に入れたら、ファイルを選択して Inspector のインポート設定を確認します。種類ごとに見る項目は次の通りです。

ベースカラー / エミッション
 Texture Type: Default
 sRGB (Color Texture): オン

ノーマルマップ
 Texture Type: Normal map(紫の画像がそれらしく見えなくなるのが正常)

メタリック / スムースネス / AO / マスク
 Texture Type: Default
 sRGB (Color Texture): オフ(数値データとして扱うため)

共通
 Max Size: 2048 を基本に、PC 版は必要なら 4096、Android 版は 1024 以下
 Generate Mip Maps: オン
 変更後は Apply を押す

sRGB の設定を間違えると、マスクの効き方やメタリックの強さが見た目と合わなくなります。「数値として使う画像は sRGB オフ」と覚えておくと迷いません。Max Size はテクスチャメモリに直結し、パフォーマンスランクの判定に大きく影響します。詳しくは「VRAM削減のテクスチャ圧縮テクニック」を参照してください。

引用記事VRAM削減のテクスチャ圧縮テクニック技術・制作

ファイル名で迷子にならない

テクスチャの命名規則と置き場所のルール

種類が増えると管理が大変です。名前に役割を入れておくと、Unity やシェーダーに割り当てるとき迷いません。

avatar_body_BaseColor.png
avatar_body_Normal.png
avatar_body_Metallic.png
avatar_body_AO.png
avatar_body_Mask_ColorChange.png

「対象_部位_種類」の順でそろえるのがおすすめです。lilToon などのシェーダーに設定するときも、名前を見れば一目で分かります。改変版を作るときは、元ファイルを上書きせず _v2 や _blue のような接尾辞を付けて別名で保存してください。元に戻せることが、改変を気軽に試せる条件です。

ファイル名に日本語やスペースを使うこと自体は Unity では問題ありませんが、他のツールやコマンドラインで扱うときにトラブルの種になります。英数字とアンダースコアだけで付けておくのが無難です。

置き場所と元データの扱い

販売アバターのテクスチャは通常 Assets/アバター名/Textures/ のような場所にあります。自分で描いたものは、同じ階層に Custom のようなフォルダを作って分けておくと、アバターの更新版を上書きインポートしたときに自分のファイルが消えたり混ざったりしません。

PSD や CLIP のような編集元ファイルは、Assets の外(プロジェクトフォルダの隣など)か、専用フォルダに置いてください。Assets の中に PSD を置くと Unity がそれもテクスチャとして読み込み、プロジェクトが重くなります。Unity に入れるのは書き出した PNG だけ、と決めておくとすっきりします。

書き出しサイズは 2 のべき乗(1024、2048、4096)にそろえます。中途半端なサイズは圧縮の対象外になり、テクスチャメモリを余計に消費します。

落とし穴になりやすい点

ノーマルマップが真っ平らに見える: Texture Type が Default のままです。Normal map に変更して Apply してください。

マスクを変えたのに効き方がおかしい: sRGB がオンのままだと数値がずれます。オフにして Apply します。

ツヤが逆: Roughness をスムースネスとして入れています。画像を反転するか、シェーダー側の反転設定を使います。

アバター更新で自分のテクスチャが消えた: 元の Textures フォルダに直接置いていたケースです。Custom フォルダに分けて、元 Prefab を直接書き換えない運用に切り替えましょう。Prefab の扱いは「FBXとPrefabの違い Unityでのデータの流れを理解する」で解説しています。

引用記事FBXとPrefabの違い Unityでのデータの流れを理解する技術・制作

よくある質問

Q. トゥーン系のアバターでもメタリックや AO は必要ですか。
A. 必須ではありません。lilToon などは反射やマスクの設定で質感を作るので、まずはベースカラーとノーマル、マスクの3種類を押さえれば十分です。

Q. ノーマルマップを自分で作れますか。
A. 作れます。Blender でハイポリからベイクする方法のほか、ベースカラーやハイトマップから生成するツールもあります。ただし生成したものは細部の向きが正しくないことがあるので、Unity 上で光を当てて確認してください。

Q. テクスチャを描くツールは何がよいですか。
A. 用途次第です。「テクスチャを描くツールの選び方 お絵描きソフトから3Dペイントまで」と、Unity 上で直接描ける「Mesh Painter Unity上でアバターのテクスチャに直接描く」を参照してください。

引用記事テクスチャを描くツールの選び方 お絵描きソフトから3Dペイントまでアバター引用記事Mesh Painter Unity上でアバターのテクスチャに直接描くアバター

Q. Quest 版のテクスチャはどうすればよいですか。
A. 同じファイルのまま、インポート設定の Android タブで Max Size を一段下げます。Android 版はテクスチャメモリ 40MB(Medium なら 25MB)が上限です。「Quest対応アバターの基本 制限と対応方法」を参照してください。

引用記事Quest対応アバターの基本 制限と対応方法アバター