目录
一. 介绍
二. 基本使用方法
2.1 交互式前端界面
2.2 命令行
三. 命令行使用实例
3.1 基本使用
3.2 命令行传递参数
3.3 调色器(Tonemapper)
四. 场景文件格式说明
4.1 基本说明
4.2 一个使用默认灯光和相机的简单场景
4.3 一个最常见的场景配置
4.4 Property types(属性类型)
4.4.1 整型、浮点型、字符串类型
4.4.2 RGB颜色值类型
4.4.3 Color spectra(彩色光谱)
4.4.4 Vectors,Positions (向量与点位)
4.4.5 Transformations (转换类型)
4.5 References(对象引用)
4.6 外部文件包含
4.7 别名
一. 介绍Mitsuba是一个以研究为导向的渲染系统,风格类似于PBRT,并从中获得了很多灵感。它是用可移植c++编写的,实现了无偏差?和有偏差?技术,并包含针对当前CPU架构的大量优化。Mitsuba的模块化程度极高:它由一小组核心库和100多个不同的插件组成,这些插件实现了从材料、光源到完整的渲染算法等各种功能。 与其他开源渲染器相比,Mitsuba非常重视实验性渲染技术,例如基于路径的 Metropolis光照传输 和体积建模方法。因此,对于那些想要尝试这些尚未进入主流渲染器的技术的人来说,可能是真正让人感兴趣的,并且它也为这个领域的研究提供了坚实的基础。
要编译mitsuba,您需要一个最新的c++编译器(例如GCC 4.2+或Visual Studio 2010/2013)和一些额外的库,这些库是mitsuba内部使用的。所有支持平台上的构建都是使用基于Scons ( http://www.scons.org ) 的统一系统完成的,SCons是一个基于python的软件构建工具。具体的过程是不同的,这取决于所使用的操作系统。
二. 基本使用方法Mitsuba的渲染功能可以通过“命令行界面”和交互式的基于qt的前端(mtsgui)来访问。
2.1 交互式前端界面要启动互动前端,MacOS上的运行Mitsuba.app,Windows上的mtsgui.exe, Linux上的mtsgui(在获得setpath.sh之后)。您还可以将场景文件拖放到应用程序图标或正在运行的程序上以打开它们。关于使用GUI的两个视频教程可以在这里找到:http://vimeo.com/13480342(有些过时了)和http://vimeo.com/50528092(描述新特性)。
2.2 命令行
Mitsuba二进制文件是命令行使用和批处理作业操作的另一种非交互式呈现前端。可通过运行“./mitsuba ”,要获得它支持的参数的列表,如下所示。
./mitsuba
(测试环境win10 64位,Mitsuba 0.5.0)
3.1 基本使用渲染指定文件, 自动生成.exr文件,类似于界面点击 三角形运行按钮.例如
.\mitsuba.exe F:\study3D\Tools\myRender\circle.xml
注意a. 可同时写多个.xml(即scene文件),同时依次渲染,实现批处理,例如
.\mitsuba.exe 1.xml 2.xml 3.xml
注意b. 可以通过 -o outputpath.exr 指定 渲染结果输出路径(默认路径为场景xml文件路径),例如
.\mitsuba -o D:\myexr\envcircle.exr F:\study3D\Tools\myRender\circle.xml
3.2 命令行传递参数
使用 value="$variate_name"的形式,在xml文件中定义需要通过命令行传入值的变量
在运行时使用 "-Dvariate_name=xxx"的形式,传入参数
例如:mySence.xml场景文件中定义:
cmd命令行传参:
.\ mitsuba.exe -Dreflectance=0.1 mySence.xml
3.3 调色器(Tonemapper)
这里要提到的一个常用实用工具是批量调色器,它加载EXR/RGBE图像,并写入经过调色的8位的PNG/JPGs图像。这样可以节省很多时间,例如,当一个人必须处理许多高动态范围的图像,如动画帧,使用相同的基本操作(如伽马校正,改变整体亮度,调整大小,裁剪等)时。可用的命令行选项如下所示。
//实例待完善?
四. 场景文件格式说明 4.1 基本说明Mitsuba使用非常简单和通用的基于xml的格式来表示场景。由于该架构的理念是将离散的功能块表示为插件,因此场景文件本质上可以解释为“描述”,该描述确定应该实例化哪些插件,以及它们之间应该如何交互。
4.2 一个使用默认灯光和相机的简单场景
scene version属性表示用于创建场景的Mitsuba的版本。这一信息使Mitsuba始终正确地处理文件,不管任何潜在的未来场景描述语言的变化。
这个例子已经包含了关于格式需要知道的最重要的事情:可以有对象(例如场景或形状标记实例化的对象),这些对象允许彼此嵌套。每个对象都可以选择性地设置属性(例如string标记),这些属性进一步描述了对象的行为。
这些对象标签让渲染器知道要实例化什么类型的对象:例如,使用shape标记加载的任何插件,都必须符合shape接口,这对于名为obj的插件来说当然是这样(它包含aWaveFront obj加载器)。类似地,你可以这样写:
这将加载一个不同的插件(sphere),它仍然是一个shape,但是表示一个半径为10个世界空间单元的球体。Mitsuba配备了大量的插件。对应的xml场景文件在gui中打开如下:
最常见的场景配置, 是声明一个integrator (积分器)、一些geometry (几何图形)、一个sensor(传感器,例如照相机)、一个film(胶片)、一个sampler(采样器)和一个或多个emitters(发射器)。下面是一个更复杂的例子:
这个例子介绍了几种新的object types(对象类型)—— integrator积分器、sensor传感器、bsdf双向散射分布函数、sampler采样器、film胶片和emitters发射器,和几种property types(属性类型) ——integer整数、transform转换操作和rgb颜色。正如您在示例中所看到的,这些对象通常在顶层声明,除非存在一些将它们链接到另一个对象的内在关系。例如,BSDFs通常特定在某个几何对象中,因此它们作为shape的子对象出现。同样,sampler和film影响sensor产生光线的方式,以及传感器如何记录产生的辐射样本,因此它们被嵌套在sensor内。
4.4 Property types(属性类型) 4.4.1 整型、浮点型、字符串类型
注意,必须遵循对象所期望的格式,即不能将integer的值传递给浮点型属性。
4.4.2 RGB颜色值类型在Mitsuba中,颜色数据指定使用,和,或标签。我们从最常用的前两种开始,RGB标签中,红色、绿色和蓝色的的值为浮点格式,在指定reflectance values(反射率)时,这些值通常在0到1之间。标签内部实现,通过一个反向sRGB伽马曲线映射,使指定值线性化。
标签也接受html样式的十六进制值,例如:
当使用默认设置编译Mitsuba时,它在内部使用线性RGB来表示颜色,所以这些值是直接使用的。然而,当配置为光谱渲染时,必须找到具有匹配RGB值的color spectrum(光谱)。这是一个经典的待定问题,因为任意特定的RGB值对应着无穷多个spectra(光谱)。
Mitsuba依靠Smits等人的方法找到一个平滑的、物理上“可信”的光谱。为此,它选择Smits方法的两种变体中的一种,这取决于光谱是否包含无单位的reflectance value(反射率值)或radiance-valued intensity(辐射值强度)。这个选项,可以通过intent这个xml属性强制设置,例如:
通常这个属性不是必须设置的: Mitsuba会去检测当一个RGB值在一个light source(光源)的声明中被指定时,使用intent=“illuminant”,其他地方使用intent=“reflection”。
4.4.3 Color spectra(彩色光谱)Mistuba还可以处理光谱颜色数据。这种光谱精确的内部表示,取决于渲染器的编译方式。当 SPECTRUM_SAMPLES 在编译时被设置为3(官方默认值),Mistuba使用一个基本的线性RGB表示,因此总是将彩色光谱转换为RGB。对于其他值(例如SPECTRUM_SAMPLES=20),渲染器使用指定数量的bins的完整光谱表示,来执行所有的内部计算。
将彩色光谱传递给渲染器的首选方法,是显式地表示每个值的相关波长,例如:
这是从纳米波长(上面value值中冒号之前)到反射率或强度值 (冒号后) 的映射。
若想获得“白色”或均匀光谱,一个实用的捷径是只提供一个值:
白色光谱的确切定义取决于,是否指定了一个无单位反射值或者辐射值强度。与之前一样,Mitsuba试图根据标记是否出现在光源声明中,自动检测到这一点,intent属性可用于覆盖默认行为。特别是,下面的代码片段创建了一个统一的频谱:
与此对应,以下创建了多个白点(CIE D65光源):
当从测量中获得光谱功率或反射率分布(例如在10nm的间隔)时,它们通常是非常庞大而难以控制的,并且会干扰场景描述。因此,还有另一种方法:可以通过加载外部文件来传递频谱:
该文件每行应该包含一个简单的测量值,对应的波长以纳米为单位,测量值用空格隔开,可以在其中添加注释。例如:
# This file contains a measured spectral power/reflectance distribution
406.13 0.703313
413.88 0.744563
422.03 0.791625
430.62 0.822125
435.09 0.834000
...
最后,介绍下black body emitter(黑体发射器)的光谱分布(图1),其中温度以开尔文表示。
需要注意,将黑体光谱附加到发射器的强度特性上,会在Mitsuba的渲染过程中引入物理单位,而Mitsuba通常是一个unitless(无单位)系统。
具体来说,黑体光谱的单位是 W/(m-2 * sr -1 * nm-1),即瓦/ (每平方米*每弧度*每单位波长)。如果这些单位与你的场景描述不一致(例如:它是以毫米mm或公里km为单位建模的),你可以使用可选的scale属性来调整它们,例如:
4.4.4 Vectors,Positions (向量与点位)
无论你选择什么样的自然空间单位(米、英寸等),在所有地方一致地使用它们,是非常重要的。
4.4.5 Transformations (转换类型)
转换类型,是唯一一种需要多个标记的属性。其思想是,从标识开始,可以使用一系列命令构建转换。例如,一个转换对象可以这样写:
从数学上讲,序列中的每一个增量变换(改变对象相对位置??)都左乘到当前变量上。以下可供选择:
绕指定轴逆时针旋转(以度为单位)
缩放操作,系数也可以是负的,以获得一个翻转,例如:
具体的4×4矩阵
lookat转换——这主要用于设置相机(和聚光灯)。原点坐标指定摄像机原点,目标是摄像机将要查看的点, up参数(可选),确定最终呈现图像中的“向上”方向。对于聚光灯不需要up参数。
另外,不需要显式指定值为0(用于平移和旋转)或1(用于缩放)的Cordinates。
4.5 References(对象引用)很多时候,你会发现自己在很多地方都在使用一个对象(比如材料)。为了避免一次又一次地声明它,浪费内存,我们可以使用引用。例如:
通过在对象声明中提供唯一的id属性,对象在实例化时绑定到该标识符。稍后引用这个标识符(使用
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?