Multi viewport on PV3D

E-mail 列印 PDF

PV3D 有一個很有用的最佳化方法:Multi Viewport。

以 Yahee Earth為例,場景主要可以分為三個部份:

  1. 星空背景 (Starbox)
  2. 地球 (Globe)
  3. 較細的地圖圖幅 (BoundingGlobe)

這三個部份我分別作了Custom Primitive去實作,
Starbox 很顯然是畫面中最後面的圖層,
而Globe與Bounding Globe在邏輯上是緊密貼合的兩個物件,
在PV3D的BasicRenderEngine處理下,後兩者的套疊常出現上下層的錯亂情形,
改用QuadrantRenderEngine後可解決這現象,但是效能會下降至3~5fps。

此時Multi viewport就派上了用場。

Multi viewport的概念其實很簡單,把場景切到不同的viewport上進行繪製,
除了可以避免套疊的錯亂現象之外,還可以減少z-sorting時所耗費的大量時間。

在建立了三個viewport之後,Yahee Earth就能在20~30fps的效能下顯示正確的套疊圖了。

其實在PV3D GW中已加入了RenderLayer的觀念來解決完全重合的兩物件間錯亂的繪製問題,
不過這方法並不適用於Yahee Earth上,而且也無法得到較好的效能。

Yahee Earth為了加入shader及terrain,必須先在現有架構下把fps提升到50fps左右,目前最佳化的方法還在思考中,
老慮到目前最重的loading其實是在Globe上,Globe這個物件使用了2048個面,是全部物件的八成左右,
因此對Globe進行最佳化的配置效果應該最佳,目前的可能方法作一下備忘:

  1. Globe無論何時,最多只會顯示其中的一半face,也許可以將「Globe的陰暗面」visible設為false,
    不過會因此增加不少判斷式的loading,成效如何要實作之後來評估。
  2. 降低Globe的face數。Globe是一個類似Sphere的Custom primitive,受限於圖資來源Yahoo Map,必須以Spherical Mercator作為投影依據,
    這種投影方式在赤道附近會有較大的圖幅,試過將face降低到1024個時,地球就變得不太「圓」了。
    有一種幾何結構可解決這種現象:Geodesic dome。這個幾何結構使用不到Globe一半數量的faces,就能創造出很圓的地球。
    可惜這種結構目前我找不出來能直接套到Yahoo Map圖幅的方式。(一個是方形為基礎的,一個是三角形為基礎的)
    比較可行的方法是將Yahoo Map的圖進行預處理,讓他能直接貼進Geodesic dome的三角形中。這似乎是大工程啊!
  3. 作假。
    作一個假3D的地球畫面,畢竟地球的貼圖外觀是可以作預處理的,但是詳細的方法還沒有想到。這個方法雖然很不榮譽,
    但是效果應該會很好吧!真正需要3d的場景在BoundingGlobe上。
    這個方法需要更多的思考。