目录

一. 介绍

二. 基本使用方法

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场景文件中定义:

<bsdf type="diffuse"><spectrum name="reflectance" value="$reflectance"/>
</bsdf>

cmd命令行传参:

.\ mitsuba.exe -Dreflectance=0.1 mySence.xml

3.3  调色器(Tonemapper)

这里要提到的一个常用实用工具是批量调色器,它加载EXR/RGBE图像,并写入经过调色的8位的PNG/JPGs图像。这样可以节省很多时间,例如,当一个人必须处理许多高动态范围的图像,如动画帧,使用相同的基本操作(如伽马校正,改变整体亮度,调整大小,裁剪等)时。可用的命令行选项如下所示。

//实例待完善?

四. 场景文件格式说明

4.1  基本说明

Mitsuba使用非常简单和通用的基于xml的格式来表示场景。由于该架构的理念是将离散的功能块表示为插件,因此场景文件本质上可以解释为“描述”,该描述确定应该实例化哪些插件,以及它们之间应该如何交互。

4.2  一个使用默认灯光和相机的简单场景

<?xml version="1.0" encoding="utf-8"?>
<scene version="0.5.0"><shape type="obj"><string name="filename" value="something.obj"/></shape>
</scene>

scene version属性表示用于创建场景的Mitsuba的版本。这一信息使Mitsuba始终正确地处理文件,不管任何潜在的未来场景描述语言的变化。

这个例子已经包含了关于格式需要知道的最重要的事情:可以有对象(例如场景或形状标记实例化的对象),这些对象允许彼此嵌套。每个对象都可以选择性地设置属性(例如string标记),这些属性进一步描述了对象的行为。

这些对象标签让渲染器知道要实例化什么类型的对象:例如,使用shape标记加载的任何插件,都必须符合shape接口,这对于名为obj的插件来说当然是这样(它包含aWaveFront obj加载器)。类似地,你可以这样写:

<?xml version="1.0" encoding="utf-8"?>
<scene version="0.5.0"><shape type="sphere"><float name="radius" value="10"/></shape>
</scene>

这将加载一个不同的插件(sphere),它仍然是一个shape,但是表示一个半径为10个世界空间单元的球体。Mitsuba配备了大量的插件。对应的xml场景文件在gui中打开如下:

4.3  一个最常见的场景配置

最常见的场景配置, 是声明一个integrator (积分器)、一些geometry (几何图形)、一个sensor(传感器,例如照相机)、一个film(胶片)、一个sampler(采样器)和一个或多个emitters(发射器)。下面是一个更复杂的例子:

<?xml version="1.0" encoding="utf-8"?><scene version="0.5.0"><integrator type="path"><!-- 定义具有最大路径长度为8的 Path trace --><integer name="maxDepth" value="8"/></integrator><!-- 实例化具有45度视野的 perspective camera --><sensor type="perspective"><!-- 将相机绕Y轴旋转180度 --><transform name="toWorld"><rotate y="1" angle="180"/></transform><float name="fov" value="45"/><!-- 使用基本的独立采样策略,每个像素渲染32个样本 --><sampler type="independent"><integer name="sampleCount" value="32"/></sampler><!-- 生成高清分辨率的EXR图像 --><film type="hdrfilm"><integer name="width" value="1920"/><integer name="height" value="1080"/></film></sensor><!-- 添加一个由粗玻璃制成的dragon mesh(一个存储格式为obj的文件) --><shape type="obj"><string name="filename" value="dragon.obj"/><bsdf type="roughdielectric"><!-- 调整材料的粗糙度参数 --><float name="alpha" value="0.01"/></bsdf></shape><!-- 添加另一个已知mesh —— 这一次,存储使用Mitsuba自己的(compact紧凑型的)二进制文件表示 --><shape type="serialized"><string name="filename" value="lightsource.serialized"/><!-- ?? --><transform name="toWorld"><translate x="5" y="-3" z="1"/></transform><!-- 这个mesh是一个区域发射器--><emitter type="area"><!-- 定义 辐射亮度 的值 --><rgb name="radiance" value="100,400,100"/></emitter></shape>
</scene>

这个例子介绍了几种新的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 name="intProperty" value="1234"/>
<float name="floatProperty" value="1.234"/>
<float name="floatProperty2" value="-1.5e3"/>
<string name="stringProperty" value="This is a string"/>

注意,必须遵循对象所期望的格式,即不能将integer的值传递给浮点型属性。

4.4.2  RGB颜色值类型

在Mitsuba中,颜色数据指定使用<rgb>,和<srgb>,或<spectrum>标签。我们从最常用的前两种开始,RGB标签中,红色、绿色和蓝色的的值为浮点格式,在指定reflectance values(反射率)时,这些值通常在0到1之间。<srgb>标签内部实现,通过一个反向sRGB伽马曲线映射,使指定值线性化。

<rgb name="spectrumProperty" value="0.2, 0.8, 0.4"/>
<srgb name="spectrumProperty" value="0.4, 0.3, 0.2"/>

<srgb>标签也接受html样式的十六进制值,例如:

<srgb name="spectrumProperty" value="#f9aa34"/>

当使用默认设置编译Mitsuba时,它在内部使用线性RGB来表示颜色,所以这些值是直接使用的。然而,当配置为光谱渲染时,必须找到具有匹配RGB值的color spectrum(光谱)。这是一个经典的待定问题,因为任意特定的RGB值对应着无穷多个spectra(光谱)。

Mitsuba依靠Smits等人的方法找到一个平滑的、物理上“可信”的光谱。为此,它选择Smits方法的两种变体中的一种,这取决于光谱是否包含无单位的reflectance value(反射率值)或radiance-valued intensity(辐射值强度)。这个选项,可以通过intent这个xml属性强制设置,例如:

<rgb name="spectrumProperty" intent="reflectance" value="0.2, 0.8, 0.4"/>
<rgb name="spectrumProperty" intent="illuminant" value="0.2, 0.8, 0.4"/>

通常这个属性不是必须设置的: Mitsuba会去检测当一个RGB值在一个light source(光源)的声明中被指定时,使用intent=“illuminant”,其他地方使用intent=“reflection”。

4.4.3  Color spectra(彩色光谱)

Mistuba还可以处理光谱颜色数据。这种光谱精确的内部表示,取决于渲染器的编译方式。当 SPECTRUM_SAMPLES 在编译时被设置为3(官方默认值),Mistuba使用一个基本的线性RGB表示,因此总是将彩色光谱转换为RGB。对于其他值(例如SPECTRUM_SAMPLES=20),渲染器使用指定数量的bins的完整光谱表示,来执行所有的内部计算。

将彩色光谱传递给渲染器的首选方法,是显式地表示每个值的相关波长,例如:

<spectrum name="spectrumProperty" value="400:0.56, 500:0.18, 600:0.58, 700:0.24"/>

这是从纳米波长(上面value值中冒号之前)到反射率或强度值 (冒号后) 的映射。

若想获得“白色”或均匀光谱,一个实用的捷径是只提供一个值:

<spectrum name="spectrumProperty" value="0.56"/>

白色光谱的确切定义取决于,是否指定了一个无单位反射值或者辐射值强度。与之前一样,Mitsuba试图根据<spectrum>标记是否出现在光源声明中,自动检测到这一点,intent属性可用于覆盖默认行为。特别是,下面的代码片段创建了一个统一的频谱:

<spectrum name="spectrumProperty" intent="reflectance" value="0.56"/>

与此对应,以下创建了多个白点(CIE D65光源):

<spectrum name="spectrumProperty" intent="reflectance" value="0.56"/>

当从测量中获得光谱功率或反射率分布(例如在10nm的间隔)时,它们通常是非常庞大而难以控制的,并且会干扰场景描述。因此,还有另一种方法:可以通过加载外部文件来传递频谱:

<spectrum name="spectrumProperty" filename="measuredSpectrum.spd"/>

该文件每行应该包含一个简单的测量值,对应的波长以纳米为单位,测量值用空格隔开,可以在其中添加注释。例如:

# 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(无单位)系统。

<blackbody name="spectrumProperty" temperature="5000K"/>

具体来说,黑体光谱的单位是 W/(m-2 * sr -1 * nm-1),即瓦/ (每平方米*每弧度*每单位波长)。如果这些单位与你的场景描述不一致(例如:它是以毫米mm或公里km为单位建模的),你可以使用可选的scale属性来调整它们,例如:

<!--按1/1000的比例缩放blackbody的辐射亮度-->
<blackbody name="spectrumProperty" temperature="5000K" scale="1e-3"/>

4.4.4  Vectors,Positions (向量与点位)

无论你选择什么样的自然空间单位(米、英寸等),在所有地方一致地使用它们,是非常重要的。

<point name="pointProperty" x="3" y="4" z="5"/>
<vector name="vectorProperty" x="3" y="4" z="5"/>

4.4.5  Transformations (转换类型)

转换类型,是唯一一种需要多个标记的属性。其思想是,从标识开始,可以使用一系列命令构建转换。例如,一个转换对象可以这样写:

<transform name="trafoProperty"><translate x="-1" y="3" z="4"/><rotate y="1" angle="45"/>
</transform>

从数学上讲,序列中的每一个增量变换(改变对象相对位置??)都左乘到当前变量上。以下可供选择:

<translate x="-1" y="3" z="4"/>

绕指定轴逆时针旋转(以度为单位)

<rotate x="0.701" y="0.701" z="0" angle="180"/>

缩放操作,系数也可以是负的,以获得一个翻转,例如:

<scale value="5"/>          <!-- uniform scale -->
<scale x="2" y="1" z="-1"/> <!-- non-unform scale -->

具体的4×4矩阵

<matrix value="0 -0.53 0 -1.79 0.92 0 0 8.03 0 0 0.53 0 0 0 0 1"/>

lookat转换——这主要用于设置相机(和聚光灯)。原点坐标指定摄像机原点,目标是摄像机将要查看的点, up参数(可选),确定最终呈现图像中的“向上”方向。对于聚光灯不需要up参数。

<lookat origin="10, 50, -800" target="0, 0, 0" up="0, 1, 0"/>

另外,不需要显式指定值为0(用于平移和旋转)或1(用于缩放)的Cordinates。

4.5  References(对象引用)

很多时候,你会发现自己在很多地方都在使用一个对象(比如材料)。为了避免一次又一次地声明它,浪费内存,我们可以使用引用。例如:

<scene version="0.5.0"><texture type="bitmap" id="myImage"><string name="filename" value="textures/myImage.jpg"/></texture><bsdf type="diffuse" id="myMaterial"><!-- 引用名为myImage的纹理,并将其作为反射参数传递给BRDF --><ref name="reflectance" id="myImage"/></bsdf><shape type="obj"><string name="filename" value="meshes/myShape.obj"/><!-- 引用名为myMaterial的材料 --><ref id="myMaterial"/></shape>
</scene>

通过在对象声明中提供唯一的id属性,对象在实例化时绑定到该标识符。稍后引用这个标识符(使用<ref id="…/>标签)将把实例添加到父对象中,而不会进行进一步的内存分配。注意,有些插件希望它们的子对象被命名。因此,名称也可以与引用相关联。

请注意,虽然这个特性是为了有效地处理,来引用自多个地方的materials材料, textures纹理和 participating media 参与媒体,但它不能用于实例化几何结构(如果需要这个功能,请查看instance插件)。

4.6  外部文件包含

为了更好的可读性,一个场景可以分成多个部分。要包含外部文件,请使用以下命令:

<include filename="nested-scene.xml"/>

在这种情况下,嵌套场景.xml文件必须是一个正确的场景文件,在根目录下有一个<scene>标记。这个特性有时与Mitsuba命令行渲染器的 ”-D key=value” 标志结合使用,非常方便。这让你可以通过改变命令行参数来包含场景配置的不同部分(而且不需要接触XML文件):

<include filename="nested-scene-$version.xml"/>

4.7  别名

有时,将一个对象(例如漫反射模型)与多个标识符关联起来是有用的。

这可以使用”alias as=..”来完成。例如:

<bsdf type="diffuse" id="myMaterial1"/>
<alias id="myMaterial1" as="myMaterial2"/>

在此语句之后,漫反射模型将绑定到标识符“myMaterial1”和“myMaterial2”。


参考:Mitsuba学习笔记(1)https://blog.csdn.net/yao544303963/article/details/34083357

Mitsuba下载:http://mitsuba-renderer.org/download.html

三维渲染工具Mitsuba使用简介相关推荐

  1. OSG三维渲染引擎之OSG简介

    参考书籍<OpenSceneGraph三维渲染引擎设计与实践>,作者王锐,钱学雷 一.场景图形 1.概念 场景图形(Scene Graph)是一种经常用于计算机游戏和图形学相关软件的数据结 ...

  2. Auto CAD:CAD三维建模设计之渲染工具(光源、阳光和位置、材质、渲染)之详细攻略

    Auto CAD:CAD三维建模设计之渲染工具(光源.阳光和位置.材质.渲染)之详细攻略 目录 CAD三维建模设计之渲染工具(光源.阳光和位置.材质.渲染) 光源 阳光和位置

  3. PDMS插件_三维地形工具

    PDMS插件_三维地形工具 功能简介 插件介绍 技术原理 功能简介 在PDMS中创建三维地形,能够全面展示工厂周围地理环境,同时方便后期贴图.渲染,模型展示效果提升明显.通常测量专业仅提供CAD图纸, ...

  4. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言 随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真 实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层 图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开 ...

  5. 3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程

    通过学习可用于相机放置.建模.修整等的策略,生成令人印象深刻且逼真的建筑三维渲染.了解如何将您的3D渲染场景提升到一个新的水平,以使您的图像引人入胜.有趣且讨人喜欢.在本课程中,讲师Verena Ta ...

  6. ArcGIS Pro建立三维模型(三维渲染)

    一.准备工作 软件:ArcGIS Pro 数据:从bigemap地图下载器上下载的高程和卫图 二.ArcGIS与ArcGIS Pro对比 BIGEMAP下载器上下载的影像一般直接为坐标系为GEO的ti ...

  7. 透视城市“生命线” MapGIS地下管线三维建模工具

    城市是繁忙的,昨夜的浮尘还未落定,新一天的晨曦又接替了灯光,人们匆匆地开启了新一天的生活,在车水马龙中穿梭,在楼宇林立间工作生活,一切都是匆匆而又有条不紊.繁忙的背后还是繁忙,水.电.燃气.热量.信息 ...

  8. OSG三维渲染引擎编程学习(全系列开展OSG学习)

    目录 第一章:OpenSceneGraph介绍 第二章:OSG数学基础 第三章:OSG场景组织 第四章:OSG几何体绘制 第五章:OSG场景渲染 第六章:OSG场景工作机制 第七章:OSG场景图形交互 ...

  9. ARCHICAD 21—三维建筑设计工具

    想要一款专业的三维建筑设计工具?ARCHICAD 21 for Mac推荐给大家!ArchiCAD 21基于全三维的模型设计,拥有强大的剖/立面.设计图档.参数计算等自动生成功能,附带便捷的方案演示和 ...

最新文章

  1. jQuery extend方法介绍
  2. C#中将list进行序列化并使用SharpZipLib进行压缩
  3. 使用script命令自动录屏用户操作
  4. Google推出“Google实验室” Ad Innovations
  5. python 枚举类型
  6. SQLmap常用命令/使用教程
  7. Running 1 linux_yesterdaytodaytomorrow
  8. Linux下的NFS网络文件系统
  9. Java 最常见的 200+ 面试题:面试必备 1
  10. Windows操作系统 | Visual C++库可不能乱删
  11. OpenGL安装教程
  12. android高级面试题(二)
  13. php5市场占有率,javascript,php_目前国内浏览器的市场占有率?,javascript,php,html,html5,css - phpStudy...
  14. 正则表达式之基本原理
  15. 全连接神经网络的二分类问题
  16. Aegisub与TCAX识别函数变量写法上的差异
  17. Set与List的前辈是Collection,Map自成一派
  18. ssd存储的SLC、MLC、TLC闪存芯片颗粒有什么区别?
  19. Oracle—tablespace使用
  20. qcc 蓝牙耳机 TWS与TWS plus的区别

热门文章

  1. War3更新相关问题
  2. 为什么你就是抽不中“中国锦鲤”
  3. emlog ajax,Emlog检测百度收录插件代码文章页ajax查询
  4. 产品数据分析的三个层次
  5. 求正弦函数sin(x)的近似值的多项式求解
  6. Cesium添加建筑模型并设置样式(四)
  7. 新手选 Arduino 还是 树莓派?
  8. 小程序测试相关笔记1
  9. 扛住 100 亿次请求—如何做一个“有把握”的春晚红包系统?
  10. 根据中序和后序构造二叉树