我刚刚完成了一套适用于Godot 4.7+的着色器包,一个我一直纠结的问题是是否采用单次渲染还是多次渲染。最终我决定所有7个着色器都采用单次渲染,我很好奇其他人是否也遇到过这种情况

我的理由是带宽。人们经常将GPU性能与算术运算联系起来,但我发现实际的瓶颈在于纹理读取。1080p下,你每次渲染2百万个像素。如果你有3个渲染通道,那么每秒60帧前景就需要6百万次读取。在Steam Deck或Intel UHD上,这个数字会迅速增加

每个着色器的最终设计如下:

Lo-Fi Retro、ASCII Cyberpunk、RGB量化:每个1次采样。其他所有着色器都是数学运算。基本上在任何硬件上都是免费的

Anime Cel-Shading和Blueprint Sketch:5次采样。四个邻居用于边缘检测,中间的采样。成本保持一致,没有什么可怕的。

Manga Halftone:大约10次采样。3x3Sobel全图像处理加上半调点数学。仍然是单次渲染。

Oil Painting (Kuwahara):这是一个我一直纠结的问题。4个象限的Kuwahara在半径4时大约有81次采样。我决定保持单次渲染,但它确实是最昂贵的。将brush_radius降低到2时,采样次数会降低到25次,实际上变化很难察觉,除非你在寻找它。

我无法确定的是,有没有一种艺术风格的效果,通过多次渲染可以实现更好的效果。光晕和DoF的分离是有道理的,因为你需要将模糊结果作为下一个阶段的输入。但是对于纯粹的艺术风格过滤器,我一直想知道:如果你可以在一个渲染通道内完成它,为什么不?

是否有其他人遇到过这样一种情况:多次渲染是适合的选择,特别是对于艺术风格过滤器?我不是在问关于延迟渲染或类似的东西,而是关于屏幕空间艺术风格过滤器。

背景信息:这些是最近刚刚发布的着色器包的一部分,链接在我的简历中,如果有人想浏览源代码。