渲染TA实战:摄影测量游戏模型制作指南

hi,牛客的小伙伴们大家好~我是来自搜狐畅游引擎部的美术向技术美术,小源小榞小圆,来到畅游引擎部马上就要两年了,这次给大家分享1个摄影测量的实践细节。

为什么分享的主题是摄影测量游戏模型制作?

记得还是19年的时候,我花重金在megascans bridge上购买了很多异常精美的资源,当成宝贝一样翻来覆去的看,没成想年底的时候Epic就给Quixel收购了…然后bridge的所有资源都面向使用UE的开发者免费。那时候只觉得Epic财大气粗,没成想在第二年里的UE5演示demo里,Quixel的扫描资产配合nanite技术这么生猛。事情还没完,21年UE5 early access版本提供给了开发者,很快就有一些非常亮眼的UE5 demo出现在市面上,其中相当一部分在nanit的加持下堆砌了令人瞠目结舌的场景细节。同年Epic收购了RealityCapture,这是一家专注于使用摄影测量技术生成模型的软件公司。22年黑客帝国demo发布,无数的扫描资产和nanite让整个城市纤毫毕现。紧接着UE5正式版发布,nanite技术可以正式在游戏项目里落地使用了。相信这个时点下已经不会有人怀疑,对于下一个世代的游戏项目而言,高精度扫描的模型资产的重要性。

(↑快给人看疯了的UE5 ea版的demo《古代山谷》,这个场景的模型真的可以用“吨”来形容了)

为什么选择摄影测量技术来制作模型?

  • 制作模型最传统的方式应该就是艺术家通过各种DCC软件来制作“手工”制作了,但这样模型的产出效率、质量、以及风格,高度依赖艺术家本身的素养。在需要大量模型生产的时候,可能这并不是一个最优的做法。尤其对于写实风格的虚拟场景制作,必然会包含非常多类似墙、地面、街边的雕塑、山上的石头这类偏“背景”的元素,本身并没有太多艺术家发挥的空间。与其让艺术家花一整天去做一个“看上去像真的”的石头,出门扫描一个称心如意的石头可能速度会更快、质量会更好,因为是直接“扫描”了现实世界的场景,哪怕是不同美术师制作的模型也会有相对统一的风格。
  • 至于“扫描”模型的方式,本身也有几种不同的路径,有使用深度摄像头的来扫描模型的,有使用激光扫描仪来扫描模型的,没有选择这两种方式的原因是:前者目前似乎没有非常成熟的商用软件和设备来生成足够高精度的模型(也可能是我头发长见识短),后者仅仅是一台激光扫描仪的价格可能就要20k,有点舍不得钱包。
  • 而摄影测量仅仅在软件的选择上目前就有3DF Zephyr、Reality Capture、Metashape等很成熟的摄影测量软件,且摄影测量的入门硬件可能只需要一部手机(但后来确实也买了不少很肉疼的设备就是了……)

虽然想要获得良好的摄影测量结果需要专业的相机,至少也要搞个半画幅微单吧?但是先别划走!相信这篇指南对于使用手机来制作模型的朋友也会有所启发的。

好的,说了这么多废话,我们开始进入正题。

我们分几个部分由浅入深,一点一点来说。


Part1-摄影测量小白入门

首先我们先介绍一下摄影测量的第一次实践,我们需要什么:

  1. 随便一个能拍照的设备,手机或者相机都可以
  2. 一台win8以上系统、硬件不要太差的电脑(不要太差的具体定义是cpu双核2GHz + 16g内存 + 独立显卡 + 10+G的硬盘空间)。
  3. 软件目前用的比较多的有3df Zephyr / Reality Capture /Metashape这三款,流程简单易上手,我这一篇分享会使用3DF Zephyr作为使用的软件,原因也单纯是我买了它的Steam版。如果不纠结具体的软件使用细节的话,仨用起来应该都是差不多了。除了这哥仨,还有另外一款软件可以做摄影测量,免费而且开源,名字叫做Mesroom,但…学习起来稍微复杂了点,对摄影测量背后实现细节感兴趣的程序员可以试试。

btw,最近Capture Reality又推出了一款摄影测量软件叫做RealityScan,可以直接用手机拍照上传云端计算模型后下载,还上了UE5正式发布时候的State of Unreal,但目前实测效果并没有桌面端的效果好。

好的,那我们就开始我们的第一个摄影测量扫描吧。寻找目标的时候发现了公司的一个罐子,就拿它做我们教具好了。

陶罐君

打开相机或者手机,这里不论是相机还是手机,我们都需要开启手动模式,关闭自动白平衡、ISO、不改变EV值。自动曝光、自动白平衡都会让照片之间的相关性变弱,有可能会导致重建失败,或者在生成纹理时产生波纹。

然后我们我们先围着它拍一圈。尽量让相片覆盖小罐子的每一个角落,保证相邻的两张照片至少有30%或更多的重叠区域。这里需要注意,一旦开始拍照,一定不要移动被拍摄的物体,周围环境最好也不要有变化。然后我们就可以打开摄影测量软件了,以3DF Zephyr为例,我们新建项目→导入照片→以默认的精度运行我们的稀疏点云重建。

这个图大家就看个意思,照着这个来也没问题,但还是建议先去看一下软件使用手册。

稀疏点云运算结束后,软件会告诉我们哪些照片被成功匹配了,没有匹配到的照片会在列表里显示No。偶尔有一两张丢失了不是什么问题,但如果丢失太多照片可能会需要调整参数重新尝试进行匹配。如果反复调整参数之后仍然重建失败,可能就需要重新进行照片拍摄了。稀疏点云重建的结果如下边这个视频。我们已经可以看到罐子的大概形状了,点击软件下侧的照片,可以看到每张照片都对应着模型的一个角度,最后由所有的照片“投射”出了我们模型的点云数据。

这里我想多说一些摄影测量软件背后的原理。最左侧是我们的单张照片,可以看到上边有非常多的红点,这些红色的点是由软件计算出照片的特征点,我们导入软件的每张照片都会被提取出一定数量的特征点。中间为两张照片特征点的比较,如果有两张照片的某两个特征点信息一致,那么它们将会被匹配成一对特征点。当两张照片里有足够多特征点被成功配对后,使用他们在两张照片里的相对位置信息, 软件就可以计算出这些特征点的位置关系,也就成了我们的稀疏点云。这里用的虽然是3DF Zephyr的图,但应该不同软件的主要逻辑应该大同小异。这也就是我们为什么要让模型的每个细节出现在相邻的数张照片的原因。

图片来自3DF Zephyr官网

关于特征点、照片拍摄、重建参数我们还有很多没有展开细讲,不过不着急,作为第一个入门模型,我们先开始下一步。在工作流程里开始生成三维模型。这次我就不截图中间的设置了,保持默认,一直下一步然后运行就好。运算结束后,我们的点云也终于变成了模型。但看上去有些模糊?没有关系,三分模七分图,我们继续生成纹理化的网格,依旧是全部选择默认参数。最后结果看起来还不错?我们可以把它导出之后放在UE5里面看看效果。有内味了。

因为UE5有nanite可以用,我们甚至不用拓扑低模,就这么直接给模型丢了进来。

但实际上这只是万里长征的第一步。现在这个模型还有挺大问题:

  • 环境光照对模型有很大的影响,我们甚至能看到模型一边是黑绿色的,另一边则看起来正常一些;
  • 模型有很多的破损没有被修复;
  • 我们只有Diffuse贴图(对,这个贴图不能被称为albedo,甚至其实不应该被叫做diffuse),没有Roughness和其他所有的贴图。

虽然第一部分我只打算粗浅的实践一下摄影测量的基本步骤,但我们至少要也做出一点像样的游戏模型啊。所以,让我们开始第二次摄影测量的尝试:这一次让我们对我们的拍摄对象和拍摄环境做一些简单的布置。

这次的教具同学变成了便利的夹心面包。我把办公室工位的灯尽量都打开了,来获得一个尽可能明亮的环境。与此同时,我用白纸遮蔽了面包的顶部,来避免光源的直射造成明显的投影和高光。另外,我还手拧了一个铁丝支架,用来支撑我们的面包君,以方便我们能无死角的拍摄。

拍摄还是老样子,尽可能拍摄到面包的角角落落,左侧图片可以看到重建的每一个相机位置。

让我们略过中间生成点云、网格这些环节,直接看最后的结果,左侧是生成的模型,右侧是贴图。我们可以看到这次的颜色贴图的生成结果要比上一次的花盆好太多了,开始向着真正的albedo贴图靠近了。但再看看我们的贴图…这不像是一个能用的贴图啊,模型也有一些噪音以及残留的铁架子。

3DF Zephyr里构建的带有纹理的模型,和它的贴图

这个时候就要开始我们的美术工作流了。这里介绍一个简化的工作流:

  • 将3DF Zephy生成的模型导出,导入进ZBrush清理多余的网格,修补漏洞,执行ZRemesh,这一步不要担心网格密度低或者怎样,我们这一步只需要获得一个规则的、可以编辑UV的网格。
  • 将ZRemesh的结果导入3DsMax(或者maya/blender/..),展平一下UV。
  • 把展平UV的模型重新导入Zbrush,用带有UV的低模去投射从3DF Zephyr导出的面数高到丧心病狂的模型。细分投射重复几次后达到我们满意的细节后,我们就获得了一个带有规则UV的高面数的模型。
  • 我们可以选择在任何DCC软件来投射生成新的贴图,我这里用max没有直接用zb,直觉上感觉质量会好一点点(ZB要先投射到顶点色上,就要细分很多次,模型面数稍微高一些就容易崩溃)。
一个简单的工作流程示意

此时我们就拥有了一个人类能理解的albedo贴图,我们可以把模型和贴图导入进SubstancePainter进行进一步处理。这里我基于albedo的不同颜色来区分不同的材质、创建了蒙版,并以此为基础制作了roughness贴图、烘焙了ao然后导出到UE5里进行预览。

基于规则UV的贴图,对人类十分友好这个效果就已经相比我们的第一个模型好太多了不是?

下一个部分我们来说点进阶的玩法:室内摄影测量的场景、灯光布置。


Part2-室内摄影测量环境布置、使用偏振光获得Albedo

好的!现在我们已经是一个有一些摄影测量经验的同学了,让我们更加深入一点,看看我们上次制作模型所遇到的问题。

  • 首先,朋友们,你们知道在一个没有办法绕到后边去的办公桌上拍照片有多难吗?还要拍很多张,有时候甚至都不能确定自己是不是拍的足够多、足够清晰。
哦我的老腰!
  • 其次,如果只是扫描某个物体的话,我们其实并不需要照片里的其他背景,这些背景只会徒增电脑的工作量,让电脑的制暖性能变得更好。少数某些情况下变化的环境甚至会导致重建的失败或者错误。
  • 最后,我们的光线也不够“平均”,虽然我们用了几张a4纸遮蔽了高光,营造出了一种“这看起来像是Albedo”的感觉,但实际上如果看原始照片的话,我们还是能发现,面包的底部要更黑,顶部更亮。

所以这三个问题怎么解决呢?我们先仔细看一下我们的摄影测量软件,在导入照片的时候,我们可以使用照片蒙版。这个功能可以让软件快速识别背景并将其剔除出计算范围。这个功能并不是3DF Zephyr独有的功能,三兄弟的另外俩也有类似的功能。


而我们的第三点问题,好几年前有看过知乎人像重建大佬——京一不二的文章,知道可以使用偏振光来解决这个问题。那什么是偏振光、如何获得偏振光呢?简单来说,自然界里的光,以波的形式来看的话,波的振动方向可以是任意方向的,而我们可以用一种表面有及其细密的栅格状结构的薄膜,来过滤与其栅格方向不同的光波。过滤之后的光线就被称作线性偏振光。

图片来自CODIXX,一家来自德国生产偏光片的公司

首先,我们可以在光源发生处设置一个偏振膜,这片偏振膜能将光源的光线变成偏振光。当偏振光到达被摄物体时,会同时发生反射和漫反射。单纯的镜面反射光线因为只是单纯在物体表面弹射了一次,所以其波动方向并不会发生变化。而漫反射的发生是光线进入物体表面后,经历数次折射后再次从物体内部射出的光线,这部分光线的振动方向会被重新扰乱成各个方向。而我们只需要在相机前放置一块与光源处的偏振膜角度垂直的偏振膜,就可以几乎完全过滤掉来自物体表面的镜面反射。这种拍摄方式被称作交叉偏振拍摄。

用偏振光照射小圆同学,只有发生漫反射部分的光纤才会让光的偏振角度重新变得无序

所以我们来尝试布置一下我们的环境吧!看看我一点失败的尝试(错误示范+1):

一个非常典型的错误案例
  • 最抢眼的是这个绿幕(我买回来之后才发现就是一块绿色的化纤布,并没有什么奇特的属性),作为场景的背景。
  • 被拍摄的面包被放在了一个蛋糕裱花转台上,这样我们旋转物体的时候就不用直接用手去拿物体了,方便了很多,也保证了像面包这种物体在旋转时不会掉渣。蛋糕裱花转台旋转起来异常的顺滑非常推荐。某宝也有电动的,能更好的控制旋转角度不用手动旋转也减少很多麻烦,但贵很多就是了。
  • 相机这里使用了三脚架保持稳定,因为补光灯的光线并不足够明亮,所以需要加长曝光时间。
  • 布置了两盏平面LED补光灯,用来照亮我们的被拍摄物体。补光灯前边插了一片线性偏振膜用来创造线性偏振光。
  • 相机镜头处加了两片CPL(一般相机用的偏振滤镜都是圆形偏振镜,也就是CPL)用来过滤两盏光源的反射。但…实际上这里想当然了,为此钱包付出了一些代价……

先说CPL的坑吧,这里放一张从wiki找的CPL滤镜的示意图。CPL滤镜实际上并不单单是一个线性偏振滤镜:因为线性偏振光可能会造成数码相机的测光测距等功能无法正常工作,所以CPL在线性偏振镜后又多了一层四分之一波片,将线性偏振光转变为圆形偏振光。

图片来自Wiki-Polarizing filter (photography)

这也正是为什么CPL在从镜头内面看向外面有过滤偏振光的效果,而从外向内看则无法过滤线性偏振光的原因:因为原本的线性偏振光被转换为了圆形偏振光。所以这也导致了如果两片CPL叠在一起用的时候,实际上第二片CPL让你的画面变得更暗之外毫无用处…所以如果有计划使用多盏偏振光源并来获取纯漫反***色的朋友一定注意,相机的处的偏振镜,除了最底下一个用CPL,剩下的用LPL就可以了(线性偏振镜)。

第二点,两盏光源并不足以移除被摄物体的全部阴影,重建的结果光照不够均匀。如果要完全移除被摄物体的阴影的话还需要增加更多的光源。但…如果使用偏振光的话,多个滤镜叠在一起真的很难拧(我最多用过四层,拧中间某一层的时候经常带着前后一起转…),想想每次拍摄前都要逐个光源去对齐滤镜的垂直角度,简直噩梦。同时因为光源本身没多亮,又加上CPL和偏振膜过滤光线,导致最后相机的进光量锐减,画面变得很暗淡。为了避免高ISO带来的噪点,不得不增加曝光时间。一张照片可能要曝光数秒…

第三点是,虽然3DF Zephyr能很好地帮我们扣掉绿色的背景,但是绿色的背景产生的反光被照片忠实的记录了下来,并且在最后生成的模型上留下了非常多绿色的波纹。

原谅我在这里没有办法给大家展示一张反面典型的渲染图,因为它实在是太丑了所以我连图都没存(此处应有小圆连夜删除工程跑路被监控拍下的照片)

接下来的一段时间,我在光源等方面纠结了很久,直到我看到育碧大佬Grzegorz Baran做的摄影测量的分享…犹如醍醐灌顶。

大致说一些要点:

  • 背景尽量选黑的。任何其他颜色的背景都会有容易影响到被摄物体的反光。而黑色的背景可以最大限度的吸收光线,从而避免反光造成的问题。这里安利一下摄影专用的植绒黑色背景布,便宜又大卷,有些还带背胶,能很方便的贴在放置物品的台面上。
黑色背景能很好地避免环境反射所造成的色偏等负面影响
  • 光的衰减为距离的平方反比。下图中可以看到离光线越远,一束光线所照射的距离越远,所照射的面积是成倍增加的,而分摊到单位面积的光线和总照射面积成反比。所以我们可以让被摄物体离相机更近一些,光源、相机、被摄物体都远离背景幕布。所以如果我们的光源和相机距离被摄物体0.5米,那光线来回也只有1m,而背景距离为1.5m的话,来回就是3m,二者所返回的光线强度之比可以为9 : 1。加上我们新购入的黑色植绒幕布,基本上可以断绝背景反光的影响。
左侧图片来自Wiki-平方反比定律,右侧是最后布置工作环境的示意图
  • 大佬对比和推荐了几种灯具,简而言之,环形补光灯在微距摄影里经常用到 ,因为环形补光灯的光源围绕在镜头周围,所以它可以移除相机视野内的所有阴影,这正是我们所需要的。另外,闪光灯可以在瞬间释放大量的光,亮度拍摄的瞬间可以是LED光源的数倍。高亮度的光源可以让我们摆脱长曝光和高ISO的噪点,同时一点附带的好处是,因为闪光灯的光源过于明亮,甚至让大部分室内光源黯然失色:我们终于可以不摸黑干活了!(是的没错,之前拍照的时候我都要拉窗帘关门关灯…气氛非常迷离。)
环形补光灯可以有效的移除画面内的阴影,一般被用在微距摄影,还有牙医的口腔拍摄

Grzegorz Baran大佬推荐的型号是Godox AR400,为了避免广告嫌疑本来不应该说具体得型号,但环形闪光灯这里的选择实在是太过狭窄了,除了这个,我能找到的还有一个多炮塔神教…除此之外基本都是LED圆形补光灯。在室内使用LED光源当然完全没有问题,只需要保持房间没有其他光源,并加长相机曝光时间也可以获得很高质量的照片。但是就目前看到的大部分LED光源都没有办法处理户外的摄影测量需求。

这时候又有了一个新的问题:这款闪光灯的灯罩是一个弧面,我们没有办法向之前给平板状的LED灯塞一个片那样简单的给它做个偏振镜了。Grzegorz Baran大佬也有推荐一个专门做这样环形补光灯的偏振镜的厂家,不过人在澳大利亚(还是新西兰,有点记不清了,反正很远就对了),贵不说,现在处在疫情各种封控之中。他们网站能买,啥时候能送到就说不准了。所以我直接量尺寸打印了一个壳子,里面垫了一张亚克力的板子,然后把偏振膜贴在亚克力板上就大功告成了。(这个灯罩的max文件我还留着,设计的比较简陋但是能用,看有需要可以发给大家。)

我承认这个设计并不是一个很好的设计,卡扣设计让拆卸没有磁吸试来的方便,但……管他呢,能用就行
  • 最后一点,色彩校正。我这边买了一块较色蜘蛛24色的色卡,官方配的软件可以生成LightRoom的配置文件,批量的校准照片。色卡选什么的都行,但如果是需要软件配合的,一定注意需要能批量处理照片,不然扫描一次就几十上百张照片真的有够费眼睛。如果囊中羞涩可以直接买个中性灰色的色卡,直接在LightRoom里调下色温和色调。

最后,让我们再来看看我们新布置的工作环境。这就专业多了。

我们的新工位.jpg

让我们来对比一下使用交叉偏振拍摄和普通光源拍摄的效果:左侧使用交叉偏振拍摄的照片直观上看就比右侧暗了很多,这是交叉偏振拍摄的一个劣势,会造成光线损失。但看看右侧不使用交叉偏振方法拍摄的砂锅:一个大大的闪光灯的光斑、还有一些其他明显的镜面反射,以及依旧能看到贴了黑色植绒布的转台。反观左侧,这些问题都没有。我们几乎获得了一个纯净的黑色背景、还有几乎没有镜面反射。

左侧交叉偏振拍摄,右侧移除了灯光端的偏振片

虽然交叉偏振拍摄在上面这个对比里看起来如此美好,但它也有一些小问题。比如交叉偏正拍摄会导致金属颜色丢失。众所周知,金属没有漫反射,在很多pbr流程里我们把金属的反***色画进albedo里,只是为了制作流程的简便。而金属的这个特性,就会导致难以直接使用交叉偏振拍照的方式来扫描。

交叉偏振法拍摄的时候,来自金属部分的反射会被完全过滤掉。

这里我们在进行一次摄影测量的实践,来看看更多拍照的细节:

  • 首先,使用相机进行拍摄时,保存选项选择RAW格式。RAW格式能忠实的记录相机感光元件所捕获的光照信息,而不是将超过图像所能显示的过亮、过暗的部分裁切掉。这能让我们在后期处理曝光、颜色校准的时候有更大的调整空间。
  • 使用闪光灯拍摄我们的ISO可以尽量调低一些,一般ISO100-200完全够用,这样可以避免噪点。如果使用LED光源拍摄,我们可以使用低ISO+长曝光的方式来获得足够明亮且较少噪点的照片。
  • 光圈至少在10以上,大光圈(数字越小光圈越大)会让除对焦点之外的拍摄位置虚化,小光圈有利于我们获得更锐利的照片。做摄影测量我们需要画面尽可能清晰锐利
左侧大光圈,右侧小光圈
  • 锁定白平衡和曝光。
  • 至于对焦可以自动可以手动,个人建议使用单点或者范围自动对焦,不然模型转起来之后,可能会虚焦。

在摆放好我们的场景之后、正式开始拍摄之前,我们需要先把比色卡放在转台上,拍一张照片。这会在我们之后校准色彩时用到。

留好校色卡的照片后,我们就可以360度旋转拍摄我们的砂锅了。需要旋转拍摄数圈,从不同高度拍摄。因为我们已经可以拍摄出几乎纯净的黑色背景了,所以砂锅底面这些拍不到、不好拍的地方我们完全可以给它翻过来扣在转台上拍摄,后期把图片旋转180度就可以(有注意看拍摄罐子底部的时候突然从逆时针旋转变成了顺时针)。

拍摄完成、照片拷贝到电脑之后,我们先使用校色蜘蛛自带的软件来生成一份校准颜色的配置文件。如果没有的话这一步可以略过,直接导入Lightroom用中性灰校准一下色温和色调。然后批量导出。Lightroom很方便的一点是可以修改一张照片后复制参数,批量粘贴到其他照片。然后导出设置里有两项比较重要,一是格式选择TIFF,无压缩,16bit。这可以最大限度的保留图像的细节。二是要包含所有源数据,在我们导入照片开始重建的时候,如果我们导出了相机的元数据,就会自动匹配相机的型号和镜头参数。

在重建稀疏点云的时候,3DF Zephyr提供了几种不同的预设类型,选择正确的预设类型能更快、更精准的生成稀疏点云。如果重建的稀疏点云持续出现错误,那我们也可以试试使用高级选项。调整关键点灵敏度、匹配的精度、阶段深度、以及照片排序,有时候能将使用预设反复生成、反复出错的照片集,生成出正确的点云数据。这个过程可能会有一些花时间,需要多一些耐心。至于完全自定义参数,绝大部分时候都不会用到。

3df zephyr的几种预设,其他软件也有类似的设置

这里多提一句,拍摄时候建议按照一定顺序来拍照,比如环形或者横着拍完一行再拍摄下一行。当照片队列里前后几张照片在拍摄的时候也是位置紧邻的话,能加速重建的速度、减少重建时出现的错误匹配。

打个比方,我们拍摄了100张图片,如果这100张图片完全随机排序,我们需要让每张图片和每张图片之间互相对比特征点,这样的计算量首先会非常大,另外如果你在A位置拍摄的一张照片里的特征点,和远离B位置的一些特征点恰巧重合了,那重建出的点云可能会出现一些意想不到问题(比如重建后的结果A和B两处位置以一种奇怪的方式重叠出现在同一个位置)。但如果这100张照片是依照顺序拍摄的,那每张照片只需要比对它的前后数张照片,比如A位置出现在第7-11张照片里,B位置出现在50-55张照片里,他们各自前后比对范围是5张的话,两处特征点将不会互相产生影响。

3DF Zephyr对几个配置选项的解释

另外,当我们在使用大量高精度照片生成模型时,一次失败可能会花费比较多的时间,所以我一般会选择从稀疏点云开始,后生成密集点云,然后提取网格,最后生成纹理化网格,这样的好处在于,如果重建出现偏差时能及时返回上一步重做,而不是提取网格做完了,才发现稀疏点云的匹配有问题。

最后让我们来看看重建的结果。可以看到这次我们重建出了一个几乎完美的albedo贴图,以及一个相当精致的模型。之后就是导出进DCC处理模型、拆分UV、烘焙和制作贴图、最后导入到游戏引擎的步骤,相信各位美术师们都能八仙过海各显神通,就不多讲了。

最后得到的结果,不论是模型精度还是Albedo的颜色都很令人满意。

Part3-金属物体、过度光滑物体的扫描;小物体扫描;一些其他技巧

记得之前我们有提到,使用交叉偏振拍摄的方式难以拍摄到金属物体、产生足够的有效特征点并重建模型,所以我们的核心是要在物体表面产生足够丰富的特征点。达成这一目标有几种可行的途径:一种是使用不透明的彩色喷漆、涂料在难以捕捉的物体表面绘制图案。类似我在之前扫描砂锅的时候有在锅上画一些小的特征点,来辅助软件识别物特征。前段时间还看到有另外一种很有意思的做法,在物体表面拍上一层滑石粉。滑石粉本身不透明、细腻、白色能很好地反射光线,能在物体表面形成非常细密细节来辅助软件计算特征点。

我也尝试了一下这个神奇的方法,意外的还不错。图里这个被扫描物体是一个粉底液的盖子,本身是金属材质,直接使用交叉偏振拍摄看起来就是麻麻黑。不使用交叉偏振拍摄,它也过于光滑、反射强烈了。但排上一层淀粉之后就能在照片里看到比较清晰的表面了。看看最后的结果,考虑到这个盖子本身就是一个很小很小的物体,重建的精度也是可以接受的。同时也因为这个盖子的表面过于光滑,所以无法非常均匀的覆盖淀粉。重建的结果对我来说已经超出预期了。

原本是打算用散粉来拍一层,但事实证明散粉过于高级了,太细了拍上去根本看不出来,还得用淀粉或者滑石粉

另外一个实例是这个蛋黄酥。因为蛋黄酥的上层的表皮非常的光滑,且因为含油量比较大有较强的次表面散射的效果。这些都导致蛋黄酥的正面这部分的重建一直难以解决。但是只要轻轻刷上一层淀粉,这个问题就迎刃而解了。唯一的问题是,这些刷在表面的淀粉可能会影响最终扫描的颜色,我们需要在后期制作贴图的时候将这些结块的淀粉给移除(我直接用ps的污渍修复工具了,看起来效果其实还不错)

左侧实拍照片,中间和右侧是重建结果

最后放进引擎看起来是这个样子:

UE5截图,蛋黄酥的高光时刻。

另外值得一提的是,像这种会掉渣的甜点,大手轻轻一捏可能就掉块皮下来。一旦我们开始拍摄,我们肯定不希望在扫描完成前去动它第二次,所以有一个好的固定这类物品的支架很重要。 自己动手丰衣足食,我在东方树叶的瓶子上用热熔胶黏了俩针管并用自喷漆喷了个黑色,瓶子里装一半水,放着还挺稳的。加上针头和物体接触面积很小,非常容易修复这一点点瑕疵。用来支撑物品的支架可以千变万化,淘宝买的、自己做的,好用就行。

做手工的时候千万注意安全!

除了这些不透明的物体,玻璃、塑料的扫描也一直没有太好的解决方案,一般会采用表面喷漆的方式来获得不透明的表面,再进行扫描。

当然,除了室内拍摄,我们也可以带上相机和闪光灯去室外扫描一些素材。室外扫描的核心要义在于,尽量在阴影里拍摄 + 闪光灯亮度调高+离被拍摄物体更近一些。还记得我们之前布置室内环境的时候提到的光衰减规律吗?距离被扫描物体距离越近,就越能发挥出闪光灯的功效,让闪光灯的光线完全覆盖掉室外的自然光线,从而获得一张效果还不错的albedo贴图。

不过难免还是会遇到老问题,金属物体没有漫反射…但大概是因为在户外的缘故,这些井盖个个都是半锈了的状态,才让重建的模型看起来足够的精确,就是albedo贴图里金属部分需要单独调整颜色。这个减速带也是以相同的方式拍摄的。可以看到细节量简直爆炸…

对了朋友,如果在户外使用闪光灯的话,可能闪光会因为过热而罢工,可以离近一些拍照并把功率调小(比如1/4或者1/2)。但离近了就要拍很久,这就需要自己权衡了。

另外,我们也将生成的模型烘焙成为贴图,来制作高质量的地形材质、贴花等。

可以使用摄影测量软件重建出模型后,用DCC烘焙成贴图

这里因为距离太远导致照片部分位置的亮度不足,重建结果出现了一些难看的花纹…理想的处理方式是去重新拍一组,但是出于自己的懒惰,我就ps修了。一点点修复光照的小技巧:可以在颜色上方叠加一张50%中性灰,混合模式选择叠加,然后用加深、简单工具去调整中性灰图层的亮度,能在不伤害原始图层的前提下调整亮度。



Part4-另外一种生成贴图的方式

当然,拍照建模不只有摄影测量,我们还可以利用光照的光影信息生成贴图和模型:依次从八个方向放置光源,然后拍下光源在八个角度时候的照片,通过软件计算出法线贴图等信息。

Substance Designer里内置的两个节点,但他们最多只支持8张不同角度光源的照片,想要更精确的结果还得找别的软件或者自己写工具。

对没错,我们依旧可以用我们的大闪光灯,效果看起来还不错。

此处有另外一个冷知识:相机支架中间那根杆可以倒过来装…然后相机和闪光灯就可以垂直冲地面了,这在我们拍摄一些只能平放的东西很有用,以及拍摄地面。

左侧为拍摄现场的样子:我们需要将光源放置在八个方位并拍摄照片。

最后我实验的这样一组照片:灰度卡是为了保证不同角度照片大致的亮度是一致的。因为闪光灯一直在地上挪位置,虽然我有用尺子量,但,这样更严谨一些吧。还是使用LightRoom处理并裁剪成方形,导入Substance Designer。

相机拍摄的8张图片

Substance Designer里有一个节点分类,叫做Scan Processing,里面的Multi angel to albedo/normal是我们需要的。我们依次连接进我们八个角度光照的照片之后,坐等十多秒,就有了一张像模像样的法线。

这个节点异常简单,图片按顺序连上去就行了

最后输出的结果如下。个人觉得这样的流程快速、效果也比较能令人满意。虽然这个部分并不属于摄影测量了?但我觉得这种贴图生成方式可以成为摄影测量的重要补充方式。摄影测量虽然能够相当精确的重建物体的表面结构,但受限于摄影测量的工作原理,使用摄影测量重建一处表面需要以一定精度从不同角度反复拍摄同一处表面数次,用摄影测量的方式重建类似布料这样的细节将会是一场噩梦。相比之下多角度光照图片生成贴图的方式就要便捷很多。而这种方式的局限也显而易见:受限于闪光灯/补光灯的光线衰减,以及相机画幅的限制,每次只能生产一小块材质。并且,如果扫描的物体起伏过于剧烈,会在拍摄画面里留下很大一片阴影,而导致计算出现一些错误。

使用多角度光照重建材质这一做法也有非常多的技巧和细节,但受限于篇幅原因就不多说了。下图是一张来自Ubi多伦多Tech Art Director Dave Riganelli在他Artstation账号分享的文章的图片。大佬直接做了一个封闭的黑盒+8盏定位好的可以单独打开的光源来辅助拍摄。这套工具因为有个黑盒可以屏蔽外界光源,所以在扫描一些户外表面资产的时候简直不要太方便。在室内扫描一些表面的时候也不用花很多时间在挪动光源上了,简直提高生产力的利器(给大佬跪了)。由此可见不论是摄影测量还是多角度光源重建材质方面,都还有很多探索、自制工具提高生产效率的空间。

Dave Riganelli和他的材质制作核武器,图片来自大佬Artstation的文章分享

The End

以上就是这篇摄影测量分享的全部内容了,讲的比较琐碎。除了这篇分享里写的,以及其他博主、up制作的教学之外,摄影测量还有不少实践上的细节需要积累经验。希望这篇文章能帮助到对摄影测量技术有兴趣的朋友。另外,自知学识浅薄,实践经验也远说不上丰富。如果文章里有错误欢迎指正,但求轻喷!

另外,对游戏里的图形学、物理模拟等等感兴趣的同学,我司的追光者计划了解一下!看一眼不吃亏不上当!

文:小源小榞小圆(由于牛客暂不支持发布视频,文中视频内容欢迎大家关注搜狐畅游引擎部账号:https://zhuanlan.zhihu.com/p/504204934


欢迎加入我们!

感兴趣的同学可以在官网投递简历:

内推码:NTAI1kh



#搜狐畅游##2023秋招##渲染引擎研发工程师##内推##游戏开发#
搜狐畅游游戏引擎相关 文章被收录于专栏

带来游戏引擎最新知识和内容

全部评论

相关推荐

#我的实习求职记录#一面是电话面,我也没咋准备,结果问了一堆八股,我之前的面试都不问八股,这次全是八股,也挺离谱的。整理一下(其实是很常规的八股):1、C++相关:面向对象三大特性、虚函数表、三种继承的区别、引用和指针的区别以及大小、野指针、重写/重载/隐藏的区别、const的用法、static的用法、构造函数不能虚、析构函数建议虚、C++和C的内存区别(讲到我擅长的了,毕竟我自己剖析过ptmalloc)、内存对齐、类型转换、智能指针(shared_ptr是线程安全的吗?)、右值引用、完美转发、左值引用和指针的区别、STL容器的底层实现和复杂度、vector的扩容2、算法部分:冒泡排序的原理以及优缺点,快速排序的优缺点、稳定性3、mysql的查询优化、索引底层、B/B+的区别;redis常用数据结构,订阅与发布4、协程原理相关(有栈无栈区别、最终目的)5、TCP三次握手和四次挥手相关、TCP和UDP的区别、TCP可靠性、滑动窗口(大小怎么确定)、常用IO多路复用(太熟悉了,一通底层输出)、GET和POST的区别、TCP百万并发连接(自己实现过,这部分底层也很熟悉)6、Windows编程和linux编程的区别7、项目:还是比较看中基础组件,讲了连接池的实现总结一下:可能一面就问些基础的,上述内容我都比较熟悉,但讲出来有些还是感觉怪怪的,还是要自己整理,最好底层一点,背一下吧,最后反问问了主要的工作,说是写游戏逻辑或者改bug之类的
查看36道真题和解析 我的实习求职记录
点赞 评论 收藏
分享
5 3 评论
分享
牛客网
牛客企业服务