UnityComputeShader Challenge1

UnityComputeShader Challenge1

using UnityEngine;
using System.Collections;public class Challenge1 : MonoBehaviour
{//editor拖拽对应的 compute文件public ComputeShader shader;//纹理的大小public int texResolution = 1024;//着色器Renderer rend;//用于存储计算输出RenderTexture outputTexture;int kernelHandle;// Use this for initializationvoid Start(){//创建纹理,width,height,depthoutputTexture = new RenderTexture(texResolution, texResolution, 0);//是否允许随机读写outputTexture.enableRandomWrite = true;outputTexture.Create();rend = GetComponent<Renderer>();rend.enabled = true;InitShader();}private void InitShader(){	//获得compute 中的kernel 函数kernelHandle = shader.FindKernel("Square");int halfRes = texResolution >> 1;int quarterRes = texResolution >> 2;//矩形盒的两个点Vector4 rect = new Vector4( quarterRes, quarterRes, halfRes, halfRes );//设置参数shader.SetVector( "rect", rect );shader.SetTexture(kernelHandle, "Result", outputTexture);//将输出的材质应用到当前组件上,editor中设置对应meshrend.material.SetTexture("_MainTex", outputTexture);//分发任务,启动对象的线程组数量,这里为什么是8 在compute文件中通过[numthreads(8, 8, 1)]  设置了一组线程组的大小,8 8 1分别表示x方向上8个线程,y方向上8个z方向上1,总计64个线程。因为对应的texture x,y,z 分别是 1024,1024,1 为了覆盖所有的像素,就需要 1024/64=8,这就是为什么这里是8的原因DispatchShader(texResolution / 8, texResolution / 8);}private void DispatchShader(int x, int y){shader.Dispatch(kernelHandle, x, y, 1);}void Update(){	//这里没看懂干嘛的if (Input.GetKeyUp(KeyCode.U)){DispatchShader(texResolution / 8, texResolution / 8);}}
}
// Each #kernel tells which function to compile; you can have many kernels
// 告诉编译器,那些函数是内核函数
#pragma kernel Square// Create a RenderTexture with enableRandomWrite flag and set it
// with cs.SetTexture
// 声明可读可写的属性,
RWTexture2D<float4> Result;
//float4 32bit*4 我的理解方式是float 四元组
float4 rect;
//判定是否在矩形内,这里判定还是蛮有意思的,可以使用非if else的形式确定,点是否在矩形内,由于线程组内使用的程序计数器是统一的,所以if else会导致,不符合的线程等待符合的线程,从而大幅降低线程性能,而这种方式可以确保所有线程并行效率,比如点a,点b a属于矩形内,b不属于矩形内。当进行判定的时候如果使用if else,则线程组内需要执行两次调度,但是下面的方式可以并行执行,只需要一次
float inSquare( float2 pt, float4 rect ){//补充说明step函数,很好理解,第一个参数是一个阶梯,第二个参数如果在阶梯的上面则返回1,否则返回0。上面的意思是数值更大,通常用于去除if else float horz = step( rect.x, pt.x ) - step( rect.x + rect.z, pt.x );//一个点是否在一个线段上(a,b),先判断x是否大于a,再排除掉x>b的情况float vert = step( rect.y, pt.y ) - step( rect.y + rect.w, pt.y );return horz * vert;//仅当x轴和y轴满足条件 即 1*1=1 || -1*-1 才会返回 1,其余条件都是0
}
//生命线程组大小, id 为 unit3元组,分辨表示,当前线程的位置,一个不恰当的理解方式就是该像素,处于纹理的坐标假设像素是一个个的小颗粒,小颗粒的长宽高分别都是1
[numthreads(8,8,1)]
void Square (uint3 id : SV_DispatchThreadID)
{//这里参数是否意味着,inSquare内上下文是拿不到 rect的//验证后发现 及时不传递rect,还是可以有正确的表现float res = inSquare( (float2)id.xy, rect );Result[id.xy] = float4(0.0, 0.0, res, 1.0);
}

运行效果
在这里插入图片描述

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

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

相关文章

“国家高新”与“专精特新”企业的对比分析

近年来&#xff0c;企业经常听到“专精特新”和“高新技术”这两个热词。部分企业对于“专精特新”与“高新技术”之间的联系与区分却不够明确&#xff0c;其实二者之间既有重叠&#xff0c;又有模糊。“专精特新”和“高新技术”都是高技术、高核心竞争力的标志&#xff0c;都…

Excel提取数据

Excel提取数据 在使用Excel的过程中&#xff0c;我需要将带有评语的评分的文本内容提取出评分&#xff0c;如下所示 其中分数与文本之间用空格分隔&#xff0c;只有分数的评语会自动靠右对齐&#xff0c;我需要做的就是将B列的评语从中提取出分数放到C列中&#xff0c;以下为实…

【Linux第五课-进程上】PCB内部属性、标识符、进程状态、Linux下的进程状态、进程的优先级、Linux进程的调度与切换

目录 体系结构 -- 硬件上操作系统 -- 软件上进程PCB内部属性1、在linux里面看程序2、标识符获取程序的标识符父进程标识符 PPID查看进程的另一种方法通过系统调用创建进程 - fork杀掉一个进程for循环创建多个代码 3、进程状态进程排队 - 队列教程上关于进程状态表述运行阻塞&am…

【Android 14源码分析】Activity启动流程-2

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

PingCastle:一款针对活动目录AD的安全强化工具

关于PingCastle PingCastle是一款针对活动目录AD的安全强化工具&#xff0c;可以帮助广大研究人员提升活动目录的安全性&#xff0c;该工具甚至可以做到在 20% 的时间内实现 80% 的AD安全性。 Ping Castle 是一种旨在使用基于风险评估和成熟度框架的方法快速评估活动目录AD 安…

pywinauto,一款Win自动化利器!

1.安装 pywinauto是一个用于自动化Python模块&#xff0c;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;可以通过Pywinauto遍历窗口&#xff08;对话框&#xff09;和窗口里的控件&#xff0c;也可以控制鼠标和键盘输入&#xff0c;所以它能做的事情比之前介…

大数据实时数仓Hologres(一):Hologres 简单介绍

文章目录 Hologres 简单介绍 一、什么是实时数仓 Hologres 二、产品优势 1、专注实时场景 2、亚秒级交互式分析 3、统一数据服务出口 4、开放生态 5、MaxCompute查询加速 6、计算存储分离架构 三、应用场景 搭建实时数仓 四、产品架构 1、Shared Disk/Storage &am…

Appium独立测试自动化初始化脚本

1、查看环境初始化参数 确保appium已经开起来了&#xff0c;设置ip ,并点击启动 打开夜神模拟器&#xff0c;点击工具--设置 最下面的版本说明&#xff0c;双击进去 版本号这里再去单击。 直到进入到开发者模式。 可能我们不是开发者模式打开的状态&#xff0c;所以软件访问模…

我摊牌了!!程序员不卷了,AI大模型先转一步!

计算机行业小伙伴儿们的归宿到底在哪里啊&#xff1f; 互联网和程序员的风口已经过去了&#xff0c;作为一名大龄程序员&#xff0c;在继续卷和转型发展之间我选择了转行AI大模型。 4年更火的无非就是人工智能了&#xff0c;大家在招聘网站也可以看到名种各样的offer&#x…

基于Java+VUE+echarts大数据智能道路交通信息统计分析管理系统的设计与实现

大数据智能交通管理系统是一种基于Web的系统架构&#xff0c;通过浏览器/服务器&#xff08;B/S&#xff09;模式实现对城市交通数据的高效管理和智能化处理。该系统旨在通过集成各类交通数据&#xff0c;包括但不限于车辆信息、行驶记录、违章情况等&#xff0c;来提升城市管理…

天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端

今天给大家带来一款单机游戏的架设&#xff1a;天龙八部怀旧单机微改人面桃花。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xf…

画个心,写个花!Python Turtle库带你玩转创意绘图!

文章目录 前言一、Turtle 库基础介绍二、画布设置三、画笔属性设置1.画笔颜色设置2.画笔粗细与速度设置3.画笔形状设置 四、画笔移动函数五、画笔控制函数六、实战案例一&#xff1a;“花”字绘制七、实战案例二&#xff1a;心型图案绘制总结 前言 Python 的 turtle 库是一种简…

关于宝塔PHP getenv无法获取环境变量问题解决办法

今天有用ThinkPHP8接入阿里云OSS时&#xff0c;需要用的用到getenv()来读取环境变量&#xff0c;因为新版OSS SDK是用环境变更来设置AK的。 现象 正常执行PHP文件&#xff0c;可以取到环境变量&#xff1b;但是通过nginxphp-fpm调用脚本取到不到环境变量 原因 php-fpm为了防止…

[spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范 动态sql

文章目录 一. MyBatis XML配置文件1. 配置链接字符串和MyBatis2. 写持久层代码方法定义Interface方法实现xml测试 3. 增删改查增:删改查 二. 开发规范(mysql)三. 其他查询操作1. 多表查询2. #{} 和 ${}(面试题)使用区别 排序功能like查询 三. 数据库连接池四. 动态sql1. < i…

使用shc|gzexe加密shell脚本,并配置全局可用

前言&#xff1a;堡垒机上多厂家共用&#xff0c;导致脚本需要加密并设置过期时间 一、使用shc&#xff08;二进制&#xff09; 1、安装shc sudo yum install epel-release sudo yum -y install shc sudo yum -y instal epel-release && sudo yum -y install shc 2、…

图像增强论文精读笔记-Deep Retinex Decomposition for Low-Light Enhancement(Retinex-Net)

1. 论文基本信息 论文标题&#xff1a;Deep Retinex Decomposition for Low-Light Enhancement 作者&#xff1a;Chen Wei等 发表时间和期刊&#xff1a;2018&#xff1b;BMVC 论文链接&#xff1a;https://arxiv.org/abs/1808.04560 2. 研究背景和动机 低光照条件下拍摄的…

计算机毕业设计 基于 Hadoop平台的岗位推荐系统 SpringBoot+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

tauri开发软件中,使用tauri自带的api用浏览器打开指定的url链接

有能力的可以看官方文档&#xff1a;shell | Tauri Apps 就是使用这个api来打开指定的url链接&#xff0c;要在tauri.config.json中配置打开这个api&#xff1a; 然后在前端页面中导入使用&#xff1a; import { open } from tauri-apps/api/shell; // opens the given URL o…

ODA(Open Design Alliance)试用小记-ODA提供源码下载就完全可控了吗?

1.概述 ODA(Open Design Alliance)库架构如下&#xff1a; 产品体系如下&#xff1a; ODA的产品体系越来越壮大&#xff0c;包括主流BIM格式SDK、Viewer、Cloud、数据交换等&#xff0c;每个模块需要单独购买&#xff0c;并提供“源码服务”。 2.是否可控&#xff1f; 值得…

【rust】 基于rust编写wasm,实现markdown转换为html文本

文章目录 背景转换预览核心代码前置依赖rustup换源 cargo本地路径修改&#xff08;可选&#xff09;cargo换源中科大 wasm-pack安装 背景 尝试用rust编写一款markdown转html的插件&#xff0c;通过wasm给html使用&#xff0c;不得不说体积挺小&#xff0c;约200K&#xff0c; …