基本原理


跟其他渲染器一样也是把材质赋给几何体,再渲染出图。在官方的文档里有一条说明“IRay渲染器不支持对NURBS和细分曲面的渲染,需要转换成多边形”。


光照

有两个要点,一是“Light is only reflected ,transmitted and emitted”,另一个是“Angles matter”。我理解的它是对应着reflection、refraction、diffuse这三个参数。另一条的意思是光线的入射角度和人眼的视角对最终图像是有影响的。由于物体表面不是完全的光滑和粗糙,人眼所看到的光的强度也不一样,越光滑反射光束越集中,因为漫反射而产生的衰减也越小。由此就形成了光的能量分布。


材质结构


在MDL语法里可以表现为下图


  • reflection和transmission也就是反射、折射,用BSDF( bidirectional scattering distribution function)来描述,emission用EDF(emissive distribution function)描述,volume properties则用VDF描述。材质和上面这三个DF们是MDL的主要描述了。用他们可以调节材质的光泽度啊或者可以做出thin_walled薄膜效应(就像阳光照射下的肥皂泡那样子的),也可以作为参数传给其他DF们一层层复合,往后的例子可以看出是怎么个用法。


  • geometric properties是用来描述镂空、置换贴图和法线贴图的。

  • 注意到surface被分成了两个面,MDL可以判断这个面有没有跟其他面一起围成形状体,没有的话将会被判定为反面,反面的话volume properties是不会被应用的。

这里另外解释下BSDF,它跟BRDF差不多,一个表面对不同的光线入射角和反射角的组合,拥有不同的反射率,BSDF将折射也考虑进去
定义一个材质的结构体如下

这个struct material里面可以包含很多个、很多层结构体,比如material_surface就是一个struct,它又包含bsdf类型的scattering参数和material_emission的emission参数;material_emission又是一个结构体,如下图所示


下图比较形象的表示出material的结构层次

有了这些结构我们就可以按MDL的语法来创建材质了,语法是这样的

material name(material-parameters)
=material(
    material-arguments)

在赋值时用let-in句式使结构整齐易懂

DF们

MDL用上面的DF们描述物体与光的交互。


这里bsdf很容易理解,它所呈现出来的效果就是物体看上去是透明不透明、镜面还是磨砂。而EDF就比较有意思了,文档里说“ The traditional computer graphics methods of lighting a scene with special purpose constructs (like “directional lights” and “point lights”) is replaced in MDL by defining properties of geometric objects so that they emit light.”像Maya里的面光Area Light、点光Spot、平行光Directional 、聚光灯Point都被自发光材质代替了(Iray也依旧支持渲染,只是实际操作的时候intensity参数要很大,这个在另一篇Iray材质测试里会写)。
刚才提到material、BSDF、EDF、VDF是MDL中主要的性质,他们可以一起创造出多种效果,也可以复合叠加。比如materialA可以作为参数传递给materialB,DF们也一样。下面是distribution function modifiers and combiners(我也不知道怎么翻译了)

nvida MDL introoduction相关推荐

  1. GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态

    GPUtil是一个Python模块,使用nvidia-smi从NVIDA GPU获取GPU状态 一个Python模块,用于在Python中使用nvidia-smi以编程方式从NVIDA GPU获取GP ...

  2. mysql MDL锁如何解决_MySQL元数据锁MDL

    [TOC] > 除了我们经常熟知的共享锁和排他锁外,MySQL数据库还有一种锁叫元数据锁,主要为了保证元数据的一致性,用于处理不同线程操作同一数据对象的同步与互斥问题. # 一.元数据 所谓元数 ...

  3. MySQL的元数据锁MDL发生场景和解决方法总结

    摘要 MetaData Lock即元数据锁,在数据库中元数据即数据字典信息包括db,table,function,procedure,trigger,event等.Metadata lock主要为了保 ...

  4. Ubuntu18.04 + Nvida GTX 1660ti显卡 驱动安装

    文章目录 Ubuntu18.04 + Nvidia GTX 1660ti显卡 驱动安装 删除旧的显卡驱动(如果装有cuda,就不要删除了) 检查你的nvida显卡驱动版本,找到免费推荐的驱动 安装驱动 ...

  5. 初步了解设备IO方式和ReactOS MDL实现

    Mdl意为'内存映射描述符'.'缓冲描述符',一个mdl就代表一个缓冲.(任意一块物理内存,可以同时映射到用户地址空间和系统地址空间的): 设备IO方式分为三种:缓冲方式.直接IO方式.直接方式   ...

  6. Windows MDL原理总结

    1 先是mdl的数据结构. 2 下面根据用法逐步的讲解mdl数据结构的含义: 一般用法,先是 IoAllocateMdl : 原型为: 最常用的是VirtualAddress和Length.把自己的N ...

  7. Matlab之mdl:风力发电系统仿真模型power_wind_dfig文件

    Matlab之mdl:风力发电系统仿真模型power_wind_dfig文件 目录 界面 两种获取方法 T1.matlab命令行内输入"power_wind_dfig"自动出来 T ...

  8. opengl加载显示3D模型MDL类型文件

    opengl加载显示3D模型MDL类型文件 前置条件 注意事项 项目展示 项目完整C++源代码 前置条件 opengl三方库freeglut,显示MDL格式的三维模型文件 注意事项 源代码 model ...

  9. @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]

    Hi,everybody! 今天是2014年4月14日, 现在是晚上十一点零柒分. 一本励志的书,一场振奋人心的演讲,一次推心置腹的谈话, 最多只是在你背后小推你一下,最终决定是否迈出前进的步伐, 以 ...

最新文章

  1. java 基础(匿名内部类)
  2. perl 取出目录中的所有文件并存入文件中
  3. C#如何打开一个窗体,同时关闭该窗体
  4. 微信创始人张小龙的创业故事
  5. 如何在SAP S/4HANA Fiori UI上创建新的扩展字段
  6. 同步代码和异步代码_告别异步代码
  7. java后端面试笔记-自用
  8. 2019最佳工作、平均年薪达百万!想入行,先看这10本书
  9. 微信内部浏览器私有接口 - WeixinJSBridge介绍
  10. linux chown
  11. Jmeter4.0新版本特性研究
  12. java doc转pdf又来了,这一次超简单
  13. 关于IE中出现的内存不能为written问题的解决方法
  14. selenium+java+TestNG 使用enabled 参数 —— 禁止执行一些case
  15. 电子学会青少年软件编程 Python编程等级考试三级真题解析(选择题)2021年3月
  16. system(“mode con cols=40 lines=15“)参数活起来
  17. anaconda安装及pytorch、tf、jupyter环境配置
  18. 最简单代码画的五角星
  19. 参加珠海苹果售后维修体验
  20. 【多人会议功能】uniapp - 微信小程序 - 腾讯云

热门文章

  1. vconsole-移动端调试工具
  2. LTE学习-信道均衡(MMSE)
  3. 用python画出漂亮的地日模型(围绕太阳转地球)
  4. php网站安全狗绕过,绕过网站安全狗拦截,上传Webshell技巧总结 | 附免杀PHP一句话...
  5. 增加汉明码、循环码的BPSK通信系统仿真以及误码分析
  6. camera调试:RK3588 MIPI/DVP camera关键配置
  7. flexbox的学习,display:flex display:box 淘宝触屏版、饿了么网布局分析分析
  8. 高中计算机会考可以补考吗,高中会考不过可以补考吗
  9. html展示markdown文件,在前端页面展示Markdown文件
  10. Jsp标签中foreach使用