Unity ComputeShader 使用GPU快速计算复杂问题

Unity ComputeShader 使用GPU快速计算复杂问题

  • 前言
  • 项目
    • 创建ComputeShader
    • 编写CompturShader
    • 创建Unity代码
    • 场景布置
    • 运行场景
  • 参考

前言

遇到一个问题,需要大量的计算,在Unity中直接写会长时间的阻塞主线程,正好使用ComputeShader让GPU来帮我算。

项目

创建ComputeShader

右键Project空白的地方或者文件夹Create->Shader->Compute Shader
创建ComputeShader
修改文件名为TestCompShader

编写CompturShader

修改代码,每一行注释写的很详细

//每个 #kernel告诉编译哪个函数 你可以有很多kernel
#pragma kernel CSMain//由程序赋值的RenderTexture(Unity中必须给RenderTexture设置enableRandomWrite标志)
RWTexture2D<float4> Result;//每个线程组的线程数量,为了满足每个线程都只有一个像素对应
//这里是 16 x 16 = 256 正好是传入图片的大小,最后的1是一维
[numthreads(16, 16, 1)]//CSMain接受的参数为:(uint3 id : SV_DispatchThreadID)
void CSMain(uint3 id : SV_DispatchThreadID)
{//将像素的x坐标映射到0-1范围 也就是让图片从黑到红Result[id.xy] = float4((id.x / 255.0), 0.0, 0.0, 0.0);
}

创建Unity代码

在Unity中创建名为ComputeBufferExample的脚本
并写入下面的内容

using UnityEditor;
using UnityEngine;public class ComputeBufferExample : MonoBehaviour
{/// <summary>/// Compute Shader/// </summary>public ComputeShader shader;private void Start(){RunShader();}/// <summary>/// 运行Compute Shader/// </summary>void RunShader(){//获取kernelint kernelHandle = shader.FindKernel("CSMain");//创建ComputeBuffer//RenderTexture tex = new RenderTexture(256, 256, 24);RenderTexture tex = new RenderTexture(256, 256, 24, RenderTextureFormat.ARGB32);//这里必须要设置为true,否则无法使用SetTexturetex.enableRandomWrite = true;tex.Create();//设置Compute Shader参数shader.SetTexture(kernelHandle, "Result", tex);//运行Compute Shadershader.Dispatch(kernelHandle, 16, 16, 1);//将结果保存到 Assets 路径下的 test.renderTextureAssetDatabase.CreateAsset(tex, "Assets/test.renderTexture");}
}

场景布置

创建空物体并挂载脚本
挂载脚本

运行场景

运行,并在文件中找到保存的图片
Tip:停止运行就看不到了
找到保存的图片

参考

Unity | 浅谈 Compute Shader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/413294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack/vue-cli构建速度和打包体积优化

编译分析插件 webpack-bundle-analyzer webpack-bundle-analyzer可以生成代码分析报告&#xff0c;可以直观地分析打包出的文件有哪些&#xff0c;及它们的大小、占比情况、各文件 Gzipped 后的大小、模块包含关系、依赖项等 npm i -D webpackbar webpack-bundle-analyzer ja…

Intel Quartus II IP之DP1.4 工程的创建与使用

前述&#xff1a; Win10电脑安装了Quartus 21.4&#xff0c;这可以满足绝大多数工程&#xff0c;特别是对于简单调用fifo/ram等的工程&#xff0c;但是想要学习Quartus的HDMI/DP等高速接口类IP&#xff0c;首先需要创建HDMI/DP IP的设计demo工程&#xff0c;此时还需要安装Ecl…

数学建模--比赛

内容来自数学建模BOOM&#xff1a;【快速入门】北海&#xff1a;数模建模基础MATLAB入门论文写作数学模型与算法(推荐数模美赛国赛小白零基础必看教程)_哔哩哔哩_bilibili 目录 1.学习内容 2.参赛须知 1&#xff09;参赛作品的组成 2)参赛作品的提交 3.软件安装 4.注意…

《Redis:NoSQL演进之路与Redis深度实践解析》

文章目录 关于NoSQL为什么引入NoSQL1、单机MySQL单机年代的数据库瓶颈 2、Memcached&#xff08;缓存&#xff09; MySQL 垂直拆分 &#xff08;读写分离&#xff09;3、分库分表水平拆分MySQL集群4、如今的网络架构5、总结 NoSQL的定义NoSQL的分类 Redis入门Redis能干嘛&…

【CSS】解决height = line-height 文字不垂直居中(偏上、偏下)的问题

解决办法1&#xff1a; 查看 font-family 属性&#xff0c;确认是否是因为字体而导致的不垂直居中问题。 其他小知识&#xff1a; 基线就是小写x字母的下边缘(线) 就是我们常说的 基线。line-height 属性设置的行高也就是定义的两行文字基线之间的距离! 参考文章&#xff1a;…

git仓库使用说明

Git软件使用 1.先下载git相关软件 下载地址&#xff1a; Git - Downloading Package (git-scm.com) 下载其中一个安装 2.打开gitee网站&#xff0c;注册账号 3.打开个人中心&#xff0c;选择ssh公钥&#xff0c;查看如何生成公钥 4.生成公钥后&#xff0c;添加相应的公钥 …

window11环境安装jdk17并配置环境变量

目录 一、下载地址二、安装步骤三、环境变量配置四、环境变量配置是否成功的测试 一、下载地址 https://www.oracle.com/java/technologies/downloads/#jdk17-windows 二、安装步骤 双击已下载的 jdk-17_windows-x64_bin.exe 安装包&#xff0c;点击【下一步】&#xff0c;…

【总结】Dinky学习笔记

概述 Dinky 是一个开箱即用、易扩展&#xff0c;以 Apache Flink 为基础&#xff0c;连接 OLAP 和数据湖等众多框架的一站式实时计算平台&#xff0c;致力于流批一体和湖仓一体的探索与实践 官网&#xff1a;Dinky 核心特性 沉浸式&#xff1a;提供专业的 DataStudio 功能&a…

NLP论文阅读记录 - 2021 | WOS 使用 GA-HC 和 PSO-HC 改进新闻文章的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试 二.相关工作三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Improved Text Summa…

1125. 牛的旅行 (Floyd算法,最短路)

1125. 牛的旅行 - AcWing题库 农民John的农场里有很多牧区&#xff0c;有的路径连接一些特定的牧区。 一片所有连通的牧区称为一个牧场。 但是就目前而言&#xff0c;你能看到至少有两个牧区不连通。 现在&#xff0c;John想在农场里添加一条路径&#xff08;注意&#xff…

开源28181协议视频平台搭建流程

最近项目中用到流媒体平台&#xff0c;java平台负责信令部分&#xff0c;c平台负责流媒体处理&#xff0c;找了评分比较好的开源项目 https://gitee.com/pan648540858/wvp-GB28181-pro 流媒体服务基于 c写的 https://github.com/ZLMediaKit/ZLMediaKit 说明文档&#xff1a;h…

使用git上传代码到非本人账号的的github仓库

**背景&#xff1a;**本地git配置信息为本人的信息&#xff0c;但因为需要需要上传代码到公共github账号 整体思路 1&#xff1a;创建新的SSH KEY&#xff0c;并将生成的新的id_rsa文件中的公钥添加到github对应的sshkey&#xff0c;并更改本地host文件。参考博客&#xff1a;…