基本對象著色
材質,簡單的來講就是定義了被賦于此材質的對象如何反射光。ogre中的光照采用局部光照模型,這意味著,對計算有影響的因素有:光照的角度與光的顏色,相機的視角,對象的材質。ogre支持四種類型用來描述材質的顏色,表述了光照對它的影響:環境光,漫反射,發散,鏡面反射。環境光是對全局光照的近似,漫反射是指當物體被光照射后在物體各方向上反射的光的顏色。發散指物體本身自發光的顏色。鏡面反射,指的是在某個視角看到的被光反射出的“高光”。鏡面高光有兩個參數可以控power,shininess.power用來控制“加亮點”的尺寸(影響的范圍越大)。而shininess值越大的表面,高光越容易聚集。
紋理映射
通過紋理坐標,用一張2D圖片給3D對象著色的技術。
可編程著色通過寫高級或低級的頂點程序,片段程序代替固定管線的功能。支持可編程圖形硬件也可以當做固定函數流水線硬件來用。可編程硬件允許更靈活的計算頂點的的顏色,位置等。紋理也可用于可編程硬件。紋理中包含的數據,不僅僅可以表示顏色,也可以表示任何其他程序員知道如何處理的數據。
Batching
材質與mesh之間的關系所帶來的最大影響是渲染狀態的改變。ogre中的渲染單元大多數情況下指的是renderable,它是SubEntity的父類。渲染單元這個概念的重要性在于,正是在這里,ogre將調用顯卡驅動開始并且會結束“畫操作”。一次畫操作(batch),指的是清除顏料(color,texture,etc)與材料(vertexof display lists),從頭開始一組新的操作的過程。就像一個畫家每次在畫板上做畫時會洗凈他的調色板一樣。對于3D硬件來講,這個過程包括發送新的頂點列表與數據索引到GPU(或者引用還存在的),用紋理,顏色,以及光柵化這些頂點組成的面需要的一些元數據來設置GPU。因此,最有效率的做法是一次盡可能多的把
使用同樣渲染數據的頂點發送到GPU進行處理。ogre會盡量減小狀態改變帶來的影響,但它遵重你如何構成一個renderable的決定。假如你有一個模型它有20個塊組成,它們都使用相同的材質,這時應該把他們整合到相同的renderable中去,而不是分20次batch發送到顯卡。每幀的batch數會有個上限。
材質克隆
ogre中的材質是共享的。當你從材質管理器獲得一個指針,它與從使用這種材質的其他對象所擁有的材質
指針是相同的。因此改變一處會影響其他,為了避免影響其他應該克隆材質。
Technique & Scheme
Technique允許針對不同的硬件平臺定制不同的材質。Scheme允許對特定一組技術進行更一般化的描述。Ogre選擇技術時有明確的順序。首先,它尋找屬于某個命名Scheme中的技術。然后在選好的scheme中查找那些應用了特定材質lod的技術。最后在這些技術列表中,選擇最能適應當前硬件設置的技術。缺省,所有的技術屬于細節級別0,它對應最高細節級別。
Material LoD層次細節這個術語常用來討論隨場景中的物體的幾何復雜性是相機與物體之間距離的函數。類似的概念被應用到材質定義上。ogre提供了在哪個層次細節上使用特定技術的手段。可以在材質中定義層次細節發生變化時的距離,賦于材質中的每個技術一個細節索引。每個細節索引也可以有多個技術,用來支持scheme或是硬件能力fallback。
材質組成
一個materail由一個或多個technique組成,后者又由一個或多個pass組成,一個時刻只有一個technique是活動的。pass對于在GPU上執行畫操作的renderable來講,是完整的原子渲染狀態。假如選擇的技術有三pass,那么每幀會對renderable進行三次畫操作。pass可以引用紋理單元定義,而不必包含任何紋理單元定義。
紋理單元
ogre materail中的紋理單元實際引用GPU上的texture sampler.多數現代圖形硬件有多個texture sampler,
ogre支持的硬件至少有一個有效的texture sampler。紋理單元包括一個紋理的引用,可以來自一個磁盤文件,或是運行時渲染,或是來自外部視頻流。可以在每個pass中指定多個紋理單元。ogre會檢測硬件支持的能力,必要時把一個pass折分成多個pass。舉例來說,假設pass中指定6個紋理單元,而硬件只支持4個,那么ogre會把這個pass拆分成兩個,對這兩個pass執行紋理混合以達到相同的設計功能。紋理通常保存在video memory中,直到它們不再需要。ogre不會每次需要時都通過總線傳輸紋理,除非紋理經常地從
video memory中剔除。(這時發生了紋理震蕩,原因是有太多或太大的紋理同時存在于vedio memory中)。
紋理壓縮
現代圖形硬件支持壓縮紋理。ogre只是簡單地把紋理按原樣傳送他們到圖形硬件中去,它不會壓縮紋理。
對于那些壓縮過的紋理,也不必事先處理它,如果硬件不支持壓縮紋理,ogre會在運行時解壓縮。
實體
在渲染期間,Entity主要作為subentities的容器來用,subentities是實際的渲染單元(renderable)。
subentity與submesh有一一對應的關系,后者提供原始的材質引用。概念上來講,entity(subentity)提供了對象的渲染屬性,而mesh(submesh)提供了對象的結構屬性。
posted on 2007-03-13 11:31
清源游民 閱讀(2585)
評論(1) 編輯 收藏 引用 所屬分類:
OGRE