読書ノート UnityShaderProgrammingVol.06 XJINE 著

個人メモです。日記のようなものなので私以外が見る価値はあまりないです。

第1章 バッチング

計算負荷の話。ばっちんぐという単語が頻出する。←バッチングはバッチをまとめること。なるほど計算負荷が減りそう。つまりバッチングとは「計算をまとめて負荷を軽くする」と言い換えてよさそう。

プロパティブロックってなんだったっけ?
←vol2に解説あり。https://light11.hatenadiary.com/entry/2019/04/01/233503に解説。コードの役割が書いてるので参考になった。

簡単なバッチングはオブジェクトをstaticにすることのようだ。ただしマテリアルが共通でなければその分バッチ数は増える。

第2章 オブジェクトを使わない描画

ふわふわしてきた

自分でコード1から書いた。meshとマテリアルは事前に指定しとかなきゃいけないとかわかった。

Matrix4x4を変換しようと思ったが足し算が使えない。迷ったが考えてみればアフィン変換なのだから足し算も掛け算で扱うのだった。危ない危ない。

void Update(){
 for(int i = 0; i< count; i++)
 {
  matrices[i] *= Matrix4x4.TRS(new Vector3(0,0,0),
                               Quaternion.Euler(0.1f,0.1f,0.1f),
                               new Vector3(1,1,1));
 }

...

}

を追記して作ったメッシュがくるくる回るようにした。たのしい。
←動的なメッシュ生成も気になる
https://note.com/takataok/n/ndba04fe8a7f5
に記事があった。頂点位置Vector3をVector3の配列Vector3[]で指定し、mesh.vertices;で指定
materialの数をmesh.subMeshCountで設定
どの組み合わせの三角形をメッシュにするかをmesh.SetTrianglesで指定
uvをmesh.uvで設定
オブジェクトのMeshFilterとMeshuRendererそれぞれにマテリアルとmeshを指定。

とりあえずメッシュを書きたければ、Graphics.DrawMesh(メッシュ, モデル行列, マテリアル, 0)で描けそう。
meshを自分で作るならどうしよう?頂点位置と三角形を決めれば行けそうか?

Graphics.DrawMeshNowでも書けるようだが処理が高速なぶん制約がいろいろあるようだ。特殊。レビューは保留。

第3章 インスタンシング

わからん
でも色の違うオブジェクトをたくさん作れるのは楽しそう。

第4章 compute buffer

computeshaderか?VRCで使えるか怪しいな。

marshalというものを初めて知った。systemとかmarshalとかこういうのをなんていうんだろうな。

Bufferが参照型なのがおもしろい、というか助かる。

第5章 meshrenderを使わないinstancing

インスタンシング 大量のメッシュを同時に描画する技術のキーワードの一つ

meshrendererを使わない描画には興味がある。

バッチを減らす目的があることはわかるがいまいち恩恵をイメージできない。

第6章 compute shder

VRCでは利用できないので不要。…ということもないだろう。テスト段階などではこちらのほうがわかりやすいこともあるだろうから訓練できるとうれしい。今日はざっと見た程度。


第7章 computeシェーダとインスタンシング

新しい情報はないらしい。わからないなら以前の内容を理解していないということだと反省したい

7.1 もうわからん。バッファとデータを用意とはなんだ。データを用意はまだイメージがつくがバッファは見当もつかん。ComputeBuffer,SetBufferが対応していそうだ。

7.2 シェーダー内に何か書いているらしいということぐらいしかわからん。


第8章

マウスのクリックに対してとてもきれいなパーティクルが見れた。作り方は理解できていないが目標としてとても魅力的。