| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> Unity中的Compute Shader -> 正文阅读 |
|
[游戏开发]Unity中的Compute Shader |
前言游戏开发中,dot编程在处理大数量级的运算应用已经越来越广泛了,而GPU本身对大规模数据的并行计算已经越来越强了,因此现在许多游戏处理大量物体的计算可以利用GPU这一特性,加快并发计算速度,Compute Shader就是专门利用这一特性的。
一、定义Compute Shader是在GPU上并位于正常渲染管线之外运行的程序。一个Compute Shader是一个着色阶段,完全可用于计算任意信息。虽然它可以进行渲染,但通常用于与绘制三角形和像素没有直接关系的任务。它们可用于大规模并行的 GPGPU(通用图形处理器:General-purpose computing on graphics processing units,简称GPGPU) 算法,或用于加速游戏渲染的某些部分。计算着色器提供内存共享和线程同步功能,允许采用更有效的并行编程方法。 二、创建在Asset下创建ComputerShader 目录,然后右键Create -> Shader -> Computer Shader 三、computer代码解析类似于常规shader,Compute Shader是项目中的资源文件,文件扩展名为 .compute。它们是以 DirectX 11 样式 HLSL 语言编写的,具有最少数量的 #pragma 编译指令来指示哪些函数将编译为计算着色器内核。
#pragma kernel CSMain :声明哪个方法被编译,kernel是内核的意思,这一行即把一个名为CSMain的函数声明为内核,或者称之为核函数。一个Compute Shader中至少要有一个kernel才能够被唤起。可以声明很多方法和内核,类似下面:
RWTexture2D中,RW其实是Read和Write的意思,Texture2D就是二维纹理,因此它的意思就是一个可以被Compute Shader读写的二维纹理。一般我们shader通常是只读的,大多使用的是sampler2D,然后通过tex2D函数已经UV坐标访问,但RWTexture2D的访问是直接通过 [numthreads(8,8,1)] 定义了一个线程组(Thread Group)中线程(Thread)总数量,格式:numthreads(tX, tY, tZ),其中tXtYtZ的值即线程的总数量。每个核函数前面我们都需要定义numthreads,否则编译会报错。这里先不细说,后面会详细介绍这个组的概念。 SV_DispatchThreadID一张图片的每个像素坐标 四、c#调用方式先定义并绑定一个ComputerShader,并定义一个接收的纹理:
运行时调用:
绑定tex保存结果,在计算玩后,将传回,调用shader.Dispatch生效ComputerShader。 五、计算关系
shader.Dispatch中kernelIndex指定是哪个内核函数,后面的threadGroupsX,threadGroupsY,threadGroupsZ指定了线程组的数量,上面例子中可以看到TextureSize是1024, 核函数:
SV_GroupID:这个就非常好理解了,我Dispatch(1024 / 8,1024 / 8,1),也就是定义了一个128 * 128个线程组,SV_GroupID的范围(0, 0, 0) - (128, 128, 0)
考虑到现在大多的纹理都是压缩的,而且大多都是以4 * 4 = 16个像素或者以上组成的block,因此computerShader使用这种线程组的方式同步处理8 * 8个像素,能很好的兼容各种压缩带来的读写速度。 六、平台支持Unity 中的Compute Shader与 DirectX 11 DirectCompute 技术紧密配合。Compute Shader适用的平台:
七、引用Unity Compute Shader |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 17:43:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |