[sig12][PBS]Farcry3的物理光照

來源:互聯網
上載者:User


使用物理光照的遊戲列表裡面又多了一個有力的成員--farcry3.

這裡主要講了3個方面:

  • diffuse貼圖的矯正
  • 天空盒與sky lighting
  • shading model的選擇
why physical?提到physicallighting時候,一般的官方回答:
  • 真實的光照效果
  • 在多變光照環境下,材質始終表現正確
這裡我想補充一點就是,如果不是physicallighting,那麼什麼樣呢?其實我們只有兩個選擇,基於真實理論的,或者基於hack,跟著感覺走硬湊的。真實理論的就是physicallighting。跟著感覺走硬湊就要面臨這樣的問題,在一個光照環境下是對的,但是換一個環境就不對了,當然也可能美術和程式都特別牛,經過猛烈的一頓調整之後,在所有情況下都是對的了,那麼這個結果就一定是physicallighting的,只不過一個是直接在眾多研究者,程式員的基礎上直接抵達,一個是經過大量嘗試曲線救國。
diffuse貼圖的矯正這裡一個概念是albedo:是指在某一個角度上,反射的能量與入射的能量的比值。這裡主要討論diffuse albedo,標準的diffuse貼圖就是描述材質漫反射的一個屬性,是不能帶有額外的光照資訊(也包括shadow,ao。。。)。但是實際我們去diffuse貼圖的時候,基本都是從照片中取出來,這樣就不可避免的帶有光照資訊。比如說我們要刻畫一個乳白色的牆,但是我們在夕陽下的照片是發黃的,這樣就沒法正確的描述嗆得乳白色的特性,同樣道理,直接陽光下的過白,有陰影等都影響了diffuse屬性的表達。為了達到光照正確,我們需要對diffuse貼圖進行一系列的矯正。這裡farcry3用的方法是:
  • 貼圖都是自己拍的照片
  • 拍的時候使用一個叫macbeth color checker,就是圖裡面的那個調色盤
  • 然後使用一個photoshop script來根據調色盤的顏色值與標準的顏色值的差別,進而計算出如何進行計算才能將照片中貼圖去光照資訊。
幾個實踐中的問題,f1, arcry3項目組在比較後期的時候才開始做這個事情,那麼已經做好的很多貼圖並沒有通過重新拍照獲得,也沒有辦法,這個時候就看artist的功力了,好的artist可以根據經驗,以及已經較好色的texture來把這些圖片處理好。2, 美術對於diffuse albedo難以很好的理解,對於其中的光照資訊也不能很好的理解,這裡做一個區分,光照資訊部分是要調節掉的,但是shadow和ao是可以保留的,儘管最好是能夠去掉,但是這部分工作就比較難了,fc3的工具也只是去光照資訊。fc3的矯正工具還有很多可以提高的地方,比如:
  • 處理camera帶來的扭曲問題
  • 使用起來也不那麼便捷

sky dome與sky lighting項目初期時候,sky是使用兩個貼圖來描述的,這裡帶來兩個問題:
  • 只能表現出LDR的資訊
  • 沒法準確描述出天空亮度上的變化(這個變化是基於物理正確的)
後來fc3使用的天空模型是CIE sky model,
這個模型由一些描述資訊(比如描述天空是乾淨晴朗的,還是比較陰沉的,參數就是上面公示裡面的a,b,c,d,e),然後加上角度等,就可以給出非常物理正確,很自然的結果,而且:
  • artist也有相當的控制力
  • 自然的,而且是HDR的
  • 不會有貼圖控制的帶來的解析度的問題
SkyLighting
skylighting在現在需要的是更加逼真,也就是有層次,像半晚這樣的情況,已經不能用簡單的一個顏色來代表。fc3使用的方法是根據cie sky model來把radiance資訊放到一個light probe存成sh係數(2階),然後放到shader裡去使用。然後可以讓artist降低飽和度來是的天光不要那麼藍:


但是中間發生一個問題,就是直接使用cie sky model的時候發現給出的感覺沒有照片來的“清澈”,後來發現用作參考的照片普遍使用了polarization filter,效果對比:
(右邊是有polarization filter)這個feature挺酷的,查了一下很有意思,這裡多說一下,這裡比較全偏振性是指波的震動方向和傳播方向不一致,也就是只有橫波才有偏振性。自然光在經過非金屬的反射和折射之後,偏振方向會發生變化,變化和入射的角度有關。在攝影的時候如果使用偏振鏡,就可以濾掉很多設定角度以外的偏振光,那麼很多我們不需要的光線就被幹掉了,會呈現出更加通透的感覺。實際的攝影效果果然很棒:
在清晰的瞭解了這個之後,就在cie sky model基礎上加了一個fake的polarize filter--一個artist指定的顏色,這樣sky就呈現了偏振鏡的效果了。
ShadingModelfc3早期的光照模型既不能量守恒,也沒有fresnel,暴露specular power和intensity給artist,也很不直觀。轉向physicallighting之後,在shading model的選擇上,fc3並沒有和其他的有什麼不同,也是microfacet brdf:
但是在效能的最佳化和追求上,更進一步:specular power的計算上,選取了cod7裡面一樣的gloss是[0,1], specular power = pow(2,13*g);normal distribution function:
fresnel項,一般推薦的是schlick(讀成“司庫力克”)approximation,這裡後面有個文章使用spherical gaussion approximation進行了個最佳化,兩者公式:
visibility使用schlick smith


對於visibility的最佳化和tri ace的方法很像,使用數學簡化,然後曲線逼近,最後變成:(2*specPower+1)/8。
SpecularFilter在使用physicallighting的時候,一個問題就是遠處的specular lighting有閃爍的情況。造成這個問題的一個原因就是用於計算的gloss值沒有根據材質離得遠的時候,normal的方差變化,那麼specular power也應該有相應的變化。這個方面已經有一些研究,比如LEAN和CLEAN mapping,來解決這個問題,但是消耗比較大。fc3使用的方法是toksvig map,它是使用normal的方差和gloss來重新估算specular power:
m:原先的specular power,Na:normal的方差。這樣修改texture exporter,可以在各個mipmap裡面對gloss進行相應的矯正就可以了。fc3使用的是dxt5n作為normal map的存放方案,rb通道是空出來的,fc3決定把gloss放入r通道,但是這個又對g通道的壓縮造成影響。這裡對壓縮率損失的方法,說的不是特別清楚,從文中推測是:在r通道裡面高mipmap裡不是存的矯正過得gloss,而是一個toksvig的平均值,然後使用mip0的gloss和這個toksvig的值做一個scale,得到最終的結果。
實踐的一些總結physicallighting是在fc3項目比較晚的時候引進,大幅度的提升了畫面品質,也證明這個晚一些做也是可以的。效能總體上來說,沒什麼變化,雖然計算是多了些,但是很多不必要的hack也可以移除了,兩個彼此抵消。美術這裡也可以很迅速的產生貼圖,達到生動飽和的情境的目的。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.