zznewclear13 / zznewclear13.github.io

My personal website.
https://zznewclear13.github.io
Apache License 2.0
1 stars 1 forks source link

posts/dispatch-compute-shader-in-a-radial-way/ #3

Open utterances-bot opened 3 months ago

utterances-bot commented 3 months ago

径向分派Compute Shader | ZZNEWCLEAR13

让同一个group对应的像素形成放射状图案.

https://zznewclear13.github.io/posts/dispatch-compute-shader-in-a-radial-way/

RicciFloOow commented 3 months ago

忠实读者冒个泡,一个小建议,既然是cpu端分配的组数,而且用于查询的数据还很少,那么实际项目中用可以用constant buffer。PS,这种分配居然真的可以用,那么配合dispatch indirect,我好像看到了些什么新玩法 :D

RicciFloOow commented 2 months ago

🙃补充吐槽一个点,我之前在2022.2版中根据博主思路实现了径向分派,效果是没有问题的。结果今天放到2021.3的版本里就黑屏了,我一开始怀疑版本不同导致编译出来的shader不同(以前碰到过不同版本编译对类型强制转换有区别的情况),结果抓帧了两个版本,发现shader都是一样的。然后只能土法抓帧来定位,最后确定了还是强制转换类型的问题,我传入的是中心点的屏幕坐标是int4类型的(zw存的是clamp过的值),在2022.2版本中,unity在打包cbuffer时把这个值正确解释为了int4,但是在2021.3中这个值被解释为了float4(应当算是bug吧),然后在后面的使用过程中,即使我用(int)来强制转换该值,其值是仍然是由其位模式解释成的int值(即等效于asint())

zznewclear13 commented 2 months ago

🙃补充吐槽一个点,我之前在2022.2版中根据博主思路实现了径向分派,效果是没有问题的。结果今天放到2021.3的版本里就黑屏了,我一开始怀疑版本不同导致编译出来的shader不同(以前碰到过不同版本编译对类型强制转换有区别的情况),结果抓帧了两个版本,发现shader都是一样的。然后只能土法抓帧来定位,最后确定了还是强制转换类型的问题,我传入的是中心点的屏幕坐标是int4类型的(zw存的是clamp过的值),在2022.2版本中,unity在打包cbuffer时把这个值正确解释为了int4,但是在2021.3中这个值被解释为了float4(应当算是bug吧),然后在后面的使用过程中,即使我用(int)来强制转换该值,其值是仍然是由其位模式解释成的int值(即等效于asint())

我用2022.3和2019.4试过了都是正常的,当然也可能是我用的structured buffer的原因。