美文网首页
UnityStandardBRDF中GGX实现疑问

UnityStandardBRDF中GGX实现疑问

作者: Orini | 来源:发表于2017-08-14 10:44 被阅读0次
// Ref: http://jcgt.org/published/0003/02/03/paper.pdf
//GGX可见性项V
//G(l,v,h)=G1(l)G1(v)
inline half SmithJointGGXVisibilityTerm (half NdotL, half NdotV, half roughness)
{
//#if 0分支不会被执行,执行下面的简化
#if 0
    //原始公式
    //根据GGX的G(l,v,h)公式,分子分母同时除2*NdotL/2*NdotV,最后的结果分母可以整理成(1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f;
    //疑问:下方的值计算不一致,以及最后G的值计算是否有问题
    // Original formulation:
    //  lambda_v    = (-1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f;
    //  lambda_l    = (-1 + sqrt(a2 * (1 - NdotV2) / NdotV2 + 1)) * 0.5f;
    //  G           = 1 / (1 + lambda_v + lambda_l);

    // Reorder code to be more optimal
    half a          = roughness; 
    half a2         = a * a;
    //重排代码为何会出现NdotL,NdotV混用?
    half lambdaV    = NdotL * sqrt((-NdotV * a2 + NdotV) * NdotV + a2);
    half lambdaL    = NdotV * sqrt((-NdotL * a2 + NdotL) * NdotL + a2);
    //简化的可见性项
    //((4.0f * NdotL * NdotV)
    // Simplify visibility term: (2.0f * NdotL * NdotV) /  ((4.0f * NdotL * NdotV) * (lambda_v + lambda_l + 1e-5f));
    return 0.5f / (lambdaV + lambdaL + 1e-5f);  // This function is not intended to be running on Mobile,
                                                // therefore epsilon is smaller than can be represented by half
#else
    //上述公式的近似,简化了sqrt,数学不正确但足够接近
    // Approximation of the above formulation (simplify the sqrt, not mathematically correct but close enough)
    half a = roughness;
    half lambdaV = NdotL * (NdotV * (1 - a) + a);
    half lambdaL = NdotV * (NdotL * (1 - a) + a);

    return 0.5f / (lambdaV + lambdaL + 1e-5f);
#endif
}

相关文章

  • UnityStandardBRDF中GGX实现疑问

  • Unity中的BRDF公式

    Unity中的PBR1.PBR的相关文件2.Unity中的BRDF (漫反射项与基于GGX的高光反射项)3.能量守...

  • 伤痛中的疑问

    风轻轻吹 它的轻轻掠过 带动空气的流动 是沉重 或是轻盈 狭长的路 空寂的路 足迹在那儿印得清晰 它带给那儿的烙印...

  • 生活中的疑问?

    “该鼓励病危者活着吗?” “做人到底该不该省钱?” “朋友圈要不要屏蔽父母?” “生活该被工作填满吗?” “这是为...

  • 数字图像目标检测与识别----理论与实践

    【波兰】Boguslaw Cyganek 著 疑问: 1)目标检测?目标识别?概念定义及原理 2)如何实现?实现方...

  • golang中接口赋值与方法集

    接口使用疑问 golang中的接口可以轻松实现C++中的多态,而且没有继承自同一父类的限制,感觉方便很多。但是在使...

  • 生活中的疑问太多处处有疑问

    医生都说:“宁愿架上药生尘 ,但愿世上没病痛。”可病痛不会因医生的美好愿望就会不存在,谁都知道那是一种美好的愿望,...

  • 用Span简单实现文本编辑器

    使用 文本编辑器在APP中太常见了,但如何实现的呢?不知大家有没有跟我一个疑问?下面我将用Span来实现一个简单的...

  • 常用文言文语法结构

    疑问句:在古汉语中,借疑问词或否定词而能发出疑问的句子叫疑问句。其中疑问词分疑问代词和疑问语气词两类。 常用的疑问...

  • 小孩教育中的疑问

    来自花开花落: 亲们,咨询个问题。和我家孩子一起上课的小朋友总是捣乱,老师总是被迫打断上课,这样也影响到了其他小朋...

网友评论

      本文标题:UnityStandardBRDF中GGX实现疑问

      本文链接:https://www.haomeiwen.com/subject/fboyrxtx.html