## 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。