三維重建基礎【知識點總結】

三維重建基礎【知識點總結】

  • rasterization
  • volumetric ray-marching
  • SfM(Structure from Motion)
  • Spherical Harmonics
  • 多視圖立體(Multiple View Stereo, MVS)
  • 動畫制作專業術語

rasterization

Rasterization,中文通常譯為“光柵化”,是計算機圖形學中的一個關鍵技術,主要用于將三維幾何數據轉換為二維屏幕上可顯示的像素數據的過程。這個過程是實時渲染管道中的關鍵一步,特別是在視頻游戲、CAD設計、虛擬現實等應用中。

柵格化的基本概念
在三維場景中,復雜的模型由許多簡單的幾何形狀(如三角形)組成。光柵化就是將這些三維空間中的幾何形狀投影到二維的圖像平面上,并決定哪些像素應該被繪制以及它們的顏色應該是多少。這一過程可以分為幾個子步驟:

  1. 投影(Projection):首先,三維模型通過投影變換轉換到二維屏幕上,常見的有透視投影和正交投影。這一步驟確定了物體在最終圖像上的大小和位置。
  2. 裁剪(Clipping):將投影后位于視錐(view frustum)以外的部分去除,只保留可視部分。
  3. 三角形設置與遍歷(Triangle Setup and Traversal):將模型簡化為一系列三角形,并為每個三角形計算其邊界框,確定它覆蓋哪些像素。
  4. 像素著色(Pixel Shading):對于每個確定應被繪制的像素,計算其顏色、紋理坐標、光照效果等屬性。這通常涉及到紋理映射、陰影計算、法線貼圖等高級渲染技術。
  5. 深度測試和混合(Depth Testing and Blending):為了避免隱藏面的錯誤顯示,會進行深度測試,確保離觀察者更近的物體覆蓋遠的物體。混合則處理透明或半透明對象的顏色疊加。
    實現算法
  • 投影法:從物方(對象空間)出發,將三角面直接投影到屏幕空間并計算像素顏色。這種方法效率較高,但可能在處理邊緣和細節時精度稍差。
  • 光線法:從像方(屏幕空間)出發,模擬光線與物體表面的交點來確定像素顏色。雖然這種方法在理論上能提供更高的精度,但計算成本更高,因此較少用于實時渲染。

GPU的角色
現代圖形處理器(GPU)專門優化了光柵化過程,能夠高效地執行上述步驟,尤其是在處理大量幾何數據和復雜場景時。GPU利用并行處理能力快速遍歷像素和三角形,計算每個像素的顏色值,從而實現實時渲染效果。

總的來說,光柵化是連接三維幾何世界與最終二維顯示圖像的橋梁,是圖形渲染中不可或缺的一環。

volumetric ray-marching

Volumetric Ray-Marching 是一種用于體積渲染的技術,尤其適用于表現諸如煙霧、火焰、云朵等半透明、彌散的介質。與傳統的光柵化或光線追蹤技術不同,體積光追跡是專為處理具有體積的數據而設計的,它能夠精確地模擬光線在不透明度連續變化的介質中的傳播過程。
基本原理
在Volumetric Ray-Marching中,從觀察者的視角出發,向場景中的每一個像素發出一條光線。與傳統光線追蹤每次直接尋找最近的交點不同,體積光追跡是逐步推進的(marching),即光線不是直接射到物體表面停止,而是在進入體積區域后,按照固定的步長或者根據密度場調整步長逐步前進,同時累積沿途中與介質相互作用產生的顏色和透明度信息。
關鍵特點

  1. 逐步推進(Step-by-step Advancement):光線不是直接尋找到交點,而是按照預定的步長或根據介質密度動態調整步長前進,直到超出體積范圍或達到預設的終止條件。
  2. 累積貢獻(Accumulation of Effects):每一步,根據當前點的介質密度和光源信息,計算光線的散射、吸收或發射等效果,并累加到最終的顏色上。
  3. 適合體積渲染:特別適合于沒有明確表面的、連續分布的介質,如氣體、液體中的光影效果模擬。
  4. Signed Distance Functions (SDFs):常與Ray-Marching配合使用,SDF定義了場景中每個點距離最近物體表面的距離,正負號表示內外,這有助于精確控制光線在體積中的推進。
  5. 靈活性與藝術控制:藝術家和開發者可以靈活控制體積內部的外觀,通過調整密度函數、光照模型等,創造豐富的視覺效果。

應用場景
● 電影特效與動畫:創建逼真的爆炸、煙霧、水流等自然現象。
● 視頻游戲:在游戲中實時渲染云、霧、火等環境效果。
● 醫學影像:用于可視化人體內部結構,如CT掃描的三維重建。
● 科學研究與可視化:展示流體動力學、氣象模型等科學數據。
技術挑戰
● 性能優化:體積渲染計算密集,特別是在高分辨率下,需要高效的算法和硬件加速。
● 內存使用:體積數據通常占用大量內存,如何有效管理內存是一個挑戰。
● 真實感模擬:模擬真實的物理交互,如散射、吸收、發射,對算法精度要求高。
Volumetric Ray-Marching作為一種強大的渲染技術,隨著硬件能力的提升和算法的不斷優化,其在多個領域的應用前景越來越廣闊。

SfM(Structure from Motion)

3D的SfM(Structure from Motion)是一種計算機視覺技術,用于從一系列二維圖像中恢復并重建三維場景的結構和相機的運動軌跡。這項技術是基于多視圖幾何原理,通過分析不同視角下同一場景的圖像來估計場景中點的三維坐標以及拍攝這些圖像時相機的位置和姿態。以下是SfM技術的關鍵步驟和組成部分:

  1. 特征提取與匹配:首先,從各個圖像中提取特征點,如角點、邊緣等,并在不同圖像間進行特征匹配。這些匹配點是后續三維重建的基礎。
  2. 相機姿態估計:利用特征匹配的結果,通過幾何算法(如基礎矩陣、本質矩陣)計算出相機之間的相對姿態(旋轉和平移)。這一過程通常涉及RANSAC(隨機抽樣一致)算法來去除錯誤匹配。
  3. 三維點云重建:通過三角法或其他算法,結合已知的相機姿態和匹配點對,計算場景中特征點的三維坐標,形成稀疏或稠密的點云模型。
  4. 捆綁調整(Bundle Adjustment):這是一個優化過程,旨在同時優化所有相機的姿態參數和場景點的三維坐標,使得重投影誤差最小化。這個步驟對于提高整個三維重建的準確性和穩定性至關重要。
  5. 稠密化與表面重建:在得到稀疏點云后,可以通過各種方法進一步稠密化點云,并構建表面模型,如使用多視圖立體匹配技術或基于機器學習的方法填充空隙,生成精細的三維網格或體素模型。

SfM技術的優勢在于不需要專門的設備,僅需一組普通的二維圖像即可進行三維重建,廣泛應用于考古學、地理信息系統、電影特效、虛擬現實、無人機測繪、機器人導航等領域。然而,它也面臨一些挑戰,如在低紋理區域的特征匹配困難、大尺度重建的精度問題以及對大量計算資源的需求等。

Spherical Harmonics

Spherical Harmonics,即球諧函數,是一組定義在三維空間中單位球面上的復雜函數,常用于表示周期性或具有某種對稱性的函數。它們構成了在球面上的正交完備基,類似于在一維空間中的正弦和余弦函數,或在二維平面上的復指數函數(Fourier級數)。
球諧函數的基本性質和應用包括:

  1. 數學定義:球諧函數由兩個參數索引,通常是整數l(階數)和m(從-l到l的整數,稱為序數),記作Y_l^m(θ, φ),其中θ是極角(天頂角),φ是方位角(方位角)。它們是Legendre多項式的徑向函數與角度函數的乘積,并滿足球面上的拉普拉斯方程。
  2. 正交性與完備性:不同階數和序數的球諧函數在單位球面上是正交的,并且作為函數空間的一組基,可以用來展開任何在球面上的平方可積函數。
  3. 物理與工程應用:
    ○ 物理學:在量子力學中,球諧函數用于描述原子軌道的形狀,特別是在解決薛定諤方程時。
    ○ 圖形學:在計算機圖形學中,球諧函數用于高效地表示和處理全局光照,特別是環境光照的預計算和動態物體的光照計算(球諧光照)。
    ○ 信號處理與數據分析:用于處理具有球對稱性質的數據,例如地球物理數據、醫學成像中的腦部掃描等。
  4. 可視化:球諧函數的圖形通常展示為具有特定對稱性的模式,隨著階數增加,這些模式變得更加復雜,展現出從簡單的偶極子、四極子到更高階的多極子結構。
  5. 數學工具:在數學上,球諧函數是研究旋轉對稱性問題的重要工具,也是傅里葉分析在球面上的推廣。

由于其獨特的性質和廣泛的應用范圍,球諧函數在多個學科領域內都是一個重要的數學工具。

多視圖立體(Multiple View Stereo, MVS)

3D的多視圖立體(Multiple View Stereo, MVS)是一種計算機視覺技術,它可以從多個不同視角拍攝的2D圖像中重建出場景的三維幾何結構。MVS是立體匹配概念的擴展,它不僅限于一對圖像,而是利用兩個以上的圖像來估計場景的深度和三維形狀。以下是MVS技術的一些關鍵方面:

  1. 基本原理:MVS技術依賴于立體匹配的原則,即同一場景點在不同視角下的對應關系。通過對多幅圖像中的對應特征點進行匹配,可以計算出這些點的空間位置。這涉及到解決視差問題,即將不同視圖中同一物理點的投影差異轉換為深度信息。
  2. 三維重建目標:MVS的主要目標是從一組已知視點拍攝的照片中,估計出最有可能解釋這些照片的三維形狀。這一過程通常假定材料特性、相機視點和照明條件是已知的,盡管實際操作中這些因素往往是未知或需要估計的。
  3. 技術流程:
    ○ 特征提取與匹配:首先在各個視圖間找到對應的特征點。
    ○ 相機校準:確定各相機的內在參數(如焦距)和外在參數(如位置和朝向)。
    ○ 三維成本體構建:創建一個三維體積,其中每個體素代表場景中某點的可能性或成本,依據視圖間對應特征的匹配質量和幾何一致性。
    ○ 深度估計與優化:通過分析成本體,估計場景點的深度,并通過優化算法(如 Bundle Adjustment)精化結果,減少誤差。
    ○ 稠密化與表面重建:將深度圖轉換為點云,進一步處理得到表面模型,如網格或體素模型。
  4. 深度學習方法:近年來,深度學習技術被引入MVS,如MVSNet,它使用深度神經網絡直接從多視圖圖像中估計深度圖,提高了精度和效率。這類方法通常包含特征提取、成本體構建、深度圖預測和后處理等多個階段。
  5. 應用:MVS技術廣泛應用于地圖制作、三維建模、虛擬現實、增強現實、文化遺產保護、機器人導航、自動駕駛汽車等領域。

MVS面臨的挑戰包括處理無紋理區域、光照變化、遮擋問題以及大規模場景重建時的計算復雜度和內存需求。隨著算法的進步和計算能力的提升,這些挑戰正在逐步被克服。

動畫制作專業術語

科普幾個有關動畫制作的關鍵詞(可能不是很正確),對于一個動畫人物模型,比如Unity模型,有:

  • 頂點(vertex):動畫模型可以看成多個小三角形(四邊形)組成,每個小三角形就可以看成一個頂點。頂點越多,動畫模型越精細。
  • 骨骼點:人體的一些關節點,類似于人體姿態估計的關鍵點。每個骨骼點都由一個三元組作為參數去控制(可以查看歐拉角,四元數相關概念)
  • 骨骼蒙皮(Rig):建立骨骼點和頂點的關聯關系。每個骨骼點會關聯許多頂點,并且每一個頂點權重不一樣。通過這種關聯關系,就可以通過控制骨骼點的旋轉向量來控制整個人運動。
  • 紋理貼圖:動畫人體模型的表面紋理,即衣服褲子這些。
  • BlendShape:控制動畫角色運動有兩種,一種是上面說的利用Rig,還有一種是利用BlendShape。比如:生成一種笑臉和正常臉,那么通過BlendShape就可以自動生成二者過渡的動畫。這種方式相比于利用Rig,可以不定義骨骼點,比較方便。
  • 蒙皮:將模型從一個姿態轉變為另一個姿態,使用的轉換矩陣叫做蒙皮矩陣。(Linear Blend Skinning算法)
  • 頂點權重(vertex weights):用于變形網格mesh
  • uv map:將3D多邊形網格展開到2D平面得到 UV圖像
  • texture map:將3D多邊形網格表面的紋理展開到2D平面,得到紋理圖像
  • 拓撲(topology):重新拓撲是將高分辨率模型轉換為可用于動畫的較小模型的過程。兩個mesh拓撲結構相同是指兩個mesh上面任一個三角面片的三個頂點的ID是一樣的(如某一個三角面片三個頂點是2,5,8;另一個mesh上也必有一個2,5,8組成的三角面片)
  • linear blend skinning algorithm

每個關節的數據結構包含:關節名字、骨骼中其父節點的索引、關節的綁定姿勢之逆變換(蒙皮網格頂點綁定至骨骼時,關節的位置、定向及縮放)
參考https://zhuanlan.zhihu.com/p/256358005

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37721.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37721.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雅思詞匯及發音積累 2024.7.1

旅游場景 1.credit card 信用卡 2.driving license/licence 駕照 3.expire /?k?spa??(r)/ 駕照/護照等過期 4.platform 站臺 5.Currency 貨幣 6.Pound 英鎊 7.Deserts /d??z??ts/ 沙漠 8. hilly areas 丘陵地帶 9.wetlands 沼澤地 10.bushlands 灌木叢 11.tropi…

Dns被莫名篡改的問題定位(筆記)

引言:最近發現用戶的多臺機器上出現了Dns被莫名修改的問題,從系統事件上看并未能正常確定到是那個具體軟件所為,現在的需求就是確定和定位哪個軟件具體所為。 解決思路: 首先到IPv4設置頁面對Dns進行設置:通過ProcExp…

缺失d3dx9_43.dll是怎么回事?教你幾種靠譜的解決方法

在日常生活和工作中,電腦已經成為我們不可或缺的工具。然而,在使用電腦的過程中,我們常常會遇到一些問題,其中之一就是軟件運行時提示d3dx9_43.dll丟失。這個問題會導致軟件游戲無法啟動運行,但只要我們了解其原因和解…

LinkedHashMap、TreeMap

LinkedHashMap: 有序、不重復、無索引,底層是雙鏈表 TreeMap:底層基于紅黑樹,可以對鍵進行排序 默認排序:integer和string都是從小到大排序 例題:

git合并分支的疑問

今天遇到一個奇怪的問題: 1、后端從master拉了三個分支。分別為dev、test、和stage。 2、研發1從dev拉了分支feature1,然后commit、commit、commit……。最后request merge到dev、test和stage。成功了。 3、研發2從dev拉了分支feature2,注意,feature2…

Dataweave2 語法教程

DataWeave 是 MuleSoft 的數據語言,專門用于數據轉換和映射。在 MuleSoft 的 Anypoint Platform 中,它是數據集成的一部分。下面是一個 DataWeave 語法教程,涵蓋基本的語法和用法。 基本語法 DataWeave 腳本分為三個部分:%dw 聲…

SpringBoot整合WebClient進行Http遠程調用

使用WebClient進行Http遠程調用 文章目錄 使用WebClient進行Http遠程調用1.WebClient對象創建2.WebClient對象抽取config配置3.Get請求url參數設置4.獲取ResponseEntity對象5.Post請求測試示例代碼 WebClient 一旦創建,就是不可修改的,如果需要設置默認值…

DP:子數組問題

文章目錄 引言子數組問題介紹動態規劃的基本概念具體問題的解決方法動態規劃解法:關于子數組問題的幾個題1.最大子數組和2.環形子數組的最大和3.乘積最大子數組4.乘積為正數的最長子數組長度5.等差數列劃分 總結 引言 介紹動態規劃(DP)在解決…

音視頻開發31 FFmpeg 編碼- avcodec_find_encoder和avcodec_find_encoder_by_name

avcodec_find_encoder /** * Find a registered encoder with a matching codec ID. * * param id AVCodecID of the requested encoder * return An encoder if one was found, NULL otherwise. */ AVCodec *avcodec_find_encoder(enum AVCodecID id); 那么這個 AVCodec…

14分Top刊NC代碼開源|NSCLC單細胞+空轉腫瘤微環境分析

說在前面 說起肺癌真的過去回憶歷歷在目,小編畢業后職業生涯的第一個項目——非小細胞肺癌預后有效靶點篩選。當時肝的是轉錄組預后建模篩選。 做研發其實要求是遠遠高于發文章的,文章投不出去就降分,加工作量,做藥要是爛尾或者…

2024年7月1日 (周一) 葉子游戲新聞

老板鍵工具來喚去: 它可以為常用程序自定義快捷鍵,實現一鍵喚起、一鍵隱藏的 Windows 工具,并且支持窗口動態綁定快捷鍵(無需設置自動實現)。 喜馬拉雅下載工具: 字面意思 《星刃》早期概念圖分享 末世破敗環境推主Genki分享了《星…

Spire.PDF for .NET【文檔操作】演示:在 PDF 中創建目錄 (TOC)

目錄在增強文檔的可讀性和可導航性方面起著至關重要的作用。它為讀者提供了文檔結構的清晰概述,使他們能夠快速找到并訪問他們感興趣的特定部分或信息。這對于較長的文檔(例如報告、書籍或學術論文)尤其有價值,因為讀者可能需要多…

部署calico網絡插件

部署calico網絡插件 之前的k8s環境中主要使用了flannel作為網絡插件,這次改用calico。calico支持多種安裝方式,以下是具體的操作步驟。 1. 準備工作 環境信息 # 系統信息 rootmaster1:~# cat /etc/issue Ubuntu 24.04 LTS \n \lrootmaster1:~# uname…

MyBatisPlus 常用的注解 表映射 主鍵映射 字段映射

介紹 官網:https://baomidou.com/reference/annotation/ 指定映射表 實體類使用駝峰命名,表名應為xx_xxx等格式這樣才可以映射,但是實際開發過程中可能不一致就可以使用該方法處理。 Data TableName("employee_235") //映射的表…

求質數題目

//需求:鍵盤錄入一個正整數x,判斷該整數是否為一個質數。 //質數: //如果一個整數只能被1和本身整除,那么這個數就是質數。否則這個數叫做合數 package Base_se.Base_701;import java.util.Scanner;/*** author gyf* ClassName test* Date 2024/7/1 19:…

Linux啟動elasticsearch,提示權限不夠

Linux啟動elasticsearch,提示權限不夠,如下圖所示: 解決辦法: 設置文件所有者,即使用戶由權限訪問文件 sudo chown -R 用戶名[:新組] ./elasticsearch-8.10.4 //切換到elasticsearch-8.10.4目錄同級 chown詳細格式…

銀行家算法-操作系統中避免死鎖的最著名算法

背景 有很多文章都會介紹銀行家算法。在百度和CSDN上搜一搜能搜出很多來。很多同學會覺得這個算法很深奧,有些文章寫的又很復雜,其實真的很簡單。這里簡單記錄一下基本原理,然后大家再配合其他文章看,就能加深理解。 算法原理 …

LLaVA1.5訓練數據和時間分析

LLaVA的PT+SFT訓練_llava sft-CSDN博客文章瀏覽閱讀379次。這個階段,使用8個A100(80G)訓練LLaVA-v1.5-13B大約需要20h。全量微調,非lora跑不起來啊,以前一直用swift,llama-factory這種框架式的代碼庫,但用原作者開源的代碼也是有很多好處的。在這個階段,使用 8 個 A100(…

Oracle中 ROW_NUMBER()的語法及在對應不同需求下應如何使用

Oracle數據庫中的ROW_NUMBER()函數是一個窗口函數,它為查詢結果集中的每一行分配一個唯一的序號。這個函數在數據分析、分頁查詢、數據去重和排名問題等方面非常有用。ROW_NUMBER()函數的語法如下: ROW_NUMBER() OVER ( [ PARTITION BY column ] ORDER …

3.用戶程序與驅動交互

驅動程序請使用第二章https://blog.csdn.net/chenhequanlalala/article/details/140034424 用戶app與驅動交互最常見的做法是insmod驅動后,生成一個設備節點,app通過open,read等系統調用去操作這個設備節點,這里先用mknode命令調…