Home › Forums › GAMES104 现代游戏引擎:从入门到实践 › 关于作业2的讨论
Tagged: question
- This topic has 19 replies, 7 voices, and was last updated 2 years, 6 months ago by _HUA.
-
AuthorPosts
-
-
写好color_grading.frag后不改变lut文件得到的场景颜色是和原来差不多的吗,想做个参考。
个人实现了之后变成了冷色调,但是看了lut贴图后感觉结果不太对,色调不应该发生太大改变,不知道是不是uv坐标系没有处理好,因此想看看大家的看法。
-
原来作业默认加载的就是color_grading_lut_01.png,现在看来加了lut之后变成冷色调应该没有问题。
我把lut文件改成color_grading_LUT.png之后呈现暖色调,不知道大家的情况是怎样呢。
-
LudoArtParticipant
我这也是变化很大的样子,总感觉最后结果应该会是一个变化不会特别大,比较好看的一个颜色,总感觉自己哪里写错了
-
我导入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 2 years, 6 months ago by Zhihao Liang.
Attachments:
You must be logged in to view attached files.-
LudoArtParticipant
-
你是不是三线性插值没有实现好呢,我看到云层确实有失真的地方,不知是你那边的问题还是论坛图片压缩的问题。
我附件放了我实现三线性插值的对比图,我没实现三线性插值的时候失真确实是很严重的,实现了之后效果好了许多。Attachments:
You must be logged in to view attached files.-
LudoArtParticipant
我看了一下,确实有个地方没写对,但还是有点发黄的感觉
从tone_mapping传过来的in_color是SRGB空间的,LUT采样出来的color是Linear空间下的,不知道我有没有理解错QAQ- This reply was modified 2 years, 6 months ago by LudoArt.
-
原来这个要转的吗_(:з」∠)_
我是直接插值的。 -
我想问一下哦,你知道Pilot是怎么调用glsl编译好的shader嘛,应该是生成在engine/shader/generated/cpp和spv那两个文件夹吧。
c++里面是怎么调用它的,而且是有顺序的吧,比如color_grading是最后的pass。
但我看了CMake和全局关键字搜索之后还是没有头绪。请问你知道c++里面调用shader和管理各个pass的顺序具体是在哪里实现的吗?
- This reply was modified 2 years, 6 months ago by Zhihao Liang.
-
LudoArtParticipant
可以找找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();
应该就是在这里调用绘制的-
好的,我又看了一下,看样子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的实现和操作,是自己生成的字节码,然后存到相应生成的头文件中。
-
-
-
-
-
HiccupParticipant
我想问问大家都是怎么debug的呀,我修改了color_grading.frag就报错了。每次重新生成需要重新build一次小引擎的代码吗?谢谢各位大佬了!!!
-
我是在windows平台的,用的Visual Studio作为IDE。确实是每次修改都需要重新生成。
但小引擎的解耦做得不错,你只修改color_grading.frag所涉及的东西不多,所以就算每次编译也不会花太多的时间,只会编译你改动涉及到的地方,大部分代码是不会重新编译的,所以速度还算是能够接受的。至于debug的话,如果是你改动后编译不过,那就认真看一下编译报错的地方,基本都是语法错误。至于runtime error也没有很好的办法,只能说打断点一点一点查了。
This post has received 1 vote up.-
HiccupParticipant
谢谢大佬!!!
-
-
kitoncParticipant
修改完shader代码,可以单独运行工程里面的PilotShaderCompile单独编译shader代码,不用构建整个工程。shader没问题后在生成整个工程即可
- This reply was modified 2 years, 6 months ago by kitonc.
-
谢谢,学到了
-
-
billwillmanParticipant
插值可以考虑,R,G,B都插值,还是只插B。
这是我的实现,主要是看性能需求。默认没开启R,G插值。有IF开关
https://zhuanlan.zhihu.com/p/508550776 -
才发现vs这么好用!一开始以为说修改shader都需要执行build_windows.bat,结果只需要PilotShaderCompile右键重新生成就可以,也会爆出shader哪里出错~
This post has received 2 votes up.Attachments:
You must be logged in to view attached files.-
你好,可以具体说一下PilotShaderCompile怎么重新生成吗,我看只有在build文件夹里面,但是visual studio隐藏了build文件夹,就算打开也没有重新生产的选项。
这是我的启动项列表。
Attachments:
You must be logged in to view attached files.
-
-
-
AuthorPosts
- You must be logged in to reply to this topic.