2012-05-22 15 views
27

Per un gioco in webgl in cui le prestazioni dei fps sono importanti, qual è il modo più efficiente per creare un HUD 2D? Posso pensare a 3 opzioni, ma non mi è chiaro quale sia il costo delle prestazioni di ciascuno e che sarebbe raccomandato come il più efficiente.consigliato per creare un HUD 2d in webgl

Allora, qual è il costo performance relativa tra le seguenti 3 opzioni:

A: rendere l'HUD con poligoni in 3D utilizzando una fotocamera ortografica e si fondono sulla scena originale. Il vantaggio è che sono possibili effetti opengl avanzati, al costo della disposizione manuale dei contenitori.

B: crea l'HUD in html/css e lascia che il browser comporti. In questo caso c'è un grande successo con la composizione del browser?

C: disegnare su una tela 2D sulla tela 3D e consentire al browser di compositing. È anche possibile e avrei problemi con la propagazione degli eventi tra tele come eventi del mouse e focus.

Grazie mille!

risposta

39

Opzione A è probabilmente tecnicamente il più veloce, ma porterà con sé tutta una serie di altri problemi che è necessario per gestire manualmente. Se si sta aggiornando il testo (salute, munizioni, ecc.), Si dovrà elaborare una routine di rendering del testo, e quelle non sono banali, per non dire altro. Se si interagisce con l'interfaccia utente tramite un mouse o una tastiera, è necessario gestirli autonomamente, e le probabilità che lo si faccia in modo robusto ed efficiente per ottenere effettivamente un'esperienza migliore rispetto ai widget del browser nativo sono scarse. A dire il vero, è un sacco di lavoro per il potenziale di essere un po 'più veloce.

L'opzione B è, a mio parere, la strada da percorrere. Il browser è abbastanza bravo nel compositing e anche se ci sarà un successo perfetto a causa di esso a meno che non si stia facendo un HUD dettagliato davvero pazzo, direi che il risultato sarà trascurabile rispetto ad altre parti della tua app (come la logica JS). Inoltre, questa è una strada che dovrebbe "magicamente" migliorare con il passare del tempo ei browser diventano più efficienti in quello che fanno. IMO il lato negativo più grande qui è che potresti incontrare alcuni bug di rendering se stai usando alcuni degli ultimi e più grandi effetti CSS per modellare il tuo HUD nel modo che preferisci, ma ancora una volta dovrebbe andare via col passare del tempo.

L'opzione C non è, a quanto mi risulta, possibile all'interno di una singola area di lavoro. Potresti avere una tela 2D separata sovrapposta a quella 3D e disegnare il tuo HUD su di essa, ma a quel punto erediterai tutti i problemi di A e B senza nessuno dei benefici. Non vedo alcun motivo per raccomandarlo.

Penso che uno dei grandi vantaggi di WebGL su molte piattaforme native 3D è che ha un accesso banale a uno dei framework UI più diffusi e più flessibili del pianeta (HTML). Ignorare questo vantaggio sarà uno sforzo colossale con pochissimi benefici tangibili. Usa gli strumenti a tua disposizione e non preoccuparti troppo per i millisecondi persi a causa di ciò. Ti prometto che ci sono molti più problemi che dovrai affrontare mentre lavori al tuo gioco e il tuo tempo e il tuo sforzo sarebbero molto meglio spesi lì che provare a reinventare questa particolare ruota.

+0

risposta eccellente, ha molto senso, grazie mille! – JayDee

+0

Si noti che, se si utilizza l'opzione C (tela 2D sovrapposta alla parte superiore della tela 3D), si otterrà un notevole successo in termini di prestazioni su iOS 8. Questo approccio dimezza il framerate! – lazd

Problemi correlati