使用AsyncGPUReadback读取AssetBundle网格报错:GfxBufferID无效
解决AsyncGPUReadback读取AssetBundle Mesh时的"GfxBufferID is invalid"错误
问题原因
从AssetBundle加载的Mesh默认会被Unity优化为GPU-only资源——为了减小包体体积和提升加载速度,Unity会剥离Mesh的CPU端原始数据,仅保留GPU显存中的数据。此时直接调用Mesh.GetVertexBuffer()/GetIndexBuffer()获取的GraphicsBuffer没有有效的CPU访问权限,导致AsyncGPUReadback报错,同步的GetData()也会返回空数据。
AsyncGPUReadback本身支持AssetBundle加载的资源,问题出在Mesh的CPU数据可用性上。
解决方案
方案1:加载后复制Mesh到可读写实例
通过创建新的可读写Mesh,复制原Mesh的所有顶点/索引数据,新Mesh会自动保留CPU端缓存,此时即可正常进行GPU读回操作:
public static void Run(Mesh sourceMesh, System.Action<Mesh> callback) { // 创建可读写的Mesh副本,复制原Mesh的所有必要数据 Mesh readableMesh = new Mesh(); readableMesh.name = sourceMesh.name; readableMesh.indexFormat = sourceMesh.indexFormat; // 复制顶点相关数据(根据你的需求添加其他通道:tangents、colors等) readableMesh.vertices = sourceMesh.vertices; readableMesh.normals = sourceMesh.normals; readableMesh.uv = sourceMesh.uv; readableMesh.triangles = sourceMesh.triangles; // 从可读写Mesh获取有效Buffer GraphicsBuffer sourceDataBuffer = readableMesh.GetVertexBuffer(0); GraphicsBuffer sourceIndexBuffer = readableMesh.GetIndexBuffer(); var vertexCount = sourceDataBuffer.count; var indexCount = sourceIndexBuffer.count; // 计算字节数:stride本身就是每个元素的字节数,无需额外转换 byte[] sourceData = new byte[vertexCount * sourceDataBuffer.stride]; byte[] sourceIndex = new byte[indexCount * sourceIndexBuffer.stride]; UnityEngine.Rendering.AsyncGPUReadback.Request(sourceDataBuffer, result => { if (result.hasError) { Debug.LogError("GPU读回操作失败"); callback?.Invoke(null); return; } // 将GPU数据读取到CPU数组 result.GetData(sourceData); // 在这里处理读取到的数据... callback?.Invoke(readableMesh); }); // 同理处理索引Buffer的读回... }
方案2:打包AssetBundle时保留Mesh的CPU数据
如果允许增加AssetBundle体积,可以在打包前修改Mesh的导入设置:
- 在Project窗口选中目标Mesh
- 在Inspector面板的Model导入设置中,勾选Read/Write Enabled
- 重新打包AssetBundle
这样加载后的Mesh会保留CPU端原始数据,无需复制即可直接调用AsyncGPUReadback或GetData()。
额外注意点
- 原代码中计算字节数的
sourceDataBuffer.stride / sizeof(byte)是多余的,因为stride本身就是以字节为单位的每个顶点数据长度,直接用vertexCount * stride即可。 - 进行AsyncGPUReadback时务必检查
result.hasError,及时处理读回失败的情况。
内容的提问来源于stack exchange,提问作者Nathalia Soragge
相关产品推荐
相关产品推荐

