推 cjcat2266: 網路上好像不少人說Unity的SetInts有問題 07/20 17:45
→ cjcat2266: 我用SetInts設定int4的時候沒問題,大陣列就有問題 07/20 17:45
→ cjcat2266: 改用ComputeBuffer試試吧,這個一直都沒問題 07/20 17:45
推 a4s5d6999: 有人似乎 遇到相同的bug 所有data只有前1/4有成功送到s 07/20 17:57
→ a4s5d6999: hader 07/20 17:57
→ a4s5d6999: ts-failing-or-me-failing.669829/ 07/20 17:58
→ doasgloria: > /// < 07/21 09:02
→ doasgloria: 原來如此 是個坑 0..0 07/21 09:02
推 zxc9764315: 跟GPU memory的alignment好像有點關係,你在C#端用四 07/21 09:11
→ zxc9764315: 倍大的陣列,每隔四個int存一個,就可以正確作用 07/21 09:11
→ doasgloria: 我來試試看樓上大大的方法 XD 07/21 11:22
一開始沒試成功 亂TRY幾次後可以
大概是:
1. 將原本傳送 int[200] 變成 int[800] , 把原本 0-199 間隔著放
2. Shader那邊 原本取第 id.x個 變成int(id.x/4) << 這個不知道為何要這樣
但是這樣可以成功 = =
** C#:
https://i.imgur.com/e2YmxGD.png
** Shader:
https://i.imgur.com/ku1Bw8X.png
如果 id.x 不 /4 就會跟原本一樣結果
如果 id.x *4 那個有效著色範圍又變小成1/4的感覺
Q.Q !!
※ 編輯: doasgloria (118.161.51.182 臺灣), 07/21/2020 12:13:22
→ doasgloria: 但是這樣會造成操作上的困難 看來傳送陣列還是buffer 07/21 12:15
推 cjcat2266: Unity文件沒有寫清楚,但DirectX的文件有提到 07/21 12:16
→ cjcat2266: 這樣用int4 array或compute buffer才不會浪費記憶體 07/21 12:16
→ cjcat2266: 但int4 array又得寫條件式,不如用compute buffer 07/21 12:17
→ doasgloria: 沒錯 XD 改用compute buffer了 反而比較好做 ^0^ 07/21 12:43