当前位置:首页 >> 跨学科知识体系 >> 【unity】ComputeShader的学习使用,蓝魔970(蓝魔 i7s)

【unity】ComputeShader的学习使用,蓝魔970(蓝魔 i7s)

cpugpu芯片开发光刻机 跨学科知识体系 9
文件名:【unity】ComputeShader的学习使用,蓝魔970 【unity】ComputeShader的学习使用 ComputeShader

文章目录 ComputeShader一、学习链接二、案例学习1.FallingSand2.Fluid_2D


一、学习链接

王江荣:Compute Shader的基础介绍与使用

用GPU代替CPU进行计算:

定义核函数:可以定义很多个,最终会在GPU中被执行 #pragma kernel CSMain 定义纹理:RWTexture2D可读写,默认的Texture2D只可读 RWTexture2D<float4> Result; 定义线程组,其中定义了线程的数量 [numthreads(8,8,1)] uint3 id : SV_DispatchThreadID 大佬博客讲的很详细,简而言之就是可以根据内置进行多线程处理每个像素,在dispatch时,根据纹理大小和线程数量进行设置线程组数量:dispatch(1024/8, 1024/8, 1)
二、案例学习 1.FallingSand

关键代码解析: 简而言之在ComputeShader里将每个像素根据RGB通道的不同进行设置为障碍和沙子,然后在核函数里判断是否能向下移动,如果遇到障碍物则加上水平位移。

if(p.x == 1){//move down//向下移动int2 direction = int2( 0 , -1 );int2 pID_new = pID+direction;//*(10*p.y);float4 p_new = GetResultPixel(pID_new);//if not empty - move horizontal//若下一个像素不为空,那么将其随机水平位移if(p_new.x > 0 || p_new.z > 0){//这里_Time类似一个随机数种子//sign函数将其约束到-1 至 1direction = int2(sign(random(float2(pID) + _Time)-0.5f) , -1 );pID_new = pID+direction;p_new = GetResultPixel(pID_new);}//if empty - assign//若为空则赋值if(p_new.x == 0 && p_new.z == 0){Result[pID_new] = p;Result[pID] = float4(0,0,0,1);}}
2.Fluid_2D
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2026年1月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接