Open ReinaS-64892 opened 5 months ago
Core部分はともかく TTT のコードをすべてを rust にするべきかは要検討、dotnet を自分でごねればいい可能性は全然ある ... rust の言語機能が欲しくなりそうだから何とも言えないけど
でも現実的に考えるなら、別のエンジンを作るよりも!まずは TTT の持つ操作、テクスチャの抽象化が先決!
on CPU な Texture2D on GPU な RenderTexture の抽象クラスを作ることが必要 そしてそれらを合成できる spirv をソースとするコンピュートシェーダーの処理系が必要だ...
...まってよく考えたらGPUとCPU共有のって最初の想定は UnityEngin.Texture2D とかになりそうだけど圧縮されてたら引き出すのが超めんどくさいから、読み取り専用と読み書き可能とCPUメモリ上にある つまり
でもまずは CPUで動かすことは考えずに Texture2D と RenderTexture の抽象化だけでいい気がする
第一段階は MLIC 第二弾は メッシュの抽象化と合わせて SimpleDecal 第三弾が AtlasTexture ってかんじに試していこう!
0.5段階に TextureBlendの抽象化かな
ブレンディングで扱うのは色二つの合成に狭める...そうするしかない
このあたりでほぼほぼ MLIC の引きはがしが済んだから 第一段階はほぼ完了と言っていいかな
Unity への依存という不自由から脱したい気持ちが強い...というか ScriptedImporter では GPU とかの資産が使えないことに起因するが...
やるなら wgpu とかつついてみたくなるけど Unity の standerd 2.0 で使えそうなやつはバインドが古くなってしまっている... https://github.com/Trivaxy/WGPU.NET
どうにかするしかないね!
今は wgpu を直接 C# にバインドするんじゃなくて、 rust 側で制御してうまく TexTransTool に扱いやすくする形にする
そして TexTransCoreEngine の定義を変えてもいい気がしてきた、今は インタフェース に切り分けた操作がごたごた並ぶけど、
基本的な RenderTexture の操作である RenderTexture の作成、 RenderTexture に対する データのアップロードとダウンロード。あと同一解像度のRenderTexture同士のコピー
そして、 ComputeShader へ定数バッファとRenderTexture のバインド操作とディスパッチを行えるインターフェース。
この二つのインターフェースがあれば、 TexTransTool のコアな部分でGPUが必要な部分は成り立つはず。
ただ細かいところとして、RenderTexture の Format の問題や、ComputeShader の初期化(Compileなど)があるが...
初期化は、Unity がランタイムで ComputeShaderの生成ができない都合どうしようもないので環境依存にするしかない、特定のIDでComputeShaderを持ってくる、示せるものを集めるように構築しよう
format は完全にEngineに任せる形で、UploadやDownload の時に指定を行い、いい感じに変換を行う方針、ただ Uploadに関しては、フォールバックを作ったうえで、早くロードできる仕組みを構築できるようにしたいところだね...
そういえば ConputeShader の 同時実行数が wgpu だと 256 までで、 DirectX とか Unity だと 1024 だけど...これは wgpu の 256 に合わせる形で、 ただ同時実行数に依存しないのであれば 32,32,1 にして、wgpuの場合はその値を下げる方針でいこう
UnityをUIライブライブラリにし、TexTransTool 自体の Unity依存をUIのレイヤーだけにする。 Rust で TexTransTool を書き直し、そしてそれ用のエンジンも作れば! ほかの場所に持っていくことがしやすくなるかも!
などを頑張ることになるけど、楽しそうじゃん! すぐにできるわけではないだろうけどね!