[程式] 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