通用天氣系統調研及手遊方案推薦
https://zhuanlan.zhihu.com/p/569093979
總結了一下目前比較流行的做法並加粗、總結了一下手機上會比較合適的方案,現分享如下。
天氣系統概述:
一個比較完整的天氣系統大體包含:
下面就每種效果介紹對應實現方案:
光照:
一、實時光照
1、實時大氣散射程式化計算
荒野大鏢客2:
http://advances.realtimerendering.com/s2019/slides_public_release.pptx
將天氣系統光照引數融入大氣散射公式,透過調整大氣密度、大氣厚度等引數來改變天氣效果。
幾乎所有3A平臺都統一使用這種基於物理的大氣系統來實現。包含:寒霜引擎、教團1886,地平線黎明
2、美術指定顏色插值過渡或程式自動過渡
天刀:
雖然天刀使用了大氣預烘培方案,但該方案的光照並不支援天氣效果。因此,大機率:
美術指定光照顏色來進行程式自動化過渡。
程式自動透過調節晴天照明引數來實現天氣的照明。
國內包含晝夜變換的PBR類PC遊戲基本使用這種方案。
3、美術指定光照(過渡)
完全由美術指定梯度色,透過時間由程式進行插值過渡。比如原神,由美術預先提供一張顏色梯度圖供程式呼叫。
天刀的夜晚顏色,國內包含晝夜變換的大多數手遊均使用該方案。
4、燈光、場景或透過後處理直接壓暗
國內很多含有天氣系統的手機遊戲,絕大部分採用該方式。
二、環境光照:
1、環境漫反射:
一個比較全的環境光漫反射做法:荒野大鏢客2
可見性(陰影遮蔽):複用雲的可見性紋理。
天光:來自大氣散射(瑞利/米氏),並將其重要性取樣為低解析度拋物面(穹頂觀察位置的MatCap)紋理
視錐內的間接反彈光線使用輻照度探測場獲取(類似Light Probes)並乘上環境光遮蔽
這是一個非常完整而全面的環境光照明體系。手遊方面會近似性或簡化性的使用其中的一部分效果。
比如:
雲遮蔽和雲的光線投射,會直接使用一張噪波圖罩到整個場景上,來模擬雲影的效果,捨棄大氣散射和雲投射效果。天氣系統可以配合更換這張噪波圖或直接數值調整遮蔽部分的範圍和遮蔽強弱,即可模擬不同天氣下雲對地面的環境影響。
天光通常在Unity中使用Color Grade的三階色來進行模擬,完全拋棄實時大氣散射的影響。這部分可以由美術實現調整好不同天氣的三階色,透過程式實時過渡來實現天光的模擬。
間接光線反彈效果,這部分因為手遊效能限制,很多會將除平行光以外的所有光照效果都烘培到球諧探針上,而不止是光線的間接反彈。但這部分是預烘培死的,大部分是用來模擬場景中的人造光源,因此可以不隨天氣系統進行改變,或由程式稍加調整。
其他方案還有諸如:
量子破碎的螢幕空間照明
體素照明、光追等方案。
2、環境鏡面反射:
1、光線追蹤
NV當初的光追Demo:光明記憶
目前3A遊戲高效模式下,基本都支援光追。
這種反射能完美再現場景效果,不需要針對天氣系統進行額外操作。
2、螢幕空間反射
賽博2077:
3A遊戲在非光追模式下的反射解決方案,基本為標配。部分手遊(延遲管線)如:原神(對可動物件或開放環境中的水)中也有應用。
這種反射也可以完美再現場景的可視部分的效果,不需要針對天氣系統進行額外操作。
3、反射探針(環境立方圖)反射
絕大部分手遊解決方案,原神在中也大量應用。
因為環境圖為預烘培,因此需要針對不同天氣做必要的修改,例如可以簡單調整明暗。
原神中則配合延遲渲染,對CubeMap做獨立照明:
生成Cubemap的基本色、法線
根據反射向量獲取Cubemap資訊
根據獲取到的Cubemap資訊進行延遲光照渲染。
也有部分3A遊戲會在相機附近計算實時的Cubemap,而非預烘培。
4、鏡面反射
目前手遊中對反射要求較高的部分場景會使用該方案。
例如我們遊戲中的海水反射。
這種反射能完美再現場景效果,不需要針對天氣系統進行額外操作。
大氣環境:
一、雲
1、體積雲
荒野大鏢客2:
使用全域性雲圖 + 細節噪波 + 高度形狀控制Lut圖來程式化生成雲。
改變天氣時,會根據天氣狀態獲取對應高度和形狀的雲圖進行特定雲形狀的模擬。
雲的光照則透過前面提到的大氣散射程式化計算獲取。
目前主流3A遊戲均透過該方式實現。
附:主要雲層種類及高度:
2、模型雲
光遇:
使用3D噪聲沿法線扭曲頂點 + 多層渲染做法。
引自WalkingFat部落格,後附帶連結
可以實時的與場景光照產生互動,甚至可以將光照、陰影直接烘培到LightMap中。
因為3D噪聲圖和模型形狀都是預生成,因此無法跟隨天氣系統改變形狀。如果要配合天氣改變雲層光影,則需要實時進行光照。這種做法更適合雲上效果。
3、面片(粒子)雲
崩壞3、原神
需要預生成如下雲形狀圖:
分別用RGBA通道來模擬雲的光照、邊緣、厚度和半透明。
無法根據天氣改變雲的形狀、密度等(可以多張雲圖過渡實現),可以由美術設定各種天氣的光照效果,雲自動進行匹配。
擴充:還可以根據光照方向,生成多張雲光照圖(就是R通道那張),然後根據光照角度進行實時過渡,來模擬雲的光照互動。
4、天空球
絕大部分手遊採用的雲製作方案:
可以透過美術設定不同時段天空梯度色,由美術插值過渡的方式來實現晝夜變化。
由美術設定各種天氣狀態下雲的顏色,由程式根據天氣狀態在各種顏色中進行插值過渡。製作效果主要取決與天空球的寫法。
二、大氣散射和霧
因為幾乎所有手遊都不具備場景的大氣散射效果,基本都是依靠霧效進行過渡模擬,因此將這部分進行合併整理。
1、RayMarching
3A遊戲中的大氣散射都是基於物理實時計算的,霧的實現差別也不是很大,基本都是透過RayMarching方式實現。
荒野大鏢客2中的全域性霧與區域性霧:
全域性霧透過霧圖(起始高度、衰減距離和密度)來實現,其中會混合天氣和時間引數來實現濃淡過渡。
區域性霧透過美術放置霧效體積(圓或方形)來實現,混合模式為疊加或混合。這部分應該會和全域性霧效一樣,混合天氣和時間引數來實現濃淡的過渡。
2、後處理霧
大部分PC遊戲及部分手機遊戲中,經常使用的霧效實現方式。
不同與上面的RayMarching方案,只會取樣場景深度一次,透過還原世界座標來新增霧效,主要用於延遲渲染中。
因為手機並不支援大氣散射的實時計算,這部分的效果通常就由霧的顏色來部分承擔了。給場景霧效根據高度和距離來設定不同的顏色過渡,用來模擬大氣散射的效果。配合天氣效果時,也需要美術設定好不同天氣下的霧顏色,由程式插值過渡實現。
3、頂點霧
絕大多數手遊採用的方案,也是Unity的距離霧預設的方案。
配合天氣效果時,也同上一種處理方案一致。
天氣特效:
一、雨
雨的實現方案主要有兩種:
1、粒子
就是在相機前方一定範圍內放置雨滴的粒子系統來實現。
例如:我的世界、逆水寒
引自:網易遊戲雷火事業群,後附連結
引自:網易遊戲雷火事業群,後附連結
2、面片
建立錐體Mesh,透過雨滴紋理的UV流動來模擬下雨。
例如:天刀、原神
二、雪
與粒子系統雨做法一致,將紋理換成雪即可。
天刀中的雪
附:雪花主要形狀
三、閃電
1、特效方面:
一般端遊或3A遊戲,都是透過程式實時生成。
荒野大鏢客2:
手遊透過半透明閃電紋理圖來實現。天刀手遊:
2、照明方面:
3A遊戲基本透過新增大範圍點光源的方式來進行實現。
天刀方案:將主光源對齊閃電到相機方向,並調整平行光亮度來實現。
類似點光源計算方式,不進行光源新增,只是程式傳入材質必要的幾個引數,進行類似點光源的計算。
場景反饋:
一:天氣特效互動
1、雨
場景物體被雨打溼後的效果表現。
從PBR角度來說,打溼後的效果應該更像物體表面覆蓋了一層薄薄的清漆(未形成積水階段)。其主要影響如下:
相較於大部分非金屬物體(F0——0.02)來說,水的反射效果更強。因此視覺上,被打溼的物體,其反射效果會變明顯。
水的流動性會導致其在物體微表面維度上起到“整平”的效果,從而視覺上會讓物體表面的反射更趨於平面(降低物體表面法線影響,降低物體表面粗糙度)。
因為額外增加了一部分光線被反射及透射吸收,就會導致物體表面接收到的光線亮度下降,從而降低了物體的漫反射效果,就是物體表面會變暗。
而以上這些影響,一定程度上取決於兩塊:
物體本身的粗糙度。
物體本身的F0值。
這就是大理石、水泥、土地被水打溼前後,變化程度並不一樣的原因。
暫時沒有找到相關論文論述,但製作3A遊戲的天氣系統,吸溼度這項引數應該會有某種程度上的體現。
手遊中做法比較簡單:
降低漫反射強度
提高反射強度
逆水寒中的一段敘述。
引自:網易遊戲雷火事業群,後附連結
流動(手機不建議做):
基本理論做法都一致,將世界“下”方向轉到切空間作為噪波紋理UV流動方向,再疊加法線斜率調整UV流動速度,之後用噪波扭曲模型各張基本紋理即可。
不同遊戲的主要差別在於:
噪波圖的實現方式。可以透過世界空間座標實時生成,也可以使用3D噪波紋理,也可以使用UV空間的2D噪波紋理。
是否支援物體旋轉。決定了需不需要將“下”方向轉切空間。
手遊很少有支援該效果的,因為效能消耗較大。
積水與反射(手機不建議做):
積水位置的效果類似於水面效果,根據不同平臺效能實現對應的效果即可。
引自:網易遊戲雷火事業群,後附連結
這裡主要需要討論乾燥和積水過程之間如何進行過渡及如何確定積水位置的覆蓋區域。
自動計算——逆水寒:
根據場景地表坡度自動計算積水區域。
引自:網易遊戲雷火事業群,後附連結
隨機平面——天刀:
水平位置即被認為為積水區域,是否透過疊加一張2D噪波圖來做隨機性,原文章並未敘述。
美術手繪——精細化控制
PC或3A遊戲:在地面面數較高的情況下,透過筆刷工具,將積水位置直接繪製到模型頂點色上。
https://www.bilibili.com/video/BV15y4y167pq
手遊:繪製到一張低解析度的地面積水紋理上,類似逆水寒做法,但手繪,可控性更強。
水花飛濺
用粒子系統在相機前面一定範圍內播放序列圖即可。
漣漪(手機不建議做)
在積水達到一定程度的水平表面,透過疊加法線的方式實現。
天刀:
實時計算漣漪
與螢幕雨滴做法類似,以切割物體表面UV的方式,產生漣漪效果。
2、雪
覆雪
可以參考蔡驁這邊寫的做法,一般遊戲的覆雪都是這麼做。
主城生態調研(https://bytedance.feishu.cn/docs/doccniYLPpAItnAriypWICkjMZd#XtRUwO)
雪閃效果(手機不建議做):
3A遊戲一般都使用2015Siggraph的論文製作。
一、UV成型
二、離散為梯度
三、根據菲涅爾等引數調節大小和密度
四:疊加噪波
五:各向異性光照
腳印
3A遊戲:戰神4
蝙蝠俠:
一、配合視角和紋理最佳化對雪地表面進行曲面細分。
古墓麗影崛起:
二、在角色下方放一個短視距相機拍攝腳底高度(多人)或傳入角色位置(單人)。
三、對高度圖邊緣或者根據角色位置對中心做凹陷,邊緣做隆起。
四、對雪地表面頂點做高度偏移。
手遊:
天刀:沒有。
原神:
跟隨腳底的腳印特效(帶法線)。
2、相機後處理:
螢幕水滴、螢幕水霧
3A遊戲中比較靠譜的一種做法
https://zhuanlan.zhihu.com/p/298606553
但效能消耗較大:
UWA這邊有一份測試報告
https://blog.uwa4d.com/archives/UWALab_Raindrops.html
手機中:
暫時沒有看到很好的專案應用。可以嘗試將上面方案做一些簡化,例如:將消耗比較大的模糊霧效、多迴圈雨滴都去除,只保留單次迴圈的單雨滴效果。
螢幕結霜效果
螢幕疊加冰霜圖Mask,透過Noise進行溶解消融實現。相對來說,這種效果更偏向於玩法邏輯層,只有處於低溫狀態(異常狀態)或配合角色呼氣才會出現這種螢幕效果,該效果一般天氣系統不會隨下雪附帶。
總結
手機上比較現實的方案:
光照:美術調節晴、雨、雪三種光照狀態,程式根據天氣插值過渡。
環境:全域性漫反射使用場景環境光,同光照做法。鏡面反射使用場景自帶的Cube。
大氣環境:雲和天空,如果美術使用程式化天空球,可以以調節材質引數顏色的方式定義天氣,程式插值過渡。如果使用紋理畫死的天空球,程式只能兩張天空紋理插值過渡。
雨:粒子和麵片方案可以任選一種。
雪:粒子系統製作。
閃電:特效使用多閃電形態隨機選擇的方式。照明使用程式實時調節平行光引數的方式。
場景打溼效果:只透過調節金屬度和粗糙度的方式來模擬實現,不進行表面流動等特殊效果的製作。
水花:粒子特效製作。
雪:覆雪使用法線朝向混合做法,不進行表面閃爍效果的製作。腳印要麼不進行製作,要麼使用類似原神的面片特效方式製作。
後處理:都不建議製作,或者只製作最簡單的雨滴效果(單水滴低落,不會有拖尾、霧化等效果)。
主要參考:
頑皮狗:城市環境實時雨夜
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.330.5234&rep=rep1&type=pdf
R星:荒野大鏢客2大氣環境
騰訊:天刀晝夜天氣系統-從端游到手遊
綠美迪:量子破碎多尺度全域性照明
網易:遊戲中雨天效果開發
https://zhuanlan.zhihu.com/p/111904859
米哈遊:從手機走向主機,《原神》主機版渲染技術分享
https://www.bilibili.com/video/BV1Za4y1s7VL
基於模型的體積雲
http://walkingfat.com/bump-noise-cloud-3d%E5%99%AA%E7%82%B9gpu-instancing%E5%88%B6%E4%BD%9C%E5%9F%BA%E4%BA%8E%E6%A8%A1%E5%9E%8B%E7%9A%84%E4%BD%93%E7%A7%AF%E4%BA%91/
雨滴螢幕效果
https://zhuanlan.zhihu.com/p/298606553
相關文章
- MMORPG手遊天氣系統的沉浸感設計
- 【推薦系統篇】--推薦系統之訓練模型模型
- 天氣類API介面推薦,含免費次數API
- 【推薦系統篇】--推薦系統之測試資料
- 【專題資料】遊戲中的天氣系統遊戲
- 天氣出行、手機號查詢、簡訊、IP查詢類好用的介面推薦
- python 推薦系統Python
- 推薦系統概述
- 《推薦系統實踐》筆記 01 推薦系統簡介筆記
- 推薦一個基於thinkphp6的通用後臺管理系統PHP
- 推薦系統論文之序列推薦:KERL
- w10系統天氣為什麼只顯示北京天氣_win10系統本地天氣如何設定Win10
- 推薦系統實踐 0x05 推薦資料集MovieLens及評測
- 推薦系統一——深入理解YouTube推薦系統演算法演算法
- 【推薦系統篇】--推薦系統介紹和基本架構流程架構
- 推薦系統概念篇
- 《推薦系統》-DIN模型模型
- 《推薦系統》-PNN模型模型
- 5.22 天氣預報系統 小
- 雲音樂推薦系統(二):推薦系統的核心演算法演算法
- 【推薦演算法】推薦系統的評估演算法
- Mahout的taste推薦系統引擎(影片推薦案例)AST
- bt手遊App排行 bt手遊app平臺推薦APP
- CRM系統選擇的五個標準及推薦
- 手遊《天地劫》的三天體驗——深度系統剖析及玩法詳解
- JVM調優推薦JVM
- 推薦系統工程架構架構
- 《推薦系統》-Wide&DeepIDE
- 推薦系統 task 1 @datawhale
- 【推薦系統】GBDT+LR
- 如何構建推薦系統
- Spark推薦系統實踐Spark
- 響應式方案調研及前端開發管理思考前端
- 推薦系統實踐學習系列(三)推薦系統冷啟動問題
- Netflix推薦系統(Part two)-系統架構架構
- 推薦系統應該如何保障推薦的多樣性?
- 包站gm手遊平臺 手遊gm平臺代理推薦
- 序列推薦系統的前世今生