穿越现实的可可萝 | 基于 C4D 标准渲实景合成的简单思路

前面
【来自两年后的 UP 主的提醒:关于文章中提到的一些实景合成的渲染方法,UP 主现在已经不用或者用新的方法替代掉了。比如渲染器换成了 Redshift,在 3D 软件中只渲染模型并且模型和地面影分开渲染以便于后期调整,运动模糊效果通过后期添加等。本文章提到的方法仅代表 UP 主投稿时的经验与水平,仅供参考。】
关联视频:BV1Et4y1S7Ei,欢迎前往观看。

另外,
我不会在这篇文章中透露过多关于本次实景合成的细节,更不会手把手地教实景合成,如果您对其感兴趣,还请您自行找有关教程学习。
以后我会把自己在制作此类视频时的一些心得放在专栏中,供大家参考,也希望有大佬在看到我的文章后给我一些批评与建议。
我不是这一领域的专业人士。我可能会使用一些不同于常规教程的方法,因为我的目标仅仅是恰到好处即可。专业人士请不要对此太较真,谢谢。

一、动机
1. 为什么是可可萝?
可可萝(日:コッコロ)是手游《公主连结!Re:Dive》(以下简称 PCR)的初始角色之一,在游戏剧情中作为“向导者”来引导初期失忆的主人(即骑士,玩家角色),甚至对主人有着无微不至的照顾。和主人在一起有时会被误认为是情侣、兄妹或者父女应该是母子。

【剧透警告】
在 PCR 主线剧情【幕间 · X】到【第十章 · 第三话】中,“游戏世界”中的可可萝穿越到了“现实世界”(指 PCR 中的“现实”)。
看到这段剧情我激动不已,觉得由于不同世界造成的反差,穿越后的可可萝酱在“现实世界”中显得更加可爱。我想让可可萝酱来一次去真·现实世界的旅行。
这次用于实景合成的模型是 MMD 模型:F. 式 可萝仔 ver 1.0,作者为 i-Fox。


2. 为什么是“勾指起誓”?
在游戏中,可可萝酱给我更多的是乖巧、听话、老实、温柔的印象,所以我觉得给她使用的动作也应该是符合我对她的印象的。于是决定使用这个“勾指起誓”柔情版的动作。
虽然《勾指起誓》这首歌更多的是传达爱情,不过我觉得许多歌词也适合和可可萝酱之间的主仆关系。

二、尝试突破的项目
由于之前的作品中仍有一些让我比较失望的地方,这次我想尝试进行以下摸索:
(1)寻找更精确的摄像机跟踪方案;
(2)探索如何模拟出阴天光照下影子“软化”的效果;
(3)测试 Team Render(C4D 的一种多机渲染方案)是否可用。

三、过程
I. 模型的编辑、预览和导出
基本步骤:导入模型→导入并优化动作→烘焙模型并导出
F. 式可可萝模型的身高约为正常比例的 MMD 模型的 0.9 倍,所以【骨骼位置】要缩放到 0.9 倍。

很多主流 3D 软件不提供对 MMD 模型的原生支持,所以我打算把模型烘焙成固定动作(即每一帧的模型的形状都会被完全地记录下来)并导出为能被 C4D 支持的格式,因为这样会使模型在 MMD 中呈现的形状被完全保留下来,而且 bug 会少一点。
II. 取景和背景素材处理
基本步骤:录制素材→加工素材→导出需要的素材并编号
我用了一天时间去某市的市区进行取材。我想在星期天去取景,本以为那天是晴天,可惜天公不作美,刚出发时下起了雨,整个取景过程中天空一直阴蒙蒙的然而快黄昏了才放晴。

我只有手机作为录像设备,但是上次用手机拍摄的素材效果还不错,所以这次就继续使用手机进行取景。为了避免出现过多瑕疵并减少运算量,我将手机的录像分辨率调到了 4K,然后用软件导出为 1080P。
在准备渲染部分之前,要先确定使用哪些素材作为背景,还要避免画面的“拉风箱”(自动对焦)和明显的明暗变化。在这些素材中,有些在接下来的解算中效果不好,所以我只能用自己以前的库存来替代了。
我使用视频剪辑软件 Vegas Pro 来确定自己在哪一时段用到哪些背景素材。选出素材后,就把背景素材导出为图像序列,供软件使用。

有的一些序列必须要根据所在帧的索引号对文件名进行重命名。如果不这么做的话,例如,我要导出帧索引号为 300 到 600 的图像序列,但软件在导出时将从 0 到 300 进行命名,然后我不重新编号,那么虽然这不会影响摄像机解算(可以在导出前纠正),但是在导入到 C4D 时,C4D 会认为这是第 0 到 300 帧的背景素材,会把这段素材分配到 0 到 300 而不是 300 到 600 帧当中,从而得不到需要的效果。

III. 摄像机跟踪
1. 之前采用的 C4D 内置方案
(※下文中提到的“平面”主要是指“地面”所处的平面。)
基本步骤:导入素材→2D 跟踪→完全 3D 重建→调整摄像机位置
我在 5 月 6 日发布的视频中就使用了这种方案。它是 C4D 内置的,很方便。
很多 UP 会保持追踪点位置不变,根据追踪点的位置来确定新平面,但是由于这种方法会将坐标原点作为摄像机轨迹的起始位置,解算出来的背景中的“平面”不和 3D 环境中的平面(以下记为“xOz”,即 x 轴和 z 轴所在的平面)重合,所以还要把模型、灯光等都移动到解算出来的新“平面”上,很麻烦。我一般的做法是,选中整个“运动跟踪”(包括摄像机和追踪点),将追踪点构成的平面与 xOz 重合,这样就不用再强迫移动其他所有物体到追踪点构成的平面了。
但是这个方案有时在进行完全 3D 重建时,对空间中某些追踪点的定位不是很准确,以至于无法正确地确定平面的位置,导致模型出现轻微“滑步”。
2. 这次采用的 Boujou 方案
基本步骤:导入素材→粗追→选出优秀的追踪点→以这些追踪点为参照进行细追(效果不理想时这两步会重复 1 到 2 次;而效果好时就直接细追)→摄像机轨迹解算→调整摄像机位置→导出摄像机并导入到 C4D(这两步可以反过来,也就是在 C4D 中进行调整)
我发现有一些很成功的案例使用了 Boujou。于是我尝试使用这个软件。
这次所有的背景素材我全部使用这个软件进行解算。虽然 Boujou 导出的 C4D 文件可以直接被 C4D 打开,但是这样做会出现一些问题,要用插件“BOUJOU FIXER”修复。
总的来说,除了个别场景因为有一些干扰因素,解算的效果不好以外,其他的素材处理得还可以,追踪点的重构也比较精确。但是我仍然不敢判定 C4D 方案和 Boujou 方案哪个更优秀。

IV. 模型的导入
基本步骤:导入烘焙的模型→添加并优化材质→与摄像机解算工程合并→添加背景→调整模型缩放→添加用于生成地面阴影的平面
MMD 模型可以导入到 C4D 了。只要补上缺失的材质并进行一些优化,模型的导入就完成了。包含有 MMD 模型及其完整动作的部分,我单独保存成一个工程文件,便于与摄像机解算的工程合并。

使用 BOUJOU FIXER 导入 Boujou 解算的摄像机,调整摄像机角度使背景中的平面与 xOz 重合,然后与含有模型的工程文件合并(或者把模型复制过来),并添加一个平面用于渲染模型的地面阴影。
至此,模型和摄像机都导入好了。
V. 打光
1. 室外环境
基本步骤:添加【物理天空】和【环境】→在【物理天空】中填入方位、时间信息→调整太阳强度、环境(光)强度、阴影密度、阴影的模糊程度→预览(最后两步需要反复循环到满意为止)
室外打光很容易,因为只要考虑一种光源——太阳。
C4D 有个【物理天空】,它可以模拟出比较真实的天空和太阳光照。我用它来作为太阳的光源。
物理天空还有个很好用的地方,就是能根据所在地的位置和时间来推算太阳的方位角。位置和角度可以使用手机的指南针软件来获取,时间可以通过素材的创建日期和修改日期来推算。

有时要模拟阴天下影子“软化”的效果,但是不改动参数就渲染的话,影子还是有些偏硬。

这时可以在【物理天空】-【太阳】中,把【尺寸比率】调大。但是这可能不是唯一使影子“软化”的方法。


【尺寸比率】可根据实际情况调整。
有时,阳光照不到的一些地方会变得很黑、很难看。这就需要添加环境(光)来让照不到的地方变得稍微亮些。
2. 室内环境
(做得不好,说出去丢人,略)
VI. 滤镜、特效、合成设置
1. 渲染设置
输出的分辨率和帧率根据自己的实际需求修改。
【抗锯齿】改为 [最佳]。
勾选【保存】,输入保存路径;如果没有需求,可取消勾选【多通道】。
输出文件的格式最好是图片格式,因为很多主流的视频剪辑软件能处理图片序列。千万不要选视频格式,否则可能容易渲染出错,前功尽弃!
【以下内容适用于使用标准渲染器的工程】
添加【全局光照】(室外环境使用“物理天空”的预制方案,室内保持默认)和【环境吸收】,这两个可以使模拟的光照效果更真实。但是【环境吸收】可能会把模型渲染得更暗,如果不需要太真实的效果或者不进行实景合成,【环境吸收】是可以不添加的。
添加【矢量运动模糊】,这是一种根据顶点位置计算的运动模糊算法,渲染速度较快,但是效果稍微差些。不过如果不纠结细节的话,也是能用的。
2. C4D 标签
为了能顺利渲染背景并保持光照和阴影不受影响,这里需要添加合成标签。
给【物理天空】和【平面】添加【合成】标签,在【物理天空】的【合成】标签中,取消勾选【摄像机可见】,勾选【合成背景】;在【平面】的【合成】标签中,勾选【合成背景】。


给模型和 Boujou 解算的摄像机添加【运动模糊】标签,在和【矢量运动模糊】搭配使用时,可在渲染中呈现运动模糊效果。
VII. 渲染
1. 渲染器
我使用的是 C4D 自带的标准渲染器。这是 C4D 的默认渲染器,使用 CPU 渲染,利用几乎所有的 CPU 线程,缺点之一是渲染慢。
在 C4D 中,这是我使用的比较顺手的渲染器,而且我暂时没有其他需求,对我来说标准渲染器就够了。
有些渲染器,像 Octane、Redshift 等,相比 C4D 的渲染器会有一定的优势,有机会我会尝试。
2. Team Render(团队渲染)
在这次渲染中,Team Render 能用。
Team Render 的使用方法大致是这样的:存有工程文件的电脑(以下简称“主机”)要安装 Cinema 4D 主程序,其他辅助渲染的电脑(以下简称“客户机”)要安装 Team Render Client,而且要保持 Team Render Client 的版本和主机 C4D 主程序的版本一致,所有渲染器也要装齐且版本保持一致。渲染前主机和客户机连接。在开始团队渲染时,主机会把所有在工程中使用到的文件发给客户机,同时主机开始渲染;客户机接收完文件后,就会接收到主机分配的任务,开始渲染,并把渲染的结果传回主机。
Team Render 开始的前三天还比较顺利,但是第四天,有一台电脑无法开机。经过两天的维修后,这台电脑修好了,但是变得更加脆弱。于是我就不使用这台电脑,只使用另一台电脑进行渲染了,不过这次试验说明 Team Render 是可用的。
VIII. 后期处理
基本操作:导入图片序列→剪辑→导出成品视频
由于 C4D 渲染出来的是图片序列,所以要使用任意一款主流剪辑软件导入图片序列,并以一定的帧率重放。
在导入和解释完图片序列后,剪辑软件一般会将其视作视频流进行处理,可以像剪辑一般素材一样剪辑图片序列。
至于接下来的剪辑、导出、压制等操作,需要看自己的需求和使用的软件了。
至此,所有工作全部结束。

四、程序的报错和处理
1. Boujou 报错:“Error (300) Failure to open file for writing.”
解决方法:检查使用的资源的目录是否包含非英文字符。
不知道为什么,Boujou 不能处理路径中的中文字符。网上的很多解决方案仅仅要求用户检查使用的图片序列的目录是否含有非英文字符,然而有时这也不能解决问题,还要检查缓存路径等是否有非英文字符。比如,这个软件会默认把缓存文件放在当前用户的个人文件夹内(比如 ~\AppData\Local\Temp\,~ 为用户文件夹根目录,PowerShell 支持用 ~ 代替当前用户文件夹根目录地址),如果用户名有中文字符时也会出错。所以还要去 [Preferences] 中修改缓存目录。
2. Boujou 的预览画面中出现绿色条纹,而且画面变得有点乱,影响使用。
这是在开工两星期后出现的问题。
解决方法:未解决,暂时转移到虚拟机中使用 Boujou。
3. Vegas 或 Premiere 在使用时突然黑屏、卡机;恢复后,有时软件会闪退,显卡驱动不能正常工作。
这有可能是关闭了虚拟内存导致建立图片缓冲区失败。有一种解决方法是启用并增大虚拟内存(分页文件)。
不过之前有人建议我禁用虚拟内存,我不知道为什么。

五、UP的碎碎念
1.
这次渲染从策划、取景,到渲染、后期,用了将近一个月的时间,也耗费了大量处理器资源,本次收集的素材、产生的烘焙文件和图片序列也占用了不少空间。我得想法添置存储器对这些文件进行备份。
C4D 标准渲染器是比较慢,但是要想达到好的效果,就必须去等待。不过如果有更好的算法能用更少的时间实现相同的或者更好的效果,我也会去尝试。
2.
说到摄像机跟踪和实景合成,我想到了 AR。
有的演出用到的 AR 技术,在舞台附近的屏幕或者直播画面中就可以看到实时的 AR 效果,而且摄像机跟踪很精确,模型的渲染效果也不错。我用的一些手机 app 也能实现 AR,但是定位和渲染做得比那种演出的 AR 要差很多。
我很好奇演出的 AR 技术是怎么实现的,用的 PC 还是其他专门的设备,怎么实时获取的摄像机位置信息(是使用位置传感器还是对摄像画面实时推算),又用了什么软件进行实时渲染。我也想学习一下,说不定对我改进实景合成有帮助。

附录
I. 借物表
为了方便有需要的读者寻找资源,我会按照“"%s: %s by %s(%s)\n", 对象类型, 对象名, 作者, 视频编号”的格式来写借物表;我还会附上视频链接方便读者跳转。
BGM: 勾指起誓 by 祈Inory(BV1Nb411v79w)

Model: F. 式 可萝仔 by i-Fox(BV1iZ4y1s79t)

Motion: 勾指起誓 by 呆喵挠琴(BV1s4411t7eZ)

Camera & Stage: by me(不公开配布)
Anime fragment: copyright by Cygames(https://redive.estertion.win/)
II. 使用的软件
Boujou(摄像机跟踪解算)
Cinema 4D(渲染)
MMDBridge(导入MMD模型和动作、烘焙)
Vegas Pro(处理图片序列、视频剪辑)
小丸工具箱(压制)
李逍鱿
2020.10.6