Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


软件:mitsuba_3:mitsuba_3

Mitsuba 3

  1. 可以微分:从图片反推3D结构,类似神经网络的梯度下降?
  2. 可以重定向:使用不同的渲染「管道」?(确实可以自定义渲染管道,参考「Scripting a renderer」)

Mitsuba 的 sensor 默认是右手系


安装

可以使用pip(简单但稍有限制,比如可用的variants的种类会少一些),也可自行编译

变体 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

XML 和 Dict 的差别

<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

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>

逆向渲染

/var/www/DokuWikiStick/dokuwiki/data/pages/软件/mitsuba_3/mitsuba_3.txt · Last modified: 2024/12/22 09:11 by zhonghui