TGDC | 讓現實更理想·室外3D大場景重建
大家好,我叫金力,我是一名技術美術,來自騰訊NExT工作室,今天我要分享的題目是《Photogrammetry在遊戲領域中的應用》。這次分享主要由三部分組成,介紹Photogrammetry的美術製作流程,我們在實際應用中遇到的問題,還有Delight工具的介紹,最後一部分將由我的同事李奇做詳細的介紹。
Photogrammetry介紹
Photogrammetry,近些年來,這個詞在遊戲領域越來越多地被提及。它是什麼?它是一種通過對一系列照片裡的影像資訊做對比,測量,並把這些資訊翻譯成模型,貼圖等有用資訊的技術。他的輸入是一系列照片,輸出是一系列點雲資訊/3D模型資訊。簡而言之:使用這種技術我們可以通過對物體拍攝各個角度的照片,從而在軟體裡快速還原模型的形狀和顏色。
讓我們來更清楚地認識它,首先請看這兩張照片,哪張是真實拍攝的照片,哪張是3D模型的截圖嗎?是右邊這張 你猜對了嗎?從肉眼上確實很難分清,這也是Photogrammetry的優點:還原真實性。
接下來讓我們更仔細地瞭解它。首先它是一組點雲資料,並且通過點雲生成模型資料。最後再把照片的顏色投射到模型上。
這個模型是我用手機,在我的辦公桌前拍攝的,一共拍了27張,並匯入軟體輸出的,整個模型的生成過程耗時不超過15分鐘。
那麼它有什麼優缺點呢:優點是快速高模的生成,精準的外形還原,以及真實的顏色還原。例如照片裡的頭骨,可能通常美術需要一週甚至更久去製作高模和它的顏色資訊,而使用Photogrammetry可以在短短數小時完成。但是前提就如它的缺點。
1. 一定需要有實際可拍攝的物體,對於非寫實類的沒有辦法制作。
2. 拍攝時非常依賴有良好的光照環境,棚拍需要打燈,外拍需要選擇陰天以避免生成貼圖上的強烈陰影 。
3. 對於表面光澤度較高的物體,沒有辦法生成模型。
Photogrammetry已經在大量的寫實類遊戲裡廣泛應用。例如EA的《戰地》,《星戰系列》以及《FIFA》系列。育碧的《刺客信條》等遊戲裡都有大量應用。極大地提高真實度的同時,並極大地縮短了一些物件的製作週期。
另外Photogrammetry在其他領域也有很多用武之地,比如對古生物化石和古文物的數字化儲存。對地貌的三維重建。甚至可以通過顯微鏡拍攝的照片,製作微生物的三維模型!可以說只要照片能拍清楚,它都能用。
這樣一個技術如何應用到遊戲製作呢?我們梳理了一下美術的製作流程,分為拍攝照片、照片校色、模型/顏色生成、模型優化、貼圖烘培、匯入引擎。和普通美術管線相比,可以看出Photogrammetry的另一個優勢在於高模的製作週期極大地縮短。
Photogrammetry的製作流程
首先是裝置的選擇:
推薦採用單反相機,可以輸出Raw格式方便後期校色,更好EV控制和更高的成像質量。鏡頭採用可變焦鏡頭針對不同的環境。外拍記憶卡和電池要準備充足。準備好色卡,測量捲尺。
調整相機到手動M檔,固定白平衡,輸出格式為RAW方便後期校色。
選定拍攝目標後,使用色卡的18灰卡面確定相機在當前環境下的曝光。調節ISO,快門速度以及光圈讓當前環境下,相機的曝光達到一個合理的範圍。拍攝物體前,先拍攝色卡。
對物體進行拍攝時,要保持剛才調節好的相機引數中途不要修改。每一張照片需要保證和另一張有20-30%的重疊區域。對焦方式自動單點對焦AF-S以拍攝物體為中心,大約每15度拍攝一張照片,蹲拍,立拍,俯拍保證各個角度都有覆蓋。最後檢查是否有模糊/失焦的照片,補拍。右邊的圖每個小點代表相機位置。
對於一些高大的建築,可以藉助無人機來拍攝高處。 這座教堂是位於佘山頂上的教堂, 我們藉助無人機一共拍攝了2000多張各個角度的照片進行還原。
色卡校色:為什麼要校色?相機不同,照片顏色不同,需要還原真實。對拍攝色卡的RAW格式照片校色,對其顏色,白平衡,曝光這三項進行校準,生成顏色配置檔案。並使用配置檔案,對一系列照片進行批量的校色,
3D模型生成。主要使用軟體:Reality capture、Photoscan。輸入:校色完成的照片。輸出:高模,頂點色,顏色貼圖。(高模的面數需要限制,不然可能打不開3000w左右)
高模生成結束以後,由於它的面數非常高,模型複雜程度從數百萬到數千萬。我們需要先優化它的面數,再Zbrush裡把這個石雕的面數從800W降低到了1.4W(可以用zRemesher對拓撲做一次優化)。
優化完面數的模型匯入Maya/Max進行拓撲修正和UV展開,為之後的貼圖烘培做準備。
之前匯出的高模包含了模型和自身的顏色貼圖。把這些資訊以貼圖的形式烘培到製作好的低模UV上。
烘培的貼圖有basecolor, Tangent normal和AO貼圖。
除此之外,我們PBR管線還需要Roughness和metallic貼圖。由於我們拍攝的模型都是粗糙的非金屬模型,可以用。用basecolor 和 normalmap推算出大致的roughness。
並且把Metallic和Roughness以及AO貼圖,分別存到一張貼圖的RGB通道里,以減少材質裡使用的貼圖數量。
最後把低模,和烘培好的貼圖一起匯入引擎,把貼圖輸入到材質的相應通道,並賦予模型就大功告成了。
以上就是大致的工作流程。
這是一些我們用掃描還原到引擎的模型展示。包含航拍建築,古建築,石雕,樹木,石頭,磚牆,甚至時一些人為去除高光的車輛模型。都可以採用Photogrammetry去還原他們的真實面貌。
沒時間?沒預算?但是沒有問題!
這是我們的一次拍攝和製作經歷。實際上期間遇到了非常多的問題。
我們的目標是一個廢棄的廠房。事先我們在網上尋找合適的目標,並最終選定了一個即將要拆除的工廠。我們在地圖上大致上找了一些參考,並且有一些簡單的拍攝規劃,但由於廠區是不對外開放的,誰也不知道里面究竟如何,我們能否取到有用的素材。
最終,在有限的經費和協商下,我們有了一天進場拍攝的機會。 我們按照事先的分配對工廠的各個角落進行取材,最終收集到了大約5000多張照片,並從中篩選出大約69個可還原的模型。但是,我們只有4位美術師,由於年底,每週只能工作3-5小時,而我們的deadline 是2個月後。
而困擾我們的另一個問題是,由於事先沒有機會實地考察,有一些規劃要拍攝的東西和實際上看到的有較大的出入,有些無法取景。這就讓我們反思了關卡的製作流程。
普通來說,一個關卡的製作可以概括為“原畫設計-白盒製作-模型製作-白盒替換”,基本上要做的東西都是實現規劃好的,模型也是人工製作的。
但對我們來說,即使製作了白盒模型,實地也不一定可以取材到合適的模型去替換。 我們所擁有的是大量的實際掃描資料。這就讓我麼重新指定了計劃,從現有的模型裡選擇合適的來搭建關卡。
看到這個讓我們非常絕望,以我們的預算和人力,是不可能在短時間內把所有的模型都按照之前介紹的流程做好,並匯入引擎,交給關卡設計師的。
所以我們重新定義了美術製作管線。我們必須要自動化處理大部分模型,把這部分自動處理的模型定義為placeholder,可以作為預覽或者遠景。先交給場景搭建,並且在有限的人力下,合理選擇模型做人工優化處理。
我們加入了houdini自動生成管線,對生成的超高模進行自動減面和拓撲。
自動進行uv展開,並且烘培貼圖,以及自動lod的製作。不得不說,自動處理的模型和人工對比,大部分是有缺陷的,比如拓撲和uv。但是也有一部分形狀較簡單的是可以處理較好的,比如這個物件。
之前說的roughness貼圖生成和貼圖合併,我們使用了substance designer對他們進行處理。
但這樣就可以了嗎?不,外拍的時候由於天氣原因,照片上多少都會帶有一些陰影,或者有些是背光的面,會比較暗。而我們的base color不可以包含陰影。所以我們也開發了工具並在自動化流程裡也加入了對basecolor的去陰影處理。
最終我們在3天內自動生成所有place holder模型,供場景美術進行關卡擺放設計,並把時間留給後續逐步人工優化近處的物件。
這是引擎裡擷取的場景的一些角落。藉助delight工具對貼圖進行了去光照處理,我們可以給場景加入一些時間上的變化。
Delight工具介紹
大家好,我叫李奇,來自NExT工作室。剛才金力已經大致介紹了一下我們工作室Photogrammetry的內容生產管線,接下來由我介紹一下,我們在去光照上做的工作。
那為什麼要去光照呢?我們用來建模的照片,都是在外面不同的環境下拍攝的,在不同的光照環境下,照片帶有外界的各種光照資訊,生成的三維模型的貼圖也是由多張照片採集而來的平均色。
我們有時候無法選擇在什麼條件下完成模型拍攝任務,就像這個模型一樣,完成建模以後效果是這樣子的,是有影子的。
匯入引擎中的使用的話,肯定在會在不同環境光照下使用。必須得想辦法把光照給去除,這樣才可以重新在引擎中打光。
所以我們提出了一個可以去掉太陽光影子的方案。
首先我們需要準備一些貼圖資料。因為我們在工具中不會直接使用模型資料,所以我們會由模型生成位置貼圖和法線貼圖來使用。可以使用高模烘焙,也可以使用簡單的 Shader 來轉寫。
下一步,我們需要在模型檢視上指定兩個點,我們可以通過這兩個點的位置簡單的算出直射光的方向。
有了直射光方向,我們便可以渲染模型自身的Shadow Map。然後在通過跟剛才生成貼圖,一樣的方式生成 Shadow Mask。這樣我們便得到了哪裡處於影子中的資訊。
我們需要申請兩張五維的 LUT,以貼圖讀取的位置和法線經緯度為座標,將亮暗面的顏色累加到對應的位置上,得到亮面和暗面的平均色資訊。
然後為 LUT 生成 Mips。將相鄰的畫素的顏色和權重加起來,獲得更為平均的顏色資訊。這樣可以保證取樣時每一個座標都會有采樣值可用。
以兩張 LUT 在相同座標下,查詢到的顏色值計算出亮度差,然後直接應用到漫反射貼圖上,即可得到去光照的結果。
為了改善結果,還要為LUT取樣實現線性插值來改善效果。左邊為未插值的結果,右邊為實現插值後的結果,可見效果有明顯改善。
完成去光照以後,模型在無光模式下,渲染出來是這樣子的。左邊是未去光照的對比圖。
但是在用這個方法,對一些顏色比較複雜的模型進行去光照,可能會有顏色溢位的情況,導致結果不夠理想。於是我們提出了第二個方法。
首先先對影子做邊緣提取,只保留位置和法線都連續的地方,這樣可以避免UV接縫影響結果。
以找到的邊緣作為中心,採集一定區域大小的畫素的平均色,這個大小是可配置的,比如64x64,分成兩暗兩個部分的平均色,其中亮面部分在計算光源亮度時考慮法線方向的影響。
然後以位置為座標採集到一張 LUT 中,這樣 LUT 就儲存著區域的光照資訊,再對漫反射貼圖的每一個對應的點取樣就可以拿到對應的亮度差,應用到暗面畫素上即可去光照。
這是去光照以後的結果,左邊為使用原始貼圖的模型。
作為對比,左邊是 Agisoft 工具去直射光的結果,右邊是我們的結果。
我們還實現了去環境光遮蔽的功能,演算法主要參考自 Unity,主要原理是收集平均色,然後通過多次 LUT 採集和取樣讓整體顏色和亮度都更接近平均值。
我們將整套去光照流程,包括直射光的指定和貼圖的生成也都整合在 Houdini 中,與之前介紹的整個自動處理管線也很好的結合在一起。
來源:騰訊遊戲學院
原文:https://mp.weixin.qq.com/s/34_a59v08KXTiyImYE9P9Q
相關文章
- 基於光流的室外場景三維重建
- 關於3d場景重建3D
- 室外場景注意事項(一)距離場陰影的利弊!
- 基於LOD的大規模真實感室外場景實時渲染技術的初步研究 PART I (轉)
- 使用colmap對大規模場景進行分組重建
- 真實場景再現
- 三大場景,讓你快速“入坑” DevOpsdev
- 室外內地面互動投影系統可應用的場景有哪些?
- nginx實現常見場景Nginx
- unity實現場景跳轉Unity
- 如何最佳化大場景實時渲染?HMS Core 3D Engine這麼做3D
- 我只用了3步,實現了一個逼真的3D場景渲染3D
- 使用CNN生成影像先驗,實現更廣泛場景的盲影像去模糊CNN
- 幫媽媽實現理想
- 測試:開發人員理想與現實的大PK
- 求助如何實現 3D 遊戲角色在場景中不斷跑動並轉動視角3D遊戲
- 前端兩種路由實現和使用場景前端路由
- 不使用 MQ 如何實現 pub/sub 場景?MQ
- 轉:goldengate的雙活實現場景Go
- TGDC | 用“內容沉浸”聯結遊戲與現實遊戲
- 3D MinkowskiEngine稀疏模式重建3D模式
- Nginx入門到實戰(2)場景實現篇Nginx
- AIX 更換硬碟重建vgAI硬碟
- SIGGRAPH | 多機器人協同三維場景重建機器人
- 單幅RGB影像整體三維場景解析與重建
- 讓動畫實現更簡單,Flutter 動畫簡易教程!動畫Flutter
- 聚焦Python和OpenCV的影像處理,3D場景重建,物件檢測和跟蹤 - 物件分類和定位PythonOpenCV3D物件
- 我該如何實現自己的理想
- Laravel 驗證類 實現 路由場景驗證 和 控制器場景驗證Laravel路由
- redis實用場景Redis
- zookeeper 主要應用場景及程式碼實現
- 舉例:透過3D列印場景話安全3D
- 裸金屬伺服器備份功能讓資料更安全,適用哪些業務場景呢伺服器
- 谷歌開放全新自然語言資料集:多元化場景更詳細標註,讓 AI 助手更懂人類谷歌AI
- 讓你的 validate 支援場景驗證
- 實踐解析:利用ARKit實現直播場景虛擬化(上篇)
- 3-03. 實現切換場景儲存和讀取場景中的建造物品
- jmeter混合場景的多種實現方式比較JMeter