Mitsuba 3多视角渲染简明教程

news2024/11/25 5:51:57

Mitsuba 3 是一款面向研究的渲染系统,用于正向和反向光传输模拟。 它由一小组核心库和各种插件组成,这些插件实现从材质和光源到完整渲染算法的功能。 Mitsuba 3 努力保持与其前身 Mitsuba 0.6 和 Mitsuba 2 的场景兼容性。然而,在大多数其他方面,它是一个遵循不同目标的全新系统。

在这里插入图片描述

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器

1、Mitsuba 3快速上手

Mitsuba 3 可以通过 PyPI 中的 pip 安装。 这是推荐的安装方法。

pip install mitsuba

此命令还将在你的系统上安装 Dr.Jit(如果尚未安装)。

使用下面的代码加载Mitsuba 3场景文件并渲染:

import mitsuba as mi
import matplotlib.pyplot as plt

mi.set_variant("scalar_rgb")

scene = mi.load_file("../scenes/cbox.xml")
image = mi.render(scene, spp=256)

plt.axis("off")
plt.imshow(image ** (1.0 / 2.2)); # approximate sRGB tonemapping

渲染结果如下:

在这里插入图片描述

2、Mitsuba 3多视角渲染

接下来我们介绍如何从多个角度渲染给定场景。 如果你希望生成大型合成数据集,或者正在进行一些多视图优化,这会非常方便。

让我们首先导入 mitsuba 并设置变体:

import mitsuba as mi
mi.set_variant("scalar_rgb")

2.1 加载场景

在之前的教程中,我们了解了如何从 XML 文件加载 Mitsuba 场景。 在 Mitsuba 3 中,还可以使用 load_dict() 加载由 Python 字典定义的场景。

事实上, load_dict() 函数允许我们通过将任何 Mitsuba 对象描述为 Python 字典来加载它。 字典的确切形式可以很容易地从等效的 XML 表示中推导出来,有关此主题的更多信息可以在专门的文档章节中找到。 插件文档还展示了如何使用 XML 或 dict 加载每个插件。 使用 XML 场景格式可以实现的一切也应该可以使用 Python 字典来实现。

在下面的代码中,我们实例化一个包含茶壶网格和恒定光源的场景。 本教程大量使用 ScalarTransform4f 类来创建转换。 请查看专门的操作指南,了解有关如何使用它的更多信息。

# Create an alias for convenience
from mitsuba import ScalarTransform4f as T

scene = mi.load_dict({
    'type': 'scene',
    # The keys below correspond to object IDs and can be chosen arbitrarily
    'integrator': {'type': 'path'},
    'light': {'type': 'constant'},
    'teapot': {
        'type': 'ply',
        'filename': '../scenes/meshes/teapot.ply',
        'to_world': T.translate([0, 0, -1.5]),
        'bsdf': {
            'type': 'diffuse',
            'reflectance': {'type': 'rgb', 'value': [0.1, 0.2, 0.3]},
        },
    },
})

接下来,让我们创建传感器!

2.2 创建传感器

Mitsuba 提供了高级传感器抽象以及胶片抽象,定义了如何记录场景的辐射。 出于本教程的目的,我们将重点关注传感器的放置并跳过所有其他参数。 当然,如果你愿意这样做,完全可以定义多个完全不同的传感器。 你可以在插件文档中了解有关 Mitsuba 中包含的不同类型的传感器和胶片的更多信息。

在本教程中,我们将从以圆形方式放置在茶壶周围的多个角度渲染场景。 为此,我们定义一个辅助函数 load_sensor,它创建一个传感器,该传感器具有以球坐标输入的特定位置。 如前所述, load_dict() 也可用于加载单个 Mitsuba 对象,而不仅仅是整个场景,所以我们在这里使用它。

请注意,虽然我们为每个传感器实例创建一个新的采样器和胶片,但可以为每个传感器创建一个实例,然后由所有传感器共享。

def load_sensor(r, phi, theta):
    # Apply two rotations to convert from spherical coordinates to world 3D coordinates.
    origin = T.rotate([0, 0, 1], phi).rotate([0, 1, 0], theta) @ mi.ScalarPoint3f([0, 0, r])

    return mi.load_dict({
        'type': 'perspective',
        'fov': 39.3077,
        'to_world': T.look_at(
            origin=origin,
            target=[0, 0, 0],
            up=[0, 0, 1]
        ),
        'sampler': {
            'type': 'independent',
            'sample_count': 16
        },
        'film': {
            'type': 'hdrfilm',
            'width': 256,
            'height': 256,
            'rfilter': {
                'type': 'tent',
            },
            'pixel_format': 'rgb',
        },
    })

2.3 使用特定传感器进行渲染

render() 函数可以接受很多额外的参数。 在之前的教程中,我们已经看到可以使用关键字参数 spp 指定每个像素的样本数。 我们还可以使用sensor关键字参数动态指定应该使用的传感器,而不是默认使用的场景中定义的第一个传感器。

前面的教程展示了如何使用 mi.traverse 来编辑场景。 相同的机制可用于在每次渲染后编辑传感器。 但是,我们只能编辑对象公开的参数。 因此,如果你希望从多个角度渲染同一场景,则 render 的sensor关键字参数会更加强大。

在此示例中,我们将传感器放置在以茶壶为中心的半径为半径的大球体上的固定纬度(由 theta 定义)处,并使用不同的经度值来改变经度(由phis定义)。

sensor_count = 6

radius = 12
phis = [20.0 * i for i in range(sensor_count)]
theta = 60.0

sensors = [load_sensor(radius, phi, theta) for phi in phis]

我们现在已准备好从每个传感器进行渲染:

images = [mi.render(scene, spp=16, sensor=sensor) for sensor in sensors]

最后,我们可以使用方便的 Bitmap 类直接在笔记本中快速可视化我们的六个渲染图像:

from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10, 7))
fig.subplots_adjust(wspace=0, hspace=0)
for i in range(sensor_count):
    ax = fig.add_subplot(2, 3, i + 1).imshow(images[i] ** (1.0 / 2.2))
    plt.axis("off")

渲染结果如下:
在这里插入图片描述


原文链接:Mitsuba 3多视角渲染 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1161541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS实现元素显示与隐藏的方式整理

目录 前言 一、display属性 二、visibility属性 三、opacity属性 四、height和width属性 前言 在CSS中,有多种方法可以用来控制元素的显示和隐藏。这些方法主要包括:display, visibility, opacity 和 width/height。理解这些属性的区别、使用场景以…

阿里云2核2G经济型e实例ecs.e-c1m1.large性能测评

阿里云服务器ECS经济型e实例2核2G配置规格ecs.e-c1m1.large,CPU采用Intel Xeon Platinum架构处理器,e系列云服务器是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器。目前云服…

施耐德电气远程 Pro-face Win 版远程 HMI 客户端

施耐德电气远程桌面 Pro-face Remote HMI Client for Win 是 Pro-face Remote HMI 应用程序的 Windows 桌面应用程序。它可以从一台 PC 远程查看多个 HMI RT 屏幕。 Pro-face Win 版远程 HMI 客户端 - 功能 特征 多显示器模式 一台 PC 屏幕上最多可显示 6 个屏幕。 支持全屏模…

GaussDB SQL基础语法示例-数组表达式

目录 一、前言 二、条件表达式的概念及GaussDB中的常见的数组表达式 三、GaussDB中常用的数组表达式(语法 示例) 1、expression IN (value [, ...]) 2、expression NOT IN (value [, ...]) 3、expression operator ANY/ SOME (array expression) …

c语言基础:L1-070 吃火锅

以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。 本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。 输入格式&#x…

HT5010 音频转换器工作原理

HT5010是一款低成B的立体声DA转换器,内部集成了内插滤波器、DA转换器和输出模拟滤波等电路。其可支持多种音频数字输入格式,支持24-bit字节。 该HT5010 基于一个多比特位的Δ-Σ调制器,将数字信号转化成两个声道的模拟信号并经过模拟滤波器滤…

创建ABAP数据库表和ABAP字典对象-创建表01

创建表 创建表在你的Package包中 选择(右键单击)包并从上下文菜单中选择New > Other ABAP Repository Object: 2.输入过滤器文本表>数据库表,然后选择Next。 3.输入一个名称,例如ZTRAINING_XXX(一般是具体的项目描述XXX),然后选择Nex…

Go 内存逃逸

内存逃逸(memory escape)是指在编写 Go 代码时,某些变量或数据的生命周期超出了其原始作用域的情况。当变量逃逸到函数外部或持续存在于堆上时,会导致内存分配的开销,从而对程序的性能产生负面影响。Go 编译器会进行逃…

2023年免费CRM软件盘点:14款热门工具全面比较(含开源)

在初创企业或小型企业阶段,特别是在预算有限且客户管理需求较为基础的情境下,使用免费的CRM系统通常是一个理智的选择。这类系统虽然在功能上可能不如付费版本丰富,但基本的客户信息管理、销售跟踪和沟通记录等核心功能通常都能满足需求。 对…

某全球头部ICT公司:全球多个交付中心实现安全的内外网文件交换

全球领先的ICT基础设施和智能终端提供商 H科技公司是全球领先的ICT基础设施和智能终端提供商,致力于为客户创造价值、保障网络安全稳定运行、推动产业良性发展。H科技公司聚焦全联接网络、智能计算、创新终端等领域,在产品、技术、基础研究、工程能力等…

私域流量的完美进阶:从加粉撩客到入站营销

要么写一些值得让大家看的东西,要么做一些值得让大家写的事情。 ——本富兰克林 对普罗大众来说,私域最初的印象要追溯到社交电商兴起之时。 2011年左右,微信的出现,带火了社交电商家族非常重要的成员——微商。让无数本来机会很…

折纸达珠峰高度(forwhile循环、闭包函数循环)

对折0.1mm厚度的纸张多少次,高度可达珠峰高度8848180mm。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅…

通过netstat命令查看Linux的端口占用

一、netstat 完整写作network statistics,简写为netstat ,常用的几个参数为l、n、t、u、p。 -l : 仅展示监听状态下的程序(state 为LISTEN)。 -n :会使用ip端口的方式,来进行地址的描述。不使用-n就会变成服务器的名称…

MySql优化经验分享

一条sql的具体执行过程 连接 我们怎么查看MySQL当前有多少个连接? 可以用show status命令,模糊匹配Thread, Show global status like "Thread%" show global variables like wait timeout;—非交互式超时时间,如JDBC…

HDFS集群环境部署(超级详细!!)

一、部署Hadoop的关键点 1.上传,解压到/export/server,配置软链接 2.修改4个配置文件,workers,hadoop.env.sh,core-stie.xml,hdfs-site.xml 3.SCP分发到root2,root3,并设置环境变量 4.创建数据目录,并修改文…

基于springboot实现游戏分享网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现游戏分享网站演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把游戏分享管理与现在网络相结合,利用java技术建设游戏分享网站,实现游戏分享的信息化。则对于进一步提高游戏分享管理发展,丰富游戏分享管理经验能起到…

PHP短网址短链接生成源码/长链接在线缩短源码/支持黑夜模式

源码简介: PHP短网址短链接生成源码,长链接在线缩短源码,它支持黑夜模式,反应灵敏的设计,优雅简洁的界面,大方简约。PHP源码,强大的短网址生成源码。 简洁、优雅、反应灵敏的设计。创建URL、创…

分库分表分区

分库分表分区 数据库分库、分表和分区是水平切分数据库的策略,有助于提高数据库性能、可伸缩性和负载均衡。 概念 **分库:**将一个库的数据拆分到多个相同的库中,访问的时候访问一个库。**分表:**把一个表的数据放到多个表中&a…

【数智化案例展】拜耳虫虫拜拜——全渠道倾听客户声音,持续指引产品改善与服务升级...

‍ 光速斑马案例 本项目案例由光速斑马投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 虫虫拜拜是拜耳集团成立的上门除虫服务品牌,创立初衷是通过专业科学的…

MySQL Binlog实战应用之一

一、前言 开发业务系统尤其是与财务相关的系统,需要记录每一笔变更操作的日志,这一般有两种实现方案。 1、代码中通过AOP实现,提供注解跟踪记录日志,这种方案能够比较清晰地以业务角度记录操作日志,但记录变更前的旧…