999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

三維模型任意剖面的程序式凹凸映射生成算法

2022-05-23 04:02:10賈世宇
計算機工程與設計 2022年5期
關鍵詞:模型

李 冰,賈世宇

(青島大學 計算機科學技術學院,山東 青島 266071)

0 引 言

三維模型在醫學、虛擬現實、網絡游戲等領域[1-3]應用廣泛。為提高屏幕空間中三維模型的真實感,通常需要對模型進行真實感圖形渲染。目前常用的渲染方法有紋理映射和凹凸映射。紋理映射[4,5]可以實現物體表面的顏色紋理,但不能體現物體表面凹凸不平而形成的粗糙質感。與紋理映射相比,凹凸映射[6]不需要增加對象的幾何復雜度,就可以生成表面復雜的視覺效果,且凹凸映射可以對物體細節特性進行展示,使其更接近自身真實的模樣,更能增加繪制對象的真實程度。

在三維模型發生切割操作時[7,8],如虛擬手術[9,10]中,切割面可以直觀展示模型內部紋理結構和特征。三維模型切割面上的紋理可以使用三維紋理[11]實現,三維紋理可以存儲模型內部任意點的顏色信息,但并不能存儲法線信息。此外,三維紋理本身存在獲取困難和占用存儲空間大的問題。雖然使用較廣的二維凹凸映射將表面的法線擾動信息存儲在二維紋理中,但由于模型內部任意點的法線無法從表面的法線計算出來,因此并不適用于任意三維剖面。

為解決上述問題,本文提出一種剖面上的程序式凹凸映射生成算法。該算法結合模型內部微觀結構將剖面分為3類,并對每類剖面分別應用程序式凹凸映射算法,從而在任意剖面上生成有內部結構的凹凸映射紋理。與三維紋理方法相比,該算法結合模型內部不規則的微觀結構,能有效提高剖面的真實感。同時,通過程序式凹凸映射實現方法,可以在程序中直接生成擾動后的法線,而不需要將凹凸圖中的高度信息轉換成法線擾動信息,能有效模擬更真實的視覺效果。且算法使用著色語言shader編程實現,可以有效提升程序運行速度。

1 相關工作

Blinn等[12]首先提出了凹凸映射的方法,他們通過一個擾動函數對物體表面的法線進行擾動,實現在光滑物體表面附上粗糙紋理的功能。還可以利用擾動函數改變物體表面的參數,在模擬頭發、衣服等物體方面取也得較好效果。任等[13]提出一種改進的凹凸映射技術-視差映射,該方法根據存儲在紋理中的幾何信息對采樣點的紋理坐標進行擾動,可以產生更為真實的層次感,且具有計算量小等優點。Yao等[14]提出一種基于凹凸映射的海平面場景仿真方法,該方法使用凹凸映射技術模擬不同頻率的波浪,解決了海平面模擬過程中的實時性與真實感相矛盾的問題。Anouar等[15]通過將旋轉映射與凹凸映射相結合來提高三維旋轉模型的真實感,產生較為逼真的三維模型褶皺效果。

在噪聲研究方面,Perlin等[16]提出一種自然噪聲生成算法,稱之為經典柏林噪聲。目前,柏林噪聲已被廣泛應用于虛擬游戲、計算機仿真等領域。Conde等[17]基于柏林噪聲,提出了一種定義非均質固體微觀結構的方法,該方法能夠準確地表示原始材料的比例、大小和形狀。王等[18]通過二維柏林噪聲控制花瓣和葉片的卷曲程度,實現花卉器官的三維重建。陳等[19]以柏林噪聲為基礎,提出一類可以用于細化心臟紋理圖的新方法,可對心臟客觀結構進行較好的模擬。

程序式紋理[20]是用數學公式描述物體表面的紋路,通過算法在程序中直接生成圖形的紋理。Liu等[21]提出一種基于實例生成新過程紋理的框架,其中,新的紋理可以具有與輸入示例相同的感知屬性。Wang等[22]提出一種基于樣本的實體紋理合成算法,該算法將二維紋理貼片技術擴展到三維肝動脈實體,來模擬三維空間中各向異性的實體紋理。

2 程序式凹凸映射算法

為提高模型剖面視覺效果,本文提出一種針對剖面的程序式凹凸映射生成算法。該算法首先使用球、圓柱等作為模型內部的微觀顆粒對剖面的微觀結構進行建模,然后將剖面分為撕裂面、空心切割面、實心切割面3類。最后對每類剖面均應用程序式凹凸映射算法得到剖面渲染結果。

2.1 微觀結構建模

為模擬任意剖面上的凹凸映射效果,在微觀結構建模過程中,本文假定模型內部由許多微觀顆粒構成,選用球、圓柱等作為模型內部的微觀顆粒,并使用經典Perlin噪聲生成三維噪聲紋理加以擾動(噪聲紋理大小為:256×256×256),使其更加接近真實情況。

在初始條件下,微觀顆粒排列成規整的三維網格,并且具有相同的大小和間距。然后對每個顆粒,使用其在三維網格中的整數坐標到三維噪聲紋理中進行采樣,并使用采樣值對顆粒的大小和位置進行擾動,產生不規則的結構。其中,噪聲紋理的每個紋素存儲R,G,B,A這4個分量,R,G,B,A是通過噪聲計算得到的返回值。對于球使用R,G,B分量擾動球心位置,使用A分量擾動半徑;對于圓柱使用R,G,B分量用于擾動圓柱底面圓心位置,使用A分量擾動底面圓的半徑和圓柱的高度。在整個過程中,為避免顆粒偏離規整網格格點過遠,對于半徑的擾動均未超過相鄰顆粒之間間距的一半。

2.2 球形顆粒剖面算法

2.2.1 球形顆粒撕裂面

在剖面是撕裂面的情況下,內部的球形顆粒會偏向包含其球心的一側,另一側的相對位置將產生一個空腔,但球形顆粒自身結構并沒有被破壞。

假定目標點為P(x,y,z), 目標點處剖面的單位法線向量為Ns。首先計算與P點最近的三維網格整數坐標PI,然后使用2.1中的算法獲取PI及其相鄰的共27個整數坐標對應顆粒的球心和半徑,并針對這些球體,分別使用式(1)計算P到該球球心O的距離dist,當dist≤R時,說明P在該球之內。否則,說明P不在任何球之內,則P處的法線向量就是Ns,沒有擾動

(1)

如圖1所示,當P在某個球心為O,半徑為R的球體之內時,則需要根據球心與剖面的位置情況進一步計算擾動的法線。位置情況可以通過計算點積正負判斷,如下式所示:其中,當h≤0,說明球心在剖面內側,否則在外側

h=Ns·(O-P)

(2)

圖1 球形顆粒撕裂面擾動法線計算方法

當球心在剖面內側時,說明球體嵌在剖面內側,如圖1(a)所示。在這種情況下,從P點沿T=Ns方向發出一條射線,計算該射線與球面的交點Q。然后取Q點處的球面外指法線作為擾動的法線Np。公式為

Np=(Q-O)/|Q-O|

(3)

當球心在剖面外側時,即球體嵌在對向的剖面中,則本地剖面內側會形成一個空腔,如圖1(b)所示。在這種情況下,從P點沿T=-Ns方向發出一條射線,計算該射線與球面的交點Q。然后取Q點處的球面內指法線作為擾動法線Np。計算公式為

Np=(O-Q)/|O-Q|

(4)

其中,交點Q可以表示為:Q=P+uT,u為參數坐標且u≥0。且Q滿足方程: (Q-O)·(Q-O)=R2, 將Q點坐標代入方程中,可得如下關于u的二次方程

au2+bu+c=0

(5)

其中

(6)

解方程(5),可得u的值為

(7)

取非負根作為u的值,即可得到Q點坐標。

2.2.2 球形顆粒空心切割面

在剖面是切割面的情況下,與剖面相交的內部顆粒則被切為兩半。本文假定內部顆粒有兩種情況:一種內部為液體,切開后液體流失形成空腔,將這種情況稱為空心切割;另一種內部為固體,切開后形成實心碎片,將這種情況稱為實心切割。

對空心切割面的情況,其法線計算方法與撕裂面情況相似,區別為空心切割面只需判斷任意一點P是否落在球內而不需要判斷球心與剖面的位置關系,當P落在某個球體之內時均使用圖1(b)所示的方法計算擾動的法線。

2.2.3 球形顆粒實心切割面

在剖面為實心切割面情況下,與剖面相交的球均會在剖面上形成一個圓形截面,因此本文假定剖面上不在球體內部的點均向內縮進一段距離t,將球與剖面相交的圓形截面暴露在外,從而產生凹凸效果。為簡化計算,本文將暴露在外的部分設為以圓形截面為頂面的圓臺,且圓臺的側面傾角為45°。如圖2所示,實心切割面擾動法線計算方法與前兩種情況類似。

圖2 球形顆粒實心切割面擾動法線計算方法

首先獲取與P相鄰的27個球體,并對每個球體進行遍歷,判斷P是否在其內部。若P在某球體內部時,結束球體遍歷,若不在,使用式(2)計算h的值,當 |h|

(8)

當球體遍歷結束后,會存在以下3種情況:

(1)P落在某個球體之內;

(2)P不在任何球體之內,沒有球體與剖面相交;

(3)P不在任何球體之內,有球體與剖面相交。

對于(1)和(2),P處的法線向量為Ns,沒有擾動;對于(3),取所有ds值中的最小值dmin,并根據dmin對擾動情況進行判斷。當dmin>t(閾值t為球向內縮進的距離,取值為球間距值的0.07倍)時,則說明P處的法線向量仍然是Ns,沒有擾動。否則說明P落在某個圓臺的側面上。從圓心指向P的單位向量A為

A=(P-Cmin)/|P-Cmin|

(9)

其中,Cmin代表dmin對應的圓心,dmin對應的半徑記為rmin。然后使用下式計算擾動的法線Np

Np=(Ns+A)/|Ns+A|

(10)

2.3 圓柱顆粒剖面算法

當球與任意平面相交時,剖面形狀均為圓形;而當圓柱與剖面相交時,可能產生多種相交形狀。如圖3所示,根據平面與圓柱的位置關系,剖面相交形狀可分為以下3類。

圖3 平面與圓柱相交情況

2.3.1 圓柱顆粒撕裂面

當剖面是撕裂面時,圓柱顆粒偏向剖面的一側,另一側的相對位置上會產生空腔,其原理與球類似。對于目標點P(x,y,z), 該點處剖面的單位法線向量為Nc,圓柱底面圓心為O,高度為height,圓柱從底面到頂面的軸向為D。算法遍歷相鄰的27個圓柱,判斷點P是否在某個圓柱內。首先根據式(11)計算底面圓心O到點P的向量M在軸向D上的投影長度l

l=(P-O)·D

(11)

如果l<0或l>height,則說明點P不在圓柱高度范圍內,停止遍歷;否則繼續判斷不等式(12),當不等式成立時,說明點P不在圓柱內,點P處的法線沒有擾動

M·M-l2>R2

(12)

當不等式(12)不成立時,則說明P在該圓柱內,需要進一步計算擾動的法線。如圖4所示,在P點分別沿T=Nc的方向與T=-Nc的方向發出一條射線與圓柱交于一點,交點記為Q1和Q2。當交點在圓柱的側面上時,如圖4(a)所示,令

(13)

解方程(13),可得交點距離P點的距離為

(14)

當交點在圓柱底面上時,如圖4(b)所示,令:M=P-O,交點距離P點的距離為

(15)

對于T=Nc和T=-Nc的方向均取距離的非負根,然后將兩個交點返回的距離值v,w進行比較,距離值較大的一側即為圓柱偏向的一側。

圖4 撕裂面圓柱傾向判斷

當圓柱偏向T=Nc方向一側時,根據返回的距離值v,求得沿T=Nc方向與圓柱交點Q1的坐標,然后根據下式計算P點到底面圓的垂直距離s以及P點對應圓面的圓心O′

(16)

取Q1點指向圓心O′的向量作為擾動后的法線Nq

Nq=(O′-Q1)/|O′-Q1|

(17)

當圓柱偏向T=-Nc方向一側時,根據返回的距離值w,求得沿T=-Nc方向與圓柱交點Q2的坐標,同理使用式(16)計算得到P點到底面圓的垂直距離s以及P點對應圓面的圓心O′,最后取圓心O′指向Q2點的向量作為擾動后的法線Nq

Nq=(Q2-O′)/|Q2-O′|

(18)

2.3.2 圓柱顆粒空心切割面

在剖面是切割面情況下,與剖面相交的圓柱被切為兩半。對空心切割面情況,法線計算方法與撕裂面情況相似。區別是對于空心切割面,只需判斷任意一點P是否落在圓柱內,而不用判斷圓柱偏向剖面的哪一側。在P落在某個圓柱內時,使用沿T=-Nc方向與圓柱相交的方法計算擾動的法線,如式(18)。

2.3.3 圓柱顆粒實心切割面

在剖面為實心切割面情況下,由于圓柱與剖面相交會產生各種不同的截面形狀,本文將圓柱外部的部分向內縮小一段距離t,使其與剖面相交的截面顯示出來,以模擬出不同形狀的凹凸映射效果。如圖5所示,算法首先遍歷與P點相鄰的27個圓柱,對每個圓柱,判斷P是否在圓柱內。如果是,停止遍歷,否則計算底面圓心O到點P的向量在D上的投影長度l,從而判斷圓柱與剖面相交關系。

圖5 圓柱實心切割面擾動法線計算方法

當l<0或l>height時,則說明圓柱與剖面不相交,否則相交。在相交條件下,根據下式計算P點處對應的圓形截面的圓心O′以及P到圓柱面的距離dc

(19)

當算法遍歷結束后,任意一點P與圓柱的位置關系有以下3種情況:

(1)P落在某個圓柱之內;

(2)P不在任何圓柱之內,沒有圓柱與剖面相交;

(3)P不在任何圓柱之內,有圓柱與剖面相交。

對于(1)和(2),P點的法線向量就是Nc,沒有擾動。對于(3),取dc值中的最小值dmin,dmin對應的圓心為O′min, 當dmin>t(閾值t為圓柱向內縮進的距離,取值為圓柱間距值的0.07倍)時,P點的法線向量仍然是Nc,沒有擾動。否則,通過下式計算從O′min指向P的單位向量B

B=(P-O′min)/|P-O′min|

(20)

則擾動后的法線Nq為

Nq=(N+B)/|N+B|

(21)

3 實驗結果與分析

本文實驗中,仿真程序使用C++編寫,三維圖形渲染使用OpenGL函數庫,程序式凹凸映射生成算法使用OpenGL著色語言(Shader)編寫。運行硬件環境配置為:Intel i7-3770 CPU,8 GB內存;2 GB顯存的NVIDIA GeForce GTX 750 Ti GPU。

3.1 微觀結構為球時凹凸映射結果

在仿真實驗1中,本文模擬了內部微觀結構為球時的剖面渲染效果。圖6展示了斯坦福兔子模型(長20 cm,寬16 cm,高20 cm)在剖面法線為(1,0,1)、球間距初值為0.6、球半徑初值為0.3時的渲染效果。

圖6 斯坦福兔子模型剖面渲染效果,法線為(1,0,1)

從實驗結果(圖6)可以看出,撕裂面上一側的凸起,在另一側的相對位置是凹陷,反之亦然,并且兩側剖面效果互補;對于空心切割面,兩側均為凹陷;實心切割面兩側均為圓形切割形狀。并且對內部球使用三維噪聲擾動后,球的位置、大小均顯現出不規則性,效果與預期相符。實驗結果說明該算法可以有效地模擬內部球形微觀顆粒,同時可以在剖面上有效實現程序式的凹凸映射。

通過仿真實驗2可以驗證本文算法對任意法線剖面的渲染效果,并且將同一模型在不同法線的剖面和內部微觀結構間距、大小均不相同的情況進行對比,如圖7所示。圖7展示了斯坦福兔子模型在剖面法線為(1,1,1)、球間距初值為0.5、球半徑初值為0.25時的渲染效果。與圖6的實驗結果相比,可以發現這兩個不同法線剖面的渲染效果相似,均具有不規則性和一致性,由此說明本文的算法適用于任意法線的剖面。

圖7 斯坦福兔子模型剖面渲染效果,法線為(1,1,1)

仿真實驗3測試本文算法對不同模型的適用性。本實驗選取多個模型,針對不同模型使用不同的剖面進行效果展示。圖8展示了鹿模型(長15 cm,寬5 cm,高13 cm)在剖面法線為(0,0,1)、球間距為0.3、半徑為0.15時的渲染效果。渲染效果與前面情況類似,符合預期結果。實驗結果說明,本文提出的算法對不同的模型剖面均具有較好的模擬效果。

圖8 鹿模型剖面渲染效果,法線為(0,0,1)

3.2 微觀結構為圓柱時凹凸映射結果

圓柱與剖面相交會產生多種形狀,仿真實驗4首先模擬圓柱方向相同且方向為(0,0,1)時的剖面渲染效果。實驗選用斯坦福兔子模型,內部圓柱間隔為1.0,圓柱高度為0.8,圓柱底面圓的半徑為0.5。圖9展示了不同法線下撕裂面的渲染效果。圖10展示不同法線下空心切割面渲染效果,圖11展示了不同法線下實心切割面渲染效果。

圖9 不同法線下的撕裂面渲染效果

圖10 不同法線下的空心切割面渲染效果

圖11 不同法線下的實心切割面渲染效果

從圖9、圖10、圖11中可以看出,當剖面法線為(0,0,1)時,剖面與圓柱底面平行,產生的剖面形狀為大小不同的圓形。當法線為(0,1,0)時,剖面與圓柱底面垂直,剖面形狀為大小不同的長方形。當剖面法線為(1,1,1)時,剖面與圓柱相交產生大小不同的橢圓形、鼓形等其它各種形狀。其中撕裂面上既有凸起也有凹陷,且兩側效果互補;空心切割面兩側均為凹陷;實心切割面均是相交截面的形狀的顯示。以上結果可以驗證本文提出的算法對不同法線的剖面都具有良好的凹凸映射結果。

上述實驗中只使用三維噪聲對圓柱的半徑、高度和位置進行擾動,并未對圓柱的方向進行擾動。為了更真實地模擬實際情況,本實驗使用三維噪聲對圓柱的方向進行擾動,從而得到方向不同的圓柱。圖12展示了內部圓柱間隔為0.8、圓柱高度為0.7、圓柱底面圓的半徑為0.4、剖面法線為(0,1,0)條件下的不同剖面渲染效果。實驗結果可以看出,對圓柱方向擾動后,在同一剖面上,會同時出現多種相交形狀,這說明噪聲擾動后的圓柱具有各向異性,同一剖面上可以同時產生多種形狀,因此剖面渲染的結果更具有真實感。

3.3 運行時間分析

如表1和表2所示,本文對同一模型不同微觀結構剖面渲染所需時間和不同模型不同微觀結構剖面渲染所需時間進行分析與對比。表1對比了在內部微觀結構不同、渲染幀數不同的情況下,斯坦福兔子模型渲染所需要的時間和平均每幀所需的時間。由該表可知:①在渲染幀數較少(如200、500)的條件下,平均一幀所用時間較多,這主要由于程序啟動和結束過程占用較多的時間;②隨著渲染幀數增加,平均每幀所用時間減少,當渲染幀數達到1000幀時,渲染一幀畫面所用時間趨于穩定,為0.5 ms左右。

如表2所示,本文對比了不同模型渲染不同幀數的畫面時所用的時間和平均每幀所用時間。由該表可知,對于不同模型,在內部模型間距、大小不同的情況下,渲染一幀所需的時間也較為穩定。

綜上所述,針對同一模型不同微觀結構與不同模型不同微觀結構,本文提出的算法在運行時間方面表現較為穩定,因此在切割時,可以滿足實時切割渲染的要求。

4 結束語

本文提出一種在三維模型任意剖面上生成凹凸映射效果的程序式算法。為提高剖面模擬效果,該算法使用Perlin噪聲對模型內部規則的球、圓柱等顆粒進行擾動,以生成不規則的微觀結構。并根據剖面與微觀結構的位置關系,將剖面分為撕裂面、空心切割面、實心切割面3類,針對不同剖面應用不同的程序式凹凸映射生成算法進行渲染,得到剖面的凹凸映射紋理。仿真實驗結果表明,本文提出的算法可以針對三維模型的任意剖面進行凹凸映射,并有良好的映射結果;同時,剖面渲染時間較短,可以應用于對實時切割渲染要求較高的場景。未來的工作中擬使用形狀復雜的顆粒和更復雜的隨機分布算法模擬三維模型內部微觀結構,最大程度上提高剖面模擬效果。并結合碰撞檢測算法,來避免顆粒間相互重疊的現象,以達到更準確的凹凸映射效果。

表2 不同模型不同微觀結構剖面渲染所需時間

猜你喜歡
模型
一半模型
一種去中心化的域名服務本地化模型
適用于BDS-3 PPP的隨機模型
提煉模型 突破難點
函數模型及應用
p150Glued在帕金森病模型中的表達及分布
函數模型及應用
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 欧美区一区| 国产精品无码AV中文| 久久久久久高潮白浆| 992tv国产人成在线观看| 午夜在线不卡| 亚洲一级无毛片无码在线免费视频| A级全黄试看30分钟小视频| 国产免费久久精品44| 成人综合久久综合| 欧美激情视频一区| 色亚洲激情综合精品无码视频| 亚洲精品第五页| 91亚洲精选| 天堂va亚洲va欧美va国产| 精品一区二区三区中文字幕| 一级毛片在线直接观看| 国产精品不卡永久免费| 国产精品乱偷免费视频| 亚洲无码精品在线播放| av性天堂网| 91成人试看福利体验区| 性色生活片在线观看| 亚洲日本韩在线观看| 日本精品视频一区二区| 亚洲久悠悠色悠在线播放| 国产高清免费午夜在线视频| 欧美在线一二区| 精品国产99久久| 亚洲最黄视频| 青青草原偷拍视频| 日本一区高清| 亚洲一级无毛片无码在线免费视频| www.av男人.com| 亚洲天堂精品视频| 欧美69视频在线| 91外围女在线观看| 欧美日在线观看| 国产精品人成在线播放| 免费国产高清视频| 国产幂在线无码精品| 国产成人h在线观看网站站| 亚洲综合九九| 亚洲av无码牛牛影视在线二区| 欧美有码在线观看| 91麻豆精品国产高清在线| JIZZ亚洲国产| 奇米精品一区二区三区在线观看| 欧美日韩91| 欧美精品伊人久久| 亚洲欧美h| 国产91丝袜| 日韩大片免费观看视频播放| av一区二区三区在线观看| 欧美狠狠干| 一区二区三区毛片无码| 国产在线观看99| 国产在线精品人成导航| 亚洲人成网站在线观看播放不卡| 亚洲色中色| 午夜一级做a爰片久久毛片| 成年女人a毛片免费视频| 91九色国产porny| 亚洲第一黄片大全| 欧美在线中文字幕| 国产午夜人做人免费视频中文| 少妇露出福利视频| 亚洲AⅤ综合在线欧美一区| 97精品久久久大香线焦| 一级毛片免费观看久| 伊人91视频| 日韩在线第三页| 2020精品极品国产色在线观看| аⅴ资源中文在线天堂| 日日拍夜夜嗷嗷叫国产| 一本视频精品中文字幕| 国产杨幂丝袜av在线播放| 免费国产高清视频| 欧美精品成人一区二区视频一| 无码免费视频| 国内黄色精品| 国产午夜精品一区二区三| 国产无码在线调教|