2019独角兽企业重金招聘Python工程师标准>>>

这里说的并不是什么新技术,都是很古老很古老的东西。

一般我们用的cg软件上面大量使用的漫反射模型Lambert’s model,是一个让光线向各个角度都均匀辐射的模型。这个均匀实在太不可思议了,真实物体表面理应不是这样的。这里介绍一下Oren/Nayar model。

其实以下内容基本来自于Advance RenderMan。

Advance RenderMan提到一个极端的例子,就是月球表面。假如你用Lambert来模拟月球,地球等宏观表面,会发现怎么样也做不好。在月圆的时候,月球看起来更像一块发光的平板,而不是一个球体。

另外一个现象就是,即使在灯光方向不变的情况下,观察物体的角度不同,物体表面光强、颜色也会发生变化(一般粗糙物体正光光强比背光光强要强)。就是光线向各个角度并非均匀辐射。

这个现象应该算是BRDF(Bidirectional Reflectance Distribution Function)现象的一部分。这个函数想用数学方式表述好像很困难,大概只能通过光学测量求得,而且各种物体表面辐射的情况超级复杂,而且差异很大, 比较难一一概括。

关于BRDF,看以下连接:http://www-modis.bu.edu/brdf/brdfexpl.html

Oren/Nayar model 这个主要来自于Michael Oren和Shree K. Nayar在SIGGRAPH94上发表的论文Generalization of Lambert’s Reflectance Model。里面通过统计的等手段总结出比较接近真实粗糙表面的数学公式,然后Advance RenderMan提供了相应实现的函数。其实3dmax好像也带这个Oren/Nayar model ,不过maya却没有的样子。

以下是论文的连接:http://www1.cs.columbia.edu/CAVE/publications/pdfs/Oren_SIGGRAPH94.pdf

一些另外的连接: http://www.cs.utah.edu/~wyman/classes/BRDF/orn_nyr.html

我这里提供一个简单的sl代码(根本就只是在Advance RenderMan上抄下来而已)。可以在pixie,prman使用,其他兼容rm应该也没有问题。

surface OrenNayar (float Ka = 1, Kd = 1, roughness=0.5)

{

/*
* Oren and Nayar’s generalization of Lambert’s reflection model.
* The roughness parameter gives the standard deviation of angle
* orientations of the presumed surface grooves. When roughness=0,
* the model is identical to Lambertian reflection.
*/
normal Nf = faceforward (normalize(N),I);
vector In = normalize(-I);
color LocIllumOrenNayar (normal N; vector V; float roughness;)
{
    /* Surface roughness coefficients for Oren/Nayar’s formula */
    float sigma2 = roughness * roughness;
    float A = 1 - 0.5 * sigma2 / (sigma2 + 0.33);
    float B = 0.45 * sigma2 / (sigma2 + 0.09);
    /* Useful precomputed quantities */
    float theta_r = acos (V . N); /* Angle between V and N */
    vector V_perp_N = normalize(V-N*(V.N)); /* Part of V perpendicular to N */
    /* Accumulate incoming radiance from lights in C */
    color C = 0;
    extern point P;
    illuminance (P, N, PI/2) {
        /* Must declare extern L & Cl because we’re in a function */
        extern vector L; extern color Cl;
        float nondiff = 0;
        lightsource ("__nondiffuse", nondiff);
        if (nondiff < 1) {
            vector LN = normalize(L);
            float cos_theta_i = LN . N;
            float cos_phi_diff = V_perp_N . normalize(LN - N*cos_theta_i);
            float theta_i = acos (cos_theta_i);
            float alpha = max (theta_i, theta_r);
            float beta = min (theta_i, theta_r);
            C += (1-nondiff) * Cl * cos_theta_i * (A + B * max(0,cos_phi_diff) * sin(alpha) * tan(beta));
        }
    }
    return C;
}
Ci =  Cs * (Ka * ambient() + Kd *LocIllumOrenNayar(Nf,In,roughness));
Oi = Os;  Ci *= Oi;
}

以下是用pixie渲染的,左边是matte,就是普通的Lambert(别以为白色暴掉的地方是高光,没有高光)。右边的是OrenNayar ,roughness在0.4左右。

另外,下面是正光背光的对比

最后,其实OrenNayar已经是10多年前的东西了,现在应该也有了更新的论文跟光照模型。那些迟点看到再说了。

转载于:https://my.oschina.net/zsjasper/blog/368301

Oren NayarModel相关推荐

  1. Oren Etzioni的机票价格预测算法

    最近看到一则eBay收购了商品价格预测的网站decide.com的新闻,再次证明了商品的价格预测这事是靠谱的.新闻里还提到Decide.com的全部26名员工,除了联合创始人兼CTO  Oren Et ...

  2. SQL Server:CASE WHEN OREN ELSE END =不支持OR

    不支持CASE语句的WHEN子句中的OR . 我怎样才能做到这一点? CASE ebv.db_no WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' ELSE ...

  3. YAML 语言入门教程

    2019独角兽企业重金招聘Python工程师标准>>> YAML简介 另一种标记语言(Yet Another Markup Language) YAML(英语发音:/ˈjæməl/, ...

  4. AI 真的能够理解人类语言吗?

    作者 | Melanie Mitchell 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 2011年,IBM 的人工智能系统沃森参加综艺节目<危险边缘>,并获得了冠军,当时 ...

  5. 斯坦福大学 AI100 报告发布:AI 发展速度惊人,但风险也正走进现实

    ‍‍ 作者 | 阳光 来源 | 学术头条 语言处理.计算机视觉和模式识别的巨大进步,意味着人工智能(Artificial Intelligence,AI)每天都在与人们的生活进行交互,从帮助人们选择电 ...

  6. OpenAI 以 10 亿美元出售「灵魂」,网友热评不再「Open」

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) OpenAI 如何以 10 亿美元的价格出售其灵魂:GPT-3 和 Codex 背后的公司并不像它声称的那样开放. 当金钱成为障 ...

  7. 第三届北京智源大会开幕,全球最大智能模型“悟道2.0”重磅发布

    6月1日,由北京智源人工智能研究院(以下简称智源研究院)主办的2021北京智源大会在北京中关村国家自主创新示范区会议中心成功开幕. 北京智源大会是智源研究院主办的年度国际性人工智能高端学术交流活动,定 ...

  8. 美团BERT的探索和实践 | CSDN原力计划

    扫码参与CSDN"原力计划" 作者 | 杨扬 佳昊 金刚等 来源 | CSDN原力计划作品 *点击阅读原文,查看美团技术团队更多干货文章. 背景 2018年,自然语言处理(Natu ...

  9. 万能 Transformer,你应该知道的一切

    一.Transformer 概  述 Transformer模型由Google在2017年在 Attention Is All You Need[1] 中提出.该文使用 Attention 替换了原先 ...

最新文章

  1. docker安装PostgreSQL
  2. SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory...
  3. 安卓突击:Android 动画有哪几种?
  4. 小议Linux staging tree
  5. 干货 | 产品经理要了解的技术类知识
  6. 【今晚7点半】:现代C++和Mediasoup的WebRTC集群服务实践
  7. epoll内存计算方法:4G内存服务器epoll并发量最大能达到多少?
  8. 中专生计算机教案,[定稿]计算机基础教案中专V8.1(全文完整版)
  9. struct interface_今天就谈谈go中的接受 interface 参数,返回 struct
  10. 图片转excel软件有哪些?这些软件你值得拥有
  11. 可变剪接分析流程(rMATS)
  12. linux下企业邮件服务器的搭建
  13. 东北大学材料成型工艺学中冲压部分复习题
  14. Single-Shot Object Detection with Enriched Semantics 论文笔记
  15. 虚拟机 linux无法与本地计算机互通的处理办法
  16. selenium+Java同时开启多个浏览器并行测试用例
  17. 能不能接受五一放一天不调休?专家建议固定法定假期取消调休
  18. 《雨巷》-- 戴望舒
  19. 回顾历史上第一台计算机,回顾一下,世界上第一台计算机的出现,不忘初心
  20. 网站是什么?网站的类型构成-从SEO到优化实战大师

热门文章

  1. neo4j 机器学习_neo4j(图数据库)是什么?
  2. 新手如何使用有三AI系统性跟读AI领域的论文
  3. 【杂谈】如何应对烦人的开源库版本依赖-做一个心平气和的程序员?
  4. 【pytorch速成】Pytorch图像分类从模型自定义到测试
  5. 全球及中国实心轴编码器行业前景趋势与运营动向分析报告2022版
  6. leetcode 214. 最短回文串 解题报告
  7. File Transfer(并查集)
  8. I/O流的概念和流类库的结构
  9. 登录页面和FORM的职责不对称,处理方法,刷新工作流程
  10. 这周开发工作时间及内容、思考和阅读的内容