【GDC2016】Physically Based Sky, Atmosphere and Cloud Rendering in Frostbite
這個Talk有兩個資源,一個PPT,一個PDF。這裡主要描述PPT里的內容。在這個Talk描述了寒霜引擎的大氣散射、雲、天空的渲染。
在開始談具體的論文內容之前,讓我們聊聊,作為遊戲渲染,要做的事情有那些呢:
- 角色
- 臉
- 皮膚
- 要看起來像皮膚
- 表情
- 傳神
- 眼睛
- 材質表現
- 眼神
- 頭髮
- 髮型設計
- 髮絲表現
- 高光表現
- 服裝
- 服裝設計
- 質感表現
- 布料表現
- 絲滑
- 動作
- 場景
- 材質
- 材質表現力和性能平衡
- 各類特殊材質表現
- 光與影
- 烘焙
- 精度和性能平衡
- 烘焙演算法選擇
- 烘焙器選擇
- probe
- 地表
- 地表材質
- 豐富度
- 幾張混合
- 效果
- 是否使用高度信息融合
- 材質演算法選擇
- 形體表現力
- Worldmachine的使用
- 創建自動度、易用性
- 石頭Mesh or Terrain System
- 大氣和天空
- 大氣散射
- 高度霧
- 距離霧
- 散射現象模擬
- 雲
- 雲移動
- 雲變形
- 雲受光
- god rays
- 視野
- 近中遠層次構景設計
- 超遠視距支持
- 布景元素
- 水、海、河流
- 材質效果
- 形體變化
- 貼花
- 道路系統
- 天氣系統
- 下雨下雪
- 濕潤表現
- 雨水表現
- 風力
- 日夜變化
- 植被系統
- 茂密程度
- 大片森林
- 花海草海
- 植被搖擺
- 植被光影
- 後處理
- AA
- bloom
- color grading
- 景深
- 等等很多
看起來很多,所以做引擎的也很忙的。而天空、大氣散射、雲我認為是對於構景來說非常重要的一部分。當你做好了它們,玩家進來遊戲10分鐘後(前10分鐘選人界面玩角色)會說:畫質好(次世代)!(當然其他的也不能差)
其實寒霜引擎在2014年,才正式全面轉向PBR,PBR讓寒霜引擎的表現力得到了大大的提升:
從上面圖片看,已經很難一眼辨別出真實與虛擬的區別了。
之前,在寒霜引擎里,對於天空、大氣、雲渲染主要使用的相關技術包括:
- 天空
- HDRI(高動態圖)
- color gradients(比如散射模擬圖)
- 大氣效果
- 基於深度的霧效
- 屏幕空間的Light Shaft
- 雲
- 貼圖雲
- 模擬移動
- 移動的多層片雲
這些技術效果還是不錯的,效果圖:
但是這些技術很難實現動態的24小時變化。
一個很具有代表效果的照片:
目標就是實現照片中的效果,並且能實現24小時和天氣變化。
具體的目標:
- 動態24小時、天氣變化
- 基於物理
- 具有意義的調節參數
- 材質和光照分離
- 統一的交互影響
- 天空、大氣、雲互相影響
- 和透明、不透明、GI正確交互
- 60FPS
下面是Mirror』s Edge Catalyst實現的效果:
https://www.zhihu.com/video/951568992431734784
可以看到,場景的所有東西之間是互相影響的。
Bioware 實現的效果:
https://www.zhihu.com/video/951569562622304256進入正題,這裡將相關渲染分為四個部分(注意標記顏色的對應關係):
值得注意的是,大氣效果是畫面中的任何一處都有的。大氣效果包含我們通常理解的霧效。
分析一下相關的物理知識:
- 大氣層
Rayleigh Scattering(注意傳播時的顏色變化):
Mie Scattering:
幾類主要的相關的工作介紹:
- Analytical models
- An Analytic Model for Full Spectral Sky-Dome Radiance, SIGGRAPH 2012
- Spatial distribution of Daylight
- A Practical Analytic Model for Daylight, SIGGRAPH 99.
效果(An Analytic Model for Full Spectral Sky-Dome Radiance):
- Spectral rendering
- Rendering Parametrizable Planetary Atmospheres with Multiple Scattering in Real-time, CESCG 2009
- A Practical Analytic Model for Daylight, SIGGRAPH 99.
- Sky atmosphere simulation
- Precomputed Atmospheric scattering, EGSR 2008
效果:
寒霜的實現主要基於(Precomputed Atmospheric scattering, EGSR 2008)提出的方法。
LUT
本文介紹的渲染方法中使用了LUT來提升散射計算效率,首先介紹一下LUT是如何計算的,基於下圖中的 (Light)、 (height)、 、 :
來計算出LUT:
來看一下散射的主要係數:
- Scattering係數(不同波長的光波係數不同)表示有多少光被彈射掉
- Extinction係數表示在被吸收、彈射掉之後有多少光繼續傳播
- Distribution係數表示光在穿過空氣粒子時的散射分布
- Ozone用來在日落時使用,保持天空藍色屬性
天空渲染
使用LUT直接渲染出遠處天空:
近處天空,Aerial perspective計算:採用Volumes的方式渲染,將視錐劃分為32x32x16的slices,對每個slice進行獨立計算,然後進行求和。
效果:
看一下,太陽位置變化時的效果:
https://www.zhihu.com/video/951597462956302336
在太陽位置變化時,天空和Aerial perspective的渲染效果會自動變化。另外,當太陽位置變化中,為了保持整個遊戲的光照環境一致,需要對場景中其他渲染使用的數據做相應的變化,包括:
- Sky environment map
- Local reflection volumes
- Global illumination
當大氣屬性參數變化時(比如氣候、天氣、空氣狀況發生變化),LUT做對應的更新。遊戲中,LUT是根據大氣屬性參數進行實時計算出來的,開銷比較高,一般是分幀來計算:
太陽渲染
美術指定太陽在頂點時的光照度,當太陽在不同位置時,計算對應的光照度 。
當有了光照度 ,就可以畫出一個基本的太陽:
應用之前討論的散射(LUT)計算:
雲的渲染
相關的工作:
- Mesh+ HyperTexture 效果好性能差:
- Splatting based rendering 基於粒子渲染、效果比較局限,某些情況下才比較好看:
- Cloud layer 動態生成 支持光照、陰影、天氣:
本文基於上圖中的方法(Physically Based and Unifier Volumetric Rendering in Frostbite, SIGGRAPH 2015.)做了以下幾點改進:
- 能量守恆
- 2-lobe phase function
- 24小時、天氣變化、以及與天空和Aerial perspective交互
拆解一下雲幾個主要的計算部分:
- Transmittance 雲的傳播屬性(類似於透明度)。效果上就是在雲邊緣是半透的;從光線傳播上來說,就是天空的光透過雲射入了攝像機
- Ambient(來自四面八方的光,即環境光,射到雲上並彈射到攝像機)
- Sun scattering(太陽主光在雲層彈射後,進入攝像機的光)
- Self shadow (考慮太陽主光彈射受自陰影影響)
- Phase function(光在穿過粒子時,彈射的分布函數)
這裡沒有考慮的是,光在雲內的多次彈射。
做Transmittance和Scattering計算,需要使用Raymarch演算法,使用的演算法基於(Physically
Based and Unifier Volumetric Rendering in Frostbite, SIGGRAPH 2015),做了一些優化:shadertoy demo,具體效果:從結果來看,優化後的演算法,在21 samples已經可以達到比較好的效果。
接下來,談談Phase function。一個比較標準的效果如圖所示:
使用一種簡化的模擬實現:
效果:
使用Aerial perspective渲染雲,首先看一下沒有使用Aerial perspective的效果:
https://www.zhihu.com/video/951933976231759872出現的問題是,雲與整個環境不夠融合,不受霧:
使用Aerial perspective後:
https://www.zhihu.com/video/951934587497144320當雲的覆蓋率越來越高時,AP(Aerial perspective)會受到影響的。在AP計算時,必須考慮雲的覆蓋率。
這裡,對環境(雲覆蓋率)採樣,得到半球函數:
得到的結果:
https://www.zhihu.com/video/951937677654736896從視頻可以看出,當雲慢慢布滿天空時,Mie散射的顏色慢慢由暖黃色(太陽產生)變成了深藍色(變成主要受穿過雲層的光影響)。
性能報告,看起來還挺省的(畢竟是遊戲機):
OK,講完了,進入廣告時間:
網易遊戲招聘(應屆生、實習、社招)
求賢若渴招: 1.技術美術(TA) 2. 引擎程序 3. 邏輯開發感興趣直接加本人微信:warmsuning 或發送簡歷: hzliyangyang@corp.netease.com
推薦閱讀:
※讓角色半透明:後期模糊(二)
※【GDC2013】Sand Rendering in Journey
※Ray Marching Ocean
※GAN在2017年實現四大突破,未來可能對計算機圖形學產生衝擊
※Unity3D如何將圖片以正確的像素顯示在屏幕上
TAG:計算機圖形學 |