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

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. 运行,效果图如下
    在这里插入图片描述

相关文章:

  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第五模块·生态征服篇 —— 第十八章 JVM调优:内存管理的权力游戏
  • 【25软考网工】第四章(4)无线局域网WLAN安全技术、无线个人网WPAN
  • 泰迪杯特等奖案例学习资料:基于多模态数据融合与边缘计算的工业设备健康监测与预测性维护系统
  • 搜索时如何排除一些垃圾站点,比如csdn.net
  • YPay标准版系统-五彩绚丽首页主题V1.0.0
  • pip使用本地缓存
  • 人格伤疤测试:发现内心深处的情感创伤
  • Best Video下载器——全能高清无水印视频下载工具
  • C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比
  • 【数学】角谷猜想
  • 【NumPy完全指南】从基础操作到高性能计算实战
  • 【Hive入门】Hive性能优化:执行计划分析EXPLAIN命令的使用
  • 推荐一款靠谱的声学成像仪
  • 从边缘到云端:边缘计算与云计算的协同未来
  • PDM协议---音频数据接收
  • 分治算法求序列中第K小数
  • Tomcat DOS漏洞复现(CVE-2025-31650)
  • 使用PyTorch进行热狗图像分类模型微调
  • C语言与Unix的传奇起源
  • k8s术语之Deployment
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款
  • 马上评丨上热搜的协和“4+4”模式,如何面对舆论审视
  • 如何反击右翼思潮、弥合社会分裂:加拿大大选镜鉴
  • 新质观察|重塑低空经济的系统安全观
  • 日中友好议员联盟代表团访问中国人民对外友好协会
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比