听着简单,做着处处是坑。
厂房 VR 全景,客户的需求听起来很简单:把车间拍成能在线看的全景,采购商不用来现场就能看。但真到交付的时候,「清晰度够不够」这种说法就容易扯皮——我们觉得可以,客户觉得糊。
后来我们把交付标准量化了。量化之后,双方都有依据,验一次就过,不用来回改。
节点校准:整个项目的成败在这里
全景拍摄的原理是围绕一个节点拍多张照片再拼接。这个节点必须是镜头的入瞳位置,如果偏差太大,拼接时近景物体就会错位,出现明显的裂缝或者重影。
我们用的节点校准办法比较土。在离镜头一米的墙上贴一张带竖线的纸,转动机位,如果竖线在相邻两张照片里没有相对位移,节点就对了。反复微调云台的滑轨位置,直到竖起线完全对齐。
这个动作看起来很枯燥,但差别很大。节点误差 5 毫米和 2 毫米,肉眼看拼接结果差异明显。误差 5 毫米时,近处的设备轮廓会有轻微错位,远看还行,放大就露馅。压到 2 毫米以内,接缝基本看不出。
我们给自己定的标准是节点误差 2 毫米以内。校准的过程大约需要 15 到 20 分钟,用的是带滑轨的云台,前后左右都能微调。
一次返工,问题出在偷懒
说个翻车的经历。有个车间的拍摄,我图省事,用的是上一次拍摄已经校好的节点位置,想着同一套镜头同一台云台,应该一样。结果回来拼接,发现靠近拍摄点的几台机床都有明显错位,尤其是机床的直边,能看出断成两截。
排查后发现两个原因。一是上次用的是 16 毫米镜头,这次换了 8 到 15 毫米的变焦,而且实际用的是 12 毫米;不同焦段的入瞳位置不一样,节点当然不同。二是上次拆装过云台,滑轨位置有轻微变化。
返工的代价是把那个点位重拍一遍,来回路上加拍摄大约多花了四个小时。现在的规矩是每次拍摄前重新校准节点,不管上次是不是刚校过。
拍摄参数:跟环境光打交道
厂房的光线条件普遍不好。顶部有高天窗采光,但分布不均;中间可能有大量金属件反光;地面一般是水泥或者环氧地坪,深色调。
这种环境下的曝光策略是保护高光。天窗附近容易过曝,一旦过曝,拼接出来那片天就是死白,后期救不回来。我们的做法是对着天窗位置测光,用这个值定曝光,宁可暗部欠一点,反正后期能提。
参数上,我们一般用光圈 F8,ISO 100,快门根据光线定。F8 是为了保证景深,车间的纵深大,从前到后都要清晰。ISO 100 是为了减少噪点,全景拼接会放大噪点,高 ISO 出来的图整体发脏。
每张照片的原始格式用 RAW,不用 JPG。RAW 留下后期空间,尤其在处理反光区域时,RAW 能救回来的细节 JPG 救不回来。代价是文件大,一个点位 30 到 40 张,每张 40 到 60 MB,加起来接近 2 GB。
拍摄张数上,我们用一圈 8 张加顶 1 张加底 2 张,共 11 张的组合。这个数量对 12 毫米焦段足够覆盖,重叠率在 30% 左右。重叠率不能太低,低于 25% 拼接容易失败;太高又浪费存储和时间,30% 是个平衡点。
拼接:从 11 张到一张 20000 像素的图
这里有个容易忽略的环节。
拼接用 PTGui 或者类似软件。软件会自动找特征点对齐,但自动对齐的结果需要人工检查,尤其是有大面积单一颜色区域的时候,比如车间里整片的墙板或者地面,软件可能找不到足够的特征点。
遇到这种情况要加控制点,手动指定同一物体在不同照片里的位置。一个点位加 10 到 20 个控制点,能把对齐精度明显提高。
拼接完成的全景图,分辨率大约是 20000×10000 像素。这个尺寸压缩成标准的立方体贴图后,单面大约 4096×4096。如果要支持更高清的缩放查看,单面要提到 8192×8192,全文景的总像素会到 2 亿以上。
清晰度这块,我们的交付标准是:在正常浏览距离下,画面中央区域能看清单个设备上的铭牌文字。这个标准具体、可验证,比说「要清晰」好得多。实测下来,要满足这条,源图的单面分辨率至少要到 4096。
加载速度:被忽视的验收项
做完了不等于能用。
全景图做好了,还有一个经常被忽略的问题——加载速度。一张高分辨率全景图的原始文件可能几十兆,直接放上去,用户点开要等半分钟,体验很差。
解决办法是多级切片,也就是做成分块加载。用户打开时先加载低分辨率的整体预览,看清楚之后,视线停留在哪个区域就加载哪个区域的高清切块。
我们的验收标准是首屏 3 秒内出图。在 20 Mbps 的带宽条件下,这个标准实测能达成。如果客户的目标用户网络条件一般,比如厂区里的采购商用的可能是较慢的网络,那首屏标准可以放宽到 5 秒,但要保证低清预览能快速出来,不能让用户对着白屏等。
文件大小的控制也有讲究。单张立方体贴图的每个面,4096 分辨率压缩后大约 800 KB 到 1.5 MB,六个面加上缩略图,总包在 10 MB 以内比较理想。超过 20 MB 就要考虑是否分级设计得不够合理。
交互:别做太多花哨功能
VR 全景的交互功能,客户经常要求加热点、加导航、加语音讲解。我们的建议是克制。
热点是必要的,就是点击某个设备弹出说明。导航也是必要的,多个点位之间的跳转。语音讲解看场景,如果是给采购商看的验厂用途,加讲解有帮助;如果是内部培训,可能不需要。
不需要的是一些炫技功能,比如自动巡航、全景视频、天气模拟。这些功能看着有意思,实际用起来干扰观看,而且增加开发和测试成本。
我们这次交付的有 8 个点位:厂区大门、原料仓、三条产线、成品仓、检测室、办公区。每个点位 1 到 2 个热点,加上点位之间的导航条。整套东西做下来,开发工作量比想象中的小。
验收:用一份清单代替口头确认
交付时我们给的是一份验收清单,包含这些项:全景数量、单点位分辨率、拼接缝高差、加载速度、热点数量、兼容的浏览器和设备。每一项都写明具体的验证方法。
拼接缝的检查方法是放大到 200%,看接缝两侧的直线物体有没有错位。我们的标准是不超过 1 个像素的高差。这个标准很严,但达到之后基本看不到缝。
浏览器兼容性上,主流的是 Chrome、Edge、Safari,移动端要测 iOS 和安卓各两台设备。这一项容易出问题的是老版本 Safari,对某些 WebGL 特性的支持有差异,要单独测。
有了这份清单,客户验收时是照着条目逐项打勾,不是凭感觉说好不好。