传统图形学对nerf的对比与应用落地

news2024/11/24 18:32:56

作者今年参加了China3DV的盛会,大会的发表、线下讨论、学者、工业界等等的交流着实对于Nerf有了更深的思考,以下是作者的抛砖引玉,如有不当之处敬请指出~

传统图形学与nerf的简介:

传统图形学:显示表达几何表达方式:网格(Mesh)、点云(Point cloud)、体素(Voxel)、隐式函数(Implicit),渲染主要包括两种:1、渲染管线(主实时);2、光线追踪(主离线,现也出现PC的实时光追)
在这里插入图片描述

nerf:nerf本质上提供了一种新的逆渲染方式,通过神经网络模拟连续的场+体渲染的方式。同时也是隐式可微渲染,创造性的引进神经网络达到惊艳的效果。

nerf的基本原理:

NeRF函数是(一)将一个连续的场景表示为一个输入为5D向量的函数,包括一个空间点的3D坐标位置,以及roll, pitch, yaw中的 pitch, yaw视角方向,其中roll翻转角不需要因为转动翻转角的渲染结果是一样的!输出结果中包括空间点的3D位置(或者说是体素)的密度、视角相关的该3D点颜色。以空间坐标或者其他维度(时间、相机位姿等)作为输入,通过一个MLP网络模拟目标函数,生成一个目标标量(颜色、深度等)的过程(二)基于经典的Volume rendering提出了一种可微渲染的流程,包括一个层级的采样策略。(三)提出了一种位置编码(positional encoding)将5D坐标映射到高维空间。
如下图是输入输出整体流程:
在这里插入图片描述

可微渲染

从二维图片中得到三维场景信息的渲染方式有一个名称叫——逆向渲染(inverse rendering),可微即计算渲染过程的导数。可微渲染就是实现逆向渲染的一个方法,可微即计算渲染过程的导数。对于Nerf来说,由于体渲染可微、坐标空间变换也可微,所以Nerf也是可微,即Nerf是可微渲染的一种,只是nerf是基于隐式表达+体渲染的可微渲染!可微隐式表达常有Nerf、SDF、occupancy field。

可微需要两个前提:

  • 准备参考目标图片 A:二维目标图片;可微渲染的目标就是使得渲染的结果无限接近这张参考图片,并且找到能够生成这张图片的3D 场景B。
  • 初始3D 场景 B’参数:可以是一个大致接近于真实场景的粗略的三维场景,也可以是完全随机的三维场景


在这里插入图片描述

1. 拿着个B’ 送到渲染器中,渲染得到图片 A’
2. 这一步就是和 神经网络类似了,比较 A 和 A’ 的差别,计算出Loss
3. 将 Loss Backprop 到场景B’ 中的不同参数上,比如 材质参数,镜头参数,修改这些参数的值,获得新的场景 B1’

4. 和训练神经网络一样,继续 1-3 这个过程。
可微渲染包括两方面:1、前向渲染:根据场景参数渲染出一张二维图片;2、逆向传播:将前向渲染结果与A做比较得到loss,再将梯度反向传播到场景参数中,实现优化;其中步骤3就是可微分渲染的的关键部分,因为这一步需要算梯度Gradient。Nerf的创新主要逆向渲染中是引进深度学习的神经网络去处理3这部分的梯度Gradient;前向渲染使用了拍照,借助一些工具,比如colmap处理成一些参数,再送到神经网络里

体渲染

体积数据被保存在3D纹理中,采样时进行三线性插值,这种方法被称为体素重建。体素信息会决定光的传播。体渲染主要是指通过追踪光线进入场景并对光线长度进行某种积分来生成图像或视频,具体实现的方法包括:Ray Casting,Ray Marching,Ray Tracing。

所以体渲染相比于传统的Mesh、Point,更加适合模拟光照、烟雾、火焰等非刚体因为这些是很难用几何体表现的。因为体渲染是一种可微渲染,非常适合与基于统计的深度学习相结合。
体渲染(Volume)原理:光线可以在物体内部进行散射,将3D体积数据隐式提取出来,使用体素表示,它是体渲染的最小单元,表示场的3D空间某部分的值。当光线穿越体素立方体时采样,并对每次得到的采样数据进行反复累加这种方法使用光学模型来映射体积数据并且通过摄像机发出的视线累积光照结果。累加简单来说就是当光线穿越体素立方体时对光进行等距采样,并对每次得到的采样数据进行反复累加使用混合公式:

根据射线几何公式:在这里插入图片描述
,O是原点,d是方向,t是在d方向上行进的距离,更改t的值可以定义沿射线的任何位置。

体渲染

采样(Sample),图形学中常见的采样求近似积分就黎曼和与蒙特卡洛。黎曼和:在(a,b)区间划分N等份,长度L=b-a/N,在每一份取一位置代表一小份的均值,这样的积分就是黎曼和,缺点也很明显收敛慢。相同采样数下蒙特卡洛优与黎曼和。蒙特卡洛简单来说就是根据方差来采样,方差大有更多的采样反之则小(重要性采样),就有了重要性采样与分层采样,nerf也有使用分层采样。分层采样简单来说就是一种降低方差的方法,把积分区间S分成几个较小区域Si,并把Si上积分的总和作为积分的值。
所以最终的体渲染公式:
在这里插入图片描述
理论上,我们可以对这条射线经过空间上的每个点的密度(只和空间坐标相关)和颜色(同时依赖空间坐标和入射角)进行某种积分就可以得到每个像素的颜色。当每个像素的颜色都计算出来,那么这个视角下的图像就被渲染出来了。为了解决传统图形学使用巨大的查表获取RGB和密度,Nerf采用神经网络来,建模辐射场,这样无论空间有多大,不影响我们表示辐射场的所需要的存储量,而且这个辐射场表示是连续的

传统图形学与Nerf对比:

传统图形学:
1.显示表达事先设计好后渲染、纹理贴图、材质、几何模型表达(Mesh、cloud point、体素)、场景、光照等等可编辑、可控。
2.现应用在各大工业、影视动画、娱乐游戏、VR/AR等等行业,提供了一套可编辑、并且有大量的工具、开源的成熟项目,能做到渲染大规模、特大规模的城市、移动端等等很成熟的一套体系。
3.实时全局光线(GI)、次表面散射比如SSS、PBR材质的可编辑,多光源、复杂场景的遮挡关系、除了静态model的渲染还有动态的model,比如基于动画、物理的动画这些是Nerf无法解决的,或者说有待研究的!
全局光照
次表面散射

nerf:
1.是隐式表达,端到端的渲染,不解耦,无法拆分纹理、材质、场景、等等,更无法编辑,而且Nerf现在只支持静态的场景内,动态场景不支持!
2.工具链不成熟许多问题还有待进一步的研究、解决、突破等等、nerf现状未落地、学术界好发paper,抢肉吃,先把之前在传统图形学的搬到nerf或者引进nerf的方式(由于比较新生态处于萌芽的爆发期比较混乱)。
3.性能还不能实时。现已只能在服务器上运行,移动端app做拍照图片输入,服务器输出三维模型到移动端上运行,就算是英伟达的算法最快也需要10分钟以上才可以生成对应的渲染。
4.对于nerf 的未来大会中的老师也有做了几点预测包括可能是nerf、AICG、数字人、新三维重建(可能为传统图形学服务);共识是为渲染与重建提供了一种新方法与工具等。

nerf效果

nerf的第一个产品-Luma AI

全球现已知的第一家nerf尝试落地产品的公司,3D内容方案商Luma AI,近期宣布完成了2000万美元的A轮融资,本轮融资由Amplify Partners领投,NVIDIA(NVentures)、General Catalyst跟投。
尤其该公司在23年AIGC非常火热流行的大背景下,Luma AI也加入文字、nerf图片生成3D模型。此外近期也加入AR的预览功能,在IPhone上直接预览nerf生成的3D模型。
Luma官网
YouTube
Luma AI在2022年底发布通过iPhone进行3D场景捕捉,并且融入NeRF能力,同时也可利用LiDAR实现更精准识别。APP只支持IOS,并且要求iPhone11及其以上OS版本在16.0及其以上
场景捕捉、本地图片/视频上传、新视角渲染等功能需要联网使用,其中Luma AI在新视角渲染时支持调整焦距、视角和画面比例等功能,一键导出渲染mp4视频。除此之外,在模型训练好后,场景Mesh模型及固定视角的渲染图像被加载到移动终端,支持用户在本地且离线的状态下进行交互式的查看,同时也支持3D模型的导出,比如常见的Gltf、OBJ格式等。而Web端则只支持用户上传已拍摄好的场景图片或视频,只能在网页端查看Mesh模型和固定视角的渲染图像,不支持新视角渲染和3D模型(Mesh和点云)导出
Luma AI 的unreal engine 5的插件下载插件可以直接使用,免费,无需申请 。

基于Nerf的Luma把真实场景搬进虚幻引擎 UE5

Nerf其他应用:

1、Nerf现进已知最大的应用在城市模型、GIS地理信息、CIM、地图上的三维重建,逆渲染方面;
2、NeRF跟其他3D场景表征一样,也被应用于对人体进行建模应用在数字人的脸部建模、人体建模、手部建模,比较千人千面,元宇宙的实现必须要攻克现有的设计师设计或者只能简单得掐掐脸;
3、NeRF作为一种隐式表示,为传统的图像处理方法提供了一种新思路,即从隐式神经表示,或者神经场的角度来处理图像。对图像处理提供了新的思路其中包括:压缩、去噪、超分、inpainting等。同理跟图片的处理一样,视频处理将输入视频分解并“展开”为一组分层2D地图集的方法,每个地图集都提供了视频上对象(或背景)外观的统一表示。
4、处理人脸、手外还是元宇宙的场景,Nerf能快速的把现实中的场景搬到虚拟世界中,虽然这个过程距离现在还有一些长,比如精密,LOD、材质、Mesh可编辑等等,但是这个在未来是很重要的一大方向。

结语:

我们必须理智地分析,提出一些消极观点,实现一个理智的对冲。技术如果不能落地,就会变成空中楼阁,比如16年比较火的光场相机一样。这里我们没有办法说明,隐式神经表示是未来的视觉领域的新钥匙,它的意义还需要时间和实验来证明。但是它所呈现了那一个个惊艳,确实是我们对视觉和图形学最理想的追求。

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

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

相关文章

【CloudCompare教程】010:点云的裁剪功能(分段、裁剪、筛选)

本文讲解CloudCompare点云的裁剪功能(分段、裁剪、筛选)。 文章目录 一、点云的分段二、点云的裁剪三、点云的筛选一、点云的分段 加载案例点云数据,如下图所示: 选中图层点云,点击工具栏中的【分割】工具。 点击【激活线状选择】工具: 在需要裁剪的点云上绘制现状裁剪范…

使用免费的SSL证书将nginx配置的普通网站修改为HTTPS网站

一、需求说明 已经在Centos8系统中使用nginx搭建了网站;但是该网站没有实现HTTPS协议不安全;现需要将网站升级为HTTPS站点。 Linux环境对Nginx开源版源码下载、编译、安装、开机自启https://blog.csdn.net/xiaochenXIHUA/article/details/130265983?spm=1001.2014.3001.5501

chatgpt赋能python:Python交易接口简介

Python交易接口简介 Python作为一种高级编程语言,被广泛用于各种不同的领域,其中包括金融市场交易。Python交易接口提供了一种优雅而简单的方式,使得交易者能够方便地执行自己的交易策略。 什么是Python交易接口? Python交易接…

Effective第三版 中英 | 第2章 创建和销毁对象 | 考虑静态工厂方法而不是构造函数

文章目录 Effective第三版第2章 创建和销毁对象前言考虑静态工厂方法而不是构造函数 Effective第三版 第2章 创建和销毁对象 前言 大家好,这里是 Rocky 编程日记 ,喜欢后端架构及中间件源码,目前正在阅读 effective-java 书籍。同时也把自己…

基于SSM的人才招聘网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

模拟实现库函数:strcpy

目录 通过cplusplus网站了解函数功能: 断言assert的使用: 关于const: 本篇你最应该了解的内容: 通过cplusplus网站了解函数功能: 要模拟实现库函数,首先我们需要了解这个函数的参数,函数的…

主机加固介绍

最近公司做服务器安全,开始在市场了解产品,对这一块算是短暂的研究了一段时间,有一点心得给大家分享一下。 主机加固 最近主机加固的概念被炒得火热,主机加固的功能也正在被致力于服务器安全的相关人士所关注。 那么究竟什么是主…

【CVPR2022】CSWin Transformer详解

【CVPR2022】CSWin Transformer详解 0. 引言1. 网络结构2. 创新点2.1 Cross-Shaped Window Self-Attention2.2 Locally-Enhanced Positional Encoding(LePE) 3. 实验总结 0. 引言 Transformer设计中一个具有挑战性的问题是,全局自注意力的计算成本非常高&#xff0…

chatgpt赋能python:Python代码怎么敲:了解Python编程语言

Python代码怎么敲:了解Python编程语言 Python是一种高级编程语言,具有易读易用和高效性等优点。这使得Python成为了程序员的最佳选择,并成为了广泛应用于机器学习、Web开发、数据分析等领域。 Python代码敲法:小技巧 Python代码…

chatgpt赋能python:Python主要语句介绍

Python主要语句介绍 Python是一种广泛使用的高级编程语言,其语法简介、易于学习,并有丰富的库和工具支持。在Python中,主要的语句可以帮助开发人员快速编写代码,实现各种各样的任务。在本文中,我们将介绍Python中的主…

性能优化之高Log file sync等待实战案例分享

故障情况 AWR报告如下: 之后他们把大部分业务停掉后,Log file sync等待事件还是非常高。 通过对比昨天跟今天相同时间的AWR,在业务量小非常多的情况,等待时间还是高非常大。 诊断过程 log file sync等待事件首先判断当前系统IO…

“微商城”项目(1环境搭建)

开发工具分享: 百度网盘: 链接:https://pan.baidu.com/s/1lSsCjf-_zx1ymu6uZeG26Q?pwdhuan 提取码:huan 一、环境搭建说明 本项目服务端环境要求为 Windows Apache PHP MySQL。 下面介绍如何搭建环境,部署服…

CW32系列模数转换器(ADC)

模数转换器(ADC)的主要功能是将模拟量转换为数字量,方便MCU进行处理。下面以CW32L083为例介绍CW系列的模数转换器的特点和功能,并提供演示实例。 一、概述 CW32L083 内部集成一个 12 位精度、最高 1M SPS 转换速度的逐次逼近型模…

位操作符的应用

目录 位操作符的概念: 一、&(按位与):两个整数的补码对应的二进制位有0则为0,两个同时为1才为1,得到的数仍为补码。 二、|(按位或):两个整数的补码对应的二进制位…

Effective第三版 中英 | 第2章 创建和销毁对象 | 当面临多个参数的构造器时考虑使用构建器

文章目录 Effective第三版前言第2章 创建和销毁对象当面临多个参数的构造器时考虑使用构建器 Effective第三版 前言 大家好,这里是 Rocky 编程日记 ,喜欢后端架构及中间件源码,目前正在阅读 effective-java 书籍。同时也把自己学习该书时的笔…

【KKT】∇f(x)+λ∇g(x)=0中λ的讨论

Karush-Kuhn-Tucker (KKT)条件 〇、问题背景 在阅读 Karush-Kuhn-Tucker (KKT)条件 时,不太能理解 ∇ f \nabla f ∇f 的方向,以及 ∇ g \nabla g ∇g 的方向: 为什么 ∇ f \nabla f ∇f 是指向可行域内部, ∇ g \nabla g ∇g…

Java多线程方面知识

目录 1.程序、进程、线程 2.进程与线程的内存解析 3.并发与并行 4.Java程序的线程 5.多线程的创建:方式一:继承于Thread类 6.start方法的作用 7.使用start()时要注意的问题 8.Thread类中的一些方法 9.线程的优先级 10.多线程的创建&#xff1a…

【JAVA】清缓存(打断点删除 / 新增表或字段无效)

一. 打断点无效 情景 新写了一个获取列表数据接口,前端调用的,获取到的数据为空数组。在数据库中查看,是有数据的,但是调用接口返回数据为空。接下来就打断点啦,发现无效!表现如下 没有可执行的…

【Bio】牙的分类

文章目录 IncisorCentral IncisorLateral Incisor Canine / CuspidPremolarFirst PremolarSecond Premolar MolarFirst MolarSecond MolarThird Molar / Wisdom Tooth Ref Incisor Central Incisor Lateral Incisor Canine / Cuspid Premolar First Premolar Second Prem…

第六十二天学习记录:C语言进阶:C语言预处理2

带副作用的宏参数 当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能出现危险,导致不可预测的后果。副作用就是表达式求值的时候出现的永久性效果。例如: x1;//不带副作用 x;//带有副作…