Learn ComputeShader 02 Multiple kernels

2024-04-23 05:04

本文主要是介绍Learn ComputeShader 02 Multiple kernels,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前面已经成功创建了第一个compute shader,并且使用它替换掉quad的材质的纹理,现在我们将要在计算着色器中创建多个kernel。

首先调整上次的计算着色器,让它显示为红色。

然后再次创建一个kernel,显示为黄色。

结果应该是这样的

#pragma kernel SolidRed
#pragma kernel SolidYellow// Create a RenderTexture with enableRandomWrite flag and set it
// with cs.SetTexture
RWTexture2D<float4> Result;[numthreads(8,8,1)]
void SolidRed (uint3 id : SV_DispatchThreadID)
{// TODO: insert actual code here!Result[id.xy] = float4(1,0,0, 0.0);
}[numthreads(8,8,1)]
void SolidYellow (uint3 id : SV_DispatchThreadID)
{// TODO: insert actual code here!Result[id.xy] = float4(1,1,0, 0.0);
}

现在只需要改变脚本里的kernel函数名称,就可以让quad显示不同的颜色了。

接着要实现一个特别的核函数,要实现四个角分别显示不同的颜色

也就是这样,可以思考一下怎么实现。

其实思路很简单,也就是根据id.xy的范围来显示不同的颜色。

[numthreads(8,8,1)]
void SplitScreen (uint3 id : SV_DispatchThreadID)
{// TODO: insert actual code here!int halfRes = texResolution>>1;Result[id.xy] = float4(step(halfRes,id.x),step(halfRes,id.y),0.0,1.0);
}

第一行是一个右移操作,也就是将分辨率除以2

下面一行的step'函数的逻辑是这样的:

step (a, x)
{if (x < a) {return 0;}else{return 1;}
}

举个例子:

现在我们想要创建一个黄色的圆形应该怎么写核函数呢?

就是直接判断当前像素位置距离中心点的距离,也就是将像素到圆心的距离和半径的长度相比。

这里创建了一个半径大小为分辨率四分之一大小的圆

float inCircle(float2 p,float radious)
{return (length(p)<radious)?1:0;
}[numthreads(8,8,1)]
void Circle (uint3 id : SV_DispatchThreadID)
{int halfRes = texResolution>>1;float2 o=(halfRes,halfRes);float res =inCircle(id.xy-o,texResolution>>2);Result[id.xy] = float4(res,res,0, 0.0);
}

 

这篇关于Learn ComputeShader 02 Multiple kernels的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927850

相关文章

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTION=‘N’ / CREATE DATABASE myd

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

Learn ComputeShader 09 Night version lenses

这次将要制作一个类似夜视仪的效果 第一步就是要降低图像的分辨率, 这只需要将id.xy除上一个数字然后再乘上这个数字 可以根据下图理解,很明显通过这个操作在多个像素显示了相同的颜色,并且很多像素颜色被丢失了,自然就会有降低分辨率的效果 效果: 但是这样图像太锐利了,我们加入噪声去解决这个问题 [numthreads(8, 8, 1)]void CSMain(uint3 id

滚雪球学MyBatis(02):环境搭建

环境搭建 前言 欢迎回到我们的MyBatis系列教程。在上一期中,我们详细介绍了MyBatis的基本概念、特点以及它与其他ORM框架的对比。通过这些内容,大家应该对MyBatis有了初步的了解。今天,我们将从理论走向实践,开始搭建MyBatis的开发环境。了解并掌握环境搭建是使用MyBatis的第一步,也是至关重要的一步。 环境搭建步骤 在开始之前,我们需要准备一些必要的工具和软件,包括J

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录,BTP集成开发环境的搭建这方面。 目录 1,账号注册 2,BTP登录URL 3,如何在BTP上进行开发? 以下是详细内容。 1,账

浙大数据结构:02-线性结构4 Pop Sequence

这道题我们采用数组来模拟堆栈和队列。 简单说一下大致思路,我们用栈来存1234.....,队列来存输入的一组数据,栈与队列进行匹配,相同就pop 机翻 1、条件准备 stk是栈,que是队列。 tt指向的是栈中下标,front指向队头,rear指向队尾。 初始化栈顶为0,队头为0,队尾为-1 #include<iostream>using namespace std;#defi

【SpringMVC学习02】SpringMVC入门程序

转自:http://blog.csdn.net/yerenyuan_pku/article/details/72231272 现有这样一个需求:使用SpringMVC这个框架实现商品列表的展示。这是我对这个需求的分析:我这里假设请求的url为/itemList.action,由于我想要展示商品列表,所以是并不需要传递参数的,再次是这里仅仅是一个SpringMVC的一个入门小程序,并不会与MyBa

02 Shell Script注释和debug

Shell Script注释和debug 一、ShellScript注释 ​ # 代表不解释不执行 ​ 语法:# # 创建myshell.sh文件[root@localhost ~]# vi myshell.sh # 写入内容#!/bin/bash# 打印hello world(正确)echo "hello world"echo "hello 2" # 注释2(正确)echo

python+selenium2轻量级框架设计-02日志类

本文介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。 import logging,time,osclass Logger(object):def __init__(self,logger):'''指定保存日志的文件路径,日志级别,以及调用文件将日志存入到指定的文件中'''#创建loggerself.logger = logging.getLogge