Notifications
Article
英伟达AZDO示例在Unity上的实现
Updated 10 months ago
180
0
ZHTRF - AZDO框架
绘制大量个体稍有区别的动画群体,整个绘制需要提供4个GPU缓存,而ZHTRF会为你做这一切:
  • 共享网格缓存。ZHTRF会将你可能要大量绘制的所有模型结合成一个,放在GPU的缓存里,它不需要CPU访问。
  • 命令缓存。ZHTRF会将绘制命令参数化,并存入一个GPU的缓存中,同样它也不需要CPU访问。
  • 实例数据缓存。这个缓存需要CPU访问,用于更新个体的动画数据等。个体差异数据可以存在这个缓存中。
  • 材质属性块(群体数据缓存)。这个缓存需要CPU访问,与实例数据缓存相反,群体共用的数据可以存放在此。
技术上,以上技术只实现了AZDO的一半,既然称为“接近零驱动程序开销”,就需要体现无绑定和无需频繁映射缓存的特性,更进一步地,使用多线程更新动画以及使用三重缓存解决CPU和GPU之间的同步问题以提高性能。由于这些技术涉及底层渲染API,而Unity并不全都支持,如果使用原生插件支持这些特性,会导致无法利用Unity的跨平台特性,而且如此一来,用户可能只能使用原生shader而不能使用Unity shader。考虑到Unity插件是给熟悉Unity的人使用的,ZHTRF的解决方案是只使用Unity API,尽可能提高性能,但当Unity支持更多相关底层特性时,ZHTRF会及时地更新完善自己。
ZHTRF框架可以用于任何动画群体的渲染,作为一个例子,ZHTRF附带了一个演示鱼群的场景和模拟鱼群动画的脚本,它来自英伟达免费授权的代码。
ZHTRF目前处于后期优化与测试阶段,不久将在资源商店上发布,敬请期待。
参考:https://developer.nvidia.com/gameworks-vulkan-and-opengl-samples

Zhou Heng
研发工程师 - Programmer
4
Comments