Blenderで作成した3DモデルをUnityへ持っていく際、ベイクしたRoughnessやNormalマップをどこに設定すればよいのか迷うことがあります。特にBlenderとUnityではマテリアルの考え方や入力場所が異なるため、正しく設定しないと質感が変わったり、法線が反転したような表示になる場合があります。
この記事では、BlenderでベイクしたRoughness(粗さ)とNormal(法線)テクスチャをUnityで利用するための具体的な手順や、設定時に注意するポイントを初心者向けに解説します。
BlenderでベイクしたRoughnessとNormalの役割
まず、RoughnessとNormalが何を表すテクスチャなのかを理解すると、Unityでの設定場所が分かりやすくなります。
Roughnessマップは、表面の光沢の強さを表す画像です。値が低い部分はツルツルした金属やプラスチックのように反射が強くなり、値が高い部分はマットな木材や布のような質感になります。
Normalマップは、モデルの形状を増やさずに表面の細かな凹凸を表現するためのテクスチャです。例えば、平面の壁にレンガの凹凸や傷を表現するときなどに使用されます。
BlenderでベイクしたNormalマップをUnityへ設定する方法
Blenderで出力したNormalマップは、UnityではマテリアルのNormal Map項目へ設定します。
具体的な手順は以下の通りです。
- UnityのProjectウィンドウへNormalマップ画像(PNGやTGAなど)をドラッグする
- 読み込んだ画像をクリックする
- InspectorのTexture Typeを「Default」から「Normal map」へ変更する
- Applyを押して保存する
- 使用するMaterialを選択する
- Normal Map欄へ画像をドラッグする
Unity側でNormal Mapとして認識させない場合、通常のカラー画像として扱われるため、凹凸表現が正しく表示されません。
BlenderでベイクしたRoughnessマップをUnityへ設定する方法
RoughnessマップはUnityの標準的なPBRマテリアルでは、そのままRoughnessという項目に入れる場所がない場合があります。
UnityのStandard Shaderでは、金属度や滑らかさを表現するためにSmoothnessという値を使用します。そのため、BlenderのRoughnessとは考え方が逆になります。
Roughnessは「粗いほど数値が高い」、Smoothnessは「滑らかなほど数値が高い」ため、Unityで使用する場合は以下のような変換が必要です。
| Blender | Unity |
|---|---|
| Roughness 0 | Smoothness 1(ツルツル) |
| Roughness 1 | Smoothness 0(ザラザラ) |
つまり、Roughness画像をそのまま使うのではなく、反転させた画像をSmoothnessとして利用することが基本になります。
UnityでRoughnessを設定する具体的な操作
Unity Standard Shaderを使用する場合、Smoothnessは通常Metallicマップのアルファチャンネルに保存して利用します。
設定手順は以下の通りです。
- Roughness画像を画像編集ソフトで開く
- 色を反転してSmoothness用の画像を作成する
- Metallicテクスチャのアルファチャンネルへ配置する
- UnityのMaterialでMetallic Mapとして設定する
例えば、黒い部分が多いRoughnessマップの場合は、反転すると白い部分が増え、Unityでは高いSmoothnessとして読み込まれます。
URPやHDRPを使用する場合の注意点
Unityでは使用しているレンダーパイプラインによってマテリアル設定が異なります。
URP(Universal Render Pipeline)やHDRP(High Definition Render Pipeline)では、Standard Shaderとは異なる設定項目があります。
HDRPではMask Mapという形式を利用することが多く、RoughnessやMetallicなど複数の情報を1枚の画像チャンネルにまとめて管理します。
そのため、Blenderから出力したテクスチャをそのまま入れるのではなく、Unity側のShader仕様に合わせて配置する必要があります。
Normalマップが正しく表示されない場合の確認ポイント
BlenderからUnityへNormalを持っていった場合、凹凸が逆に見える、光の当たり方がおかしいという問題が起こることがあります。
主な原因は以下のようなものです。
- OpenGL形式とDirectX形式のNormal方向の違い
- Unity側でNormal Map設定をしていない
- BlenderとUnityで座標系が異なる
- ベイク時の設定が適切ではない
特にNormalマップは環境によってY軸方向(緑チャンネル)が逆になることがあります。その場合は画像編集ソフトでGreenチャンネルを反転すると改善する場合があります。
BlenderからUnityへテクスチャを移行するときのおすすめ手順
安定したワークフローを作るには、Blender側で用途ごとにテクスチャを書き出し、Unity側ではShaderに合わせて設定する流れがおすすめです。
一般的には以下のような流れになります。
- BlenderでNormal、Roughness、Base Colorなどをベイクする
- 必要に応じて画像形式を調整する
- Unityへインポートする
- Texture TypeやCompressionを設定する
- Materialへ正しい項目に割り当てる
最初からすべてを自動化しようとせず、1つのモデルで正しい表示になるまで確認すると、後の制作作業が安定します。
まとめ:BlenderのRoughnessとNormalはUnityの仕様に合わせて設定する
BlenderでベイクしたNormalマップは、UnityではNormal Mapとして設定することで凹凸表現に利用できます。
一方、RoughnessはUnityではSmoothnessとして扱われることが多く、数値の意味が逆になるため反転処理が必要になる場合があります。
BlenderとUnityではPBR表現の考え方に違いがあるため、テクスチャをそのまま配置するのではなく、使用しているShaderやレンダーパイプラインに合わせて調整することが重要です。

コメント