Unity运用Gpu来处理计算和逻辑,加快程序速度
来源:互联网 发布:数据库事务 编辑:程序博客网 时间:2024/06/05 16:26
随着游戏玩法的增强,计算的多量化,我们的CPU并不足以迅速的处理这些问题,而Unity给我们开放了一个接口,我们需要用它来处理大量的运算;
我们可以把大量的处理运算的逻辑放入这个Shader中,用GPU的并行能力来计算,这里简单的说一说他的使用方式和如何把参数传入和传出。让我们像一个方法一样调用。
首先:在Unity中我们可以创建一个ComputeShader:
打开之后会发现一个这样的脚本:
简单的介绍一下,
1、这个#pragmakernel Multiply 这是一个内核, 也可以称作入口。这个至少有一个!
这个Multiply请红线标注,很重要,我们在代码里需要用到它;
2、接下来就是一个结构体,这个结构体是我们定义的一个结构体。我们用它来和外面的结构体相呼应。
3、RwStructuredBuffer<VecMatpair>dataBuffer 相当于我们声明的一个可读写的变量我用C#表示: VecMatPair[] dataBuffer;
4、就是方法主体,跟第一条呼应,外部会调用这个类似于Main函数的方法;可以写一些简单的逻辑,给上面的变量赋值:(这里值得重点一说,这个变量又当输入又当输出,注意!);
这里我们的ComputeShader也就构建完成了;
下面进行C#的编写,让其呼应,传入和输出;
1、 我们需要定义一个和Shader里面呼应的结构体。
2、 获取这个shader,我们直接拖入就OK;
然后变量基本就完事了:
我们看一下代码主体:
除去单行符号,我们一行一行解释:
1、 声明一个长度为15的结构体,这是我们的输入参数;(然而并用不到15个)
2、 制定一个循环,我给他了一个赋值,都是相同的值;
循环体里的内容跳过;
3、 这个很重要,还记得让你们标红线的地方吗。这个就是获取这个入口的标识;
4、 下面这个数组结构,用来最后来收取需要的5个数据;
5、 这里是测试打印跳过;
6、 ComputeBuffer 这个也很重要,你还需要声明一个Buffer 参数需要制定这个收取的长度,和这个数组的所有占用字节(提前计算(这里就是Float=4 因为是2个Float=8 又因为是个长度为5的数组=5*8=40 ));
7、 下面就是一套流程了,对,就是走走流程;
关联这个数据结构和Shader的变量相关联;
SetData()把需要传入的数据送进Shader;
接着!重点,一定要运行,第一开始我写完发现怎么都没变化,一定要运行Shader;Dispatch();
最后收取返回数据(我们需要接收这40个字节的数据);
打印结果附图:
神经网络在我认为是能放在GPU处理的
- Unity运用Gpu来处理计算和逻辑,加快程序速度
- 加快客户机和服务器的处理速度
- 加快程序装载和执行速度
- 加快MySQL逻辑恢复速度的方法和参数总结
- 加快MySQL逻辑恢复速度的方法和参数
- GDI+ 使用LockBits和指针加快处理速度
- GDI+ 使用LockBits和指针加快处理速度
- Unity 5 加快导入DLL解析速度
- 修改注册表来加快HTTP上传速度
- 利用随机数来加快代码调试速度
- 多线程是否能加快处理速度
- 如何加快Bundle的处理速度
- 论多线程是否能加快处理速度
- 多线程是否能加快处理速度
- 加快程序运行速度的技巧
- XP系统配置使运行程序速度加快
- 加快程序运行速度的技巧
- duilib : 改变资源类型,加快程序运行速度.
- PHPqrcode 生成二维码
- s数组与字符串的相互转换方法
- GBDT 学习
- redis 快照 RDB和AOF
- OBIEE12c usage tracking
- Unity运用Gpu来处理计算和逻辑,加快程序速度
- SpringBoot干货系列(一)
- Dijkstra算法
- PHP中的字符串处理
- Reactor模式介绍
- 解决linux下非root用户频繁出现Authentication is required to set the network proxy used for downloading packages
- python断言学习
- 欢迎使用CSDN-markdown编辑器
- Android-带你从源码角度理解SharedPreferences存储原理