ReinaS-64892 / TexTransTool

Non-destructive modification to Texture!
https://ttt.rs64.net
Other
81 stars 7 forks source link

TexTransCoreEngine と Unity依存の排除 #506

Open ReinaS-64892 opened 5 months ago

ReinaS-64892 commented 5 months ago

UnityをUIライブライブラリにし、TexTransTool 自体の Unity依存をUIのレイヤーだけにする。 Rust で TexTransTool を書き直し、そしてそれ用のエンジンも作れば! ほかの場所に持っていくことがしやすくなるかも!

などを頑張ることになるけど、楽しそうじゃん! すぐにできるわけではないだろうけどね!

ReinaS-64892 commented 5 months ago

Core部分はともかく TTT のコードをすべてを rust にするべきかは要検討、dotnet を自分でごねればいい可能性は全然ある ... rust の言語機能が欲しくなりそうだから何とも言えないけど

ReinaS-64892 commented 4 months ago

でも現実的に考えるなら、別のエンジンを作るよりも!まずは TTT の持つ操作、テクスチャの抽象化が先決!

on CPU な Texture2D on GPU な RenderTexture の抽象クラスを作ることが必要 そしてそれらを合成できる spirv をソースとするコンピュートシェーダーの処理系が必要だ...

ReinaS-64892 commented 4 months ago
ReinaS-64892 commented 4 months ago

...まってよく考えたらGPUとCPU共有のって最初の想定は UnityEngin.Texture2D とかになりそうだけど圧縮されてたら引き出すのが超めんどくさいから、読み取り専用と読み書き可能とCPUメモリ上にある つまり

ReinaS-64892 commented 4 months ago

でもまずは CPUで動かすことは考えずに Texture2D と RenderTexture の抽象化だけでいい気がする

ReinaS-64892 commented 4 months ago

第一段階は MLIC 第二弾は メッシュの抽象化と合わせて SimpleDecal 第三弾が AtlasTexture ってかんじに試していこう!

ReinaS-64892 commented 4 months ago

0.5段階に TextureBlendの抽象化かな

ReinaS-64892 commented 4 months ago

ブレンディングで扱うのは色二つの合成に狭める...そうするしかない

ReinaS-64892 commented 1 month ago

このあたりでほぼほぼ MLIC の引きはがしが済んだから 第一段階はほぼ完了と言っていいかな

ReinaS-64892 commented 1 month ago

Unity への依存という不自由から脱したい気持ちが強い...というか ScriptedImporter では GPU とかの資産が使えないことに起因するが...

やるなら wgpu とかつついてみたくなるけど Unity の standerd 2.0 で使えそうなやつはバインドが古くなってしまっている... https://github.com/Trivaxy/WGPU.NET

どうにかするしかないね!

ReinaS-64892 commented 3 weeks ago

今は 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に関しては、フォールバックを作ったうえで、早くロードできる仕組みを構築できるようにしたいところだね...

ReinaS-64892 commented 3 weeks ago

そういえば ConputeShader の 同時実行数が wgpu だと 256 までで、 DirectX とか Unity だと 1024 だけど...これは wgpu の 256 に合わせる形で、 ただ同時実行数に依存しないのであれば 32,32,1 にして、wgpuの場合はその値を下げる方針でいこう