Filament初探,全場景性能測試


  一直很想研究下Filament在移動端全場景(大約20萬Triangle,約120個渲染實體)的實時幀率。終於在今天有時間騰出來研究下Filament在Android上的全場景PBR渲染性能。

  這里以java接口進行測試(暫時還沒測試c/c++原生api在Android上的性能),以Filament官方提供的測試案例:sample-gltf-viewer。我們下載GLTF官網提供的測試模型:https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/Sponza進行測試。

  默認下,Filament的視錐近截面比較前,我們設置小一點,如下:

inner class SurfaceCallback : UiHelper.RendererCallback {
        override fun onNativeWindowChanged(surface: Surface) {
        }

        override fun onDetachedFromSurface() {
        }

        override fun onResized(width: Int, height: Int) {
            val aspect = width.toDouble() / height.toDouble()
            Log.i("MyLog", "onResized");
            modelViewer.camera.setProjection(45.0, aspect, 0.01, 1000.0, Camera.Fov.VERTICAL)

            modelViewer.view.viewport = Viewport(0, 0, width, height)
        }
    }

   接着,我們修改sample-gltf-viewer案例,加入一個幀計數器TextView,並把GLSurfaceView放到一個底層Layer上,布局如下:

   接着,我們把測試模型放入assets目錄下,然后修改加載的模型,然后使用一個ibl.ktx和sky.ktx作為間接光計算和天空盒。啟動App,效果如下:

 

 

 

  可以看到這個幀率非常之低,默認下,Filament開啟了很多后處理和高級效果(比如ssao,vsm,抗鋸齒等等),我們關閉這些效果,如下:

   然后,重新運行app,查看效果如下:

 

 

 

    這次幀率確實比之前提高了,但是仍然很低,為了保持60幀率,一種簡單的處理方式就是開啟動態分辨率(dynamicResolution),縮放0.3-0.8,並同時開啟fxaa抗鋸齒,否則畫面非常之差。代碼如下:

   再次運行app,效果如下:

 

 

  終於保持在60幀率了,但是取而代之的就是降低了畫質,至於其他優化方案。有時間我再實現下吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM