请教:粒子系统_freeRetiredParticles函数中这个age比较是什么意思,为什么frameCount和sartLifeTime比较?不明白 #138
-
我这几天尝试阅读粒子系统的代码,有如题疑惑,希望能得到解答 private _freeRetiredParticles(): void {
} 另外,_retireActiveParticles()中把frameCount存到time中感觉也意义不明? private _retireActiveParticles(): void {
} |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
frameCount就是引擎启动后的截止时间
这里是在获取粒子初始化时间数据的内存偏移地址。
这里就是总时间减去粒子初始化时间得到粒子当前存活的时间。 还有问题可以重点标注下对哪行代码有疑问。 |
Beta Was this translation helpful? Give feedback.
-
这里其实涉及到 GPU 显存的读写效率问题,你可以去查阅一个 OpenGL 或者 DX 的 Buffer 读写 API 叫 MapBufferRange。是一个更底层的 Buffer 读取法,会忽略 Buffer 是否真的被渲染完成,无需等待。 因为屏幕缓冲的 Swap Buffer 机制,可能涉及双缓冲和三缓冲交换,所以渲染是有延迟的。 MapBufferRange 提供了精确的控制,并且可能不会在驱动层无脑克隆显存,但这就需要上层良好的显存管理,age 的作用就是如此,表示距离粒子死亡后的多少帧。但是因为 WebGL 并不支持 MapBufferRange API,这是 WebGL 非常大的一个缺,这里的 age 就直接和 0 比较,等于关闭了这个功能,但架构上预留了该机制,支持 WebGPU 也许可以直接套用架构低成本实现。 |
Beta Was this translation helpful? Give feedback.
这里其实涉及到 GPU 显存的读写效率问题,你可以去查阅一个 OpenGL 或者 DX 的 Buffer 读写 API 叫 MapBufferRange。是一个更底层的 Buffer 读取法,会忽略 Buffer 是否真的被渲染完成,无需等待。 因为屏幕缓冲的 Swap Buffer 机制,可能涉及双缓冲和三缓冲交换,所以渲染是有延迟的。 MapBufferRange 提供了精确的控制,并且可能不会在驱动层无脑克隆显存,但这就需要上层良好的显存管理,age 的作用就是如此,表示距离粒子死亡后的多少帧。但是因为 WebGL 并不支持 MapBufferRange API,这是 WebGL 非常大的一个缺,这里的 age 就直接和 0 比较,等于关闭了这个功能,但架构上预留了该机制,支持 WebGPU 也许可以直接套用架构低成本实现。