UV & materials

Texture Bombing

テクスチャボミング

小さな模様を散らしてテクスチャの反復を隠す。

9 / 10

Interactive demo

Preparing the demo…

Texture Bombing

Drag to orbit, Ctrl/⌘ + scroll to zoom. Use two fingers on touch screens.

This explanation is currently available in Japanese.

ひとことで

地面を格子のマスに分け、各マスに小さな模様(花、石、染みなど)をランダムな位置・回転・大きさ・種類で「爆撃」するように散らす手法です。同じタイルをそのまま並べたときに目立つ規則的な繰り返しを、テクスチャを増やさずに消せます。シェーダー内で計算するので、どこまで広い地面でも模様が途切れず、メモリも増えません。

ゲームでの使いどころ

  • 広い地面:草原の花、荒野の小石、床の汚れや染み、森の落ち葉。
  • 壁や床のディテール:ひび、傷、苔の斑点、錆のむら。
  • 岩・地形の反復対策:トライプラナーで貼った岩肌の繰り返しを崩す。
  • デカールの代わり:個別のデカールオブジェクトを置かずに、散らばった模様を 1 つのマテリアルで表現する。

しくみ

  1. 座標 p\mathbf{p} を格子のマスに分ける:c=⌊p/s⌋\mathbf{c} = \lfloor \mathbf{p} / s \rfloor
  2. 各マスのハッシュ値から、模様の有無・中心位置・回転角・大きさ・種類を決める。
  3. 模様はマスの境界をまたいではみ出すことがあるので、自分のマスだけでなく周囲 8 マスの模様も評価して重ねる。

これはウォーリーノイズの「セルごとに特徴点を置き、周囲のセルも探索する」構造とまったく同じです。模様の画像を 1 枚用意しておけば、各マスではその画像を回転・拡大した UV で読むだけです。

置き方残る規則性
同じタイルの繰り返し配置・向き・種類がすべて同じで、格子がはっきり見える
回転だけランダム各マスの中央に 1 つという格子状の並びが残る
テクスチャボミング位置・向き・大きさ・有無がばらばらになり、格子が見えなくなる

実装のポイント

  • コスト:9 マス分のテクスチャ読み込みになります。模様がマスからはみ出さない大きさに制限すれば、評価するマスを 4 つ(近い角の 2×2)に減らせます。
  • ミップマップ:回転した UV の微分が不連続になり、模様の縁でミップマップの選択が乱れることがあります。textureGrad で元の UV の微分を渡します。
  • 地面の色むらと組み合わせる:模様を散らすだけでなく、下地にも大きなスケールのノイズで色むらを付けると、繰り返しがさらに分からなくなります。

つまずきやすい点

  • 模様が重なって不自然:密度を上げすぎると、花と石が重なり合って不自然になります。種類ごとに優先順位を決めるか、密度を下げます。
  • 1 種類の模様だけでは単調:散らし方がランダムでも、模様が 1 種類だとすぐに見慣れてしまいます。数種類のバリエーションを用意します。
  • 法線やラフネスも一緒に:色だけを散らすと、光の当たり方が模様と合いません。法線マップや粗さマップも同じ変換で読みます。

デモで試すこと

  1. 「模様の置き方」を同じタイルの繰り返しにして、遠くの地面を見てください。花と石が一定間隔で整列しているのがすぐに分かります。
  2. 回転だけランダムでも、各マスに 1 つずつという並びは残ります。「格子を表示」で確かめてください。
  3. テクスチャボミングでは、同じ 2 種類の模様しか使っていないのに、自然に散らばった草原に見えます。「模様を置く確率」で密度も調整できます。

References

Unreal Engine Material Coordinates ↗

A general reference for this subcategory.