該文章來自用戶轉載 點擊閱讀原文html
做者介紹性能優化
大綱app
介紹編輯器
當前市場上使用UE4開發手遊的狀況工具
天堂II 革命性能
天堂II 革命測試
Netmarble Games(網石遊戲)使用標準的UE4特性進行該遊戲的開發fetch
UE4 移動平臺渲染器優化
UE4渲染器編碼
UE4擁有3個不一樣的渲染器
特性集
特性集介紹
•ES2
•Mobile渲染器
•對應OpenGLES2.0-3.x(Android平臺) OpenGL ES2.0(iOS平臺,支持ES3.0的IOS平臺已經可以支持metal, 因此直接使用metal渲染器)
•支持最大8個紋理單元
•Android平臺:
ES3.0擴展的支持
Fallback到32位RenderTarget
特性集介紹
ES3_1高端Mobile特性集
•Mobile渲染器
•OpenGLES 3.1(Android平臺) Vulkan(Android平臺, Android7.0) Metal(iOS平臺)
•最大16層紋理單元支持
•浮點RenderTarget支持
•VertexTextures Fetch支持
•sRGB支持(能夠支持硬件Gamma校訂,但此處通常使用更簡化的Shader計算代替,方便統一低配與高配機的效果)
特性集介紹
•SM4
•延時渲染器
•Direct3D10OpenGL3.0 Metal支持
•最大16層紋理單元
•支持延時渲染的最低特性集
特性集介紹
•SM5
•延時或者前向VR渲染器(Forward+)
•Direct3D11, OpenGL4.0, Playstation 4, XboxOne, Metal, GLES3.1 +AEP
•16+紋理單元支持
•支持Tessellation(曲面細分)的最低特性集,能夠利用Compute Shader完成一些高級渲染特性支持。
特性集(Android)
打開黃框選中的特性可讓UE4生成ES3_1特性集使用的Shader
•UE4在對應設備執行時會自動選擇最匹配的RHI(抽象硬件接口)和特性集
•
•這些配置能夠被設備配置重寫
Android Vulkan介紹
Vulkan是蝦米?
•用來取代OpenGL和OpenGLES的次世代的渲染Api。
•由工業派設計,克拉魔發起。
•專爲下一代硬件設計。
•
支持Vulkan的UE4(Android平臺, iOS官方標配是Metal, 不支持Vulkan)
•運行Android7.0的設備如今自帶一個可工做的Vulkan驅動。
•輕量級的Api, 最小化Cpu開銷。
•「PipelineState Objects」帶來高效的渲染狀態切換。
•更多的渲染批次,由於每一個渲染批次更輕量化
•???大意應該是按「RenderPass」組織方式帶來更高效的Gpu硬件利用率(字被人擋住了。。。)
這裏是Epic官方的Vulkan示例(能夠自行查閱相關視頻)
顏色緩衝區(HDR模式)
對比延時渲染器, UE4移動渲染器使用一個前向渲染器, 僅輸出顏色,而不是使用Gbuffer。
•場景顏色
•理想的狀況在支持的設備上使用16位浮點RenderTarget。
•不支持的狀況使用「 RGBE 編碼」或者「馬賽克」模式(??Whatis 「mosaic」mode???)。
•在渲染過程當中RGB存儲HDR顏色值。
•Alpha通道用來存儲後續會使用到的深度值(軟粒子,貼花)。
•
•深度緩衝區
•一般使用24位深度,8位模板的模式。
•
•後備緩衝區
•32位RGBA。
•存儲後處理和Tonemapping後的最終結果。
RGBE HDR 編碼
RGB + 指數 的編碼方式須要被低端移動設備使用(運行Android5.X的GalaxyS6/Note4等)
•須要 EXT_shader_framebuffer_fetch的擴展(該擴展在GalaxyS6上可用)
•支持full HDR, bloom 並且沒有分辨率限制。
•
從圖中能夠看到Native HDR和「Encoding」 HDR的實現基本沒有區別
顏色緩衝區(LDR 模式)
•32位硬件後備緩衝區 & 深度緩衝區
•系統分配(好比Android上的EGL)
•許多移動設備並不支持sRGB
•
•場景在Gamma空間中被直接渲染到後備緩衝區,隨後透明物體和UI也被直接渲染到後備緩衝區
•最快的渲染方式(通常給簡單遊戲或者VR遊戲使用)
移動平臺渲染管線
1.視口創建
2.GPU粒子模擬
3.渲染陰影圖
4.基礎Pass渲染
5.貼花處理
6.混合陰影處理
7.半透明物理處理
8.後處理 & ToneMapping
9.HUD& UI
1. 視口創建
•查詢全部可見物體
•視錐裁剪
•距離裁剪
•預計算的可見性(相似U3D的Umbra,離線計算場景的可見性,運行時經過少許開銷便可判斷靜態物體的遮擋狀況)
•關聯的可見性
•查詢全部可見陰影
•收集動態Mesh項
•更新視口相關的UniformBuffer
2. GPU粒子模擬
•須要支持OpenGLES3.1的設備
•
•在GPU上對粒子進行模擬
•
•將粒子位置寫入128位的目標中
•
•將粒子的速度寫入64位的目標中
3. 陰影圖渲染
•準備深度繪製目標
•查詢全部產生陰影的對象
•使用主光視角對這些物體進行渲染
•陰影圖將在後續過程被使用
•在基礎Pass階段處理CSM陰影的時候使用
•隨後,在須要混合陰影投影的地方使用
前面已經對使用UE4開發高品質的手機遊戲的UE4渲染器、特性集和渲染管線作了介紹,這篇文章是要對它下面部分進行介紹,結合這兩部分的乾貨內容,你們才能更好的去利用UE4引擎作出一款好的手機遊戲。
4. 基礎Pass(準備階段)
• 根據陰影和燈光的屬性爲物體選擇合適的Shader
• 無光模式
• 預處理的距離場陰影 + 光照圖
• 預處理的距離場陰影 + 光照圖 + CSM(用於處理動態物體陰影)
• 動態光照(通常與CSM陰影配合)
• 其它
4. 基礎Pass(繪製階段)
繪製全部擁有不透明材質的物體(同時計算物體光照), 在HDR/線性空間輸出場景顏色
• 動態的方向光和點光源(逐像素光照, ps中計算光照)
• 靜態的距離場陰影
• 動態的CSM陰影
• 靜態燈光產生的光照圖
• 天光
• 反射
4. 基礎Pass(渲染順序)
物體的渲染順序由設備決定
• 不須要任何排序的狀況
• 支持TBDR的芯片,通常都支持 「HiddenSurface Removal」(「隱藏面消除」)
• 從新按從近到遠的順序對每一個列表進行排序
• 最小化狀態改變
• 從新按從近到遠的順序對全部列表中的全部物體進行排序
• 最小化Overdraw
• non-ImgTec GPU的默認選項
• 你可以根據本身的須要對該行爲進行定製
• r.ForwardBasePassSort = x
5. 延時貼花
• 須要場景深度獲取的功能
• 經過支持的擴展實現
• GL_ARM_shader_framebuffer_fetch_depth_stencil
• GL_EXT_shader_framebuffer_fetch
• GL_OES_depth_texture
• 深度緩衝區解析
• 支持「Receives Decals」標識
• 模板操做
• 貼花不支持光照
6. 混合陰影投影
• 與延時貼花類同
• 不能與靜態光照進行比較好的混合
• 靜態光照 + CSM是一個更好的選擇(4.12+)
7. 半透明物體處理
• 利用Base Pass時使用的相同Shader,在半透的混合模式下對圖元進行繪製。
• 不對深度緩衝區進行寫操做。
• 反射支持
• 須要完整的場景顏色拷貝。
8. 後處理
• 僅在HDR打開的時候才被支持
• 根據效果使用的狀況須要一些額外的Pass
• 景深
• 自定義的後處理材質
• Tonemapper Pass發生在最後階段
• 將HDR 顏色映射到8位每通道的RGB顏色
• 同時將顏色值寫回後備緩衝區
• Bloom也在該階段應用
• Filmic tonemapping(4.13+)
9.HUD & UI
• 直接將UI對象繪入後備緩衝區
• Slate BP(藍圖)
• 幕布(Canvas)
• 交換後備緩衝區
光照: 全動態光照
移動的方向光 + CSM陰影
• 編輯器準備
• 方向光組件,「Mobility」 屬性設置爲 「Movable」
• 設置「Dynamic Shadow Distance Movable Light」 的值
• 設置「Num Dynamic Shadow Cascades」的值
• 優勢
• 全部的光都是動態的,均可以被運行時修改
• 減小內存大小和包體大小(由於沒有預計算的光照信息)
• 缺點
• 全部在場景中的物體,不論是靜態仍是動態的,都須要被CSM渲染
• 額外的渲染批次和CSM生成開銷
靜態方向光
更簡單的移動平臺光照準備
• 直接光和高光被逐像素計算
• 強度和顏色能被運行時改變,但光的方向不能被改變
• 編輯器準備
• 方向光組件中,將「Mobility」屬性設置爲「Stationary(1 supported)」
• 將「Cast Dynamic Shadows」屬性設置爲「False」
優勢
• 更快的渲染速度
• 高質量的距離場陰影
缺點
• 光的方向不能運行時改變
• 僅支持混合角色陰影
• 內存和包體大小由於預計算的Shadowmap等信息變大
靜態方向光 + CSM陰影
4.13版本的優化
• 再也不須要對每一個物體設置是否接收CSM陰影的屬性。
• 編輯器準備
• 方向光組件,將「Mobility」屬性設置爲「Stationary(1 supported)
• 設置「Dynamic Shadow Distance Stationary Light」的值
• 設置「Num Dynamic Shadow Cascades」的值
• 禁用 「Inset Shadows For Movable Objects」選項
優勢
• 靜態幾何體經過距離場陰影產生靜態陰影
• 動態角色陰影可以很好的與靜態陰影混合
缺點
• CSM生成消耗(僅僅只包含動態對象)
• 基礎Pass須要一個額外的紋理單元(用於CSM陰影)
動態點光源
與其餘光照準備獨立
• 每一個物體/表面支持最多4個點光
• 將「Max Movable Point Lights」 設爲大於0的值, 該選項在Project Settings/ Engine Rendering中
優勢
• 當成基礎Pass的一部分進行渲染,因此不會產生額外的渲染批次
缺點
• 須要額外的shader計算
燈光通道(???沒有搞明白這東東的做用)
燈光通道在4.13及以上版本被支持
• 限制:每一個物體僅一個靜態或者動態方向光能被應用
後處理 – FilmicTonemapper
• 對於美術來講能夠更自由的獲取他們想要的視覺效果。
• 經過控制檯變量啓用
• r.tonemapperfilm(4.12-5.15)
• 4.15默認開啓了該選項
• r.mobile.tonemapperfilm(4.16+)
• 由於有額外的性能開銷,建議僅在高端機上使用。
自定義後處理過程
• 自定義後處理過程
• 經過材質系統建立後處理Shader
• 自定義深度
• 算定義深度(4.14新增)
• 選中的物體能夠被渲染到一個獨立的深度緩衝區中
• 這個獨立的緩衝區能夠在自定義的後處理中被採樣
後處理 – 自定義模板值
自定義模板值(4.15新增)
• 在PC上能夠直接對模板緩衝區中的模板值進行採樣
• 在移動GPU上不能進行該操做
• UE4經過渲染到一個獨立的顏色緩衝區的方式支持該功能
非渲染部分
移動平臺的補丁和DLC支持
最小化的APK/IPA + DLC 打包嚮導(4.13)
• 極小的包體下載(AppStore/GooglePlay)
• 僅須要下載內容時顯示的UI
• 從雲端下載遊戲內容和補丁
• 強制用戶內容更新
移動平臺的補丁和DLC支持
「Mobile Patch Utilities」 BP 庫(4.14)
• 經過BP控制下載安裝處理過程
• 進度條 & 錯誤處理
• 存儲空間
• Wifi 可用性
• 其餘
大Apk包體支持
• 在中國分包模式不可行(阿西, 專門提到中國), 然而在某些狀況下大包體在一些設備上不能正常工做
• 4.16開始這個問題被修復,如今不存在APK包體大小的限制了
4.16中的移動平臺改進
• 更小的Android執行程序
• 更改編譯器的選項移除不使用的代碼
• UI 相關藍圖的性能優化
• Android的運行時權限獲取
4.16中的移動平臺改進
• 材質節點新增「VertexInterpolator」 – 對移動優化極其有用(???使用VS中的插值代替PS插值)
開發中的移動平臺功能
• 更快的幀迭代時間 –Android平臺
• 改進的 編輯器內 移動平臺預覽
• 改進的PC iOS版本發佈
• 簡單的遠程工具鏈安裝
• 遠程日誌輸出?
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!但願你也加入到咱們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow