日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GPU Gems1 - 17 环境遮挡

發布時間:2023/12/13 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GPU Gems1 - 17 环境遮挡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境光遮蔽(Ambient Occlusion)“AO”為Amblent Occlusion的縮寫,中文譯為環境光遮蔽。在DirectX 10.1 API推出后,Amblent Occlusion升級為SSAO(Screen-Space Ambient Occlusion:屏幕空間環境光遮蔽);而在微軟推出DirectX 11 API后,SSAO升級至HDAO(高解析度環境光遮蔽:High Definition Ambient Occlusion)。

我們有必要對AO(環境光遮蔽)的釋義進行一個簡單了解:AO是來描繪物體和物體相交或靠近的時候遮擋周圍漫反射光線的效果,可以解決或改善漏光、飄和陰影不實等問題,解決或改善場景中縫隙、褶皺與墻角、角線以及細小物體等的表現不清晰問題,綜合改善細節尤其是暗部陰影,增強空間的層次感、真實感,同時加強和改善畫面明暗對比,增強畫面的藝術性。可以說:

AO特效在直觀上給我們玩家的感受主要體現在畫面的明暗度上,未開啟AO特效的畫面光照稍亮一些;而開啟AO特效之后,局部的細節畫面尤其是暗部陰影會更加明顯一些。

本章講到了如何使用有效的實時環境光遮蔽技術,對物體遮蔽信息及環境進行預處理,綜合這些因素給物體創建逼真的光照和陰影。本文大部分參考https://zhuanlan.zhihu.com/game-programming

1 概述

首先,本文中講到,環境光遮蔽(Ambient Occlusion)一般而言有兩種理解:

1)將環境光遮蔽視為“智能”的環境光項,其在模型表面的變化取決于在每點可見多少外部環境。

2)將環境光遮蔽視為一個漫反射項,其能有效地支持復雜分布的入射光線。

文中將考慮上述的第二種解釋。

其基本思路是,假如預處理一個模型,計算它上面每個點可以看到多少外部環境,可以相反地計算有多少環境被模型的其他部分遮擋,然后在渲染時使用這個信息計算漫反射著色項的值。其結果是模型上的裂縫變暗,而模型的暴露部分會接收更多的光線,因此更明亮。這種效果實質上比使用標準的著色模型更逼真。

另外,這個方法可以擴展為使用環境光作為照明源,用代表各個方向入射光的環境貼圖沒來決定物體上每個點光的顏色。為了這個特性,除了記錄在點上可以看到多少外部環境之外,也記錄大部分可以光從哪個方向到達。這兩個量有效地定義了從外面進入場景的未被遮擋的方向圓錐體,可以一起用來做為來自環境貼圖的極端模糊的查詢,模擬著色點上來自感興趣的方向圓錐體的全部入射照度。

2 預處理步驟(The Preprocessing Step)

給定一個任意的著色模型,環境光遮蔽算法需要知道模型上每點的兩個信息:

(1)該點的“可到達度(accessibility)”- 即該點上方半球的哪一部分未被模型的其他部分遮擋;

(2)未被遮擋的入射光的平均方向。

通過下圖在平面上說明這兩個概念。給定在表面上的點P,其法線為N,P點上半球的2/3被場景中其他幾何體遮擋,半球另外的1/3不被遮擋。入射光的平均方向用B表示,其在法線N的右側。大致來說,在P點的入射光的平均顏色,可以通過求圍繞B矢量的未遮擋入射光的圓錐體的平均值得到。

下面貼出的偽代碼顯示了我們的基本方法。在每個三角形的中心,我們產生一組以表面法線為中心的半球形光線,跟蹤每道光線進入場景,記錄哪些光線與模型相交,標志不能從環境接收的光線,以及不被遮擋的光線。接著我們計算不被遮擋的光線的平均方向,這給出了入射光平均方向的近似值。(當然,我們計算的方向實際上可能會被遮擋,但我們選擇忽略不計這個問題。)

Example 17-1 計算環境光遮蔽量的基本算法偽代碼 (Basic Algorithm for Computing Ambient Occlusion Quantities)

For each triangle {Compute center of triangleGenerate set of rays over the hemisphere thereVector avgUnoccluded = Vector(0, 0, 0);int numUnoccluded = 0;For each ray {If (ray doesn't intersect anything) {avgUnoccluded += ray.direction;++numUnoccluded;}}avgUnoccluded = normalize(avgUnoccluded);accessibility = numUnoccluded / numRays;}

生成這些光線的簡單方法是使用拒絕采樣法(rejection sampling):檢測在x,y和z為-1到1區間的3D立方體中隨機生成的光線,并拒絕不在單位半球中與法線相關的光線。

能通過這次檢測的光線方向可視分布理想的光線方向。列表17-2的偽代碼表示出了此方法的實現思路。

當然,也可以用更復雜的蒙特卡洛(Monte Carlo)采樣法來得到更好的樣本方向的分布。

Example 17-2 使用拒絕采樣法計算隨機方向的算法偽代碼(Algorithm for Computing
Random Directions with Rejection Sampling)

while (true) {x = RandomFloat(-1, 1); // random float between -1 and 1y = RandomFloat(-1, 1);z = RandomFloat(-1, 1);if (x * x + y * y + z * z > 1) continue; // ignore ones outside unit// sphereif (dot(Vector(x, y, z), N) < 0) continue; // ignore "down" dirsreturn normalize(Vector(x, y, z)); // success!}

另外,用圖形硬件代替光線追蹤軟件,有可能加速遮擋信息的計算。

3 使用環境光遮蔽貼圖進行渲染(Rendering with Ambient Occlusion Maps)

使用環境光遮蔽貼圖進行著色的基本思想是:可以直接在著色點處使用之前已計算好的,有多少光線能到達表面的,優質的近似值信息。

影響這個數值的兩個因素是:

(1)在此點上方半球的哪個部分不被點和環境貼圖之間的幾何體遮擋。

(2)沿著這些方向的入射光是什么。

下圖顯示了兩種不同的情況。在左圖中,只能看到著色點上面的一小部分,由方向矢量B和圍繞它的方向圓錐體所表示,該點的可到達度非常低。而在右圖中,沿著更大范圍的方向有更多的光線到達給定點。

圖 不同量的可見度的近似(左圖:由于附近的幾何體的遮擋比較嚴重,這點得到的照度較小;右圖:沿著更寬方向的圓錐體,更大量的光能到達這點,照度較左圖更大)

在預處理中計算的可訪問性值告訴我們哪一部分半球可以看到環境貼圖,而可見方向的平均值給出一個近似方向,圍繞它計算入射光。雖然這個方向可能指向一個實際被遮擋的方向(例如,如果半球的兩個獨立區域未被遮擋,但其余的部分被遮擋,平均方向可能在這兩者之間),但在實踐中其通常運行良好。

有無使用環境光遮蔽貼圖進行渲染的對比圖

?

【核心要點總結】

?

給定一個任意的著色模型,環境光遮蔽算法需要知道模型上每點的兩個信息:

1)該點的可到達度(accessibility)。

2)未被遮擋的入射光的平均方向。

文中提出的環境光遮蔽方法,總結起來有三個要點:

  • 采用了多種在實踐中運行良好的近似方法。
  • 主要為預處理操作,將相對昂貴的計算事先準備好,且僅計算在渲染時進行快速著色所需的正確信息。
  • 預處理不依賴于光照環境貼圖,因此可以輕松使用場景中的動態照明。

【本章配套源代碼匯總表】

Example 17-1 計算環境光遮蔽量的基本算法偽代碼(Basic Algorithm for Computing
Ambient Occlusion Quantities)

Example 17-2 使用拒絕采樣法計算隨機方向的算法偽代碼(Algorithm for Computing
Random Directions with Rejection Sampling)

Example 17-3 使用可到達度和環境映射進行著色的片元Shader(Fragment Shader for
Shading with Accessibility Values and an Environment Map)

Example 17-4 latlong( )函數的定義(The latlong() Function Definition)

Example 17-5 computeBlur( )函數的定義(The computeBlur() Function Definition)

【關鍵詞提煉】

環境光遮蔽(Ambient Occlusion)

拒絕采樣(Rejection Sampling)

環境光遮蔽貼圖(Ambient Occlusion Maps)

?

總結

以上是生活随笔為你收集整理的GPU Gems1 - 17 环境遮挡的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。