XaiJu
zerobyteorbit
zerobyteorbit

fantia


液体とプロシージャルシコシコモーションおよび皮

ぬおおおー という感じでまずはアプデ。 ※追記 今回はコンピュートシェーダという新しい方式を組み込んだので環境によっては(オンボードグラフィックなど)動かない可能性があるかもないかもしれません。 〇更新内容 ・精液のパーティクル処理をコンピュートシェーダで ・流体用レンダリング ・セルフ処理用の祭壇(椅子)を追加 〇パーティクル 前回の記事で書いたように、パーティクルの処理を改善するのがアホほど大変でした。 まず、パーティクル自体をGPUで計算することはそれほど大変なことではありません。 以前もジオメトリシェーダーをつかったStreamoutパーティクルというのを実装していました。この方法だとパーティクル間の相互作用が作れないので、液体を表現することはできないというのが弱点。 そこで今回実装したコンピュートシェーダ方式。そしてSPH、流体シミュ。 流体シミュ的にはなんというか思ったような挙動にならなかったためそれっぽい処理を自分で作りました。こういうシミュだと動きをデザインすることが結構むずかしかったりします。 かと言って自分で作ればもっといい結果が出るとも限りませんが。 〇最近傍探索 SPHなどパーティクル間の相互作用を計算する上では、パーティクル対パーティクルの計算が必要になります。この相互作用で液体っぽく見せるわけですね。 パーティクル一つの処理ループにほかのすべてのパーティクルとの距離計算をするとすると、パーティクルの数×パーティクルの数の計算数になります。これをブルートフォースとも言いますが、パーティクルが100個あるだけで計算回数が10000回必要になります。また遠くのパーティクル相手にも計算を行うことになるので無駄も多くなります。 そこで必ず必要になるのが最近傍探索といって、空間を格子で区切り、一つの格子空間にいるパーティクルだけを相互影響計算対象にする、というものです。 弾幕シューティングゲームなんかでも大量の弾VS自機の判定で使われる手法です。 そんで、GPU上でそれをやるためには結構トリックが必要。格子に存在するパーティクル番号のデータテーブルをソートしないと、パーティクルデータにランダムアクセスするのがすごく重く、ブルートフォースと変わらないくらい重くなるとか、かなりアレでした。 GPUデバッグのためのソフトをゴリゴリつかって調査&調査でどうにかこうにか。 〇はたして? 問題だと思うのは互換性です。 前作で使用していたStreamoutパーティクルはジオメトリシェーダのみの機能だったんですが、オンボードグラボの一部などではStreamoutに対応してないのもあるっぽく(詳細不明)、動かない環境がありました。 今作では物理エンジンを使用してパーティクルを計算しているので互換性は保てているとおもうのですが、今回コンピュートシェーダを使ったことでグラボによってはどうなるかわからないのが不安。 今回は実装できませんでしたが、もしコンピュートシェーダが使えない環境だった場合は既存の方法に自動的に切り替えるなどの仕組みが必要かもと思います。 あと液体的にサラサラし過ぎかなとも思えるのでもっとねっとり感だせないかなあ・・・。 〇パーティクル当たり判定 パーティクルそのものの動きよりも大変なのが当たり判定。 今回はカプセルとスフィアのみで、ポリゴンに対しての当たり判定はまだ実装していません。 そのため、たとえばふたなり用トイレで出すと当たり判定がないため精液はトイレを貫通してしまいます。ご注意。 〇SDF そしてこのGPUベースパーティクルの当たり判定で調べていくと出てくるのがSigned Distance Fieldというもの。ゲームエンジンを使ってる方ならちょこちょこ出てくるワードなので見たことがあるかもしれません。 このSDFで物体を表現すればディテールがある程度で十分なパーティクルの当たり判定に使えるだろう、というもの。幾何テスト(球体やカプセルとの数学的な当たり判定)以外に内外判定ができるというとは大きい。 現在情報収集中なのと、ゲームエンジンでの実例しかないのでこれをつかった実装をまったく見ないので謎が多いですが。 実際ポリゴンメッシュとの当たり判定はすごく重いので避けたいし、ポリゴンメッシュは内外判定できないのですぐ貫通しますので、ぜひ実装したいところです。 〇流体レンダリング https://developer.download.nvidia.com/presentations/2010/gdc/Direct3D_Effects.pdf 有名なスライド。12年前のものなんだあ・・・(遠い目) ちゃんとした流体描画をリアルタイムでやるにはまだキビシイかなとも思います。 これはパーティクルの深度値を描画し、それをバイラテラルブラーで平滑化してから法線を計算してシェーディングし、視点からの濃度を描画して色の拡散を表現して・・・という近似処理の塊です。 DeferredShading的な手法で、何度もフルスクリーンでの処理をするので比較的フィルレートを食うかな?と思います。カメラを近づけるとパーティクル自体の処理よりも重い感じ。なのでこのレンダリングパスに解像度でのクオリティ変更項目を作ろうと思います。 この辺インゲームでの変更処理とか必要ですね・・・もっと近代化せねば。 〇セルフ処理 というわけで新たな液体表現を手に入れ、作るべきは液体が出るシーンです。 なのでセルフでシコる祭壇を用意しました。祭壇選択で椅子を選択してください。 そしてここでも新機能をつくりました。今回はちんちんのサイズが複数あります。一つのモーションでは手の動きが合わない、Blenderでモーション作る際に手をちんちんからズレないようにするのがむっさ大変ということで、プロシージャルシコシコモーションを作りました。 IKで手をちんちんを握るように制御しているだけですが。位置調整は難しかったですが、この手のモーションを作る際にいちいちBlenderでやるよりは楽でしょうきっと。 このIKについても蛇足で説明しますと、既存のCCDという計算方法でIKを計算しています。この方法をつかうと、最初の姿勢のボーンから計算を開始するのでこのくらいの動きだと腕の角度の破綻が少ないわけです。動きが大きくなるとぐじゃぐじゃになりますけど。 以前に実装したFABRIKという方法はTranslation計算後にRotationを作るので腕には使えませんでした。もとのボーンの軸Rotationを使うなど追加の工夫が必要そうです。 まあIKも苦労した割にはデカイちんちんはでかくシコる、ちいさいちんちんは小さくシコる、といたって当たりまえの絵が出てくるだけなので地味というえば地味。 もう一つ自動化したのは皮です。現在実装してるちんちんはすべて仮性ですが、シコった際に皮も剥けるじゃないですか(確認)。 手の動きに合わせて皮も動くようにしました。 というか、この皮のためのリギングはちんちんすべてに施していたんですが、今までBlenderでのモーション付け時に動かしていたのでめんどくさくて死にそうになってたので今回自動化。ほかのシーンにも水平展開させる予定です。 〇モザ モザイクに関して。 公開場所の自主規制基準にもよるんですが、とくにアナルに何かが出入りしてる場合の扱いが問題でした。多くの自主規制ではアナルに何かがある場合準性器として扱うというものが多いため、それに従います。 なので今回からアナルから出入りしている際にもモザくします。 穴の広がりを作りこんだおかげでモザくても動いてることが分かるのが幸い。 またちんちんに関してはモザくてもディテールがありすぎて指摘を受けたことがあるので、今現在はこれくらいのディテールにしときます。 そんで内臓部分は今でも問題はないようなので、次回この描画を修正します。デカい黒糖やヘルミンスを産出したあとの中が丸見えになる瞬間。これが大好きです。 〇次回 バグフィックス、プロシージャルシコシコモーション(ひどい名前)の他のシーンへの適用など、ちょっとオーバーホール的に整理したいと思います。SDFの調査も。体調が戻ってきたとはいえまだムラがあってヘロヘロな日もありますが。

液体とプロシージャルシコシコモーションおよび皮

More Creators