三维渲染工具Mitsuba使用简介
目录
一. 介绍
二. 基本使用方法
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颜色值类型
<rgb name="spectrumProperty" value="0.2, 0.8, 0.4"/>
<srgb name="spectrumProperty" value="0.4, 0.3, 0.2"/>
<srgb name="spectrumProperty" value="#f9aa34"/>
<rgb name="spectrumProperty" intent="reflectance" value="0.2, 0.8, 0.4"/>
<rgb name="spectrumProperty" intent="illuminant" value="0.2, 0.8, 0.4"/>
4.4.3 Color spectra(彩色光谱)
将彩色光谱传递给渲染器的首选方法,是显式地表示每个值的相关波长,例如:
<spectrum name="spectrumProperty" value="400:0.56, 500:0.18, 600:0.58, 700:0.24"/>
这是从纳米波长(上面value值中冒号之前)到反射率或强度值 (冒号后) 的映射。
<spectrum name="spectrumProperty" value="0.56"/>
<spectrum name="spectrumProperty" intent="reflectance" value="0.56"/>
<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"/>
<!--按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 -->
<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>
4.6 外部文件包含
为了更好的可读性,一个场景可以分成多个部分。要包含外部文件,请使用以下命令:
<include filename="nested-scene.xml"/>
<include filename="nested-scene-$version.xml"/>
4.7 别名
有时,将一个对象(例如漫反射模型)与多个标识符关联起来是有用的。
<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使用简介相关推荐
- OSG三维渲染引擎之OSG简介
参考书籍<OpenSceneGraph三维渲染引擎设计与实践>,作者王锐,钱学雷 一.场景图形 1.概念 场景图形(Scene Graph)是一种经常用于计算机游戏和图形学相关软件的数据结 ...
- Auto CAD:CAD三维建模设计之渲染工具(光源、阳光和位置、材质、渲染)之详细攻略
Auto CAD:CAD三维建模设计之渲染工具(光源.阳光和位置.材质.渲染)之详细攻略 目录 CAD三维建模设计之渲染工具(光源.阳光和位置.材质.渲染) 光源 阳光和位置
- PDMS插件_三维地形工具
PDMS插件_三维地形工具 功能简介 插件介绍 技术原理 功能简介 在PDMS中创建三维地形,能够全面展示工厂周围地理环境,同时方便后期贴图.渲染,模型展示效果提升明显.通常测量专业仅提供CAD图纸, ...
- [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述
1 .引言 随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真 实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层 图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开 ...
- 3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程
通过学习可用于相机放置.建模.修整等的策略,生成令人印象深刻且逼真的建筑三维渲染.了解如何将您的3D渲染场景提升到一个新的水平,以使您的图像引人入胜.有趣且讨人喜欢.在本课程中,讲师Verena Ta ...
- ArcGIS Pro建立三维模型(三维渲染)
一.准备工作 软件:ArcGIS Pro 数据:从bigemap地图下载器上下载的高程和卫图 二.ArcGIS与ArcGIS Pro对比 BIGEMAP下载器上下载的影像一般直接为坐标系为GEO的ti ...
- 透视城市“生命线” MapGIS地下管线三维建模工具
城市是繁忙的,昨夜的浮尘还未落定,新一天的晨曦又接替了灯光,人们匆匆地开启了新一天的生活,在车水马龙中穿梭,在楼宇林立间工作生活,一切都是匆匆而又有条不紊.繁忙的背后还是繁忙,水.电.燃气.热量.信息 ...
- OSG三维渲染引擎编程学习(全系列开展OSG学习)
目录 第一章:OpenSceneGraph介绍 第二章:OSG数学基础 第三章:OSG场景组织 第四章:OSG几何体绘制 第五章:OSG场景渲染 第六章:OSG场景工作机制 第七章:OSG场景图形交互 ...
- ARCHICAD 21—三维建筑设计工具
想要一款专业的三维建筑设计工具?ARCHICAD 21 for Mac推荐给大家!ArchiCAD 21基于全三维的模型设计,拥有强大的剖/立面.设计图档.参数计算等自动生成功能,附带便捷的方案演示和 ...
最新文章
- jQuery extend方法介绍
- C#中将list进行序列化并使用SharpZipLib进行压缩
- 使用script命令自动录屏用户操作
- Google推出“Google实验室” Ad Innovations
- python 枚举类型
- SQLmap常用命令/使用教程
- Running 1 linux_yesterdaytodaytomorrow
- Linux下的NFS网络文件系统
- Java 最常见的 200+ 面试题:面试必备 1
- Windows操作系统 | Visual C++库可不能乱删
- OpenGL安装教程
- android高级面试题(二)
- php5市场占有率,javascript,php_目前国内浏览器的市场占有率?,javascript,php,html,html5,css - phpStudy...
- 正则表达式之基本原理
- 全连接神经网络的二分类问题
- Aegisub与TCAX识别函数变量写法上的差异
- Set与List的前辈是Collection,Map自成一派
- ssd存储的SLC、MLC、TLC闪存芯片颗粒有什么区别?
- Oracle—tablespace使用
- qcc 蓝牙耳机 TWS与TWS plus的区别