Autore Topic: Limitare lo scaricamento ai dispositivi con FPS maggiori di 25  (Letto 1644 volte)

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« il: 02 Settembre 2012, 12:05:57 CEST »
0
Salve raga ho concluso la realizzazione della mia ultima app/gioco per android, questa usa come motore grafico solamente i Canvas e gira a 30 fps, il mio obbiettivo è quello di farla girare su dispositivi che abbiano gli fps maggiori di 25, e qui viene la mia domanda, esiste un modo per dichiarare nel manifest tale restrizione?


in ogni caso ecco il video trailer del mio gioco Squizzy

<a href="http://www.youtube.com/watch?v=y51EvXfO9QQ" target="_blank">http://www.youtube.com/watch?v=y51EvXfO9QQ</a>

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #1 il: 02 Settembre 2012, 13:00:35 CEST »
0
I fps che indichi sono di quanto il tuo applicativo riesce a scrivere sullo schermo, 30 fps è un valore basso, i veri fps del display LCD sono imposti dal costruttore,  è di solito un valore fisso, è possibile sapere il valore con il metodo "getRefreshRate":

Display | Android Developers

non è un valore sotto i 60 fps per evitare flicker delle immagini, di solito si aggira sui 70 fps.

Non mi risulta che puoi specificare di quanti fps minimi sono richiesti, al massimo puoi richiedere le accelerazioni hardware e la versione delle OpenGL-ES.
adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #2 il: 02 Settembre 2012, 13:55:28 CEST »
0
I fps che indichi sono di quanto il tuo applicativo riesce a scrivere sullo schermo, 30 fps è un valore basso, i veri fps del display LCD sono imposti dal costruttore,  è di solito un valore fisso, è possibile sapere il valore con il metodo "getRefreshRate"
E' vero che sono bassi ma per esempio l'htc evo 3d sui canvas ha un refresh rate di 30hz, probabilmente dovuto alla tecnologia 3d (60hz diviso 2 layer??).

All'autore del post l'unica cosa che mi viene in mente di consigliare (ma visto gli ottimi risultati magari ci ha già pensato lui) è utilizzare un frametime variabile così anche se per assurdo un device andasse a 25fps non noterebbe la differenza. Se non hai fisica di mezzo avere un timestep variabile è solitamente la soluzione migliore.

Quello che intendo io è che tu decidi di spostare lo sfondo di 50 pixel al secondo.
Per ogni frame calcoli il tempo e dividi 50 per il tempo di frame. A quel punto su ogni device il tuo gioco si sposterà di 50 pixel al secondo, indipendentemente dal fatto che sia a 60hz o 30hz o 25hz.

Ma magari ci hai già pensato.  :-)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #3 il: 02 Settembre 2012, 18:59:31 CEST »
0
Non lo so per certo (magari tu hai già dati in proposito), ma penso che ormai tutti i terminali abbiano almeno 25fps di targa, altrimenti anche le animazioni di menu toast e altro sarebbe chiaramente scattosa. Penso che disegnando sul canvas si possa incappare in rallentamenti se la cpu si mette di mezzo, ma in questo caso non sarebbe comunque possibile agire sul manifest.

A margine di questo, magari potresti pensare a qualcosa tipo una valutazione del terminale al primo avvio, così da capire se stati per far girare il gioco su un terminale molto lento. Ed eventualmente chiedere di poter inviare allo sviluppatore il profilo hw del device, così ti rendi anche conto se c'è margine per qualche ottimizzazione o no.

Infine... complimenti per il gioco.  :-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #4 il: 02 Settembre 2012, 19:20:01 CEST »
0
Penso che disegnando sul canvas si possa incappare in rallentamenti se la cpu si mette di mezzo, ma in questo caso non sarebbe comunque possibile agire sul manifest.
Dalle prove che ho fatto (ma erano test decisamente cpu-intensive) ho visto che purtroppo la CPU si mette sistematicamente di mezzo.
Il problema sorge (dovrei aver iniziato un paio di thread al riguardo) quando il codice di disegno è vicino al limite di refresh per cui se la cpu ti toglie risorse salti al refresh successivo.

Quindi paradossalmente gira più costante sul canvas una app che sta sui 40fps rispetto a una che sta a 62 perchè quella a 62 può darsi che passi a 30 un frame si e uno no.

Ma per fortuna in jelly bean dovrebbero aver risolto questa stupidaggine del double buffer...  ;-)

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #5 il: 02 Settembre 2012, 20:15:34 CEST »
0
Grazie mille per i suggerimenti e i complimenti.

Avete chiarito perfettamente i miei dubbi, preciso che sia un device con capacità di 62FPS sia uno di 40fps il gioco girerà sempre a 30FPS

in ogni caso adesso implemento un sistema che mi invii alcuni dati per ragionare su possibili modifiche da apportare

grazie ancora

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #6 il: 02 Settembre 2012, 21:37:51 CEST »
0
Jelly Bean usa il triple buffering per non far entrare in stallo la CPU:

http://en.wikipedia.org/wiki/Multiple_buffering#Triple_buffering

il video in slow motion con una camera Red tra due Android ICS e JB:

http://www.youtube.com/watch?v=V5E5revikUU

è una vecchia tecnica usata in molti video giochi.

Spero di non aver tra le mani terminali con un basso refresh rate, il flicker è sicuramente fastidioso. Ho letto che HTC EVO 3D è stato aggiornato, dopo le lamentele di molti utenti, ad un refresh rate di poco più di 50 fps.

Usare i canvas significa usare molto la CPU, quindi si è legati alla sua velocità. Sui terminali di fascia bassa difficilmente si riesce a raggiungere fps alti, anche con i terminali di fascia alta le prestazioni migliorano ma esiste sempre il collo di bottiglia nella scrittura da parte della CPU della memoria video. Se si vuole avere alte prestazioni nei giochi usare i canvas non è una buona scelta, bisogna usare le OpenGL-ES, sono molto più veloci della CPU nel gestire la grafica (e possono anche far risparmiare la batteria) ma sono molto più complesse e difficili da programmare, è per questo che esistono i game engine.
« Ultima modifica: 03 Settembre 2012, 00:17:09 CEST da iceweasel »
adb logcat | tee /tmp/logcat | grep TAG

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Re:Limitare lo scaricamento ai dispositivi con FPS maggiori di 25
« Risposta #7 il: 02 Settembre 2012, 23:00:07 CEST »
0
Utilizzare solamente i canvas è stata una scelta voluta, per cercare di ottenere il massimo da questo sistema di disegno, inoltre questa app è stata la mia prima esperienza in fatto di giochi, se la fortuna ed il tempo saranno dalla mia parte di sicuro realizzerò un nuovo game, con AndEngine o direttamente in OpenGL-ES