|
|
||||||||||||||
|
|
|
|
|
|
||||||||||
トコちゃんの修行日誌 2025年9月 |
9月30日 流れのボクセル化流れを一旦パーティクルにしてしばらくシミュレーションしてから、ボクセル化してみました。シミュレーションで密度が計算されているので、その値を取得してボクセル値に変換しています。
上が元の流れ、下がシミュレーション後。若干流れがスムーズで下流に水が溜まり気味です。
上が元の流れ、下がシミュレーション後。左が下流。岩の周りなど水際がガタガタです。ボクセル化の工夫が必要ですね。
左が元の流れ、右がシミュレーション後。下が下流。流れの緩急が強調される感じです。やはり水際がガタガタです。 もしかしたら、リアルタイムでのアニメーションが可能かもしれません。試してみます。 9月25日 高速化Burstコンパイルとジョブで75FPS(1秒75描画)で描画できるようになりました。 ChatGPTにGPU(コンピュータシェーダ)で高速化をお願いしたのですが、どうも複雑すぎて無理みたいで、使っていなかったHeightマップでの衝突判定や、衝突用3Dテクスチャを事前に作成して処理する方法など提案してきました。 しかたなくジョブで高速化を試したのですが、十分速くなりました。
これはパーティクルの半径を半分、パーティクル量は4倍で試してみたのですが、それでも20FPSで動きます。細かすぎて勢いあまって盛り上がってしまったりしています。
9月23日 実験成功
ほとんどChatGPT-5に任せて、突貫工事で実験してみました。思っていた以上にうまくいっています。シミュレーション結果もBlenderのFluidに十分に近い感じです。 切り出された範囲だけのシミュレーションなので3.5FPS(1秒3.5描画)で動いています。C#なので、処理をバーストコンパイルまたはGPU(コンピュータシェーダ)で高速化すれば十分動作しそうです。 最初の状態は水は下流へ流れて溜まって動かなくなっていました。 ここで工夫が必要になりました。流れ込んでくる水の量と、流れ出す量は同じと仮定します。何処を切り取っても水の量は時間とともに変わる訳ではないので正しいと思います。 そこで境界でのクリッピングを止めて、外にでたパーティクルを流れ込んでいる境界に均等に再配置してみました。 これで試してみると、下流の水は堰を切って流れ出し、上流から噴水のように吹き出しました。そりゃそうですね。 そこで境界面から1マスだけ元の水流の速度を維持するように補正したところ、かなりうまくいっています。 9月22日 キーボード買い替え2023年4月に購入のロジクールK835GPRメカニカルキーボード、反応しないキーがH,1,9,Esc,Fn,Insertなどあまり使用しないキーを中心にいくつかでてきていたので買い替えました。グリグリ、何度か押すと辛うじて入力できるので騙し騙し使っていたのですが・・・3Dモデリング作業なら我慢できていたのですが、プログラム作業となるとストレスが溜まる。 購入したのはREALFORCE R3S キーボード、静電容量無接点方式とかで長寿命らしい。64歳誕生日、私の寿命より長いかもしれない。そんな歳になりました。 9月19日 プロンプト参考にプロンプト TryGetGroundMapContactの代わりにlandscapeのgroundVoxelsの値で衝突判定をして、groundNormalsの値から法線を計算するメソッドを考えてください。 ここから回答 GitHub Copilot ポイント 以下作成されたコードが続く 参照したgroundNormalsが私の間違いで符号が反転していました。そのため、負が内部と解釈したようです。ポイントの2番目、千鳥配置(stagger)については、私が独自に命名し追加した処理で菱形にひしゃげたグリッドを2段毎にずらしてなるべく直方体に形をちかづける処理です。 私のコードでしか使われていない処理、それも数か所、それの意味をくみとってコードに組み入れています。それも数秒で解釈している。 作成されたコードはそのまま動作したので、あらためてすごいと思う。もう人間を超えている。頼れる私より優秀な部下。 9月17日 ChatGPT-5に丸投げ
複雑な処理なのでGPT-5に丸投げではこんな感じです。地面には衝突しているので、法線に問題があるのかな? 処理は1FPS(1秒1描画)まで落ちました。 <追記>
若干の湧き水のような水底の流れが発生していますが、まあこのぐらいならいいでしょう。地面との摩擦(粘性抵抗のようなものだろうか)あっても良さそうなので残すことにしました。 GPT-5がボクセル値が負の場合を地面と勘違い(と言うかそこまで指定していなかったのですが)しただけでした。法線の計算もそのため反転していました。 昨日のHeightマップ版をみると、だいぶ水漏れしていたようです。ポリゴンが粗いので深いところが潰れてしまっているのかもしれませんが、地形のボクセル値を使って衝突判定しているので、地面にしっかり沿っています。 自分でコーディングしていたらたぶん数日はかかっただろう。これで一カ月1600円は安い。 9月16日 Heightマップで衝突判定Heightマップ(高さ画像)で衝突判定してみました。 7FPS(1秒7描画)で動いています。 地面の法線(傾き)は計算コストを下げるため、Heightマップから事前に計算して法線マップを作成しています。 判断材料が高さだけなので真上から見た状態で衝突をしらべることになります。なので崖を横に移動すると、位置が大きく上がったり下がったりします。 それが原因だと思われますが、水中なのに斜面を水が下り、底中央で湧きあがります。深いところで大きく盛り上がっている。
対策として地面との摩擦を加えてみました。
だいぶ抑えられ、水面が平らになったのですが、滝ができてしまった。 なんとかなりそうです。 もう一つ、地形を作成しているボクセルデータで衝突判定する方法を試してみます。データはHeightマップより粗くなりますが、立体なので今回のような問題は発生しないと思います。若干処理が重くはなりますが・・・ 9月15日 GameObject (Hybrid) 前途多難 |