Init
This commit is contained in:
44
07-Other/Unity/ComputeShader笔记.md
Normal file
44
07-Other/Unity/ComputeShader笔记.md
Normal file
@@ -0,0 +1,44 @@
|
||||
## Shader
|
||||
- RWStructuredBuffer:可读写,可用类型float1234、uint1234
|
||||
- StructuredBuffer:对应的只读BUffer
|
||||
|
||||
## C#脚本
|
||||
### 声明变量
|
||||
CS与Buffer
|
||||
```c#
|
||||
[SerializeField]
|
||||
ComputeShader computeShader = default;
|
||||
|
||||
ComputeBuffer positionBuffer;
|
||||
```
|
||||
|
||||
### 绑定CS中的变量并且执行
|
||||
声明Shader中变量id以用于绑定
|
||||
```c#
|
||||
static readonly int intpositionsId = Shader.PropertyToID("_Positions"),
|
||||
resolutionId= Shader.PropertyToID("_Resolution"),
|
||||
stepId= Shader.PropertyToID("_Step"),
|
||||
timeId= Shader.PropertyToID("_Time");
|
||||
```
|
||||
给变量绑定数值
|
||||
```c#
|
||||
computeShader.SetInt(resolutionId, resolution);
|
||||
computeShader.SetFloat(stepId, step);
|
||||
computeShader.SetFloat(timeId, Time.time);
|
||||
computeShader.SetBuffer(0, positionsId, positionBuffer);
|
||||
```
|
||||
执行
|
||||
```c#
|
||||
int groups = Mathf.CeilToInt(resolution / 8f);
|
||||
computeShader.Dispatch(0, groups, groups, 1);
|
||||
```
|
||||
|
||||
### 绘制GPU Instance命令
|
||||
```c#
|
||||
//需要传入边界盒以及绘制数量
|
||||
var bounds=new Bounds(Vector3.zero,Vector3.one*(2f+2f/resolution));
|
||||
Graphics.DrawMeshInstancedProcedural(mesh, 0, material,bounds,positionBuffer.count);
|
||||
```
|
||||
|
||||
### 多kernel
|
||||
CS可能拥有多个内核函数,此时computeShader的SetBuffer()与Dispatch(),可以通过第一个形参来设置kernel index。
|
Reference in New Issue
Block a user