Toucanバーチャル博物館
VRML図鑑 3DCG 展示室   開発日誌 お問い合わせ

トコちゃんの修行日誌 2025年5月

5月27日 Burstコンパイル

Burst

Updateで800msほど時間がかかっていたのに、なんと20msほどに短縮。

マーチング四面体の処理は7.5msほど、出来上がったデータをメッシュに送るためにListに変換するのに10msもかかっていたりするので、そっちの方が気になるほどに速い。

下段のJobに緑で引かれているのJob Systemで並列処理されているところです。18スレッド並列処理。 

使い物になりそうなので、マップ用に地形編集機能、マテリアル設定、木草石家などのオブジェクト配置など組み込んでみます。

5月27日 6kmランニング新記録

2025年5月27日 34分05秒67
2025年2月27日 34分14秒93
2025年5月19日 34分23秒65

体重が1.5kほど減って体が軽い。64kg。

町内会の環境衛生副部長を拝命しまして、草刈のボランティア、草刈り機での作業ですが50分10回ほどしたら、お腹の脂肪が少し取れました。軽いジョギング程度の作業。体をゆっくり左右に振る動作が良いのかな?

5月24日 円柱追加

円柱

円柱もおもしろそうなので追加。処理は球と直方体の合体でけっこう大変だった。

Burst コンパイラー対応のサンプルプログラムはUnity6で、なんとか動きました。

5月23日 プロファイラー

プロファイラー

Generateで92,2%

 Marchで76.3%

  MarchTetrahedronが主処理で37.1%

  get_CubePosition,TetrahedronValue,TetrahedronPosition
  がたぶん変数の読み込みで7.8+3.9+3.9=15.6%
  get_sharMatrixが斜めに傾けたマトリックスで1.2%*2箇所

全体で800msほど時間がかかっているようです。

誰しも同じことを考えるようで、マーチングキューブ法のBurst コンパイラー対応のサンプルプログラムを、2つ見つけました。それらを参考にやってみます。

あとVisualStudioのGitHub Copilot チャット(AI)が超便利。直方体のクリッピングのプログラムはほぼそのまま使っています。質問するだけで、編集中のプログラムも考慮しながら処理を提案してくれる。

5月22日 直方体でクリッピング

クリッピング

直方体でもクリッピングできました。

角が欠けてしまうのはしかたないようです。直方体で顕著なので推測してみました。

原因は、上面でクリッピングした位置と、側面でクリッピングした(又は元のポリゴン)位置をむすんで平面を作成してしまうからのようです。解決するには、どちらかを角の位置(又は元のポリゴンとクリッピング面が交わるところ)まで強制的に移動させるような処理が必要そうです。

考えただけでも大変そうなので諦めます。アニメーションさせてみると、じわじわ欠けていくのでそれほど違和感は感じません。広いグリッドを表示するようにすれば、欠ける部分は少なく感じるかと・・・(言い訳)。

さて、いよいよBurst コンパイラーとC# Job Systemの処理に挑戦してみよう。

5月21日 球でクリッピング

球でクリッピング

なんとかクリッピングできているようです。最初にボクセルデータの値を調整してクリッピングしようとしたのですが、元の形状の情報を上書きしてしまうようで断念。

マーチングの処理で切り口を計算する段階で、クリッピング面で切断するか、元の形状で面を作成するか判断するようにしてなんとかそれらしくなりました。

切り口でガタガタしているで、処理に何か問題がありそうです。調べてみます。

それと計算精度の問題で、球の表面上に点があると切り口の計算で断面が無いと判断する時が時々あるので対策が必要そうです。

5月19日 シアー変換(斜め傾け)

シアー変換

右側が斜めに傾けて四面体にして処理した画像、左は元のマーチングキューブ。

横の単位長は同じですが、ひし形に傾けているので高さ、奥行きが2:√3で細かくなっていますが、その効果以上にに滑らかになったかと思います。 

立方体や球でクリッピングして断面図の表示にチャレンジしてみます。マーチングキューブの処理が向いているようなので。

5月19日 6kmランニング

2025年2月27日 34分14秒93
2025年5月19日 34分23秒65
2025年3月4日 34分28秒08

5月17日 Marching Cubes

UnityのDOTSの勉強は、EntityComponentSystemSamplesのビデオで学習、Entities101のサンプルを動かして、なんとなく概要はつかめたつもりです。

それでマップのプログラムをしてみようと思います。マーチングキューブ法のサンプルプログラムをダウンロードしました。

https://github.com/Scrawk/Marching-Cubes

マーチングキュウブ

これにはマーチング四面体アルゴリズムも含まれています。

地形なので正方形より三角形の方が形が取りやすいんじゃないかと、根拠はありません。以前に作ったマップは方眼を傾けて、ユニットを正三角形で作成しました。同様に立方体を傾けて正四面体でと思ったのですが、構造的に出来ないようです。

四面体は2:√3:√3四面体なら大丈夫です。2:1.73:1.73の三角形で構成されています。若干底辺が長い三角形。

四面体

データは立方体の配列で持たせて傾ける予定です。形を理解するために図工工作しました。

ひし形立方体

そんな訳で、マーチング四面体アルゴリズムが偶然ぴったりのロジックでした。

マーチングの名前の由来どおり、マップを端から単純な処理を繰り返します。たぶんBurst コンパイラーとC# Job Systemの処理に向いてそうです。 

久しぶりのプログラム作業。はじめます。

5月13日 Unity6に挑戦

開発環境が Unity2021.3 + Visual Studio 2019 だったので、 Unity6 + Visual Studio 2022 の最新バージョンに切り替えてみました。

Unity2022版を飛ばしているので、色々と問題が発生すると覚悟していたのですが、読み込み時に自動的にコンバートしてくれたようで、コードを自分で編集することなく、エラーもなく実行でき、無事に移行することができました。

若干見た目で、環境光が無くなったり、テキストボックスに罫線が追加されてしまったりもあるので手直しはしようかと思います。一通り動かしてみないと、問題があるかもしれないのでチェックはしてみます。

Unity6でプロジェクトを心機一転Rebootしようかとも思っていたのですが、古い資産が動いてしまったのでどうしようか迷っています。

とりあえず、DOTSとかUnity6の新しい機能とか勉強しながら小さなプログラムをしてみようと思います。 

<追記>

サメ

ギンガメアジを狙うサメです。アジ2000尾で群れを作っています。2年前の4月に新調したパソコン、GeForce RTX 3060Tiで試してなかったので魚をどのくらい増やせるか試してみました。2500尾ほどから若干もたつきます。

無事にBuildもできてUnity6への移植はできたようです。

5月9日 Blender Pythonで魚の泳ぎ

慣れないPythonでしたが、CopilotとChatGPTに質問しまくってなんとか完成できました。APIを調べる手間が省けて便利です。

内容はUnity用に作成したBoneの泳ぎプログラムをほぼ移植しました。少し改良。デバッグ環境を整えないでprintでダンプしながらの作業でしたので、試行錯誤するような状態ではありませんでした。

Blenderでのお遊びはこのぐらいにして、Unity6に挑戦しようかな?

../toucan/TocoDiaryJ.html