blender-pbr-materials について
blender-pbr-materialsは、アーティストやアセット制作者向けに、物理ベースのマテリアル作成と確認を支援するBlenderスキルです。実用的な設定指針、テクスチャセット用スクリプト、エンジンへの書き出し方法を扱います。
主な機能
- 01テクスチャセットからマテリアルを作成
- 02物理的に妥当なプリセットを使用
- 03色空間とテクスチャマップを設定
- 04エンジン書き出し用のマップを準備
- 05透明度とディスプレイスメントを設定
活用シーン
- 01入手したテクスチャセットからマテリアルを作成
- 02金属、ガラス、木材の表面を設定
- 03glTFやUnreal向けにマップを準備
- 04葉やガラスのアルファを設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-pbr-materialsインストール後、Claude Code で/blender-pbr-materialsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/pbr-values.mdscripts/_bpyx.pybuild_pbr_material.py詳細
PBR マテリアル
実行モデルは blender-core にあります。測定値は references/pbr-values.md を参照してください。
すばやく作成する方法
- テクスチャセット → マテリアル:
scripts/build_pbr_material.py -- --name M_Crate --textures //tex/crate --objects SM_Crate。ファイル名からマップを検出し(Poly Haven、ambientCG、Substance、UE のサフィックスに対応)、カラー スペースを設定し、ORM を分割して、DirectX 法線マップを反転し、AO を glTF 用に接続します。 - 物理的に妥当な単色マテリアル:
--preset gold|iron|plastic|rubber|wood|glass|skin|...に、任意で--color R G B(sRGB)を指定します。
ルール(違反するとレンダリングが「CG」っぽく見えます)
- メタリックは二値です:0(誘電体)または 1(純金属)です。中間値は、金属上のほこりや錆の境界など、遷移ピクセルにのみ使用します。塗装された金属は誘電体として扱います。
- ベースカラー = ライティングのないアルベド:焼き込まれた影、AO、ハイライトは含めません。誘電体の範囲は sRGB で約 30~240(リニアで 0.012~0.87)です。木炭は約 50、新雪は約 240 です。金属の場合、ベースカラーは F0 反射率で、sRGB 180~255 とし、暗くしてはいけません。
- リアリティはラフネスで表現します。グランジ、汚れ、摩耗で変化を付けます。一定のラフネス値では不自然に見えるため、表面全体で ±0.1~0.2 の範囲で変化させます。
- カラー スペース:Base Color と Emission には
sRGBを使用します。Roughness、Metallic、Normal、AO、Height、Opacity、ORM にはNon-Colorを使用します。カラー スペースの誤りが最もよくある不具合です(法線が白っぽくなる、ラフネスが正しくないなど)。 - スペキュラー:ほとんどすべての誘電体では、
IORを 1.5、Specular IOR Levelを 0.5 のままにします。IOR を変更するのは、材質が明確に分かっている場合のみです(水は 1.33、ガラスは 1.5、ダイヤモンドは 2.42)。 - 法線マップ:Blender、glTF、Unity、Roblox は OpenGL(Y+)を使用します。Unreal と Substance の DirectX プリセットは DirectX(Y-)を使用するため、変換時に G を反転します。ベイク時とターゲットでは、同じ接線基底(MikkTSpace)と同じ三角形分割を使用する必要があります。
- AO:Principled BSDF に AO 入力はありません。エンジン向けには、ORM の赤チャンネルに AO を格納します。Cycles のレンダリングでは、レンダラーが遮蔽を計算するため、AO をベースカラーに乗算しないでください。
Principled BSDF(5.2)早見表
Base Color、Metallic、Roughness、IOR、Alpha、Normal、Thin Wall(5.2:体積のない葉、紙、布のシート)、Subsurface Weight/Radius/Scale(肌、ワックス。肌の場合、Scale はメートル単位で約 0.005~0.02)、Specular IOR Level、Specular Tint、Anisotropic、Transmission Weight(ガラス/液体)、Coat Weight/Roughness/Normal(自動車の塗装、ニス)、Sheen Weight(布、ベルベット)、Emission Color/Strength(Strength はおおむね W/m² 単位。画面は 1~10、電球は 50 以上)、Thin Film Thickness/IOR(せっけん、油、コーティングされたレンズ)、Diffuse Roughness。
エンジンへのエクスポート規則
| ターゲット | マップ | パッキング | 法線 |
|---|---|---|---|
| glTF / web / Godot | baseColor(+alpha), metallicRoughness, normal, occlusion, emissive | glTF:R=AO G=Rough B=Metal(ORM) | OpenGL |
| Unreal | BaseColor, Normal, ORM | R=AO G=Rough B=Metal | DirectX(テクスチャにマークが付いている場合、UE はインポート時に反転します) |
| Unity URP/HDRP | BaseMap, Normal, MetallicSmoothness / HDRP MaskMap | URP:R=Metal A=Smoothness(1-rough)。HDRP Mask:R=Metal G=AO B=DetailMask A=Smoothness | OpenGL |
| Roblox SurfaceAppearance | ColorMap(+alpha), NormalMap, MetalnessMap, RoughnessMap, EmissiveMaskContent | グレースケールのマップを個別に使用し、パッキングしません | OpenGL、接線空間 |
- エクスポートされるのは、画像テクスチャ → BSDF の接続だけです。プロシージャルノード、Mix ノード、数学ノードはエンジンでは何も出力しないため、先にベイクしてください(
blender-texture-baking)。 - テクスチャセットごとにマテリアルを 1 つ使用します。マテリアルが 1 つ増えるごとにドローコールも 1 つ増えます(
blender-game-optimization)。 - テクスチャには 2 の累乗のサイズ(512/1024/2048/4096)を使用します。データマップには PNG/TGA を使い、法線マップには JPEG を絶対に使わないでください。
アルファ
mat.surface_render_method = "DITHERED"(カットアウト/アルファクリップ。正しくソートされ、葉や髪のカードに適しています)または "BLENDED"(ガラス/UI などの真の透明)。Alpha を接続します。glTF はアルファの設定から CLIP/BLEND をエクスポートします。ゲームではディザード/クリップを推奨します。
ディスプレイスメント
ハイトマップ → Displacement ノード → マテリアル出力の Displacement。mat.displacement_method:BUMP(シェーディングのみで、全体に適用)、BOTH/DISPLACEMENT(Cycles 用。高密度または適応的に細分化したジオメトリが必要です。Subdivision モディファイアーの use_adaptive_subdivision を使用します)。スケールの単位はメートルです。8-bit の場合はミッドレベルを 0.5 に、32-bit EXR の場合は 0 に設定します。
ビュートランスフォーム(適切な設定でマテリアルを評価する)
scene.view_settings.view_transform:AgX(デフォルト。写真向け)、Khronos PBR Neutral(見た目がアルベドそのものになる設定。アセット/製品のレビューや glTF との一致に使用)、Standard(ピクセルと一致させる必要がある UI/グラフィックス/テクスチャ向け)、ACES 1.3/2.0(VFX パイプライン向け)。極端な「Look」を設定した Filmic/AgX を通して見ながら、テクスチャをベイクしたり作成したりしないでください。
プロシージャルからテクスチャへ
プロシージャルなセットアップ(ノイズ/ボロノイによる摩耗、Geometry > Pointiness(Cycles)または Ambient Occlusion ノードを使った曲率マスク、Bevel ノードの法線を使ったエッジの摩耗)は、レンダリングには適しています。ゲームエンジン向けには、テクスチャセットにベイクしてください(blender-texture-baking)。同梱の Node Wrangler の Ctrl+Shift+T は build_pbr_material.py と同じ処理を行いますが、UI が必要です。
注意点
material.use_nodesは 5.x で非推奨になりました。新しいマテリアルには、すでに Principled と Output が設定されています。mat.diffuse_colorが影響するのはビューポート(Solid モード/Workbench)のみで、レンダリングやエクスポートには影響しません。- ヘッドレス環境で読み込んだ画像は、ベイクまたはエクスポートの前に
image.colorspace_settings.nameを設定する必要があります。 - 複数のマテリアルで共有しているテクスチャ画像の場合、色空間を変更するのは一度だけにしてください。色空間の設定は画像ごとに適用されます。