介绍
MDL材质语言是一种描述渲染过程中场景元素外观的专业语言。MDL包括三大块:描述材质的声明性组件,能够进行纹理贴图自定义查找的过程程序语言,以及作为材质声明参数化输入的程序纹理。
MDL致力于提供定义良好且完全独立于渲染系统的抽象化材质描述语言。材质描述既全面且灵活,并且是专门针对基于物理光照传输模拟的现代渲染器。材质描述的声明性特性使得渲染器很容易理解一个材质,并且在需要的时候可以通过材质的简化和近似达到渲染器的最佳性能。过程性语言使得艺术家在设计新材质时拥有审美上的灵活性。
虽然MDL一直强调是物理真实的材质,但它也支持传统渲染建模工作流中的传统计算机图形技术,比如说法线贴图和裁剪。
MDL是为现代高度并行机器架构而设计的,一个重要的部分是材质描述的声明特性。另一个重要的部分则是它的过程语言,只限定于使用纯函数定义,它只能访问渲染的状态,无副作用并且没有全局依赖。由此基于现代架构材质和函数计算能很方便的进行编译和运行。
材质构建块
MDL中的一个材质由一组构建块组成,这些构建块描述了渲染器应当怎样计算基于几何描述的曲面的显示外观。几何曲面在数学上是理想化模型,它没有厚度,只是作为两个几何体之间的边界。因此,一个球面的几何定义可以翻译成球体的边界。
MDL定义了光是如何被边界影响的:被曲面反射,折射穿过曲面定义的几何体或者是这两者的组合。曲面边界同样定义了光穿过介质的范围,而介质参与了光的散射与吸收。
几何曲面没有厚度,但对于MDL而言,曲面可以定义成拥有极小的厚度。在MDL中,这被称为薄壁表面。薄壁属性在定义非闭合曲面外观时允许更大的灵活性,此时曲面不再是物体的边界,而是代表物体本身。由于薄壁表面的两侧都可以被渲染,MDL允许两侧拥有不同的外观属性。
基于薄壁属性,依据解释曲面的方式MDL将材质分为三类:
- 曲面是几何体的接触面,材质中定义的体积属性适用于封闭几何体。
- 曲面是薄壁表面,概念上包含一个非常薄的几何体,并且两侧拥有相同的材质。例如,窗户可以通过这种方式建模。
- 曲面代表两侧拥有不同材质的薄壁表面,这两侧的材质必须拥有相同的传输交互属性。
MDL中的材质属性还包含曲面的几何属性,例如裁剪,置换贴图,凹凸贴图,这些通常不会包含在几何描述中。
材质库与组件的重用
MDL拥有定义良好的模块和包管理概念,这使得全面组织非常复杂的材质库成为可能。与命名空间的概念一起,这使得部署来自不同供应商提供的材质库变得非常容易,并且也使得未来材质库的发展与内部合作变得更加流畅。
MDL模块包括材质和函数及其对应的类型和常量。当构建大型材质库时,MDL中的元素重用就变得非常重要。函数可以封装其他函数,并且通过改变她们的名称、参数和返回值来改变签名并隐藏细节,例如那些未暴露的参数和那些隐藏设置。材质也可用来封装其他材质,提供新的材质名称及参数,并且像函数那样隐藏不必要的细节。