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()
    {
        //获取kernel
        int kernelHandle = shader.FindKernel("CSMain");

        //创建ComputeBuffer
        //RenderTexture tex = new RenderTexture(256, 256, 24);
        RenderTexture tex = new RenderTexture(256, 256, 24, RenderTextureFormat.ARGB32);
        //这里必须要设置为true,否则无法使用SetTexture
        tex.enableRandomWrite = true;
        tex.Create();

        //设置Compute Shader参数
        shader.SetTexture(kernelHandle, "Result", tex);
        //运行Compute Shader
        shader.Dispatch(kernelHandle, 16, 16, 1);

        //将结果保存到 Assets 路径下的 test.renderTexture
        AssetDatabase.CreateAsset(tex, "Assets/test.renderTexture");
    }
}

场景布置

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

运行场景

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

参考

Unity | 浅谈 Compute Shader

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows 下 QT开发环境的搭建:

下载QT:Index of /archive/qt/5.14 下载Cmake :CMake - Upgrade Your Software Build System (1)QT在windows,C, 打包exe&#xff1a; step1:window上安装QT软件&#xff1a; Windows下的QT系统开发环境搭建_qt windows-CSDN博客. step2:新建一个界面工程&#xff1a; (1)打…

C++标准学习--智能指针

shared_ptr和weak_ptr的配合使用是个问题。unique_ptr的使用场合似乎比较局限。 文章C 智能指针详解&#xff08;一&#xff09;——unique_ptr - 知乎 (zhihu.com) 介绍了unique_ptr的使用。它可以由shared_ptr转来&#xff0c;主要用到了std::move。 主要场景其中提到&#…

WaitForSingleObject 函数的诸多用途与使用场景总结

目录 1、WaitForSingleObject函数详细说明 2、在线程函数中调用WaitForSingleObject实现Sleep&#xff0c;可立即退出Sleep状态 3、调用WaitForSingleObject函数监测线程或进程是否已经退出 3.1、子进程实时监测主进程是否已经退出&#xff0c;主进程退出了&#xff0c;则子…

第一个Python程序_获取网页 HTML 信息[Python爬虫学习笔记]

使用 Python 内置的 urllib 库获取网页的 html 信息。注意&#xff0c;urllib 库属于 Python 的标准库模块&#xff0c;无须单独安装&#xff0c;它是 Python 爬虫的常用模块。 获取网页 HTML 信息 1) 获取响应对象 向百度&#xff08;http://www.baidu.com/&#xff09;发起…

UML-用例图

提示&#xff1a;用例图是软件建模的开始&#xff0c;软件建模中的其他图形都将以用例图为依据。用例图列举了系统所需要实现的所有功能&#xff0c;除了用于软件开发的需求分析阶段&#xff0c;也可用于软件的系统测试阶段。 UML-用例图 一、用例图的基础知识1.用例图的构成元…

网页屏幕适配通透了

一&#xff0c;如果设计尺寸固定 那就按照固定尺寸开发 一般都是1920*1080 二&#xff0c;需要适配多种像素屏幕&#xff08;大屏可视化&#xff09; 可使用媒体查询设置多套css样式或者使用自适应单位&#xff0c;%&#xff0c;vw&#xff0c;vh 最好解决方案rem&#xff…

NetCore部署微服务(三)

接上文&#xff0c;服务端部署完成之后&#xff0c;同样我们也需要修改一下客户端代码 Blocking Queries 1.1 服务发现 在客户端代码中使用Nuget安装consul包 修改配置文件&#xff0c;我们首先需要把consul的请求地址配置在配置文件中 修改control方法 using Consul; usin…

Navicat教程

下载连接&#xff08;无限使用版&#xff09; 链接&#xff1a;https://pan.baidu.com/s/1IprYLRv0bSnW-XKn0trRtw 提取码&#xff1a;j6qx 连接使用 1.1 连接数据库 打开navicat&#xff0c;点击连接&#xff0c;选择数据库 1.2 操作数据库 右键连接&#xff0c;点击新建数…

使用php代码调用jar包里面的类方法的实战操作

#php调用jar包# 需求说明 接到一个需求&#xff0c;网站是使用php开发的帝国cms&#xff0c;现接到需求是需要对接一个系统 &#xff0c;但系统里面有一个数据加密字段&#xff0c;需要使用jar包进行加解密。 技术解决方案&#xff0c;资源包解决一切。下载就行了&#xff0…

偶尔启动Idea2023版开发工具运行没有反应Idea都无法启动Idea双击无反应

最近在开发的过程中使用Idea2023版。无论是双击运行还是管理员运行&#xff0c;Idea都无法启动&#xff0c;没有作出任何反应&#xff0c;在查询许多资料后&#xff0c;这里记录总结一下&#xff1a; 解决方法如下&#xff1a; &#xff08;1&#xff09;找到idea桌面快捷方式…

【REST2SQL】08 日志重构增加输出到文件log.txt

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 原来…

【css】渐变效果

css渐变效果 使用 CSS 渐变可以在两种颜色间制造出平滑的渐变效果。 用它代替图片&#xff0c;可以加快页面的载入时间、减小带宽占用。同时&#xff0c;因为渐变是由浏览器直接生成的&#xff0c;它在页面缩放时的效果比图片更好&#xff0c;因此你可以更加灵活、便捷的调整页…

C++(11)——string

前面通过前面篇文章介绍了中的各项基本知识。从本篇文章开始&#xff0c;将对中的中的各项内容进行介绍&#xff1a; 目录 1.string类对象的常见构造&#xff1a; 2. string类对象的赋值操作&#xff1a; 3. string类对象的访问与遍历&#xff1a; 3.1 string类对象的访问…

腾讯云服务器新老用户优惠价格表(2024新报价)

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

Poi实现根据word模板导出-文本段落篇

最近在做word模板导出的需求&#xff0c;本来意为是很简单&#xff0c;做起来才发现细节上有很多东西处理起来还是比较麻烦的&#xff08;客户要求太多&#xff01;&#xff01;&#xff01;&#xff09; 因此我把涉及到基于word模板导出的这部分整理了一下&#xff0c;大家直…

二叉树的基本运算(涉及递归均有给出模型)

目录 介绍&#xff1a; 二叉树的基本运算及其实现&#xff1a; BTNode* CreateBTree(char* str) 创建二叉树 void DestroyBTree(BTNode* b) 销毁二叉树 BTNode* FindNode(BTNode* b, ElemType x) 查找结点 BTNode* LchildNode(BTNode* p) 查找左孩子结点 BTNode* Rchild…

自学Python笔记总结(更新中……)

自学Python笔记总结 网址数据类型类型查看类型&#xff0c;使用type内置类标识符 输出输入语句format函数的语法及用法数据类型的转换运算符算数运算符赋值运算符的特殊场景拆包 比较运算符逻辑运算符 与 短路位运算符运算符优先级 程序流程控制分支语句pass 占位 循环语句 whi…

【记忆化搜索】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 前言 记忆化搜索是一种优化搜索算法的方法&#xff0c;它可…

网络基础学习(3):交换机

1.交换机结构 &#xff08;1&#xff09;网线接口和后面的电路部分加在一起称为一个端口&#xff0c;也就是说交换机的一个端口就相当于计算机上的一块网卡。 如果在计算机上安装多个网卡&#xff0c;并让网卡接收所有网络包&#xff0c;再安装具备交换机功能的软件&#xff0…

NLP论文阅读记录 - 2022 | WOS 数据驱动的英文文本摘要抽取模型的构建与应用

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Construction and Application of a Data-Driven Abstract Extractio…