すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

Whale Jump Vol.3 -White Water

vol.2の続き

f:id:godofsuama:20211230165128p:plain

White Water Source

Emissionタブで全体のエミット範囲のベースを決め、Curvature, Acceleration, Vorticityの範囲でそれぞれMultiplyした結果が実際のエミット範囲になる。

Emissionタブのみの状態より範囲が広がることはないので、最初はその部分のみの表示にして調整するといい感じ。

f:id:godofsuama:20211230165345p:plain

一応Primitiveノードで16bitにしてキャッシュを取る。

Clip

White Waterを大量に出すためにWedgeを使用するので、Sourceを何分割かしてそれぞれシムする。

f:id:godofsuama:20211230165627p:plain

FLIPの計算範囲のBBOXをLabs Mesh Sliceノードを使用して分割する。

X,Zを2分割で計4つつ

f:id:godofsuama:20211230165740p:plain

このノードのIndexの項目をWedgeでコントロールすると各エリアごと分割してくれる。

最後にVDB ClipでSourceを分割して終了。

FLIP Volume

White Waterは漂わせるためにFLIPのSurfaceとvelが必要。

特にvelは、White Water内でも調整箇所があるが、このVolumeの影響がかなり大きいのでWhite Waterの放出速度を調整したい場合はこのVolumeを加工したほうが手軽。

f:id:godofsuama:20211230170524p:plain

1個めのWrangleでSmoothをかけたvelを容易して、一定の速さ以上はSmoothがかかるようにしている。早すぎるのを軽減。

これを極端にかけるともこもこしたエミッションをするようになる。水中爆発みたいなイメージのときは良いかもしれない。

f:id:godofsuama:20211230170626p:plain

2個めはFLIPよりもちょっと早く飛んでいってほしいのでvelをMultiplyしている。

f:id:godofsuama:20211230170738p:plain

White Water Sim

f:id:godofsuama:20211230172809p:plain

White Water Object

White Water Objectは特になし。

強いて言うなら確認時にRepellantsの項目は表示しておくと良いかもしれない。

これで表示されるSphereが、White Waterが漂っている際の虫食い模様のベースになる。

f:id:godofsuama:20211230170309p:plain

White Water Solver

f:id:godofsuama:20211230170909p:plain

Volume SouceにEmitterを指定してWhite Water ScaleやVoxel Sizeを指定する。

FLIPよりは気持ち大きめ。このWhite Water ScaleはFLIPでいうとParticle Separationなので下げるとその分大量に出る。

Add State Attributesは、チェックを入れると、bubble,foam,sprayのPoint Attributesが計算され、それぞれ海中、海面、海上みたいな感じで0-1の比率のアトリビュートとして入る。

これでPOP ForceのAmpritudeを調整したりできるので余裕があるなら入れておくと良い。

今回はsprayのときだけPOP Forceがかかるようになっている。

Emission

Help見ながら調整がおすすめ。

Voxel SizeやParticle Separationを調整するよりもEmission Amout(放出係数)をかえてWhite Waterの量を調整するのが良さそうだった。

ただPoint Replicateしただけみたいな増え方だが、こちらで調整するほうがメモリ的に優しいのか、落ちづらい(気がする)

f:id:godofsuama:20211230171413p:plain

Limits

Limit Sizeは、計算範囲なのでFLIPと同じ範囲を指定する。

f:id:godofsuama:20211230171553p:plain

で、完全に勘違いしていたが、このCollision SOPは通常のコリジョンではなく、この内部に入ったWhite Waterを消すか?という項目なので、ここを指定しても実際にはCollisionはしない。

別途Static ObjectでCollisionを指定する必要がある。名前がややこしい。

Foam

ここもヘルプを見ながらがおすすめ。

White Waterの挙動に関する箇所。この部分がWhite Waterらしさを生む項目なのでしっかり設定すると良い。

ここの、Enable Density ControlがオンだとWhite Waterが集まって束になるような処理が入り、より水っぽくなる。

しかしこの処理がメモリをかなり圧迫するので、範囲が広く量を大量に出したい場合との相性がかなり悪い。結果はとてもいいが今回はオフで別途代用の処理を追加している。

AdvanceタブのOpenCLもオフのほうが大量にエミットできるが、Enbale Density Controlをオフにすると、OpneCLも自動でオフになる。

f:id:godofsuama:20211230171922p:plain

ちなみに、内部的にはこのEnbale Density Control = POP FluidなのでPOPにこれを組み込んで試すとわかるが、凝縮 / 反発の療法を計算するおかげか、ポイント数が増えた場合の計算が著しく遅い。

オフにするだけで3千万Particleで不安定になっていたのが1億くらいはなんとか出せるようになるくらい負荷が高い…

f:id:godofsuama:20211230172327p:plain

Force

POP Force

かなり弱めに、sprayベースで追加

f:id:godofsuama:20211230172531p:plain

Drag

vの速度ベースで減速するようにFLIPと同じ処理。

f:id:godofsuama:20211230172622p:plain

Enbale Density Controlの代替え

上記のEnbale Density Controlが重すぎるので代替え処理をSOP Solverで追加。

vがBlurかかれば近いParticleは集まって同じ動きをするのでその処理を簡易的に実装

SOP Solver内でAttribute Transferするだけ!とても負荷が軽い。

f:id:godofsuama:20211230173007p:plain

Attribute Transferに一定距離内の一定数のAttributeの平均を適応する機能があるのでそれでBlurみたいな感じで自分自身のvを適応。

f:id:godofsuama:20211230173120p:plain

ちなみにAttribute BlurでもBlurをかけられるが、3千万くらいを超えたあたりからエラーはいて動かなかったりと不安定だったので不採用。

Caching

Wedgeを使用しているのでFile CacheのCache Folder名にLabs Mesh SliceのIndexを追加

f:id:godofsuama:20211230173336p:plain

後はAttribute Castや不要なものをDeleteして終わり。

f:id:godofsuama:20211230173405p:plain

White WaterのVolume化

White WaterをPointのままレンダリングすると霧っぽくなりがちでそれはそれで良い。

今回はレンダリング時間的な都合でVolumeのみのレンダリング。実は一旦VolumeにしてVolumeでレンダリングしたほうが4倍位レンダリングが早かった。

後処理もShelfをベースに調整しているので一度Shelfから作るのが良い。

f:id:godofsuama:20211230173636p:plain

Ocean Spectrumを適応

White WaterにはDisplacementがかからないので、Pointに対してOcean EvaluateをかけてDisplacementの結果を擬似再現。

全部に対してOcean Spectrumを適応し、foam アトリビュートベースでlerpしかけるかけないを切り替え

f:id:godofsuama:20211230173841p:plain

Densityを計算

f:id:godofsuama:20211230173910p:plain

近くにPointがいっぱいあればDensityを上げる処理をしてVolume化する際のDensityの値を調整

Volume Rasterize

Voxel Sizeを可能な限り小さく、Particle Scaleもなるべく小さくする。この際、pscale*Particle Scaleが、実際のWhite Waterの大きさになる。

後はVelocity BlurをかけてVolumeに擬似モーションブラーをかける。

f:id:godofsuama:20211230174054p:plain

Gradientを計算

Shelfのほぼまんま。

VolumeのNormalを計算する。

f:id:godofsuama:20211230174220p:plain