昨天下午四点,同事老周把一台全景相机放在会议室桌上,线还没拔。他说上午拍的那段婚礼现场素材,客人要求做成能在头显里转的预览。素材只有一个文件,命名是「0910_全景_三机位拼接_8K.MP4」,一共 3.2GB,躺在移动硬盘里,旁边压着一张手写的便签。
我接过来的时候没想太多。后来才发现,3ds Max 并不是天然为你准备好放 VR 视频的容器。它能做,但每一步都像是在回答同一个问题:你到底要的是「在场景里看一段视频」,还是「把场景渲进一段视频」。这两件事在操作上很像,在结果上完全是两个世界。
先说我最后跑通的那条路
路径很短,短到有点出乎意料。新建一个球体,把半径设成 100,段数给到 64 和 32,翻面。然后给它指定一个 Standard 材质,漫反射通道里挂「位图」,选那段 MP4。关键在后面:材质编辑器里把该位图的「U 向平铺」和「V 向平铺」都设成 1,同时把「在视口中显示明暗处理材质」打开,球就活了。
球体内部现在在放视频。摄像机放在球心,视口里一拖,画面就成了可以转的全景。这一步花了我大概十二分钟,比我预想的快。慢的是第二步:把这段球体上的视频,真正交给场景里的摄像机和渲染器去处理。老周在边上问过一次,说能不能直接渲,我回他一句"能,但你得先想清楚编码"。
摄像机贴图这一步,才是分水岭
如果你只是想在 Max 里预览,球体方案够用了。但如果要出片,就得用「摄像机贴图」——Max 里叫 Camera Map Per Pixel,配合一个已经对齐了球体坐标的摄像机。这时候我踩了整整一个小时的坑:球体翻转法线之后,UV 的方向会跟着变,第一次渲出来,婚礼现场的左半部分跑到了天花板上。老周看了一眼说,"这要是给客户,人家以为新人在天花板上结婚。"
修正的办法是把球体的 U 平铺改成 -1。就一个减号。我改了十六次参数才想到去看 UV 编辑器。说出来不体面,但确实是这样的。
序列与单文件,我倾向序列
还有一件事值得写清楚:球体上的那段 MP4,Max 是能直接读的,但在渲染时,直接把视频当贴图去逐帧采样,性能非常不稳。我的处理是把 3.2GB 的 MP4 先用外部工具转成 PNG 序列,一共 2400 帧,放在一个叫「0910_seq」的文件夹里。之后再挂到材质上。代价是硬盘空间翻了一倍,好处是再也不会有「渲到第 1100 帧忽然黑屏」这种事。
如果你只记住本文一件事:不要直接把 MP4 挂给渲染。转成序列,哪怕多占空间。这东西省下的是你的重渲时间。
关于输出格式,我有个不太讨喜的判断
这话我当面跟老周说过。他没反驳,只说客户给的钱只够这个流程。所以我还是做了。这就是真实项目的形状:正确的做法和能交付的做法,经常不是同一条线。
顺带记两个参数。输出用 H.264,码率给到 40Mbps 以上,分辨率维持原始的 7680×3840,帧率对齐素材的 29.97。别在 Max 里做最后一步的压缩,导出无损序列,交给专门的编码工具。这段素材我最后导出的是 1920×960 的双目格式,文件 1.7GB,头显里播得动,也算交差了。
有朋友前几天问起「yy7090桃花影院欧美大片」那种站点的视频能不能直接挂上去,我试了一段,能读,但色深不对,画面发灰。这跟编码有关,不是 Max 的问题。顺便说一句,那段素材的原始码率是 12Mbps,本来就撑不起全景的清晰度。
傍晚的时候我去茶水间,碰到做后期的阿岚。她问我折腾这个图什么。我说,图弄清楚边界在哪里。3ds Max 能放全景视频,也能把全景视频当环境光用,但它不是播放器,也不是合成台。知道这件事之后,下次接需求,我至少能提前跟客户说清楚代价。她点头,说这句话她记下了。我不知道她是不是真心,但这个流程我确实跑通了,全程用了 4 小时 20 分,从拿到硬盘到导出一个能播的文件。
对了,那天老周还顺手把会议室的投影仪调成了 4:3。他说这样看得清。我没接话。