Tagged: 

  • This topic has 19 replies, 7 voices, and was last updated 2 weeks ago by _HUA.
Viewing 5 reply threads
  • Author
    Posts
    • #11365 Score: 0
      Zhihao Liang
      Participant
      2 pts

      写好color_grading.frag后不改变lut文件得到的场景颜色是和原来差不多的吗,想做个参考。

      个人实现了之后变成了冷色调,但是看了lut贴图后感觉结果不太对,色调不应该发生太大改变,不知道是不是uv坐标系没有处理好,因此想看看大家的看法。

    • #11366 Score: 0
      Zhihao Liang
      Participant
      2 pts

      原来作业默认加载的就是color_grading_lut_01.png,现在看来加了lut之后变成冷色调应该没有问题。

      我把lut文件改成color_grading_LUT.png之后呈现暖色调,不知道大家的情况是怎样呢。

    • #11403 Score: 0
      LudoArt
      Participant

      我这也是变化很大的样子,总感觉最后结果应该会是一个变化不会特别大,比较好看的一个颜色,总感觉自己哪里写错了

      • #11407 Score: 0
        Zhihao Liang
        Participant
        2 pts

        我导入color_grading_lut_01.png是冷色调的。导入color_grading_LUT.jpg则会变成偏红的暖色调,不知道你是怎样个情况呢。
        我之前在uv坐标系没有处理对的情况是会出现X光那种很诡异的色调的,处理好uv坐标系应该是没有问题的。

        附件是我实现color_grading后分别导入color_grading_lut_01.png和color_grading_LUT.jpg的结果,一起讨论呀。

        • This reply was modified 3 weeks, 5 days ago by Zhihao Liang.
        Attachments:
        You must be logged in to view attached files.
        • #11411 Score: 0
          LudoArt
          Participant

          是这样的,我也一样,但我这还遇到一个情况,总感觉SRGB和Linear没处理好,有一点点色差

          • This reply was modified 3 weeks, 5 days ago by LudoArt.
          Attachments:
          You must be logged in to view attached files.
          • #11415 Score: 0
            Zhihao Liang
            Participant
            2 pts

            你是不是三线性插值没有实现好呢,我看到云层确实有失真的地方,不知是你那边的问题还是论坛图片压缩的问题。
            我附件放了我实现三线性插值的对比图,我没实现三线性插值的时候失真确实是很严重的,实现了之后效果好了许多。

            Attachments:
            You must be logged in to view attached files.
            • #11418 Score: 0
              LudoArt
              Participant

              我看了一下,确实有个地方没写对,但还是有点发黄的感觉
              从tone_mapping传过来的in_color是SRGB空间的,LUT采样出来的color是Linear空间下的,不知道我有没有理解错QAQ

              • This reply was modified 3 weeks, 5 days ago by LudoArt.
              • #11420 Score: 0
                Zhihao Liang
                Participant
                2 pts

                原来这个要转的吗_(:з」∠)_
                我是直接插值的。

              • #11421 Score: 0
                Zhihao Liang
                Participant
                2 pts

                我想问一下哦,你知道Pilot是怎么调用glsl编译好的shader嘛,应该是生成在engine/shader/generated/cpp和spv那两个文件夹吧。

                c++里面是怎么调用它的,而且是有顺序的吧,比如color_grading是最后的pass。
                但我看了CMake和全局关键字搜索之后还是没有头绪。

                请问你知道c++里面调用shader和管理各个pass的顺序具体是在哪里实现的吗?

                • This reply was modified 3 weeks, 5 days ago by Zhihao Liang.
                • #11423 Score: 0
                  LudoArt
                  Participant

                  可以找找color_grading.cpp里那几个函数的调用位置,比如PColorGradingPass::draw()就在PMainCameraPass::draw()里调用的
                  tone_mapping_pass.draw();
                  m_p_vulkan_context->_vkCmdNextSubpass(m_command_info._current_command_buffer, VK_SUBPASS_CONTENTS_INLINE);
                  color_grading_pass.draw();
                  应该就是在这里调用绘制的

                  • #11427 Score: 0
                    Zhihao Liang
                    Participant
                    2 pts

                    好的,我又看了一下,看样子Pilot是在编译glsl文件的时候转成了字节码段并存在了对应的头文件里。

                    例如engine/shader/glsl/color_grading.frag就转换成了engine/shader/generated/cpp/color_grading_frag.h中的COLOR_GRADING_FRAG。
                    然后在engine/source/runtime/function/render/source/vulkan_manager/passes/color_grading.cpp里面根据COLOR_GRADING_FRAG创造shader module实现了。
                    实现好的passes再添加到engine/source/runtime/function/render/source/vulkan_manager的PVulkanManager中的成员和绘制函数中。

                    所以我们如果要做作业里的拓展项,应该也是实现相应的glsl,添加对应的passes,然后加到vulkan_manager里就好了。

                    但如果这样的话,glsl编译出来的spv就没用了是吗,因为我看往上别的vulkan教程,他们调用glsl编译好的shader都是调用读取glsl编译出来的spv文件,而Pilot里面好像没有读取spv的实现和操作,是自己生成的字节码,然后存到相应生成的头文件中。

    • #11404 Score: 0
      Hiccup
      Participant

      我想问问大家都是怎么debug的呀,我修改了color_grading.frag就报错了。每次重新生成需要重新build一次小引擎的代码吗?谢谢各位大佬了!!!

      • #11414 Score: 1
        Zhihao Liang
        Participant
        2 pts

        我是在windows平台的,用的Visual Studio作为IDE。确实是每次修改都需要重新生成。
        但小引擎的解耦做得不错,你只修改color_grading.frag所涉及的东西不多,所以就算每次编译也不会花太多的时间,只会编译你改动涉及到的地方,大部分代码是不会重新编译的,所以速度还算是能够接受的。

        至于debug的话,如果是你改动后编译不过,那就认真看一下编译报错的地方,基本都是语法错误。至于runtime error也没有很好的办法,只能说打断点一点一点查了。

        This post has received 1 vote up.
      • #11453 Score: 0
        kitonc
        Participant

        修改完shader代码,可以单独运行工程里面的PilotShaderCompile单独编译shader代码,不用构建整个工程。shader没问题后在生成整个工程即可

        • This reply was modified 3 weeks, 2 days ago by kitonc.
    • #11504 Score: 0
      billwillman
      Participant

      插值可以考虑,R,G,B都插值,还是只插B。
      这是我的实现,主要是看性能需求。默认没开启R,G插值。有IF开关
      https://zhuanlan.zhihu.com/p/508550776

    • #11512 Score: 2
      喂鱼
      Participant
      2 pts

      才发现vs这么好用!一开始以为说修改shader都需要执行build_windows.bat,结果只需要PilotShaderCompile右键重新生成就可以,也会爆出shader哪里出错~

      This post has received 2 votes up.
      Attachments:
      You must be logged in to view attached files.
      • #11518 Score: 0
        Zhihao Liang
        Participant
        2 pts

        你好,可以具体说一下PilotShaderCompile怎么重新生成吗,我看只有在build文件夹里面,但是visual studio隐藏了build文件夹,就算打开也没有重新生产的选项。

        这是我的启动项列表。

        Attachments:
        You must be logged in to view attached files.
        • #11527 Score: 0
          _HUA
          Participant

          在左侧(或右侧)的解决方案管理器中,右键点击 PilotShaderCompile -> 生成

          • This reply was modified 2 weeks ago by _HUA.
Viewing 5 reply threads
  • You must be logged in to reply to this topic.