2026/02/09 ~ 2026/02/15
2026/02/09
今日はまたmesh shaderの方を書いてた.
meshletの作り方、前回はmeshoptimizerを使ったが論文の方には他の手法も紹介されている.
DirectXMesh,Greedy法,BoundingSphere法,k-medoids法を合わせた5種類である.
k-medoids法を除いた4種類を今回は実装しとこうかなと思い挑戦する方向で進めている.
DirectXMesh、これはDirectX Meshというライブラリを使って実装する方法.
内容に関してはmeshoptimizerと変わらない、何ならNugetでお手軽に入れられる分こっちの方が楽ではある.
ちょっと考えるポイントはmeshoptimizerがuint32_tなのに対し、uint8_tである点.
今回はstd::vector<uint8_t>にDirectXが書き込むので、それっぽいメモリをstd::vector<uint32_t>でresizeを使って確保して、std::memcpyでコピーすることで解決した.
これで何とかうまく描画できたので2つ目が終了.
次にGreedy法、こいつは内容は単純だけど面倒が多い.
巨大なBBoxを作って、XYZ各軸の長さを計算し、一番長い軸でVertexとTriangleにソートを実行.
Triangleは各Indexを足し合わせて3で割ったもの、所謂重心に対して軸によるソートをする.
そしたら一番手前のVertexを取り出して、それに関連する三角形を取得.
取得した三角形の頂点と三角形を突っ込む、そして近傍頂点で同じことを繰り返して、頂点と三角形を分割して、meshlet化する、この流れ.
一旦実装はしたものの、なんか三角形の表示がおかしい.各クラスタの色がバラバラ.
ちょっとエラーがあるので、明日直せたら直すことにする.
アニメはWWW.WORKING!!を見終えた、漫画から始まってついに駆け抜けてしまった.
何年も前の作品だけども、やっぱり面白さは尽きないねぇ.個人的には漫画3~6巻のWWWあたりの甘々をもっと見たかった気持ちがある.
あと、今日はちょっとGPU Zenを読んでる途中の部分から読んだ.
ネタ集めなんだけど、そういえばinterleaved辺りはmesh shaderやってるし実装してみようかなという気分になれた.
その前にvisibility bufferだろうか、まだまだ実装は始まったばかりだしゆっくり何やるかは考えよう...といったところで今回はここまで.
2026/02/10
昨日に引き続きmeshlet,三角形の表示がおかしいので色々調べる.
よくよく考えるとこの表示ある意味正しいのかとなる.
assimpで出力されたデータはindexが全く共有されていないので、全部のindexが頂点と一対一で結びついてる状態になってた.
つまりはすべて頂点の選び方はX方向のソート次第となるので、なんか三角形細かいな...と思ったけどこれは正しそう.
逆にちゃんと分かれていればもう少しそれっぽくなるはずなんだけど、まあ検証データがない.
とりあえずgroupindexを使って2値で表したらちゃんと軸には沿って出たので、組み込みとしては問題なさそう.
とりあえずよかった、次のBoundingSphereなら分かれずに行けそうなので、これを実装してどうなるかかなぁ.
今日はちょっとモンハンストーリーズを進めた、進めたというよりいわゆるレベル上げ.
リオレイアを仲間にして、防具を作るために奔走中.
今までイャンクックを使ってたんだけどこれはレア度2で、リオレイアはレア度3.
確かにレベルとステータスの上がり方が違うので、これをちゃんとレベル上げればいい感じになるかも.
頑張ってレベルを上げて早くディアブロスにリベンジしないとな、ということで今回はここまで.