- #pragma kernel CSMain
-
- RWTexture2D<float4> Result;
-
- [numthreads(8,8,1)]
- void CSMain (uint3 id : SV_DispatchThreadID)
- {
- Result[id.xy] = float4(id.x & id.y, (id.x & 15)/15.0, (id.y & 15)/15.0, 0.0);
- }
cpp运行
#pragma kernel CSMaincpp运行这指定了这个程序的入口函数(compute shader的main函数),一个compute shader能定义许多函数,你能从脚本中随意调用。
RWTexture2D<float4> Result;cpp运行
这声明了一个变量,它包含的数据是shader程序将要用到的。我们不需要用到网格mesh数据,你需要像这样明确的声明,你的compute shader需要写入读出什么数据。数据类型名前面的“RW”指定了shader可以进行读写操作。
[numthreads(8,8,1)]cpp运行这一行指定了compute shader创建的线程组的大小。GPU利用了大量的并行处理使得GPU创建的一些线程可以同时运行。线程组指定如何组织线衍生程们 spawned threads,在上面的代码中,我们指定我们想要每组线程组包含64个线程,可以使用像一个二维数组。
- public ComputeShader shader;
-
- void RunShader()
- {
- int kernelHandle = shader.FindKernel("CSMain");
-
- RenderTexture tex = new RenderTexture(256,256,24);
- tex.enableRandomWrite = true;
- tex.Create();
-
- shader.SetTexture(kernelHandle, "Result", tex);
- shader.Dispatch(kernelHandle, 256/8, 256/8, 1);
- }
cpp运行
- StructuctedBuffer<float> floatBuffer;
- RWStructuredBuffer<int> readWriteIntBuffer;
cpp运行数据类型也可以是结构体,在本文的第二个例子会讲到
- struct VecMatPair
- {
- public Vector3 point;
- public Matrix4x4 matrix;
- }
cpp运行
- #pragma kernel Multiply
-
- struct VecMatPair
- {
- float3 pos;
- float4x4 mat;
- };
-
- RWStructuredBuffer<VecMatPair> dataBuffer;
-
- [numthreads(16,1,1)]
- void Multiply (uint3 id : SV_DispatchThreadID)
- {
- dataBuffer[id.x].pos = mul(dataBuffer[id.x].mat,
- float4(dataBuffer[id.x].pos, 1.0));
- }
cpp运行
- public ComputeShader shader;
-
- void RunShader()
- {
- VecMatPair[] data = new VecMatPair[5];
- //INITIALIZE DATA HERE
-
- ComputeBuffer buffer = new ComputeBuffer(data.Length, 76);
- int kernel = shader.FindKernel("Multiply");
- shader.SetBuffer(kernel, "dataBuffer", buffer);
- shader.Dispatch(kernel, data.Length, 1,1);
- }
cpp运行
- public ComputeShader shader;
-
- void RunShader()
- {
- VecMatPair[] data = new VecMatPair[5];
- VecMatPair[] output = new VecMatPair[5];
-
- //INITIALIZE DATA HERE
-
- ComputeBuffer buffer = new ComputeBuffer(data.Length, 76);
- int kernel = shader.FindKernel("Multiply");
- shader.SetBuffer(kernel, "dataBuffer", buffer);
- shader.Dispatch(kernel, data.Length, 1,1);
- buffer.GetData(output);
- }
cpp运行
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...