ComputeShader
実装例
sample.compute
// Each #kernel tells which function to compile; you can have many kernels
#pragma kernel CSMain
// Create a RenderTexture with enableRandomWrite flag and set it
// with cs.SetTexture
RWTexture2D<float4> Result;
Texture2D<float4> Src;
float Radius;
[numthreads(8, 8, 1)]
void CSMain(uint3 id : SV_DispatchThreadID)
{
float4 col = Src[id.xy];
Result[id.xy] = (Radius > 40) ? col.rgba : ((Radius > 30) ? col.bgra : (Radius > 20) ? col.grba : (Radius > 10) ?
col.brga : col.rbga);
//Result[id.xy] = col.grba;
//Result[id.xy] = col.rbga;
//Result[id.xy] = float4(id.x & id.y, (id.x & 15) / 15.0, (id.y & 15) / 15.0, 0.0);
}
sample.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ComputeImage : MonoBehaviour {
private const string K_MAIN = "CSMain";
[SerializeField]
UnityEngine.UI.RawImage image;
[SerializeField]
ComputeShader computeImage;
[Range(0f, 50f)]
public float Radius = 0.0f;
private RenderTexture m_rTexture;
private int m_kernel;
private void Awake() {
m_kernel = computeImage.FindKernel(K_MAIN);
}
private void OnEnable() {
// init rtexture
m_rTexture = new RenderTexture(Camera.main.pixelWidth, Camera.main.pixelHeight, 0);
m_rTexture.enableRandomWrite = true;
m_rTexture.Create();
image.texture = m_rTexture;
// set params
computeImage.SetTexture(m_kernel, "Result", m_rTexture);
}
private void OnDisable() {
m_rTexture.Release();
}
private void OnRenderImage(RenderTexture source, RenderTexture destination) {
// update params
computeImage.SetTexture(m_kernel, "Result", m_rTexture);
computeImage.SetTexture(m_kernel, "Src", source);
computeImage.SetFloat("Radius", Radius);
// run
computeImage.GetKernelThreadGroupSizes(m_kernel, out uint x, out uint y, out uint z);
computeImage.Dispatch(m_kernel, (int)(Camera.main.pixelWidth), (int)(Camera.main.pixelHeight), 1);
Graphics.Blit(m_rTexture, destination);
}
}
Extensions
- HLSL Tools for Visual Studio - Visual Studio Marketplace Visual Studio拡張機能
Reference
最終更新日:
August 14, 2023
作成日: August 14, 2023
作成日: August 14, 2023