找回密码
 立即注册
查看: 302|回复: 1

UE5渲染编程

[复制链接]
发表于 2023-2-23 22:16 | 显示全部楼层 |阅读模式
这些“实际操作”的笔记可以帮你更清楚的捋代码,头秃
1.天光计算

Engine\Shaders\Private\SkyLightingDiffuseShared.ush



为自定义的shadingmodel添加天光计算,根据需求来计算,例如卡渲只给一个简单的基本色

2.追踪Metallic和Roughness

众所周知,这两个变量会影响材质球与环境交互
1.BasePass下的GBuffer解析

Engine\Shaders\Private\BasePassPixelShader.usf
void FPixelShaderInOut_MainPS()方法中,Metallic和Roughness开始对SpecularColr和DiffuseColor产生影响




2.延迟着色时,解析GBuffer

Engine\Shaders\Private\DeferredShadingCommon.ush
FGBufferData DecodeGBufferData()方法,可以看到Metallic和Roughness重新对SpecularColr和DiffuseColor进行赋值。那为何还要在BasePass阶段作上文图中的计算?


3.GBufferHelper,就是头文件

Engine\Shaders\Private\GBufferHelpers.ush
void GBufferPostDecode()方法


3.Lumen,间接光计算

稍微过一下和Lumen相关的shader和渲染过程



Lumen参与计算的位置

Engine\Shaders\Private\Lumen\LumenSceneDirectLighting.usf



Lumen单个光源计算过程,该pass位于CombineLighting前面的Lights下,根据实际光源数量产生若干子pass(图中代码可能有些人觉得这些结构很熟悉了)

Engine\Shaders\Private\Lumen\LumenSceneLighting.usf



Lumen的光照数据合并所在pass

环境反射,IndirectLighting.Specular

Engine\Shaders\Private\DiffuseIndirectComposite.usf



环境反射由IndirectLighting.Specular控制。根据是否全局光照方案控制变量(DIM_APPLY_DIFFUSE_INDIRECT),会采用不同的方式处理间接光计算,其中和GBuffer直接相关的有:EnvBRDF()方法和CombineRoughSpecular()方法



CombineRoughSpecular()计算中根据自己需求修改,对于Toon风格来说,直接关闭反射即可(Roughness值固定传1)

IndirectLighting.Diffuse

环境对物体的Diffuse部分的影响,则相对比较容易观察,它们是根据ShadingModel来进行区分处理,同样是上文的shader文件:Engine\Shaders\Private\DiffuseIndirectComposite.usf



如果你希望对GI的计算风格化处理,可以考虑在这动手

Reference

1.剖析虚幻渲染体系-开篇说明 - 0向往0 - 博客园 (cnblogs.com)
2.UE5【实践】3.卡通渲染改进-Shadow&Shading&Lumen - 知乎 (zhihu.com)
3.虚幻5渲染编程(风格化渲染篇)[第八卷: Toon Lumen GI in UnrealEngine5] - 知乎 (zhihu.com)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-2-23 22:19 | 显示全部楼层
[思考]请问代码字体叫什么
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-4-28 09:09 , Processed in 0.091182 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表