GPU Driven ,它更进一步地将渲染过程的控制权交给GPU。在GPU Driven的模式下,GPU不仅负责绘制图形,还负责决定何时以及如何绘制这些图形。这种技术可以使图形渲染更加高效,因为它减少了CPU的负担,允许GPU更好地利用其并行处理能力。
1.常用渲染的问题
- 由于cpu的核心数量有限,图元剔除效率相当低下,即便传统GPU提供硬件遮挡剔除功能,由于需要将剔除的结果回传给cpu计算drawcall数量,回传的效率非常慢导致效率低下;
- drawcall数量太多,导致效率低下;
2.GPU Driven解决的问题
- 剔除--不只是offload了cpu的工作,进一步在gpu上做更aggressive的cull,配合IndirectDraw技术不用将剔除结果回传给cpu。
- 提交--通过IndirectDraw技术,理论上可以一个drawcall提交所有的图元,根据实际情况可以折中了处理。
3.其他技术
IndirectDraw ,它允许GPU根据某些参数自行决定绘制多少个实例,而无需CPU的参与。这种方法可以大大减少CPU和GPU之间的通信,从而提高渲染效率。
IndirectDraw 不同于其他的Draw,不需要指定Primitive Count ,Instance Count 来在Cpp中明确指定这次绘制GPU要绘制多少Primitive,多少Instance,而是通过传入一个 IndirectArgsBuffer 来决定这次绘制的PrimitiveCount和InstanceCount , 而 IndirectArgsBuffer 通常都是 ComputeShader 进行填充,IndirectArgsBuffer 则会记录PrimitiveCount和InstanceCount。