2013-05-31 127 views
0

我必須在Irrlicht渲染大量的彩色廣告牌,但速度很慢。 我用很多BillboardSceneNodes:Irrlicht超快速廣告牌渲染

List<BillboardSceneNode> voxels = new List<BillboardSceneNode>(); 
     for (int x = 0; x < 32; x++) 
      for (int y = 0; y < 32; y++) 
       for (int z = 0; z < 32; z++) 
       { 
        Color c = new Color(r.Next(255), r.Next(255), r.Next(255)); 
        BillboardSceneNode b = device.SceneManager.AddBillboardSceneNode(null, new Dimension2Df(1), new Vector3Df(x, y, z), -1, c); 
        b.SetMaterialFlag(MaterialFlag.Lighting, false); 
        voxels.Add(b); 
       } 

如何我可以優化?我如何在廣告牌上進行遮擋剔除或平截頭體剔除?

回答

2

每個渲染通話都有安裝和拆卸費用,您需要在每個廣告牌之間付費,這會在數百個廣告牌之後耗費大量時間。如果您的許多廣告牌共享相同的紋理和材質,那麼您可以將它們分組到相同的表面並按照與粒子系統場景節點相同的方式在一次調用中渲染它們,如果這樣做,則會得到幾個數量級的提高(數萬乃至數百),並將您的瓶頸轉移到上傳頂點到視頻卡上的時間。

如果您需要100k +廣告牌,那麼您可以進一步優化它,而不是將每個廣告牌中每個三角形的每個邊和頂點發送到每張卡的卡上,而是發送一個位置列表,並使用着色器渲染它們,特定於您的視頻驅動程序。如果你這樣做的話,你會失去一些Irrlicht的軟件驅動程序支持。

如果這樣做不夠好,而且您需要進入數百萬人,那麼您需要將所有工作卸載到GPU並在頂點着色器中確定位置。這可能不適用於您的使用情況,但如果您可以做到這一點,那麼您僅受限於圖形卡的計算能力。