基於紋理的體繪製技術 譯

2021-07-10 08:31:19 字數 4416 閱讀 4594

**:

這一章介紹的是基於紋理的體繪製技術,可用於視覺化三維資料集,或生成高質量的特效。

許多視覺效果天生就是3維的(有體積的)。比如,流體,雲,火,煙,霧,塵土等,都是難以用幾何圖元來建模的。而體模型則更適合生成這樣的效果。這些模型假設光線會由體資料中大量的粒子發射,吸收並且散射。如圖39-1所示的兩個例子。

圖39-1 體效果

除了用於建模並渲染體現象,體繪製對於需要視覺化三維資料集的科學工程應用來說是一種關鍵的技術。比如,醫學成像資料的視覺化,計算流體力學**資料的視覺化。互動式體繪製應用的使用者關心高效的資料探索和特徵發掘,因此依賴於現代圖形硬體加速器的效能。

本章描述了體繪製技術,該技術利用了現代gpu的靈活的程式設計模型和3維紋理功能。雖然,在gpu上也可以實現其它流行的體繪製演算法,比如光線投射(roettger et al.2003, kruger和westermann 2003),本章主要涉及的是基於紋理的體繪製。基於紋理的技術易於與多邊形演算法結合,僅需要多渲染幾遍而已,在提供很大程度的互動性的同時也不犧牲渲染質量。

39.2節介紹了相關術語,並解釋了直接體繪製的過程。39.3節描述了典型的基於紋理的體繪製應用的組成部分,並給出了乙個簡單的示例。39.4節提供了實現細節,擴充套件了基本體繪製的功能。39.5節描述了增加真實感光照和過程性細節的高階渲染技術。39.6節總結了相關的效能問題。

直接體繪製方法由3維體資料直接生成影象,而不顯式地從資料中提取幾何表面(levoy 1988)。這些技術使用一種光學模型來將資料值對映為光學屬性,比如顏色和透明度(max 1995)。在渲染過程中,光學屬性沿每條視線光線累積起來,形成資料的渲染結果影象(如圖39-2)。

圖39-2 體繪製過程

雖然這個資料被視為空間中的連續函式,但實際上它往往被表示成乙個均勻的3維取樣點陣列。在視訊記憶體內,體資料被存為多個2維紋理切片,或單個3維紋理物件。名詞_體元_(voxel)表示單個的」體資料元素」,類似於名詞_像元_(pixel)所表示的」元素」,以及_紋素_(texel)所表示的」紋理元素」。每個體元對應於資料空間中的乙個位置,並且附帶有乙個或多個資料值。中間位置上的值則可通過附近體元插值獲得。這個過程被稱為_重構_(reconstruction),它在體繪製和相關資料處理應用中非常重要。

本質上,光學模型的作用是描述了體資料中的粒子如何與光線相互作用。比如,最常用到的模型假設體資料報含了能同時發射和吸收光線的粒子。更複雜的模型考慮了區域性光照和體陰影,以及光線散射效果。光學引數由資料值直接指定,或者通過乙個或多個_傳輸函式_(transfer functions)來對映。視覺化應用中,傳輸函式的目標是強調或對資料中的感興趣特徵進行_分類_。典型情況下,傳輸函式由_紋理查詢表_來實現,儘管簡單的傳輸函式可以在片元著色器中計算。比如,圖39-2展示了用乙個傳輸函式提取牙齒ct掃瞄資料中的材料邊界。

體繪製通過延視線方向對體資料進行取樣,然後累積結果光學屬性,最後生成影象。如圖39-3所示。對於發射-吸收模型而言,顏色和透明度的累積由公式1來計算,其中ci

ci和a

i ai

是顏色和不透明度,它們由取樣點

i i

處的資料值根據傳輸函式來指定。

圖39-3 體取樣和合成

公式1 離散體繪製方程 c

a=∑i

=1nc

i∏j=

1i−1

(1−a

j)=1

−∏j=

1n(1

−aj)

c=∑i=1nci∏j=1i−1(1−aj)a=1−∏j=1n(1−aj)

不透明度aj

aj近似表達了光線吸收過程,而經過不透明度加權的顏色ci

ci則近似表達了延光線片段(

i i至i

+1i+1

之間)發射和吸收。對於顏色分量而言,累加中的乘積表達了光線從取樣點

i i

到達眼睛前的衰減後的結果。通過對沿視線光線對取樣點進行排序,此公式可以高效地迭代地計算出顏色

c c

和不透明度

a a

。39.4節描述了_合成_步驟是如何通過alpha混合來實現的。因為公式1是對連續光學模型的數值近似模擬,取樣率s,與取樣點

l l

之間的距離成反比,因此,極大地影響了近似的精度和渲染的質量。

基於紋理的體繪製技術也包括了取樣和合成兩個步驟,只不過是通過繪製一系列的2維幾何圖元來實現的。如圖39-3所示。每個圖元都通過對體資料紋理進行取樣設定了紋理座標。這些__**幾何體__被光柵化後,合成到幀緩衝區中,合成順序可以是由後至前,也可以是由前至後。在片元著色階段,插值得到的紋理座標用於查詢資料紋理。接下來,插值得到的資料值用於在傳輸函式紋理查詢表中獲取光學屬性(顏色和不透明度)。光照技術則可以在合成階段之前修改結果顏色。

如圖39-4所示,一般來說,基於紋理的體繪製演算法可以劃分為三個步驟:

初始化階段常常只執行一次,更新和繪製階段在響應使用者輸入時就會執行,比如,當觀察引數或渲染引數修改時。

圖39-4 典型的基於紋理的體繪製的實現流程圖

在應用的開始時,體資料被載入到cpu記憶體中。在某些情形下,資料集在傳到紋理記憶體之前還需要進一步處理。比如,使用者可能會在這個階段對資料計算梯度或下取樣。一些資料處理操作可以在程式之外進行。傳輸函式查詢表和片元著色器通常會在初始化階段建立。

在初始化結束之後,每當觀察引數發生變化,**幾何體就會重新計算,然後存於頂點陣列中。當資料集儲存成3維紋理物件時,**幾何體包含一系列的多邊形,位於垂直於視線方向的切片上(見39.4.2節)。切片多邊形是通過切片平面與體資料報圍盒相交計算得到,頂點沿順時針或逆時針。對於每個頂點而言,其3維紋理座標可以在cpu計算,也可以在頂點著色器中計算,或者通過自動紋理座標生成。

當乙個資料集存成2維紋理切片時,**多邊形只是簡單的與切片對齊的矩形。儘管要快一些,這個方法有一些缺點。首先,它需要3倍的儲存,因為資料切片需要在3個主方向上進行。這種資料複製可以通過實時重構切片來避免(lefohn等, 2004),但會有一些效能開銷。其次,取樣率取決於體資料的解析度。這個一可以通過新增中間切片並在片元著色器中使用三線性插值來解決(rezk-salama等, 2000)。第三,取樣距離隨視點變化,導致攝像機移動時密度會發生變化,並且切片之間的切換導致影象的跳躍(kniss等 2002b)。

在更新階段,如果渲染模式或傳輸函式引數發生變化,紋理就會更新。此外,如果取樣率發生變化(見公式3),傳輸函式紋理的不透明度修正也會在此執行。

在切片多邊形按序繪製之前,渲染階段需要設定正確。這個步驟一般包括了禁止光照和裁剪,設定alpha混合等。為了在不透明幾何體中合成,深度測試必須開啟,而深度緩衝區的寫操作要禁用。體紋理和傳輸函式紋理需要繫結到紋理單元上,作為片元著色器的輸入。此時,著色器輸入引數也要指定,頂點陣列要為渲染作好準備。最後,當切片按序繪製完成之後,渲染狀態復原,以便演算法不會影響場景中其它物件的顯示。

下面的示例的主要是作為乙個理解基於紋理體繪製演算法實現細節的起點。在此例中,傳輸函式是固定的,資料集直接表示不透明度,發射的顏色設定為常量的灰色。此外,視線方向沿資料座標系的z軸方向。因此,**幾何體包含了多個x-y平面內的矩形,它們沿z軸均勻分布。此演算法包含了如下步驟,如示例39-1所示。

示例39-1. 簡單體繪製應用的步驟

列表39-1. 簡單體繪製片元著色程式

void

main

(uniform

float3

emissivecolor

,uniform

sampler3d

datatex

,float3

texcoord

:texcoord0

,float4

color

:color

)

圖39-5展示了這個簡單體渲染器生成的結果影象。下面的章節將講解如何讓此例中的每一步更一般化和有用,以便於處理不同的任務。

圖39-5 乙個熟悉的模型體素化後經過簡單體渲染器得到的結果

本節將概述在基於紋理的體繪製應用中常用的元件。其目的在於提供足夠的細節讓讀者更易於理解體繪製器的典型實現,它們利用了當前的消費圖形硬體,比如geforce fx類的顯示卡。

### 39.4.2 **幾何體 ### 39.4.3 渲染 ## 39.5 高階技術 ### 39.5.1 體光照 ### 39.5.2 過程性渲染 ## 39.6 效能考慮 ### 39.6.1 光柵化瓶頸

本文中翻譯所涉及到的詞彙:

基於紋理繪製的戰爭迷霧

戰鬥迷霧 fog of war 是rts類 moba類遊戲中不可缺少的乙個部分。在2d遊戲中,使用磚塊地圖 tiled map 拼接,是最常用的實現方法。但在具體實現過程中發現,磚塊地圖實現的戰爭迷霧有一些不足,比如迷霧邊緣不柔和 解開迷霧時不流暢 繪製定點數過多,在低端手機上的幀數降低明顯等。這裡...

體繪製技術小結

vtk主要提供了三種體繪製技術 vtk最初是針對醫療領域的應用而 設計的,所以對於醫療的視覺化方面,如處理ct的掃瞄 資料等,具有強大的功能。它將在視覺化過程中經常遇到的細節遮蔽起來,並封裝了一些常用的視覺化演算法,如將麵繪製中常用的mc marching cubes 演算法和體繪製中常用的光線投射...

實時繪製基於LOD的地形相關技術

lod levels of etails細節層次 是解決大規模地形實時渲染的一項關鍵技術。在地形中實現lod技術後大大加速了地形的渲染。其基本思想是 對地形生成具有不同層次 不同解析度 的多個版本,在繪製地形時依據視點來選擇合適的層次細節進行繪製。本文用基於四叉樹構建的地形來實現相關lod演算法,有...