当前位置: 首页 > ai >正文

ComputeShader绘制全屏纯色纹理

参考

Getting Started With Compute Shaders In Unity

环境

Win10
Unity20194.40

全屏纯色纹理示例

使用ComputerShader逐个像素设置颜色

  1. ComputeShader脚本
    设置纹理颜色
#pragma kernel CSMainRWTexture2D<float4> Result;//纹理
half4 solidColor;//颜色[numthreads(8,8,1)]
void CSMain (uint3 id : SV_DispatchThreadID)
{Result[id.xy] = solidColor;//设置颜色 id.xy对应屏幕上的像素点
}
  1. UseSolidComputeShader脚本
    调用ComputeShader,绘制纯色纹理
using UnityEngine;
public class UseSolidComputeShader : MonoBehaviour
{[SerializeField] ComputeShader computeShader;RenderTexture renderTexture;int functionId;int groupsX;int groupsY;public RenderTexture Texture => renderTexture;public void Init(int width, int height){renderTexture = new RenderTexture(width, height, 24, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default);renderTexture.enableRandomWrite = true;renderTexture.Create();functionId = computeShader.FindKernel("CSMain");groupsX = Mathf.CeilToInt(renderTexture.width / 8f);//向上取整,避免小于纹理的宽度groupsY = Mathf.CeilToInt(renderTexture.height / 8f);computeShader.SetTexture(functionId, "Result", renderTexture);}public void Draw(Color color){computeShader.SetVector("solidColor", color);computeShader.Dispatch(functionId, groupsX, groupsY, 1);}
}
  1. TestSolidColor脚本
    按下D键,绘制纯色纹理,显示在Rawimage上
using UnityEngine;
using UnityEngine.Profiling;
using UnityEngine.UI;
public class TestSolidColor : MonoBehaviour
{[SerializeField] UseSolidComputeShader useSolidComputeShader;[SerializeField] RawImage rawImage;private void Awake(){useSolidComputeShader.Init(Screen.width, Screen.height);rawImage.texture = useSolidComputeShader.Texture;}private void Update(){if (Input.GetKeyDown(KeyCode.D)){Profiler.BeginSample("Random Solid Color");useSolidComputeShader.Draw(Random.ColorHSV());Profiler.EndSample();}}
}
  1. 场景层级
    在这里插入图片描述
    Draw对象,添加TestSolidColor脚本,UseSolidComputeShader,设置引用。
    RawImage为全屏大小
  2. 运行,效果图如下
    在这里插入图片描述
http://www.xdnf.cn/news/3141.html

相关文章:

  • C++入门小馆: 模板
  • AI HR新范式:易路iBuilder如何通过“技术隐身,价值凸显”,成为HR身份转型的好帮手
  • 分享:VTK版本的选择 - WPF空域问题
  • 手动创建一份konga对应helm的chart项目
  • TCP和UDP传输层协议
  • 【论文速读】《Scaling Scaling Laws with Board Games》
  • 后端接口请求http改为https
  • ReentrantReadWriteLock的源码详细剖析
  • Gin 集成 prometheus 客户端实现注册和暴露指标
  • 基于策略模式实现灵活可扩展的短信服务架构
  • 基于vue框架的电影院网上售票系统49iu6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 综合案例建模
  • C++日更八股--day2
  • 婴幼儿急救实训室优化空间布局科学路径5.7
  • 【自然语言处理与大模型】如何获取特定领域的微调数据集?
  • jmeter读取CSV文件中文乱码的解决方案
  • 单片机不同通信方式的适用场景
  • requestAnimationFrame与requestIdleCallback的深度解析:从执行时机到应用场景
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(12): ておき ます
  • mysql 配置文件中的[client]、[mysqld]、[mysqldump]和[mysql]区块的作用区别
  • 【Python学习路线】零基础到项目实战系统
  • 文件备份服务器,备份文件内容到服务器有哪些方法?
  • element-plus + splitpanes 实现左右拖动控制宽度
  • STM32F10X OLED屏幕点亮
  • 从Ping到iperf3:深度实战无线网络压测与优化指南
  • C语言之操作符
  • 基本算法之龟速乘
  • 最新DeepSeek-Prover-V2-671B模型 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
  • 在原生代码(非webpack)里使用iview的注意事项
  • shell---expect