如果你會看這篇文章,代表你玩 Unity 已經玩到很深入了,CPU 計算已經不能滿足你,這時你不得不把注意力轉到 GPU 身上。GPU 的介紹就不用我多說了,就是超越CPU的存在。如果用 Texture2D 來畫你想要的圖案速度會慢的驚人,如果你用 Shader ( GPU ) 來畫將會快上幾千倍,好了,唬爛就到此為止,我們回歸正題。

這是一個簡單 Unity 的 GPGPU 計算,使用 ComputeShader。將輸入的數字丟入GPU,然後乘以兩倍再傳回 CPU。你可以往下拉直接看結果圖,就明白我再說什麼了。

注意:ComputeShader 只能在 Dx11 的顯卡上執行,除了 Windows 7 + 以外,一些新型的 Android 設備也能跑,要看你設備的 GPU 有沒有支持 Dx11。我目前測過以下設備都能跑: 華為 P10 Plus ( CPU : 麒麟960,GPU : Mali-G71 MP8 )、Asus zenfone 3 Deluxe ( CPU : 驍龍821, GPU : Adreno 530 )。

C # :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test : MonoBehaviour
{public ComputeShader shader;struct Data{public float A;public float B;public float C;}void Start (){Data [] inputData = new Data[3];Data [] outputData = new Data[3];print ("輸入 --------------------------------------------");for(int i=0; i <inputData.Length; i++){inputData[i].A = i * 3 + 1;inputData[i].B = i * 3 + 2;inputData[i].C = i * 3 + 3;print (inputData[i].A + ", " + inputData[i].B + ", " + inputData[i].C);}// Data 有3個float,一個 float 有 4 Byte,所以 3 * 4 = 12ComputeBuffer inputbuffer = new ComputeBuffer(outputData.Length, 12);ComputeBuffer outputbuffer = new ComputeBuffer(outputData.Length, 12);int k = shader.FindKernel ("CSMain");// 寫入 GPUinputbuffer.SetData(inputData);shader.SetBuffer(k, "inputData", inputbuffer);// 計算,並輸出至 CPUshader.SetBuffer(k, "outputData", outputbuffer);  shader.Dispatch(k, outputData.Length, 1,1);outputbuffer.GetData (outputData);print ("輸出 --------------------------------------------");// 打印結果for(int i=0; i < outputData.Length; i++){           print(outputData [i].A + ", " + outputData [i].B + ", " + outputData [i].C);}        // 釋放inputbuffer.Dispose ();outputbuffer.Dispose ();}
}

ComputeShader :

#pragma kernel CSMainstruct Data{float A;float B;float C;
};// 從 CPU 寫入進來的資料 ( CPU -> GPU )
StructuredBuffer<Data> inputData;// outputData 之後會丟回 CPU ( GPU -> CPU )
RWStructuredBuffer<Data> outputData;[numthreads(12,1,1)]
void CSMain (uint3 id : SV_DispatchThreadID)
{// 計算完丟回 CPUoutputData[id.x].A = inputData[id.x].A * 2;outputData[id.x].B = inputData[id.x].B * 2;outputData[id.x].C = inputData[id.x].C * 2;
}

結果 :

————————————————
原文链接:https://blog.csdn.net/weixin_38884324/article/details/79284373

Unity 使用 GPU 計算,使用 ComputeShader + ComputeBuffer相关推荐

  1. Unity实现GPU Cull渲染

    前言 开放世界游戏中植被和物件的数量往往是巨大,  而传统组织大量植被渲染的方式是利用QuadTree/Octree/Kd-Tree等数据结构对植被Intance数据进行预先生成一个个Cluster, ...

  2. 如何計算SDRAM使用頻寬?

    Abstract 只要使用了VGA.TRDB-LCM或者TRDB-LTM,就會使用SDRAM當作frame buffer,由於SDRAM頻寬有限,若沒妥善分配頻寬,最後影像就會不正確. Introdu ...

  3. 计算机实测物理实验报告,計算机实测物理系数实验论文.doc

    計算机实测物理系数实验论文 辽宁石油化工大学 物理实验论文 实验内容计算机实测物理系数实验姓名学院地点薛霞教育实验学院理学院330学号专业.班级指导教师0903040228实验0903许星光实验时间 ...

  4. 寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7……+n

    看到網路上一篇blog一個問題,引發一群網友的討論. Q:寫一個函數計算當參數為 n(n很大) 時的值 1-2+3-4+5-6+7--+n 這是個常見的級數問題,我們必須化簡成closed form ...

  5. 線陣相機處理時間計算方法

    線陣相機圖像處理時間計算,以xx案子為例, 相機使用16K線陣 最大速度300mm/s FOV 300mm 計算方法: 1,            每個像素點大小=FOV/像素數=300/16*100 ...

  6. 计算机分类及在信息社会中的应用,計算机在信息社会中的应用.doc

    計算机在信息社会中的应用 PAGE 11武汉市事业单位工人技能鉴定 技师论文课题名称 计算机在信息社会中的应用 学生姓名 工 种 工作单位 指导老师 完 成 时 间: 2013年 月 日目 录TOC ...

  7. matlab 白色像素点,MATLAB 簡單的計算白色輪廓中像素點的個數

    近來,有朋友問到,如何計算白色輪廓中的像素點的個數.我在這里就舉一個超級簡單的例子,就是假設一副二值圖片,其背景是黑色的,而你的邊緣是白色的,而且你的白色邊緣中不包含黑色的點,就如附件中的那個圖像.下 ...

  8. 投資效益計算公式4/10

    一.投資利潤率 按投資原始總額計算的投資利潤率=稅後利潤/原投資總額 二.投資回收期 回收期=投資金額/平均每年現金淨流量 現金淨流量=淨收益+年折舊額 三.淨現值法 淨現值=每年的現金流入量現值之和 ...

  9. 四阶行列式直接展开_【Just For Fun】n 階行列式計算 宏 生成器,四阶行列式的最优展开...

    [Just For Fun] 本系列纯粹娱乐.研究用.一些旁门左道的东西. 事实上可能完全没用. (๑•̀ω•́๑) 重构版本: [Just For Fun]n 階行列式計算 宏 生成器(重构) 要用 ...

最新文章

  1. ubuntu18.04.1内核升级至5.0.0-25版本
  2. 安全技术大系iOS取证分析
  3. c语言程序加仿真,求助。C语言的程序和仿真
  4. inherits java_JAVA内部类和组合的区别
  5. Android数据手册:Android颜色码制表
  6. GDOI2015 解题报告
  7. 嵌入式CANopen协议从入门到落地产品(更新2021.9.8)
  8. SpringBoot 精通系列-如何优雅地使用Mybatis的XML配置
  9. 二叉树层序遍历_求二叉树的层序遍历
  10. SpringCloud工作笔记085---SpringBoot项目中防止跨站脚本攻击功能添加
  11. 《Android游戏开发详解》一2.17 对象是独立的
  12. 一、tkinter简介
  13. 如何断点调试Tomcat源码
  14. Qt视频直播软件--项目实战(Day7)
  15. ununtu18.0安装搜狗输入法
  16. 搅拌反应釜cad图纸_搅拌式反应釜设计(三维SW)【全套含有CAD图纸三维建模】...
  17. java 正整数类型_跟我学java编程—认识java的整数类型
  18. python中怎么压缩文件_使用Python实现文件压缩和解压
  19. sql 的 desc和asc用法
  20. 深入理解Flash的沙箱 – Application Domains

热门文章

  1. dede 获取当前栏目的上一级栏目名称,和链接
  2. 帝国CMS之列表页调用父栏目下所有子栏目名称(带链接)
  3. 浅谈国产ARM遇上低成本FPGA的结合优势,源码自取!
  4. gdp笔记本 linux,6 Linu下gdp调试技术
  5. 网站服务器迁移公告,服务器地址迁移通知怎么写
  6. JAVAWEB JavaScript 正则表达式
  7. 蓝图编程中的10个技巧
  8. 最新CUDA环境配置(Win10 + CUDA 11.6 + VS2019)
  9. This Week in Spring - February 18th, 2020
  10. 无聊的程序员教你如何使用十几行代码练就单身20年的手速(文末彩蛋)