Home Forums GAMES104 现代游戏引擎:从入门到实践 关于小引擎中添加渲染pass的问题

Viewing 3 reply threads
  • Author
    Posts
    • #11477 Score: 0
      orange
      Participant

      大致看了一下,现在是把除了阴影以外的所有pass都当成了subpass挂在了main_camera_pass里了,包括tonemapping/ui等。

      以我的理解vulkan中如果一个pass依赖上一个pass的输出并且需要在不同位置采样的话是不能在同一个pass中做的?(input_attachment只能获取当前像素点的值)

      上节课里面所说的一些效果比如说bloom/fxaa都是依赖多重采样的,所以我理解这写pass没办法装进main_camera_pass的subpass里?如果是这样的话问题就是bloom需要发生在tonemapping之前,就意味着需要把所有后处理+ui渲染从camera pass里拆出来重新弄一个renderpass,这样是不是太麻烦了。。。感觉有点劝退

      我对vulkan的经验也仅存在于把vulkan tutorial看了一遍自己简单的写了写,如果有啥不对的地方希望大家能指出来,感谢大家了!

    • #11494 Score: 0
      kyrie_wx
      Participant
      1 pt

      我也发现了,所以要么就是如你所说的那样改,要么就只能做一些单像素的后处理,感觉是小引擎最大的bug之一,不太合理。

    • #11507 Score: 0
      Huan Di
      Participant

      我的作业新增的pass就是FXAA,现在是这么解决的:

      1. PAntiAliasingPass::setupDescriptorSetLayout 新增一个新的sampler
      2. PAntiAliasingPass::updateAfterFramebufferRecreate把frame buffer的图片给它
      3. 为了支持上一条,PMainCameraPass::setupAttachments需要去掉VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,加上VK_IMAGE_USAGE_SAMPLED_BIT,以避免一系列vulkan validation error

      关于3:根据文档来看去掉VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT不影响性能,但可能影响debug。而加上VK_IMAGE_USAGE_SAMPLED_BIT有什么影响还没仔细调查,猜测可能对性能有影响。

      比较理想的解决方法可能是增加1个(或2个?odd even)buffer专门来存这个sampler的图片,那需要改动更多的代码,就先没在作业中实现了。而且这样每个pass又多了新的buffer,对性能可能也是有影响的。

      P.S.对Vulkan完全陌生,c++也是现学的,仅供参考。

      • This reply was modified 1 month, 2 weeks ago by Huan Di.
    • #11511 Score: 0
      Huan Di
      Participant

      update:可以增加额外buffer,需要使用时再切换不同flags的buffer。如设置pipline:在coding grading pass输出到新的sampler buffer,buffer用于在anti aliasing pass中读取。

      https://github.com/huandzh/Pilot/commit/2ce2aabfe285735595e0eb2c156a61d6e22a9d29

      • #11538 Score: 1
        kyrie_wx
        Participant
        1 pt

        学到了,感谢大佬!!

        This post has received 1 vote up.
        • #11544 Score: 0
          Huan Di
          Participant

          客气了,很高兴能有帮助。

          我也是照猫画虎,想要了解比较深入应该要看vulkan的文档。

Viewing 3 reply threads
  • You must be logged in to reply to this topic.