kelorin joのブロマガ-楽しいもの作らないと死ぬ病気

山に自動でテクスチャ塗ってくれるシェーダーを考える

2020/12/15 11:17 投稿

  • タグ:
  • 3DCG
  • カモメ町
  • シェーダーノード
  • Blender
先週は、カモメ町forUnityをアップデートしようと作業してました。(ゲーム作ってたらポリゴンやコライダーのミスをいくつか発見したので)

で一番苦しんでるのが、岩や岩礁などの自然の地形を作る工程です。

カモメ町は非リアル路線・ハンドペイントな作風で作ってましたが、建物はともかく、巨大な地形はワンオフモデルになり、それを全部いちいち手書きはきつすぎた
はー 自然物は自動生成でできないかなー…
という試行錯誤の過程で、Blenderで地形自動塗りシェーダーを作ってました。


Blenderは標準で地形を自動生成するアドオンがついてますが、テクスチャは作れません。
この自作シェーダーは複数のテクスチャファイルを読み込んだら
UV関係なしに地形メッシュの高低差と面の向きに合わせてテクスチャを貼り分けてくれます。
手書きシームレスの山・崖・砂浜・水中テクスチャを、自動で塗り分けるのに成功しました。




地形メッシュをスカルプトでグニグニ変形して建物部分にフィットさせたら、変形に合わせて塗りが更新されます。
※EEVEEかCyclesでレンダープレビューでないと表示されません

レシピと使い方を画像で解説します。
※画像が横長すぎてブロマガに貼れなかったので分割



勝利の鍵はジオメトリとカラーランプ(グラデーションマップ)です。

「ジオメトリ」は地形オブジェクトのメッシュの情報を参照できます。
「位置」は、メッシュの各頂点のワールド座標をXYZ=RGBに置き換えたもの(ただし0~1の範囲だけ対応可能)
「ノーマル」は法線=面の向き(ただしどうRGBに割り振ってるのかイマイチ不明)
ジオメトリのノードを直接ベースカラーにつなぐと色がつくので、それをもとに効果を推理します。
ノーマルをつなぐとこんな感じ↓面の向いてる方向で色が変わるのがわかります



どの情報がRGBやグレースケールに変換されるかがわかれば、後はカラーランプで使いやすく変換して、「RGBミックス」で画像を合成できます。
カラーランプをRGBミックスの「係数」につなぐと、カラーランプで白くした範囲だけ画像が上書きされます。

当然これはBlenderの中でしか使えないので、UVつきローポリメッシュにベイクすることで一枚のテクスチャになり、外部に持ち出せますが…

はじめからローポリモデルにベイクしようとしたら焼き損じが出てしまった。
巨大すぎるせい?
地形メッシュを複製してポリゴンは減らさずUVと新規マテリアルをつけて、ベイクして、そのあとデシメートモディファイアでローポリ化したらうまくいくみたい。

ただこれだとノーマルマップが作れません。
地形スケールのモデルではなく、岩や崖ぐらいの大きさのものに使うならうまくいくんじゃないかな。

これとは別に、手描き風味のシームレステクスチャも自動生成で作れる余地があるのですが、それは別の機会に試します。

コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事