首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用抽签叫结来做果肉剔除?

如何用抽签叫结来做果肉剔除?
EN

Computer Graphics用户
提问于 2022-10-07 16:01:22
回答 1查看 160关注 0票数 1

如果我对事物的理解是正确的(如果我错了,请纠正我):

  • 所有现代图形API (vulkan,dx12,metal,webgpu)都提供了捆绑和重放绘图调用的方法。该捆绑包包括所有捆绑绘制调用的哪个顶点+索引,因此帧到帧,您不会更改在包中绘制的三角形。这节省了大量的CPU工作。
  • 对于截尾/遮挡剔除,每一帧,您通常会测试每个对象与视图金字塔,并跳过对对象以外的对象的抽签调用。

这些应该如何一起工作?捆绑之后,你就失去了决定画哪组三角形的细粒能力,那么如何实现果粒剔除呢?

我能想到的唯一选择是有许多捆绑包,最好是位于同一位置的对象,并在包级别上为整个包和果包保持一定的包围量。

但似乎很难维持一组同一地点的物体。束是否锚定在一个空间区域,物体是否在该束中进出?这似乎会导致大量的重组。

人们是如何解决这一问题的,还是我误解了问题的哪一部分?

编辑,更多的上下文:我正在使用WebGPU构建我的第一个呈现器,它将此称为“捆绑”0,并且由于它位于{DX12、DX12、Vulkan}之上,我假设所有这些API都可以实现这一点。我的理解是,捆绑是webgpu在webgl上取得的重大业绩之一。(注意:这个网站上似乎还没有webgpu标签。)

0

1 (仅含Chrome;参见"bundle“选项)

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2022-10-07 18:37:54

如果您所说的包是指次要命令缓冲区,我认为答案是人们通常不使用它们,或者至少在您的意思中不使用。它们可能用于并行执行跨线程的命令记录,但不用于减少与绘制调用相关的开销,因为正如您所提到的,在帧中绘制的一组内容会不断地变化,这是由于结果/遮挡和LOD切换,以及渲染世界中可能发生的任何移动对象或其他更改。

还有其他解决抽签呼叫开销的方法,包括:

  • 将不同对象的顶点和索引缓冲区拉到更大的缓冲区中,这样就不必经常在缓冲区之间切换。您可以发出带有起始顶点偏移量和索引偏移量参数的绘图调用,以便从较大的缓冲区中绘制顶点/三角形的子集。
  • 对于常量缓冲区、无绑定纹理等,也可以做类似的事情。通常不是单个的绘制调用造成CPU开销,而是它们之间的状态变化。
  • 使用实例和/或间接绘制(ExecuteIndirect、vkCmdDrawIndirect等)使用一个API级命令执行大量绘制调用。
  • 移动剔除和LOD选择到GPU (“GPU驱动的渲染”),利用GPU计算从CPU卸载这些任务。
票数 2
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/13021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档