プロシージャルにツタわさわさ~

INDEX

はじめに

こんにちは。モノリスソフト テクニカルアーティストの相田です。
今回は、R&Dで制作したプロシージャルツタ生成ツールの紹介をしたいと思います。
このツールは、ツタの発生点とコリジョンを入力することでツタを自動生成するツールです。
このツールを使っていろいろなモデルにツタを這わせてみてください!

サンプルファイル(monolithtech_growth_ivy.zip 198.7 KB)はこちらです。HIP に HDA をインストールしてご使用ください。

DOWNLOAD

ツール概要

パラメータ

Grobal

重要なパラメータがここに集約されています。特に Growth Scale と Covered Rangeはツタ全体の振る舞いを制御する最も重要なパラメータです。

Growth Scale = 0.03
Covered Range = 0.06

Growth Scale = 0.05
Covered Range = 0.1

左は細かいツタが繫茂していますが、右はツタが粗くなっています。繫茂する量にも違いが出ています。コリジョンにまきつく精度にも差が出ていますね。

Progress

主にツタの進行方向を調整するパラメータです。

進行方向を回転するノイズを調整したり、進行方向にかかる重力を調整します。ツタの這い方を調整したいとき、このパラメータをまず調整します。

Rotate Angle Scale = 1
Progress Angle Scale = 3

Rotate Angle Scale = 3
Progress Angle Scale = 10

左はツタの伸び方が比較的まっすぐですが、右はとてもぐにゃぐにゃしています。植生の種類を変えるときに、このパラメータを調整することで枝ぶりに差をつけられそうです。

Colliding

ツタがコリジョンにまきつくふるまいを調整するパラメータです。

Covered Range の範囲で、コリジョンとの衝突を調整し、コリジョンから離れたり、ひきつけられたりするふるまいを調整します。

Attract Scale = 0.8
Attract Strength = 0.8

Attract Scale = 0.2
Attract Strength = 0.2

左はコリジョンにしっかりまきついていますが、右はコリジョンから離れて地面を這っているツタが増えています。右からはより荒廃しているイメージを感じますね。

Self Colliding

ツタ同士の接触を調整するパラメータです。

Search Scale の範囲内で、ツタの進行方向に他のツタがあるときのふるまいを調整します。

tech_49_08.png

生長中の枝 ⇒ 黄緑色の線
回避される枝 ⇒ 茶色の線
進行方向 ⇒ 青色ベクトル
回避方向 ⇒ オレンジベクトル

生長中の枝が他の枝の方向に伸びるとき、衝突しないような方向を差す回避方向ベクトルが計算されます。このベクトルが進行方向ベクトルに加味されます。

Branch

ツタの分岐を調整するパラメータです。

ツタの生長に合わせて、Branch Threshold を越えると分岐していきます。

Branch Threshold = 30

Branch Threshold = 100

▲ 枝分かれするウェイトが増えていくのを視覚化しています。紫から始まり、赤に達すると枝分かれします。

左は色の変化が速くたくさん分岐していきますが、右は色の変化が遅く分岐も比較的少ないです。結果的に、繫茂する量にも差が出ています。

Aging

ツタの寿命を調整するパラメータです。

ツタの生長に合わせて、Aging Threshold を越えると生長が止まります。

Aging Threshold = 8

Aging Threshold = 15

▲ 年齢のウェイトが増えていくのを視覚化しています。紫から始まり、赤に達すると生長が止まります。

ツタがこみあってくると色が変化して生長が止まりますが、右は若干色の変化が速いです。枝同士の自己衝突で Aging が加算されているので、閾値を越えると枝の生長を止めることで、枝の過剰な込み合いを防止しています。

しくみ

ツタの生長

ツタの生長のしくみは、簡単にいうと、

生長方向をノイズの値で回転軸を中心に回転させ、その先で新しいポイントを作る

という流れです。

これを3DCGに実装することを考えると、

  1. 進行方向の ベクトルA とそれに直角な ベクトルB を用意します。
  2. ポイント位置からノイズをサンプリングします。
  3. ベクトルA を回転軸として ベクトルB をノイズ量で回転します。
  4. ベクトルB を回転軸として ベクトルA をノイズ量で回転します。
  5. ベクトルA の方向の先に新しいポイントを作り、ラインを繋げます。

これを繰り返すことで、ツタが伸びていきます。

tech_49_13.pngのサムネイル画像

進行方向 ⇒ 水色ベクトル
直角方向 ⇒ 赤色ベクトル
サンプリングノイズ ⇒ ポイントの数字

この方法のメリットとして、

  • 進行方向の回転量を調整できる
  • 連続的に進行方向を回転できる
  • ポイント間隔が常に一定

などががあります。

ツタのまきつき

ツタのまきつきのしくみは、簡単にいうと、

コライダーから一定範囲内に近づくと避けるように、一定範囲内より遠ざかると引き付けるように進行する

という流れです。

このツタツールでは、

  1. ポイント位置から、コリジョンとの距離を測ります。
  2. コリジョンから近くにあるとき、遠ざかる力が加わります。
  3. コリジョンから遠くにあるとき、引き寄せられる力が加わります。
  4. コリジョンから近くも遠くもないとき、遠ざかる力や引き寄せられる力は弱くなり、自由に進行します。

という流れで実装されています。

tech_49_14.pngのサムネイル画像

この仕組みによって、コリジョンの表面を這うだけでなく、まきつく枝ぶりを再現しています。

もちろん、これだけの実装ではなく、コリジョンに近づきすぎて衝突しそうなときに回避する処理や、ポイントが Covered Range の外側に出てしまったときの処理も実装されています。また、計算精度が重要になってくるので、これらの処理を内部的な substeps で計算しています。

まとめ

以上がプロシージャルツタ生成ツールの紹介でした。

このツールはインプットモデルを変えればどんなモデルでもツタを生やせるようになっているので、いろいろと差し替えて遊んでみてください!生長過程のアニメーションを眺めるのも面白いですね。

執筆者:相田

映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にHoudini関連の業務を担当。 好きな爬虫類はヒルヤモリ。

ABOUT

モノリスソフト開発スタッフが日々取り組んでいる技術研究やノウハウをご紹介

RECRUIT採用情報