劉浩君
摘要:三維影像投射技術(shù)的英文是3D projection mapping,中文有人翻譯為三維影裝,指運(yùn)用影像邊緣融合算法,開發(fā)一種將預(yù)先制作好的或?qū)崟r(shí)生成的靜態(tài)或動(dòng)態(tài)影像,通過(guò)單臺(tái)或多臺(tái)投影儀投射在三維靜態(tài)或動(dòng)態(tài)物體上的技術(shù)。三維影像投射方式分為四類:第一類將動(dòng)態(tài)的影像內(nèi)容投射在具有一定進(jìn)深的二維為主的物體上,對(duì)物體的形態(tài)和邊緣進(jìn)行影像創(chuàng)意。第二類則是將動(dòng)態(tài)的視頻內(nèi)容投射在靜態(tài)的、規(guī)范的三維幾何形體上,所投射的影像多為硬拼接,不需要使用影像邊緣融合技術(shù)進(jìn)行投射。第三類是第一類和第二類的結(jié)合,即將事先制作好的、或?qū)崟r(shí)生成的動(dòng)態(tài)視頻內(nèi)容投射到異形三維立體上。第四類是第三類的發(fā)展,使用多臺(tái)投影儀運(yùn)用影像邊緣實(shí)時(shí)融合技術(shù),在繞軸進(jìn)行360度自轉(zhuǎn)的異形三維物體上,進(jìn)行動(dòng)態(tài)、實(shí)時(shí)影像內(nèi)容的投射。本文是第四類投影方式,通過(guò)進(jìn)一步研究虛擬空間和現(xiàn)實(shí)空間的關(guān)系,完成兩者的同步,虛擬攝像機(jī)拍攝到的內(nèi)容即是投影儀需要顯示的內(nèi)容,最終實(shí)現(xiàn)對(duì)物體的完全覆蓋。
關(guān)鍵詞:旋轉(zhuǎn)物體;三維影裝;三維影像投射;投影儀
1.引言
隨著投影技術(shù)的發(fā)展,虛擬世界和現(xiàn)實(shí)世界有了一種很好地同步結(jié)合方式——三維影像投射。通過(guò)三維影像投射技術(shù)。藝術(shù)家可以將虛擬世界創(chuàng)造的藝術(shù)作品與現(xiàn)實(shí)世界的物體進(jìn)行同步,完成虛擬世界到現(xiàn)實(shí)世界的轉(zhuǎn)換,將虛擬世界的內(nèi)容通過(guò)異面投影技術(shù)真實(shí)的展現(xiàn)在人們面前。相對(duì)于傳統(tǒng)形式,三維影像投射技術(shù)更加自由,任何可以反射投影光的物體都可以作為被投影介質(zhì),而投影物體的立體性可以很好地增加投影內(nèi)容的真實(shí)感,可以很好地吸引觀眾的目光,同時(shí)使用實(shí)時(shí)渲染三維影像投射系統(tǒng)可以便捷地更換顯示內(nèi)容,豐富展示的多樣性。不會(huì)讓人感覺到枯燥。
本文主要研究一種新的投影融合算法設(shè)計(jì)技術(shù),設(shè)計(jì)了一個(gè)軟件與硬件結(jié)合的系統(tǒng),最終可以在這樣的系統(tǒng)中,將動(dòng)態(tài)的科學(xué)與藝術(shù)結(jié)合的影像內(nèi)容,對(duì)360度繞軸旋轉(zhuǎn)的三維異形物體進(jìn)行預(yù)先制作好的或者實(shí)時(shí)生成的動(dòng)態(tài)影像內(nèi)容的投射,從而在科學(xué)普及、科學(xué)與藝術(shù)結(jié)合的展示領(lǐng)域,形成具有強(qiáng)烈藝術(shù)感染力的三維動(dòng)態(tài)影像投影效果和作品。本文對(duì)于系統(tǒng)的設(shè)計(jì)思路與實(shí)現(xiàn)方法進(jìn)行了深入的探討。
2.渲染內(nèi)容的簡(jiǎn)介
2.1模型內(nèi)容的建立
首先需要明確的是三維掃描后錄入的數(shù)據(jù)其形式。通過(guò)三維掃描儀錄入電腦的是點(diǎn)云,及每一次激光反射的位置和距離,這樣的一系列點(diǎn)集構(gòu)成了整個(gè)模型的點(diǎn)云。通過(guò)三維掃描儀自帶的軟件進(jìn)行補(bǔ)洞操作后,完整模型就完成了,但是補(bǔ)洞的模型只有大致形狀,沒有任何走線,所有面由無(wú)數(shù)小三角面構(gòu)成,顯然這些密集的三角面是不能作為虛擬模型加載的。其占用資源過(guò)多,需要進(jìn)行拓?fù)洹?/p>
在獲得了已經(jīng)補(bǔ)完洞的模型后,需要對(duì)模型進(jìn)行拓?fù)洹M負(fù)涞姆绞酵耆揽磕P蛶煹慕?jīng)驗(yàn)和手法,如何體現(xiàn)物體的細(xì)節(jié),如何保證拓?fù)涞哪P图扰c原物體基本一致,又要保證盡量少的走線。這些都與模型師的經(jīng)驗(yàn)息息相關(guān)??偟膩?lái)說(shuō)拓?fù)涞淖罴呀Y(jié)果是保證最少的走線和最佳的模型形狀,盡量貼合三維掃描的模型,滿足上述條件的拓?fù)淠P筒攀潜容^好的模型,相對(duì)來(lái)說(shuō)技術(shù)要求較高。
獲得拓?fù)淠P秃笮枰獙⑵滢D(zhuǎn)換成WW可以識(shí)別的模型形式,VVVV主要使用DirectX進(jìn)行渲染,使用的也是DirectX默認(rèn)的后綴名為.X的模型文件。默認(rèn)包含兩部分,包含模型文件以及動(dòng)畫鍵。MAYA和3DMAX都有其轉(zhuǎn)換插件,這部分交給插件即可。
最后需要對(duì)模型文件進(jìn)行加載,VVVV中加載模型文件有自己的節(jié)點(diǎn)。但是只提供了基本的模型信息,其余的位移、旋轉(zhuǎn)、變形矩陣等信息需要自行設(shè)計(jì),基本設(shè)計(jì)如圖1所示。
至此,模型模塊從錄入、拓?fù)洹⒌郊虞d完成了整個(gè)的流程,成為了構(gòu)建虛擬空間的基礎(chǔ)。
2.2實(shí)時(shí)渲染的設(shè)計(jì)
擁有模型之后。虛擬世界才算是有建立的基礎(chǔ),實(shí)時(shí)渲染的基本要素如圖2所示:
構(gòu)成本文虛擬空間的基本要素如圖2所示,分別是:
(1)模型:在獲得拓?fù)淠P秃螅D(zhuǎn)換成VVVV可以識(shí)別的模型文件,同時(shí)要保證文件的UV合理展開,保證模型的大小合適,方便調(diào)整。滿足如上要求才算符合要求。
(2)著色器:DirectX擁有自己的渲染器,需要利用其自己的語(yǔ)言來(lái)完成對(duì)模型渲染的操作,包括燈光、融合拼接等。
(3)攝像機(jī):作為與現(xiàn)實(shí)世界同步的虛擬構(gòu)建,攝像機(jī)的參數(shù)需要保證與投影儀的參數(shù)完全保證一致,焦距,高度,距物體距離,中心位置等等,必須與現(xiàn)實(shí)世界同步。
(4)相對(duì)位置信息:除基本的位置、角度信息外,物體與物體之間的相對(duì)位置也需要保證,其中之后同步階段需要虛擬世界和現(xiàn)實(shí)世界保持一致的旋轉(zhuǎn)參數(shù)等。
(5)藝術(shù)視頻文件:在UV基礎(chǔ)上根據(jù)藝術(shù)內(nèi)容進(jìn)行加載的圖形視頻文件,對(duì)于藝術(shù)設(shè)計(jì)而言,這將是展現(xiàn)整個(gè)視覺效果的部分,在之前藝術(shù)設(shè)計(jì)部分已經(jīng)詳細(xì)描述。
其中不得不說(shuō)的是融合拼接的方式。一般的平面投影的拼接方式較簡(jiǎn)單,根據(jù)融合公式即可進(jìn)行較完整的融合拼接。但顯然在不規(guī)則曲面上沒有辦法找到一個(gè)普適的算法可以讓所有的物體都可以做到很好地融合。每一個(gè)投影儀根據(jù)其位置和角度不同,所能顯示模型的角度和大小都不可能完全一樣,所以類似平面上通過(guò)投影儀畫面做切割進(jìn)行融合的方式在異面投影上是不可取的。
異型投影的融合通常分兩類。一類是完全的硬拼接。通常立方體等有明顯的面變化,或者形狀簡(jiǎn)單,可以對(duì)模型形狀和大小可以精確變換的模型可以使用硬拼接。另一類是軟拼接,通過(guò)劃分融合帶,對(duì)兩個(gè)融合帶進(jìn)行疊加來(lái)達(dá)到融合拼接的目的。本文的汽車沒有明顯的面與面的劃分,由于點(diǎn)數(shù)眾多,也沒有辦法進(jìn)行精確的形狀調(diào)整,只能使用軟拼接的方式完成融合。
根據(jù)汽車模型的特點(diǎn),其形狀類似長(zhǎng)方形,故一臺(tái)投影最多可以覆蓋其中的三個(gè)面,顯然,光路直線的原理表明,投影儀最多只可能覆蓋到三個(gè)平面,不可能超過(guò)三個(gè)。
以汽車作為示例,由于汽車的前面和尾部的面較小,所以并不需要單獨(dú)分割出來(lái),連接到汽車頂面即可,故整個(gè)分割方案如圖3所示:
紅色和綠色線內(nèi)為融合帶,通過(guò)融合算法進(jìn)行軟拼接,
設(shè)計(jì)完融合帶分割方案后,還需要根據(jù)物體轉(zhuǎn)動(dòng)情況確定融合帶精確位置,具體算法如下:
頂面分割方案相對(duì)簡(jiǎn)單,首先依據(jù)輸入角度來(lái)進(jìn)行位置映射,根據(jù)同步模塊反饋的角度信息R,以及當(dāng)前渲染點(diǎn)坐標(biāo)信息來(lái)判斷渲染點(diǎn)處理方案;整個(gè)融合帶由六條直線構(gòu)成最終形成如圖3所示,根據(jù)與各邊相交點(diǎn)。通過(guò)斜率公式(1)??梢缘玫街本€的斜率式(2):
我們只需要根據(jù)斜率求出相應(yīng)的系數(shù)A、B、C即可獲取直線的標(biāo)準(zhǔn)式,從而通過(guò)點(diǎn)到直線標(biāo)準(zhǔn)式(3):
在獲得基本分割信息后,需要結(jié)合之前獲取的信息進(jìn)行落點(diǎn)判定,判定方法為利用點(diǎn)到直線距離d,界定當(dāng)前渲染點(diǎn)距離分割方案中直線的與點(diǎn)的距離,以此判斷出當(dāng)前點(diǎn)屬于哪一個(gè)區(qū)域,不同區(qū)域?qū)?yīng)不同的處理算法進(jìn)行數(shù)據(jù)處理。判定結(jié)果分為三種,如圖4所示:
其中1區(qū)域?yàn)槿@示區(qū)域,圖像亮度不做任何變換,2為反向融合帶,3為正向融合帶。判斷點(diǎn)處于哪個(gè)區(qū)域時(shí)首先判斷是否處于兩條紅線范圍內(nèi)即是否是1或3區(qū)域,然后判斷是否處于紅線和綠線之間,完成對(duì)點(diǎn)顯示亮度的映射。具體算法描述如下:
算法一頂面融合帶算法
任務(wù):求解每個(gè)渲染點(diǎn)亮度變換系數(shù)初始化:獲取同步模塊角度信息,獲取分割方案中六條直線對(duì)應(yīng)系數(shù)A1..A6,B1..B6,C1..C6。
重復(fù)以下步驟直至所有貼圖點(diǎn)都完成渲染:
(1)獲取當(dāng)前渲染點(diǎn)坐標(biāo)X,Y,以及當(dāng)前渲染點(diǎn)顏色COL
(2)通過(guò)點(diǎn)到直線公式(3)判斷渲染點(diǎn)坐標(biāo)與各直線位置。
(3)落點(diǎn)處于圖4中1區(qū)域的,當(dāng)前點(diǎn)顏色COL不進(jìn)行改變。跳轉(zhuǎn)到(7)
(4)落點(diǎn)處于圖4中2區(qū)域的。當(dāng)前點(diǎn)顏色COL進(jìn)行反向融合帶矯正,根據(jù)公式(3)所得距離d,判斷出點(diǎn)在融合帶中的相對(duì)位置。跳轉(zhuǎn)到(6)
(5)落點(diǎn)處于圖4中3區(qū)域的,當(dāng)前點(diǎn)顏色COL進(jìn)行正向融合帶矯正。根據(jù)公式(3)所得距離d,判斷出點(diǎn)在融合帶中的相對(duì)位置。跳轉(zhuǎn)到(6)
(6)根據(jù)相對(duì)位置以及邊緣融合算法求出當(dāng)前亮度系數(shù),與COL相乘得出當(dāng)前點(diǎn)新的顏色。
(7)判斷是否是最終渲染點(diǎn),是則結(jié)束,否則跳轉(zhuǎn)到(1)
輸出:完整的一幀圖像內(nèi)容算法流程圖如圖5所示:
相對(duì)于頂面分割來(lái)說(shuō),側(cè)面分割比較繁瑣,首先要考慮到的是分割帶位置問(wèn)題,由于光線的直線性,融合帶的最佳位置與貼圖并不是線性關(guān)系,如圖6分解所示:
假設(shè)圖左為投影覆蓋范圍,那么顯然融合帶位置起始到消失的角度范圍是與物體寬度有關(guān)的,首先討論投影角度范圍,由圖6可知,投影角度范圍可由:
其中s為物體寬度,d為投影垂直位置與轉(zhuǎn)臺(tái)中心之間的距離,由此得出投影帶角度范圍為;但顯然,剛到角度時(shí),投影角度并不好,角度旋轉(zhuǎn)后也不是按照線性關(guān)心來(lái)確定融合帶位置的,經(jīng)過(guò)反復(fù)驗(yàn)證,使用一個(gè)正弦函數(shù)來(lái)進(jìn)行數(shù)據(jù)建模比較符合實(shí)際規(guī)律,即融合帶位置與角度關(guān)系公式如下:
其中為當(dāng)前轉(zhuǎn)臺(tái)角度,P為融合帶在貼圖上的位置,通過(guò)公式(5)即可獲得一個(gè)由角度到位置的關(guān)系函數(shù),從而確定融合帶具體位置。具體算法如下:
算法二側(cè)面融合帶算法
任務(wù):求解每個(gè)渲染點(diǎn)亮度變換系數(shù)
初始化:獲取同步模塊角度信息。獲取由公式(4)所得角度范圍。重復(fù)以下步驟直至所有貼圖點(diǎn)都完成渲染:
(1)獲取當(dāng)前渲染點(diǎn)坐標(biāo)X,Y,以及當(dāng)前渲染點(diǎn)顏色COL。
(2)通過(guò)點(diǎn)到直線公式(3)判斷渲染點(diǎn)坐標(biāo)與各直線位置。
(3)落點(diǎn)處于圖4中1區(qū)域的,當(dāng)前點(diǎn)顏色COL不進(jìn)行改變。跳轉(zhuǎn)到(7)
(4)落點(diǎn)處于圖4中2區(qū)域的。當(dāng)前點(diǎn)顏色COL進(jìn)行反向融合帶矯正,根據(jù)公式(3)所得距離d,判斷出點(diǎn)在融合帶中的相對(duì)位置。跳轉(zhuǎn)到(6)
(5)落點(diǎn)處于圖4中3區(qū)域的。當(dāng)前點(diǎn)顏色COL進(jìn)行正向融合帶矯正。根據(jù)公式(3)所得距離d,判斷出點(diǎn)在融合帶中的相對(duì)位置。跳轉(zhuǎn)到(6)
(6)根據(jù)相對(duì)位置以及邊緣融合算法求出當(dāng)前亮度系數(shù),與COL相乘得出當(dāng)前點(diǎn)新的顏色。
(7)判斷是否是最終渲染點(diǎn),是則結(jié)束,否則跳轉(zhuǎn)到(1)
輸出:完整的一幀圖像內(nèi)容
算法流程圖如圖7所示:
完成著色器后,需要對(duì)模型的位置,攝影機(jī)的位置等相對(duì)位置進(jìn)行確定,之前已經(jīng)提到。
至此虛擬世界部分設(shè)計(jì)基本完成,從模型的構(gòu)建到渲染再到同步接口的設(shè)計(jì),完成了虛擬世界的構(gòu)建。
3.渲染結(jié)果
通過(guò)實(shí)時(shí)渲染軟件對(duì)三個(gè)部分進(jìn)行實(shí)施渲染,后通過(guò)三臺(tái)投影儀分別對(duì)分割部分的圖像進(jìn)行輸出,最終完成現(xiàn)實(shí)世界和虛擬世界的匹配,對(duì)三個(gè)投影圖像進(jìn)行軟拼接,形成完整的360度覆蓋投影,如圖8所示:
經(jīng)測(cè)試,融合帶基本完全覆蓋,頂部有少許偏差,數(shù)以正常范圍允許之內(nèi)。算法分割成功,解決了運(yùn)動(dòng)物體全覆蓋投影的難題。
4.結(jié)束語(yǔ)
通過(guò)對(duì)輸出圖像進(jìn)行精確的分割,并結(jié)合融合帶,最終完成了三臺(tái)投影分別輸出不同圖像,覆蓋整個(gè)物體的方案,以此類推??梢酝瓿扇魏涡螤詈痛笮〉奈矬w投影覆蓋方案,只要物體處于投影儀投影范圍以內(nèi),都可以通過(guò)對(duì)物體進(jìn)行分割渲染的方式,完成物體圖像的拼接。最終形成完全的圖像覆蓋方案,做到對(duì)旋轉(zhuǎn)物體的三維影像全投射。