[程式] ComputeShader傳送整數陣列的奇怪問題

作者: doasgloria (青柳立夏)   2020-07-20 12:36:05
最近嘗試使用unity compute shader中
傳送 Array 的操作~
遇到一個奇怪的問題
以下是做一個簡單的漸層
https://i.imgur.com/YVuXH3l.png
這是一個 200*200的 RawImage
然後用Compute Shader輸出的RenderTexture貼上
Shader 內容只要這樣:
https://i.imgur.com/CYxEU2a.png
只要三行就能完成
主要就是這一行:
color[0] = float(id.x) / 200 ;
就可以使RGB的R 從(0/200)漸層到(199/200)
作者: cjcat2266 (CJ Cat)   2020-07-20 17:45:00
網路上好像不少人說Unity的SetInts有問題我用SetInts設定int4的時候沒問題,大陣列就有問題改用ComputeBuffer試試吧,這個一直都沒問題
作者: a4s5d6999   2020-07-20 17:57:00
有人似乎 遇到相同的bug 所有data只有前1/4有成功送到shaderhttps://forum.unity.com/threads/computeshader-setints-failing-or-me-failing.669829/
作者: doasgloria (青柳立夏)   2020-07-21 09:02:00
> /// <原來如此 是個坑 0..0
作者: zxc9764315 (Norus)   2020-07-21 09:11:00
跟GPU memory的alignment好像有點關係,你在C#端用四倍大的陣列,每隔四個int存一個,就可以正確作用
作者: doasgloria (青柳立夏)   2020-07-21 11:22:00
我來試試看樓上大大的方法 XD但是這樣會造成操作上的困難 看來傳送陣列還是buffer
作者: cjcat2266 (CJ Cat)   2020-07-21 12:16:00
Unity文件沒有寫清楚,但DirectX的文件有提到https://bit.ly/39h2a7J這樣用int4 array或compute buffer才不會浪費記憶體但int4 array又得寫條件式,不如用compute buffer
作者: doasgloria (青柳立夏)   2020-07-21 12:43:00
沒錯 XD 改用compute buffer了 反而比較好做 ^0^

Links booklink

Contact Us: admin [ a t ] ucptt.com