首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为一层的彩虹/薄膜干涉积分

作为一层的彩虹/薄膜干涉积分
EN

Computer Graphics用户
提问于 2019-01-30 17:37:38
回答 1查看 718关注 0票数 3

我试图将"Belcour,L,& Barla,P. (2017)“论文中描述的薄膜干涉效应(https://hal.archives-ouvertes.fr/hal-01518344/document)整合到我的材料模型中,该模型基于google/film的材料模型(https://google.github.io/filament/Filament.md.html),是对微面理论的一种实际扩展。

然而,我很难理解将它们加在一起的方法。假设我在给一个像素阴影,直接照明是这样的:

代码语言:javascript
复制
vec3 Fr = specularLobe();   // D * F * V
vec3 Fd = diffuseLobe();    // 1 / PI * diffuseColor

return (Fd + Fr) * light.color * light.attenuation * NoL;

在另一边,间接照明是这样的.

代码语言:javascript
复制
vec3 Fd = diffuseIrradiance() * diffuseColor;
vec3 Fr = specularIrradiance() * DFG();

return (Fd + Fr);

现在,如果我想在基础材料的顶部加上薄膜/彩虹层,那么对于所有的照明,它以什么方式考虑到底层呢?

我一直在研究UE4 (https://polycount.com/discussion/comment/2604578#Comment_2604578)中的这个实现,但是他们似乎把BRDF计算的结果直接输入到材料的“基本颜色”中,我真的不认为这是我想要的,如果我错了,请纠正我……

在统一(https://github.com/Xerxes1138/Iridescence/blob/master/Iridescence.shader)中的另一个实现中,它们似乎分别在IBL和直接照明中考虑到了彩虹,但据我所知,层基并没有被考虑太多。

最后,在文件本身中,作了以下说明:

我们的扩展包括用一个更复杂的项代替经典的菲涅耳反射项F,R代表薄膜层内的所有相互反射,包括建设性的和破坏性的干涉效应。

从这一点我理解,简单地用Airy反射函数代替菲涅耳反射,就可以做到这一点,但是,我不确定哪一种方法是尽可能正确的物理上正确的。

(论文中的原始支持代码可以从:https://hal.inria.fr/hal-01518344v2/file/supplemental-code%20%282%29.zip获得)

谢谢你的帮助!

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2019-02-01 09:42:44

不幸的是,彩虹模型并不适用于漫射项。Pascal和我只为microfacet模型制作了它(这是镜面术语)。

了解如何将其包含到游戏引擎的一种方法可能是查看联合的HDRP实现。

在Lit.hlsl中,看看如何将彩虹菲涅耳合并到镜面+漫反射反射区中:

https://github.com/Unity-Technologies/ScriptableRenderPipeline/blob/master/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/Lit.hlsl

代码语言:javascript
复制
PreLightData GetPreLightData(float3 V, PositionInputs posInput, inout BSDFData bsdfData) {

    [...]

    if (bsdfData.iridescenceMask > 0.0)
    {
        bsdfData.fresnel0 = lerp(bsdfData.fresnel0, EvalIridescence(topIor, viewAngle, bsdfData.iridescenceThickness, bsdfData.fresnel0), bsdfData.iridescenceMask);
    }
}

请参阅EvalIridescence在BSDF.hlsl中的实现:

https://github.com/Unity-Technologies/ScriptableRenderPipeline/blob/30f1b16c8094ca133c165e56380ebb7ab9e7c0d9/com.unity.render-pipelines.core/ShaderLibrary/BSDF.hlsl

他们所做的是将标准菲涅耳项与基于彩虹掩模值的彩虹项相结合。

我希望这能帮上忙。

票数 3
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/8532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档