scenario-blender-texturing-shading について
写実的またはスタイライズドなマテリアルを作るアーティスト向けのBlender 5.2テクスチャリング・シェーディングスキルです。ノードツールでマスクを重ねた効果を作り、ベイク前にEEVEEとCyclesで確認できます。
主な機能
- 01テクスチャセットからPBRマテリアルを作成
- 02レイヤーマスクによる摩耗や汚れ
- 03プロシージャルおよび手描きマテリアル
- 04キャラクターの肌、目、髪のシェーディング
- 05マテリアル監査とレンダープレビュー
活用シーン
- 01小道具にエッジ摩耗や汚れを加える
- 02スタイライズドな肌や目のマテリアルを作る
- 03異なる照明で粗さと凹凸を確認する
- 04書き出し向けにプロシージャル素材をベイクする
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-blender-texturing-shadingインストール後、Claude Code で/scenario-blender-texturing-shadingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdprocedures.mdsources.mdscripts/bx_materials.py詳細
テクスチャリングとシェーディング(Blender 5.2)
エキスパートによるシェーディングでは、レイヤー化したマスクで物理的に妥当な値を設定します。クリーンなベース(スキャンした素材またはフラットカラー)に、コントラストの強い白黒マスクを重ねて、カラー、ラフネス、高さ、サブサーフェスを配置します。これらはすべてノードで編集できます。両方のエンジンで適切な照明の下で値を評価し、最後に移植性のためのベイクを行います。ここに記載された関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で作業する場合は、ツールのスキーマに基づいて進め、不足している点を明記してください。
必須の背景知識: scenario-blender-expert(実行チャンネル、レビューの反復、5.2 API の変更点)。 マップのベイク:scenario-blender-uv-baking。ライティングと最終レンダー: scenario-blender-lighting-rendering。
ツールキット:scripts/bx_materials.py(ビルダー、ヘッドレスペイント、チェック機能。
tests/code/blender-texturing-shading/ でテスト済み)。
sys.path.append("<this skill>/scripts"); import bx_materials as M。
基本方針(エキスパートならではの違い)
- データマップは Non-Color、「見栄えではなく、正しい値を使う」(Price)。ベースカラーとエミッションだけが sRGB です。
- 法線マップとディスプレイスメントを併用せず、どちらか一方にする(Price、Cycles リードの Brecht も確認済み):どちらも同じ凹凸を表現します。高さを組み合わせる場合や、実際に変位させる場合はディスプレイスメントを使います。エクスポートや 8-bit での安全性を重視する場合は法線マップを使います。
- ペイントするのはカラーではなくマスク。 Kaspar と Price は、各エフェクトをグレースケールマスクとして作成し、Mix または HSV の Factor に入力します。カラーは A/B 入力側に設定します。マスクがほとんど見えない場合は、コントラストを付ける必要があります(Color Ramp のストップを内側に寄せます)。同じマスクでラフネス、高さ、SSS を制御します。
- リアリズムにはスキャン素材とマスク、スタイライズにはプロシージャル(Price 対 Kaspar、Ryan King)。Kaspar は写真をパターンだけになるよう加工(ぼかしとグレイン抽出)し、グランジを自分で加えます。また、Cycles の速度向上ではなく、移植性(エクスポート、EEVEE の読み込み時間)のために最後にベイクします。
- 肌と髪のマイクロディテールはバンプではなくラフネスに加える(Kaspar)。ラフネスはマップの接続を外すのではなく、HSV Value で調整します(Price)。Specular は 0.5 のままにします。Bump Distance はマップの 0..1 の実際の高さです。Strength ではなく Distance を小さくします(Kaspar)。
- 正直に評価する: Standard ビュー、ニュートラルなミドルグレーの背景、ラフネスを確認するための黒い Base Color、強いバックライト、下からのライトを使います(Kaspar)。凹凸には斜めからのライトを使います(Price)。手描きのアルベドにはライティングなしの表示を使います(Abbitt)。反復作業には EEVEE、正確な評価には Cycles を使い、両者の見え方を一致させます(Kaspar)。
- SSS は解剖学的な形状に合わせる(Kaspar):耳、鼻、まぶた、唇、指先では強く、骨の上では弱くします。白黒マスクを使い、Map Range で値を設定します。
- Bevel、AO、Pointiness、Random Per Island は Cycles 専用で、Bevel/AO は確率的です[追加、計測済み]:EEVEE では Bevel のエッジが表示されません。しきい値を適用したライブマスクでは、サンプル数にかかわらず 17~18% の部分的な金属値になります。しきい値を適用する前にベイクするか、頂点の曲率を使用してください。
まず決めること
| 入力 | 変更点 | 指定がない場合のデフォルト |
|---|---|---|
| ターゲット:Cycles 静止画、EEVEE、ゲームエンジン | Cycles 専用ノードをライブで使うかベイクするか、AO をアルベド(レンダー)に含めるか ORM(ゲーム)にするか | Cycles の最終出力、EEVEE との比較を並べて表示 |
| スタイル:リアルまたは様式化 | スキャンしたセットと汚れを使うか、プロシージャルまたは手描きのライティングを使うか | 控えめな様式化(Kaspar) |
| UV と変形 | UV 画像、ボックス投影、Object プロシージャルのいずれを使うか | 剛体で UV なし:ボックス投影、変形するもの:UV のみ |
| スケール | タイルサイズ、バンプ/ディスプレイスメントのメートル単位 | 実寸メートル、スケール適用(すべての専門家) |
| テクセル予算、エクスポート | 目立つペイント用に 2K~4K、大きなタイリング面用に 4K~8K | 目立つプロップは 2K、glTF ORM、OpenGL 法線 |
ワークフロー
- パーツごとのベース。 接頭辞付きの素材を用意し、プレースホルダーを削除して、
diffuse_colorを設定します。値はディフューズカラーのパスで選びます(マットキャップではKasparの肌が白くなりすぎたため)。スケールを適用します。GATE:M.value_report(objs)で問題がないことを確認します。 - ベースマテリアル。 次のように設定します:
M.pbr_from_textures(mat, M.find_texture_set(dir), uv_map=...):色空間は役割に応じて指定し、AOは係数1で乗算します(Price:キャビティシャドウを復元します。これはフラッシュ撮影で消えてしまう影です。ゲームではao_mode="gltf"を指定します)。バンプはノーマルマップがない場合にのみ使用します。height_as="displacement"を指定すると、ノーマルマップが削除され、補間がCubicに設定され、DisplacementとBumpが追加されます。PoliigonではScaleを0.2に設定します(範囲は20 cm固定です)。Simpleサブディビジョンを追加して、スムーズシェーディングを適用します。UVタイルのサイズはセットの実寸に合わせます。剛体でUVがない場合は、projection="BOX"を指定します。プロシージャルでは、オブジェクト座標を使用します(変形するメッシュではUVを使用)。NoiseのDetailは最大でも5にします(レベルごとにコストが2倍になります。Price)。GATE:M.audit_material(mat, obj)でエラーがないことを確認します。 - マスク。 Kasparのルールは、マスクの周波数を頂点密度に合わせることです。広く柔らかいマスクには頂点カラーを使用します(Priceの環境も同様です。タイリングUVでは画像のストロークが繰り返され、レイアウトが変化します)。細部や書き出し用のディテールには画像を、裾にはUVバンドを使用します。ヘッドレスでは、
M.mask_from_points、M.write_vertex_values、M.smooth_attribute、M.curvature_attribute、M.TexelMapとM.projectを使用します。Priceのカラー焼き込み:コントラストを調整した高さマップ(B)で柔らかいマスク(A)を焼き込むと、レンガに沿って、または目地に入り込むようにマスクが分割されます(手順P18)。GATE:各マスクをエミッションとしてレンダリングします。 - レイヤー。
M.add_wear(mat, edge_color=..., edge_roughness=..., edge_metallic=1)を追加すると、変化、キャビティや汚れ、欠けたエッジが加わります。ブレンドモード:Multiplyは暗くします(汚れ、カビ)。Screenは明るくします(白華、ハイライト。Addでは1を超えます)。剥離には高さチェーンでSubtractを使用します(Price)。チェーンの順序で経年が決まります(汚れより前にデカールを置くと、古く見えます)。デカール:AlphaをFactorに接続し、ExtensionをClipに設定します(M.add_decal)。GATE:M.preview(objs, out, rigs=("studio", "roughness")):効果が形状や水の流れに沿い、均一にならず、繰り返しパターンが目立たないことを確認します。 - キャラクター固有の設定。
M.stylized_skin(mat, obj=body)(マスクはcol_brighter/col_darker/col_lips/col_sss/col_rough)。各眼球オブジェクトにM.stylized_eyeを適用します(原点は眼球の中心)。さらにM.cornea_materialを設定し、cornea.visible_shadow = Falseとします。髪の光沢:ストランドに沿ったUVマップにタンジェントを設定し、異方性を使用します(Cyclesのみ)。GATE:rigs=("backlit",)で確認し、耳、鼻孔、唇、指に赤い光が見え、正面から見たときに蝋のようにならず、強膜がオフホワイトであることを確認します。 - スタイライズされた手描きのライティング(Abbitt):上部を明るく、下部を暗くし、くぼみにMultiply、手足の先端にScreenを適用します。ヘッドレスでは、曲率属性から
M.painted_light(mat, obj)を使ってEmitをベイクし、rigs=("unlit",)で確認します。 - マスクでは配置できない箇所のペイント。 GUI:ブラシはアセットです(
Paint Hard/Soft、Airbrush、Blur、Smear、Fill、Mask)。ファクトリーの5.2セッションでは、ブラシと統一カラーを設定するまで黒くペイントされます。ストロークは画面から投影されるため、表面に向けます(Abbitt)。消しゴムにはアルファチャンネルが必要です。にじみは8~12 pxに設定します(Kaspar、Abbitt)。M.gui_texture_stroke()を使用します。これにより再描画が強制されます(投影ペイントでは、前回の描画のデプスバッファが遮蔽物として使われます。ある実行ではセットアップ呼び出しで発行したストロークが162テクセルしか塗られず、別の実行では約14,000テクセルが塗られ、全面をカバーしました)。さらに、ダブを再サンプリングします。ヘッドレスでは、M.TexelMapとM.paint_strokeを使い、シームも含めてワールド距離に基づいてペイントします。その後、M.dilateを実行し、M.save_imageで保存します(スクリプトでは画像は.blendに保存されません)。GATE:シームをまたぐ視点からレンダリングします。 - ルック開発の確認とベイク。
M.preview(EEVEEとCycles、studio、backlit、roughness)、M.value_report、ラベル付きフレームとノードグループを使用します(Kaspar、Price)。プロシージャルなチャンネルはEmissionでベイクし、30サンプル以上を使用します。マップから再構築して検証します(scenario-blender-uv-baking)。
数値
| 値 | 数値 | 出典 |
|---|---|---|
| 誘電体のアルベド/金属の反射率 | sRGB で約 30~240/180~255;金属度は 0 または 1 | 範囲[追加];金属度を二値にする設定:Ryan King、Price |
| 肌の粗さ | 0.68~0.72、粗いゾーンは 0.72~1、唇と口元は約 0.4 | Kaspar |
| 毛穴 | Voronoi Smooth F1 のスケールは 100 と 200、ノイズの混合は 0.2~0.25 | Kaspar、本人の UV 上 |
| 肌の SSS スケール(5.2) | 0.005~0.04 m | 0.33 m の頭部で測定;Kaspar の v1 の 0.02~0.15 は 5.2 では蝋のような質感になる |
| バンプ | 距離は約 0.001、布地の強さは 0.1~0.2 | Kaspar |
| ディスプレイスメント | スケール 0.2(Poliigon)、中間レベル 0.5、Cubic、16-bit ソース | Price |
| レンガ壁の粗さ | 約 0.7 | Price |
| 色の調整 | 色相は 0.5 を中心にプラスマイナス 0.04 の範囲 | Price |
| Noise Detail | 5 以下 | Price |
| エッジ摩耗ベベルの半径 | 1 m の木箱で 0.04 | 測定値 |
| 塗料のにじみ/アイランドの余白 | 8~12 px/0.01~0.05 | Kaspar、Abbitt |
| 塗装した高さ | 2K、32-bit float、ベース 0.5、Non-Color | Kaspar;ベースを 0.5 のグレーにする設定については Ryan King も参照 |
| ベイクサンプル数 | 最低 30 | Kaspar |
品質ゲート
測定可能な項目:
M.audit_material(mat, obj):役割ごとの色空間、画像を Normal に直接接続していないこと、明示的な UV マップ、Bump Distance が 0.05 以下であること、Add Shader や法線の直接加算がないこと、Emission Strength が設定されていること、 グレーの定数金属度がないこと、法線マップとディスプレイスメントの併用を警告すること、Cubic 以外のディスプレイスメント画像、 Noise Detail が 6 を超えていないこと、未保存の画像。M.value_report(objs):誘電体のアルベドが 30~243 sRGB の範囲内(範囲外は 2% 未満)、金属は 180 超、金属度の小数値は 5% 未満(ライブの Bevel/AO による摩耗はベイクするまで超過します)、粗さの標準偏差は 0.01 超。- スケールを適用すること;カラー属性は
col_*という名前にし、すべての Attribute ノードと名前を完全に一致させること(Kaspar、 Price)。
視覚的な項目:M.preview で EEVEE と Cycles の見た目がほぼ一致すること;粗さの列に変化が見られること;逆光のグローは
肉が薄い部分にのみ現れること;斜光で段差なく凹凸が見えること;遠距離では繰り返しパターンが目立たないこと;
レイヤーごとにミュートしてレンダリングし、それぞれが何かを加えていること(Price);人間の参照モデルに対してスケールを確認すること。
よくある間違い
| 間違い | 見た目 | 修正方法 |
|---|---|---|
| データマップが sRGB のまま | 盛り上がりが歪む、光沢がおかしい | Non-Color |
| ノーマルマップとディスプレイスメントを併用(Node Wrangler のデフォルト) | 起伏が二重になる、または崩れる | どちらか一方だけを使う |
| ジオメトリまたは Catmull-Clark なしでディスプレイスメントを使用 | 何も起きない、または角が丸くなる | Simple subdivision、shade smooth |
| 4.5 より前の Bump Distance を 1.0 に設定 | 段差ができる、プラスチックのように見える | 実際の高さを使い、約 0.001~0.01 にする |
| Emission Color を設定し、Strength は 0 | 光らない | Strength を 0 より大きくする |
| Blender 5.2 で Kaspar の v1 SSS 値を使用 | 耳が白く、ワックスのように見える | 0.005~0.04 にし、逆光で確認する |
| EEVEE またはゲームで Bevel の摩耗や Pointiness を使用 | 摩耗が表示されない | ベイクするか、curvature_attribute を使う |
| 金属に対してライブの Bevel/AO にしきい値を設定 | 境界がざらついた灰色になる | ベイクしてからしきい値を設定する |
| EEVEE でデフォルトの厚さの角膜シェルを使用 | 虹彩が拡大される | Thickness を 0 にする(cornea_material) |
| Noise から直接マスクを作成 | 効果がほとんど見えない | ランプまたは Map Range でコントラストを付ける |
| セットアップ直後にストロークを描く | 一部しか塗れない、または塗れない。実行ごとに異なる | 先に描き直す(gui_texture_stroke) |
| 塗装色を設定していない/新しいカラー属性 | ストロークが黒い/マスクが白い | 色を設定し、先にゼロを書き込む |
| リグでボックス投影または Generated 座標を使用 | テクスチャが泳ぐ | UV 座標を使う |
Blender 5.2 に関する注意事項
- Principled v2:Subsurface Weight/Scale(Subsurface Color なし)、Specular IOR Level、Transmission Weight、Coat、Emission Strength のデフォルトは 0 です。ソケットは名前で指定し、Mix ノードはインデックスで指定します(RGBA:A=6、B=7、 Result=2)。
- カラースペースは
sRGB、Non-Color、Linear Rec.709です。Displacement ノードの Scale のデフォルトは 0.01 です。material.displacement_methodを使います(material.cyclesではありません)。EEVEE は 4.2 以降、ディスプレイスメントを行います(Displacement and Bump)。 use_nodesは非推奨です。surface_render_methodがblend_methodに置き換わります。屈折にはuse_raytrace_refractionとシーンのレイトレーシングが必要です。- EEVEE は異方性、Bevel、Pointiness、Random Per Island を無視します(確認済み)。Random Walk SSS は Blender 5.2 で再スケーリングされました。Musgrave は Noise の中にあります。
- ブラシはアセットです。カスタムブラシには「Save Changes to Asset」が必要です(Abbitt)。
image_brush_typeを使います。Blur はSOFTENです。色のサンプルにはShift+Xを使います。 paint.vertex_color_dirtは Object モードでヘッドレス実行できます。バイト画像はエンコードされた値を保存し、float 型のLinear Rec.709画像は PNG として保存すると sRGB に変換されます。
参考資料
references/procedures.md:すべての工程について、テスト済みのコードを掲載しています(テクスチャセット、 ディスプレイスメントのルール、ボックス投影、摩耗、曲率、デカール、肌、目、異方性、GUI およびヘッドレスでの塗装、ハイパス、 チェック、カメラレイのワールド、クレイスイッチ、塗装したライト、Color Burn マスク、物理的な UV スケール)。references/expert-notes.md:専門家ごとの判断理由をタイムスタンプとともに記載し、意見の相違と、それを判断する条件をまとめています。references/critique.md:自分のレンダーとノードツリーを評価するための基準です。references/sources.md:すべての参照動画、クレジット、最適なタイムスタンプを掲載しています。