Mitsuba 的 sensor 默认是右手系
可以使用pip(简单但稍有限制,比如可用的variants的种类会少一些),也可自行编译
可以理解为渲染器的「变体」,比如是RGB渲染器还是光谱渲染器
官方说明图:
Scene XML file format https://mitsuba.readthedocs.io/en/stable/src/key_topics/scene_format.html
场景文件可以使用XML描述,也可以使用Python的Dict描述
Mitsuba将场景内部的组件称作「插件」,比如(BSDFs / Emitters / Films / Integrators / Participating media / Phase functions / Reconstruction filters / Samplers / Sensors / Shapes / Spectra / Textures / Volumes),查看文档的Plugin reference部分,可以找到每种插件的详细用法
「插件」内部可以指定各种属性,属性的类型包括(integer / float / boolean / string / point / vector / rgb / spectrum / transform)具体每种属性的用法参照文档的Scene Format > Properties
<shape type="sphere"> <point name="center" x="1" y="0" z="0"/> <float name="radius" value="2"/> </shape> 'sphere_2': { 'type': 'sphere', 'center': [1, 0, 0], 'radius': 2 }
通过上述代码可以发现,XML的对象格式是 shape-sphere 也就是「对象类型(此处是shape)-具体对象类型(此处是sphere)」;而Dict的对象格式是 id-sphere 其中id(上述代码中的sphere_2)是可以自己随便取的
Dict中使用id,所以引用其他obj会更方便
那么Dict中没有描述shape这一信息,解析器如何知道它是一个shape呢?应该是因为type的value都是唯一存在的,可以反推得到对象类型,比如,一个obj的type=“sphere”,就可以确定它的类型就是shape
另外,Dict中obj的写法格式是'xxx': {},xxx这里,除了写id以外,还可能写的是属性名,举个例子:一个obj对象,有一个A属性(比如一个模型可以有一个材质,一个位移…),可以有任意个B属性(比如一个场景可以有任意个模型,任意个灯光…),那么写A属性的时候,就是 'A': {},写B属性的时候,就是 'B_1': {}, 'B_2': {}, 'whatever': {}
XML应该是通过name=“xxx”来指定属性名的
Cornell Box(来自官方文档;没有引用外部资源文件)
<scene version="3.0.0"> <default name="integrator" value="path" /> <default name="spp" value="64" /> <default name="resy" value="1024" /> <default name="resx" value="1024" /> <default name="max_depth" value="65" /> <integrator type="$integrator"> <integer name="max_depth" value="$max_depth" /> </integrator> <sensor type="perspective"> <float name="fov" value="19.5" /> <transform name="to_world"> <matrix value="-1 0 0 0 0 1 0 1 0 0 -1 6.8 0 0 0 1" /> </transform> <sampler type="independent"> <integer name="sample_count" value="$spp" /> </sampler> <film type="hdrfilm"> <integer name="width" value="$resx" /> <integer name="height" value="$resy" /> <string name="file_format" value="openexr" /> <string name="pixel_format" value="rgb" /> <rfilter type="tent" /> </film> </sensor> <bsdf type="twosided" id="LeftWallBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.63, 0.065, 0.05" /> </bsdf> </bsdf> <bsdf type="twosided" id="RightWallBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.14, 0.45, 0.091" /> </bsdf> </bsdf> <bsdf type="twosided" id="FloorBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.725, 0.71, 0.68" /> </bsdf> </bsdf> <bsdf type="twosided" id="CeilingBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.725, 0.71, 0.68" /> </bsdf> </bsdf> <bsdf type="twosided" id="BackWallBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.725, 0.71, 0.68" /> </bsdf> </bsdf> <bsdf type="twosided" id="ShortBoxBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.725, 0.71, 0.68" /> </bsdf> </bsdf> <bsdf type="twosided" id="TallBoxBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0.725, 0.71, 0.68" /> </bsdf> </bsdf> <bsdf type="twosided" id="LightBSDF"> <bsdf type="diffuse"> <rgb name="reflectance" value="0, 0, 0" /> </bsdf> </bsdf> <shape type="rectangle" id="Floor"> <transform name="to_world"> <matrix value="-4.37114e-008 1 4.37114e-008 0 0 -8.74228e-008 2 0 1 4.37114e-008 1.91069e-015 0 0 0 0 1" /> </transform> <ref id="FloorBSDF" /> </shape> <shape type="rectangle" id="Ceiling"> <transform name="to_world"> <matrix value="-1 7.64274e-015 -1.74846e-007 0 8.74228e-008 8.74228e-008 -2 2 0 -1 -4.37114e-008 0 0 0 0 1" /> </transform> <ref id="CeilingBSDF" /> </shape> <shape type="rectangle" id="BackWall"> <transform name="to_world"> <matrix value="1.91069e-015 1 1.31134e-007 0 1 3.82137e-015 -8.74228e-008 1 -4.37114e-008 1.31134e-007 -2 -1 0 0 0 1" /> </transform> <ref id="BackWallBSDF" /> </shape> <shape type="rectangle" id="RightWall"> <transform name="to_world"> <matrix value="4.37114e-008 -1.74846e-007 2 1 1 3.82137e-015 -8.74228e-008 1 3.82137e-015 1 2.18557e-007 0 0 0 0 1" /> </transform> <ref id="RightWallBSDF" /> </shape> <shape type="rectangle" id="LeftWall"> <transform name="to_world"> <matrix value="-4.37114e-008 8.74228e-008 -2 -1 1 3.82137e-015 -8.74228e-008 1 0 -1 -4.37114e-008 0 0 0 0 1" /> </transform> <ref id="LeftWallBSDF" /> </shape> <shape type="cube" id="ShortBox"> <transform name="to_world"> <matrix value="0.0851643 0.289542 1.31134e-008 0.328631 3.72265e-009 1.26563e-008 -0.3 0.3 -0.284951 0.0865363 5.73206e-016 0.374592 0 0 0 1" /> </transform> <ref id="ShortBoxBSDF" /> </shape> <shape type="cube" id="TallBox"> <transform name="to_world"> <matrix value="0.286776 0.098229 -2.29282e-015 -0.335439 -4.36233e-009 1.23382e-008 -0.6 0.6 -0.0997984 0.282266 2.62268e-008 -0.291415 0 0 0 1" /> </transform> <ref id="TallBoxBSDF" /> </shape> <shape type="rectangle" id="Light"> <transform name="to_world"> <matrix value="0.235 -1.66103e-008 -7.80685e-009 -0.005 -2.05444e-008 3.90343e-009 -0.0893 1.98 2.05444e-008 0.19 8.30516e-009 -0.03 0 0 0 1" /> </transform> <ref id="LightBSDF" /> <emitter type="area"> <rgb name="radiance" value="17, 12, 4" /> </emitter> </shape> </scene>