射線投射
編輯射線投射是3-D CAD / CAM實體建模和圖像渲染的方法學基礎。它與計算機圖形的光線跟蹤(圖形)基本相同,在計算機圖形中,虛擬光線是在從照相機的焦點到照相機傳感器中每個像素的路徑上“投射”或“跟蹤”,以確定沿攝影機可見的光線。在3D場景中發出光線。1978年至1980年,斯科特·羅斯(Scott Roth)在通用汽車研究實驗室(General Motors Research Labs)引入了“射線鑄造”一詞。他的論文“用于實體建模的射線投射”,使用集合運算符并集(+),交集(&)和差值(-),通過組合原始實體(例如塊和圓柱體)來描述建模的實體對象。使用這些二元運算符進行實體建模的總體思路很大程度上是由于Rochester大學的Voelcker和Requicha的幾何建模小組所致。
在進行射線投射(和射線跟蹤)之前,計算機圖形算法將3D世界中的表面或邊緣(例如線條)投影到必須應用可見性邏輯的圖像平面上。世界到圖像的平面投影是3-D齊次坐標系變換(aka:3D投影,仿射變換或投影變換(Homography)。以這種方式渲染圖像很難通過隱藏的表面/邊緣去除來實現。另外,必須明確解決曲面的輪廓問題,而曲面輪廓是射線投射的隱??式副產品,因此無論何時視圖發生變化,都無需明確解決。
射線投射極大地簡化了3D對象和場景的圖像渲染,因為線會轉換為線。因此,不是將3D場景中的彎曲邊緣和曲面投影到2D圖像平面,而是將變換后的線(射線)與場景中的對象相交。齊次坐標變換由4x4矩陣表示。數學技術是計算機圖形學和幾何建模所共有的。變換包括圍繞三個軸的旋轉、沿軸的獨立縮放,3-D平移甚至傾斜。轉換可通過矩陣算術輕松連接。對于4x4矩陣,點由[X,Y,Z,1]表示,方向矢量由[D x、D?y和D?z、0]。(第四個術語用于翻譯,不適用于方向向量。)
在簡化數學的同時,射線投射算法非常耗費計算機處理能力。Pixar擁有大型渲染場,這些大樓擁有1000個CPU,可以使用光線跟蹤(又稱為“光線投射”)作為核心技術來制作動畫。
外殼和效率
編輯射線投射符合解決問題的蠻力方法。最小算法很簡單,特別是考慮到它的許多應用程序和易用性,但是應用程序通常會投射很多光線。可以投射數百萬條光線以渲染動畫電影的單個幀。計算機處理時間隨著屏幕分辨率和合成物中原始實體/表面數量的增加而增加。
通過在構圖樹中的實體周圍使用最小邊界框,對射線-固體相交的窮舉搜索類似于有效的二分搜索。蠻力算法會進行詳盡的搜索,因為它始終會訪問樹中的所有節點(將射線轉換為圖元的局部坐標系,測試射線與曲面的交點并組合分類),即使射線明顯錯過了實體也是如此。為了檢測“明顯遺漏”,一種更快的算法使用二進制合成樹作為實體合成所占空間的層次表示。但是所有位置,形狀和大小信息都存儲在原始實體所在的樹的葉子處。樹中的頂部和中間節點僅指定合并運算符。
用外殼表征所有實體填充的空間,從而為樹中的所有節點提供位置和尺寸信息的抽象摘要。然后,快速的“射線相交外殼”測試將指導分層中的搜索。當測試在樹中的中間節點失敗時,可以確保將射線分類為復合射線,因此無需遞歸向下子樹進行進一步研究。
準確評估使用外殼的成本節省是困難的,因為它取決于基元的空間分布(復雜性分布)和組成樹的組織。最佳條件是:
相反,最壞的情況是:
- 所有原始外殼相互重疊
以下是Roth關于射線投射的論文中進行的其他性能改進,但隨后其他人也進行了相當大的改進。
- 早期出局。如果樹中某個復合節點處的運算符為–或&且光線被分類為該復合物體的左子實體之外的光線,則該光線將被分類為該復合物之外的物體,而與該光線相對于右子實體的分類無關。固體。因此,沒有必要針對正確的子實體對射線進行分類,因此應避免效率。
- 遞歸。給定一棵深層的合成樹,結合分配和釋放內存,遞歸可能會很昂貴。可以使用靜態數組作為堆棧來模擬遞歸。
- 動態邊界。如果僅顯示實體的可見邊緣,則射線投射算法可以動態綁定射線以切斷搜索。也就是說,在發現光線與子實體相交之后,該算法可以使用最接近屏幕的交點來收緊“光線交點箱”測試的深度范圍。從頂部開始,這僅適用于樹的+部分。使用–和&,射線的附近“內”部分可能稍后變為“外”。
- 連貫性。相干原理是在兩個相鄰像素處可見的表面更可能是相同的而不是不同的。計算機圖形和視覺系統的開發人員已將此經驗性事實應用于效率和性能。對于線條圖,包含邊緣的圖像區域通常比總圖像區域小得多,因此射線投射應集中在邊緣周圍,而不是在開放區域中。通過用射線稀疏地采樣屏幕,然后在相鄰的射線標識不同的可見表面時,通過二進制搜索來定位邊緣,可以有效地實現這一點。
射線投射的歷史
編輯有關射線投射的歷史,請參見射線追蹤(圖形),因為兩者基本上是同一件事。斯科特·羅斯(Scott Roth)在聽說“射線追蹤”之前就發明了“射線投射”一詞。斯科特·羅斯(Scott Roth)在通用汽車研究實驗室(GM Research Labs)進行射線投射的開發與特納·惠特(Turner Whitted)在貝爾實驗室的射線追蹤工作同時進行。
早期計算機游戲中的射線投射
編輯德軍總部3D
著名的電子游戲Wolfenstein 3D中的世界是由正方形的,均勻高度的墻與純色的地板和天花板相交構成的。為了繪制世界,對屏幕像素的每一列都跟蹤一條光線,并選擇垂直的墻壁紋理切片,并根據光線在世界上的位置以及在行進之前的傳播距離進行縮放。
基于網格的級別的目的是雙重的-可以更快地發現射線壁碰撞,因為潛在的碰撞變得更加可預測,并且減少了內存開銷。但是,對寬闊區域進行編碼會占用額外的空間。
科曼奇系列
由NovaLogic為Comanche游戲開發的Voxel Space引擎通過屏幕像素的每列追蹤光線,并針對高度圖中的點測試每條光線。然后,它將高度圖的每個元素轉換為一列像素,確定它們是可見的(也就是說,未被前面繪制的像素所遮擋),然后從紋理圖中以相應的顏色繪制它們。
計算幾何設置
編輯在計算幾何中,射線投射問題也稱為射線射擊問題,可以表述為以下查詢問題:給定d維空間中的一組對象,將它們預處理為數據結構,以便對于每個查詢射線,可以很快找到被射線擊中的初始物體。已經針對各種設置對問題進行了研究:空間尺寸、對象類型、對查詢射線的限制等。一種技術是使用稀疏體素八叉樹。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/115707/