[Projekt] Devader
Forumsregeln
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.
Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.
This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
Bitte Präfixe benutzen. Das Präfix "[Projekt]" bewirkt die Aufnahme von Bildern aus den Beiträgen des Themenerstellers in den Showroom. Alle Bilder aus dem Thema Showroom erscheinen ebenfalls im Showroom auf der Frontpage. Es werden nur Bilder berücksichtigt, die entweder mit dem attachement- oder dem img-BBCode im Beitrag angezeigt werden.
Die Bildersammelfunktion muss manuell ausgeführt werden, die URL dazu und weitere Details zum Showroom sind hier zu finden.
This forum is primarily intended for German-language video game developers. Please don't post promotional information targeted at end users.
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [Projekt] Cyberlympics
Prüf nach dem Extrudieren einer Kante, ob ihre Normale invertiert ist. Daran erkennst du, dass sie zu weit extrudiert wurde.
Re: [Projekt] Cyberlympics
danke für die idee krishty! leider bringts auch nichts, wenn ich weiss wo die probleme sind. es wird mit dem aktuellen aufbau immer überlappungen geben.
das gleiche problem hatte ich übrigends schon früher, wenn sich schatten von objekten überschneiden wirds immer dunkler. die lösung für all diese probleme wäre:
blendEquationSeparate(gl.FUNC_ADD,gl.MAX);
leider wird MAX bislang noch nicht in WEBGL unterstützt. ich werde wohl einfach warten müssen.
habe noch genug andere sachen die wichtiger sind als transparente strecken.
das gleiche problem hatte ich übrigends schon früher, wenn sich schatten von objekten überschneiden wirds immer dunkler. die lösung für all diese probleme wäre:
blendEquationSeparate(gl.FUNC_ADD,gl.MAX);
leider wird MAX bislang noch nicht in WEBGL unterstützt. ich werde wohl einfach warten müssen.
habe noch genug andere sachen die wichtiger sind als transparente strecken.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
hab eben einen ganzen text geschrieben wie ich momentan fest hänge und nicht weiss wie ich eine repetitive textur mit "weltkoordinaten" in webgl fragmentshader einbaue. das schreiben hat genützt und ich hab doch noch die lösung gefunden. sorry für das viele spammen momentan, aber ich mach für mich ganz schön entscheidende fortschritte.
noch ein bisschen weiter. jetzt sind 2 texturen möglich inkl noise. aktuell benutz ich für alles was ihr seht nur einen shader, der hat aber langsam ganz schön viele variablen. bis jetzt merk ich davon keine negative auswirkung, aber ich kenn mich echt nicht gut aus.
hatte noch einen geistesblitz... habe für den hintergrund ein polygon für die gesamte streckenfläche erstellt und benutze auch hier wieder den selben shader. die performance sinkt allerdings massiv. scheint irgendwie mit dem mauszeiger zusammenzuhängen, wenn er ausserhalb ist hab ich wieder 60fps.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
habe die performance deutlich verbessern können, indem ich alles in einen triangle strip und einen einzigen drawcall reingewürgt habe. mein shader hat für jeden unterschiedlichen objekttyp eigene logik. bis auf die koordinaten wird nur ein float im vertex shader übergeben, alles andere über uniform. u.a. sind das 4 texturen, 2 für die strecke und 2 für den hintergrund. alles andere hab ich im shader zurecht gebastelt. keine ahnung ob mein vorgehen "normal" ist.
was mich stört, ist dass ich nicht an die qualität von svg ran komme. das antialiasing ist leicht gezackt, halt nicht so smooth wie bei svg. ist das zu erwarten, oder mache ich evtl. was falsch?
was mich stört, ist dass ich nicht an die qualität von svg ran komme. das antialiasing ist leicht gezackt, halt nicht so smooth wie bei svg. ist das zu erwarten, oder mache ich evtl. was falsch?
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
ich habe für 4 ansichten aber auch alles 4 fach (vertexdaten program shader), was wohl nicht so clever ist. evtl. kann ich alles mit einer ansicht rendern und dann auf 4 canvas verteilen. keine ahnung, aber ich bin noch nicht zufrieden.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
hab das rendering für die strecke jetzt so umgestellt, dass ich nur immer auf das selbe canvas zeichne und für die entsprechenden views den inhalt kopiere. leider hat auch das nichts gebracht. also gings wieder mal ans profiling. da sind mir doch ein paar sachen aufgefallen, u.a. wurde bei jedem focus und verschieben der ansicht ein update und auch ein render ausgelöst. hmm. diese entfernt und plötzlich hab ich 25fps :), auch mit 6 ansichten (mehr gehen aktuell nicht, wegen render context limit). vermutlich könnte ich das jetzt weiter hochschrauben wenn ich die kopier-technik für die untergrund und objekt ebene ebenfalls mache. evtl. noch besser wenn ich alles auf eine ebene zeichne und den gesamten inhalt kopiere... ich hab plötzlich wieder ideen und der erfolg nach 3 wochen (?) umstellung ist befreiend!
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: [Projekt] Cyberlympics
Das hört sich gut an! Programmieren ist wirklich ziemlich geprägt von Frustration und Geduld. :D Weiterhin viel Erfolg!
Re: [Projekt] Cyberlympics
ein bisschen flaute herrscht mal wieder vor. hätte noch einiges zu tun bis die webgl strecke alles kann was sie sollte, stattdessen habe ich mich von fraktalen ablenken lassen... hatte ich bislang noch nie wirklich angeschaut oder verstanden, jetzt gibt es sie aber als möglichen hintergrund.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
- Top-OR
- Establishment
- Beiträge: 330
- Registriert: 02.03.2011, 16:32
- Echter Name: Jens H.
- Wohnort: Esslingen/Dessau
- Kontaktdaten:
Re: [Projekt] Cyberlympics
Hahahaha ... *AufDieListeSchreib* .. das kommt mir so bekannt vor ... :-D :-/marcgfx hat geschrieben:... hatte ich bislang noch nie wirklich angeschaut oder verstanden....
--
Verallgemeinerungen sind IMMER falsch.
Verallgemeinerungen sind IMMER falsch.
Re: [Projekt] Cyberlympics
jaja, die ewigen ablenkungen ;) vermutlich bin ich nicht der einzige, der mal den focus verliert. die fraktal-geschichte hatte aber schon den zweck den schwarzen hintergrund interessanter zu gestalten.
hab inzwischen wieder eine neue version hochgeladen, die fast ausschliesslich webgl verwendet. die streckenpunkte leuchten jetzt korrekt auf, was das fahren erleichtert. dafür fehlt der countdown, den muss ich noch umstellen, oder mir was anderes einfallen lassen.
es läuft auf meinem macbook auch schon viel besser. perfekt ist es leider noch nicht. das hochauflösende retina-display hat so seine tücken. default-mässig wird das canvas element auf das webgl zeichnet mit einem billinearen algorithmus hochskaliert was in einem verwaschenen bild resultiert. nicht so toll. es gab vor einigen jahren schon ansätze um das problem zu lösen, nur sind diese inzwischen wieder rausgeflogen. also bleibts vorerst verwaschen :( ... hat scheinbar auch auf die performance einen negativen einfluss, aber ich kann das nicht beurteilen.
desweiteren spinnt auch der practice modus (ich glaube nur in der mac version). der unterschied ist hier, dass ich einen fixen time-step verwende, was anscheinend nicht gefällt. die tastatureingabe ist absolut zum kotzen, das fahrzeug nicht zu steuern. der fixe time-step wäre gut um den geisterfahrer aufnehmen und wiedergeben zu können, aber dass muss ich wohl vergessen. evtl. muss ich irgendwas mit kurven konstruieren, oder interpolieren, grrrr.
hab inzwischen wieder eine neue version hochgeladen, die fast ausschliesslich webgl verwendet. die streckenpunkte leuchten jetzt korrekt auf, was das fahren erleichtert. dafür fehlt der countdown, den muss ich noch umstellen, oder mir was anderes einfallen lassen.
es läuft auf meinem macbook auch schon viel besser. perfekt ist es leider noch nicht. das hochauflösende retina-display hat so seine tücken. default-mässig wird das canvas element auf das webgl zeichnet mit einem billinearen algorithmus hochskaliert was in einem verwaschenen bild resultiert. nicht so toll. es gab vor einigen jahren schon ansätze um das problem zu lösen, nur sind diese inzwischen wieder rausgeflogen. also bleibts vorerst verwaschen :( ... hat scheinbar auch auf die performance einen negativen einfluss, aber ich kann das nicht beurteilen.
desweiteren spinnt auch der practice modus (ich glaube nur in der mac version). der unterschied ist hier, dass ich einen fixen time-step verwende, was anscheinend nicht gefällt. die tastatureingabe ist absolut zum kotzen, das fahrzeug nicht zu steuern. der fixe time-step wäre gut um den geisterfahrer aufnehmen und wiedergeben zu können, aber dass muss ich wohl vergessen. evtl. muss ich irgendwas mit kurven konstruieren, oder interpolieren, grrrr.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
bin am optimieren. ich habe den collisionscode endlich überarbeitet und auch die sichtbarkeitsabfragen (beschränkter radius für die ki) anders gelöst. jetzt läuft es auch mit 200 einheiten bei 5fps, was nicht toll ist, aber zumindest ist es schneller geworden. die meiste performance geht nun bei der ki drauf. ich werde vermutlich meine tolle ki schrotten/erneuern müssen, soll die geschichte auch auf weniger starken geräten lauffähig bleiben. aktuell träume ich gar von android/ios versionen (mal sehen was ios8 wirklich bringt)
ebenso habe ich in der render-engine einen fehler gefunden und behoben, der dazu führen konnte dass kurzfristig nichts gezeichnet wurde, dieser trat vor allem bei viel schleim auf (im bild zu sehen).
ebenso habe ich in der render-engine einen fehler gefunden und behoben, der dazu führen konnte dass kurzfristig nichts gezeichnet wurde, dieser trat vor allem bei viel schleim auf (im bild zu sehen).
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
ich nerv mich schon längere zeit, weil ich das spiel immer mit 25fps laufen lassen muss und sobald der rechner etwas zu lahm ist wird das spiel langsamer. dabei hatte ich ursprünglich an fast alles gedacht, alle berechnungen wurden zeit-bezogen gemacht. bis auf eine sache, das exponentielle verlangsamen der bewegungen. diesen wert berechnete ich anhand der framerate beim initialisieren der einheiten, so konnte ich später blos noch damit multiplizieren. lang ist mir ein daraus resultierendes problem gar nicht aufgefallen, da ich mit der fixen framerate ganz gute resultate hatte. als ich schliesslich auf dynamisch wechseln wollte, fiel es mir auch nicht sofort auf. es kamen mir ein paar sachen komisch vor, aber ich konnte es nicht genau festlegen was. als ich der selben strecke mit unterschiedlichen anzahlen an gegner plötzlich massiv unterschiedliche zeiten hatten, war mir klar das was ganz falsch lief. bei vielen gegnern halbierten sich meine rundenzeiten. da ich nicht wusste was ich tun soll, hab ich mich feige aus der affäre gezogen und die fixe frame rate wieder aktiviert. aber es hat mich immer wieder gewurmt.
vor ner stunde habe ich beschlossen das thema wieder aufzugreifen und hab mich an altes schulwissen versucht zu erinnern. die erinnerung war schwach, aber zumindest konnte ich damit die wichtigen infos finden. exponentielles wachstum, logarithmen... mochte ich früher nicht wirklich, aber lösen konnte ich die aufgaben. mit etwas recherchieren, hab ich schnell bemerkt, dass es gar nicht so schwer ist. eine halbe stunde später liefs bereits ziemlich gut. nur das verlangsamen der fahrzeuge ausserhalb der strecke lief noch gar nicht. anstatt langsamer wurden sie schneller...
die rechnung die ich machen musste:
jetzt läufts wunderbar. dies öffnet viele neue möglichkeiten, u.a. könnte ich an online-multiplayer denken. noch besser ist aber, dass es jetzt überall gleich schnell laufen sollte. auf guten rechnern mit 60fps.
vor ner stunde habe ich beschlossen das thema wieder aufzugreifen und hab mich an altes schulwissen versucht zu erinnern. die erinnerung war schwach, aber zumindest konnte ich damit die wichtigen infos finden. exponentielles wachstum, logarithmen... mochte ich früher nicht wirklich, aber lösen konnte ich die aufgaben. mit etwas recherchieren, hab ich schnell bemerkt, dass es gar nicht so schwer ist. eine halbe stunde später liefs bereits ziemlich gut. nur das verlangsamen der fahrzeuge ausserhalb der strecke lief noch gar nicht. anstatt langsamer wurden sie schneller...
die rechnung die ich machen musste:
Code: Alles auswählen
v = aktuelle geschw.
vr = reduktion der geschw.
v*exp(ln(vr))
mit einfluss neben der strecke
v*exp(ln(vr)*ln(nr)) //hier lief es schief
um das zu lösen, brauchte ich schlicht und einfach nicht zu multiplizieren sondern zu addieren
v*exp(ln(vr)+ln(nr))
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
Ja, solange man nur lineare Bewegungen hat, merkt man gar nicht, dass man bei jedem Framewechsel das Integral über die Veränderungen berechnen muss. Um ehrlich zu sein mache ich mir da auch viel zu wenig Gedanken drüber und Beschleunige und Bremse munter Objekte ohne mir darüber Gedanken zu machen. Sollte ich eigentlich mal auf meine TODO-Liste packen :D
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
Re: [Projekt] Cyberlympics
ganz sauber wars doch noch nicht. beim bremsen wurde beschleunigt, gab ganz schön lustige resultate die ich nicht erklären konnte, da ich selbst nie bremse ;) wieder was gefixt.
momentan hab ich mir wieder neue probleme aufgehalst:
- ich möchte ranglisten einbauen. habe dazu die google game api angeschaut, die haben sowas: super! registriert und die 25.- bezahlt... oh... maximal 70 ranglisten pro spiel. das reicht nicht... ausserdem müsste ich jede die ich haben möchte manuell registrieren. so ein schrott... -> also doch selber machen. vermutlich werd ich was mit EC2 versuchen, davor drück ich mich auch schon lange.
- auf meinem macbook sieht das spiel ziemlich kacke aus. hauptgrund ist die hohe auflösung und ein damit verbundes verwaschenes aussehen nach dem rendern (per default wird canvas mit factor 2 multipliziert). entweder ich rendere meine einheiten alle nochmal in hoher auflösung oder ich muss einen weg finden sie pixelig zu halten. um es auf meinem arbeitsrechner testen zu können, habe ich einen zoom factor eingebaut, evtl. kann ich damit auch noch was nützliches machen...
hier sieht man schön wie die bilder verwaschen ausschauen, die polygone aber wunderschön gerendert werden:
momentan hab ich mir wieder neue probleme aufgehalst:
- ich möchte ranglisten einbauen. habe dazu die google game api angeschaut, die haben sowas: super! registriert und die 25.- bezahlt... oh... maximal 70 ranglisten pro spiel. das reicht nicht... ausserdem müsste ich jede die ich haben möchte manuell registrieren. so ein schrott... -> also doch selber machen. vermutlich werd ich was mit EC2 versuchen, davor drück ich mich auch schon lange.
- auf meinem macbook sieht das spiel ziemlich kacke aus. hauptgrund ist die hohe auflösung und ein damit verbundes verwaschenes aussehen nach dem rendern (per default wird canvas mit factor 2 multipliziert). entweder ich rendere meine einheiten alle nochmal in hoher auflösung oder ich muss einen weg finden sie pixelig zu halten. um es auf meinem arbeitsrechner testen zu können, habe ich einen zoom factor eingebaut, evtl. kann ich damit auch noch was nützliches machen...
hier sieht man schön wie die bilder verwaschen ausschauen, die polygone aber wunderschön gerendert werden:
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
es ist ganz schön harzig momentan. schlechte performance habe ich nun an verschiedenen geräten beobachten können und sie nervt mich gewaltig. auf meinem arbeits-laptop lief es zu beginn überhaupt nicht, inzwischen konnte ich einstellungen finden um es lauffähig zu machen (allerdings ruckelts im full screen ganz übel). ein grosses problem scheint die pipeline zur gpu zu sein. als ich für hintergrund/strecke die texturen entfernt hab, lief es deutlich besser. die polygon-anzahl scheint egal zu sein.
bisher habe ich auf 3 verschiedene canvas gerendert.
- hintergrund (strecke/boden) - 2 texturen
- boden verschönerungen (sträucher, steinchen, gräser...) 1 textur
- objekte (bäume, fahrzeuge, schüsse etc. ) 1 textur
ich vermute ich habe mit den 4 texturen ein limit erreicht, wodurch die ganze geschichte anfing zu stocken. ich überlege mir ob ich alle texturen in eine einzige reinwürgen kann, um die gesamte szene mit einem pass rendern. obs wirklich was bringt weiss ich nicht.
heute habe ich die verschönerungen und objekte schon mal gemergt, hier wurde sowieso immer der selbe shader eingesetzt. war aber dennoch ganz schön kompliziert.
für den hintergrund verwende ich einen anderen shader. wenn ich alles mergen will, muss ich die shader kombinieren. könnte ganz schön in die hose gehen.
ich habe einfach das gefühl es müsste gehen, ist doch nur ein blödes 2d spiel...
bisher habe ich auf 3 verschiedene canvas gerendert.
- hintergrund (strecke/boden) - 2 texturen
- boden verschönerungen (sträucher, steinchen, gräser...) 1 textur
- objekte (bäume, fahrzeuge, schüsse etc. ) 1 textur
ich vermute ich habe mit den 4 texturen ein limit erreicht, wodurch die ganze geschichte anfing zu stocken. ich überlege mir ob ich alle texturen in eine einzige reinwürgen kann, um die gesamte szene mit einem pass rendern. obs wirklich was bringt weiss ich nicht.
heute habe ich die verschönerungen und objekte schon mal gemergt, hier wurde sowieso immer der selbe shader eingesetzt. war aber dennoch ganz schön kompliziert.
für den hintergrund verwende ich einen anderen shader. wenn ich alles mergen will, muss ich die shader kombinieren. könnte ganz schön in die hose gehen.
ich habe einfach das gefühl es müsste gehen, ist doch nur ein blödes 2d spiel...
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [Projekt] Cyberlympics
Wieviele DrawCalls hast Du denn? Und wieviel dynamische Rechenzeit (also pro Frame zu machende Arbeit) hat jeder? Du bist nach meiner Vermutung etwas zu sehr auf die GPU-Seite fixiert. Ruckeln kann es aber genauso wegen der CPU-Seite.
"Blödes 2D" :) Sowas hab ich mir bei Splatter oft anhören dürfen. 2D-Spiele können genauso gut CPU und GPU verbraten wie 3D-Spiele.
"Blödes 2D" :) Sowas hab ich mir bei Splatter oft anhören dürfen. 2D-Spiele können genauso gut CPU und GPU verbraten wie 3D-Spiele.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [Projekt] Cyberlympics
das blöde 2d mein ich natürlich nicht so, allerdings muss ich mich schon fragen, wieso ich so viel schwierigkeiten mit der performance habe. keine komplexen 3d berechnungen, wenig draw calls. allerdings ist die ganze graphik auf 3d ausgelegt und ich benutz intensiv alpha-blending.
draw calls mache ich momentan bewusst nur 2. einen für den hintergrund und einen für den vordergrund. aktuell werden diese auf zwei unterschiedliche versteckte canvas gerendert (anderes gl object und anderes program/shader) und danach in einem dritten zusammen gezeichnet. lustigerweise ist dies schneller, als die beiden einfach anzuzeigen und ich habe ausserdem die möglichkeit im mehrspielermodus die zwei buffer-canvas mehrfach zu verwenden.
vermutlich macht der browser selber noch ein paar calls, die ich nicht beeinflussen kann.
ich habs mir nochmal genau angeschaut, damit ich besser beschreiben kann was ich mache:
der hintergrund verwendet 4 texturen, die ~400*300px gross sind.
dazu zwei vertexbuffer für den trianglestrip, der eine beinhaltet die positionen der andere einen zusätzlichen wert für den fragmentshader, damit er weiss was gerendert werden soll.
beim hintergrund gibt es kaum veränderungen, die einzigen die geschehen sind im zweiten vertexbuffer und hier update ich nur ab dem ersten veränderten wert (der sehr weit hinten im buffer liegt)
der vordergrund (alle objekte, bäume, autos, sträucher) verwendet eine textur/spritesheet.
hier habe ich vertexbuffer für textur, position, offset, size, modus (z.b. alpha)
bäume und autos werden in jedem frame sortiert und neu im buffer eingefügt, die statischen sträucher werden nicht angetastet.
was ich noch tun möchte:
wenn möglich würde ich gerne alles auf ein canvas zeichnen und nicht wie bisher auf zwei.
option 1: ich wechsle das program (da ich anderen shader brauche).
option 2: ich erweitere meiner shader so, dass ich auch alles was auf der strecke/hintergrund zu sehen ist damit gezeichnet werden kann -> shader wird ziemlich gross und ich weiss nicht genau wie ich trianglestrip und triangles vereinen kann (kann ich überhaupt zwei drawcalls in einem pass machen)
ich habe mir überlegt ob ich nicht alle texturen (auch die 4 für den boden in das sprite-sheet packe). wenn ich das programm wechsle, kann ich das überhaupt? bzw kann ich die selbe textur in zwei shadern verwenden ohne sie immer wieder an die gpu zu übergeben.
bin um jede hilfe froh, ich bin schon lange nicht mehr in meiner wassertiefe.
draw calls mache ich momentan bewusst nur 2. einen für den hintergrund und einen für den vordergrund. aktuell werden diese auf zwei unterschiedliche versteckte canvas gerendert (anderes gl object und anderes program/shader) und danach in einem dritten zusammen gezeichnet. lustigerweise ist dies schneller, als die beiden einfach anzuzeigen und ich habe ausserdem die möglichkeit im mehrspielermodus die zwei buffer-canvas mehrfach zu verwenden.
vermutlich macht der browser selber noch ein paar calls, die ich nicht beeinflussen kann.
ich habs mir nochmal genau angeschaut, damit ich besser beschreiben kann was ich mache:
der hintergrund verwendet 4 texturen, die ~400*300px gross sind.
dazu zwei vertexbuffer für den trianglestrip, der eine beinhaltet die positionen der andere einen zusätzlichen wert für den fragmentshader, damit er weiss was gerendert werden soll.
beim hintergrund gibt es kaum veränderungen, die einzigen die geschehen sind im zweiten vertexbuffer und hier update ich nur ab dem ersten veränderten wert (der sehr weit hinten im buffer liegt)
der vordergrund (alle objekte, bäume, autos, sträucher) verwendet eine textur/spritesheet.
hier habe ich vertexbuffer für textur, position, offset, size, modus (z.b. alpha)
bäume und autos werden in jedem frame sortiert und neu im buffer eingefügt, die statischen sträucher werden nicht angetastet.
was ich noch tun möchte:
wenn möglich würde ich gerne alles auf ein canvas zeichnen und nicht wie bisher auf zwei.
option 1: ich wechsle das program (da ich anderen shader brauche).
option 2: ich erweitere meiner shader so, dass ich auch alles was auf der strecke/hintergrund zu sehen ist damit gezeichnet werden kann -> shader wird ziemlich gross und ich weiss nicht genau wie ich trianglestrip und triangles vereinen kann (kann ich überhaupt zwei drawcalls in einem pass machen)
ich habe mir überlegt ob ich nicht alle texturen (auch die 4 für den boden in das sprite-sheet packe). wenn ich das programm wechsle, kann ich das überhaupt? bzw kann ich die selbe textur in zwei shadern verwenden ohne sie immer wieder an die gpu zu übergeben.
bin um jede hilfe froh, ich bin schon lange nicht mehr in meiner wassertiefe.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
achja cpu: die ist auch ganz gut ausgelastet, aber scheint nicht das problem zu sein. z.B. wenn ich die ansicht auf meinem lahmen laptop auf fullscreen verändere gibt es sofort ein stocken, mit einer kleineren ansicht hab ich aber fast 60fps. der grössere ausschnitt hat für die cpu aber kaum einen einfluss. das weist anscheinend auf ein problem mit der fillrate (ganz sicher was das ist bin ich mir auch nicht).
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
-
- Establishment
- Beiträge: 426
- Registriert: 23.01.2013, 15:55
Re: [Projekt] Cyberlympics
Die Füllrate ist einfach ist einfach, wieviele Pixel pro Sekunde gefüllt werden können. Hättest du zum Beispiel 600 000 000 Pixel pro Sekunde, hieße das, dass du bei 60 FPS maximal 10 000 000 Pixel pro Frame zeichnen könntest. Wenn du also einen Fensterausschnitt von zum Beispiel 1000 * 1000 hast, könntest du den in einem Frame theoretisch 10 Fullscreen Quads(Jeden Pixel 10 mal überzeichnen) rendern, dann limitiert die Fillrate deine Leistung.
Nur mal theoretisch. In der Praxis ist sie sehr viel höher und ich halte es für unwahrscheinlich, dass es dein Problem ist.
In der Regel ist aber nicht die Füllrate kritisch, sondern zum Beispiel der Fragment Shader, der dabei für jeden "Pixel" läuft.
Nur mal theoretisch. In der Praxis ist sie sehr viel höher und ich halte es für unwahrscheinlich, dass es dein Problem ist.
In der Regel ist aber nicht die Füllrate kritisch, sondern zum Beispiel der Fragment Shader, der dabei für jeden "Pixel" läuft.
Zuletzt geändert von Spiele Programmierer am 27.09.2014, 17:46, insgesamt 1-mal geändert.
Re: [Projekt] Cyberlympics
macht sinn. vor allem auch in bezug auf meine beobachtungen. mit vereinfachtem shader lief es endlich auch auf meinem laptop (ich habe aber auf die texturen als problem getippt). naja ich denke wenn ich alles in eine drawcall und in eine textur reinkriege dürfte ich bestimmt eine performance verbesserung erwarten. ich habe die boden/strecken texturen bereits testhalber in mein spritesheet eingebaut, ohne merkliche nachteile auf der testhardware. wenn auch das nicht zu einem lauffähigen spiel in bester qualität führt, werde ich wohl den shader optimieren müssen. vermutlich muss ich dann auf spielereien wie noise und fraktale verzichten, was aber zu verschmerzen ist.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
weiterhin am optimieren, ich bin nicht sicher ob es viel gebracht hat. hintergrund und vordergrund verwenden jetzt die selbe textur und werden endlich auch in den selben context gerendert. damit entfällt das compositing, was aber nicht viel auszumachen scheint. auf meinem laptop besteht weiterhin das problem, das sobald der bildausschnitt zu gross wird es anfängt massiv zu ruckeln. dazu muss ausserdem noch ein vereinfachter fragment shader verwendet werden. einzige variante die ich noch nicht ausprobiert habe ist alles in einen einzigen drawcall reinzuwürgen. würde aber bedeuten, dass ich für den untergrund überflüssige vertexbuffer generieren muss und ausserdem dass ich alles entweder in triangles(objekte) oder in einen trianglestrip(strecke/hintergrund) umwandeln muss.
ansonsten sehe ich nur die lösung mit unterschiedlichen qualitätsstufen, was mir auch nicht wahnsinnig gefällt. irgendwie müsste ich diese dynamisch anpassen können, wenn ich merke dass der rechner lagt. bzw. dynamisch den sichtbaren ausschnitt verkleinern. alles nicht so befriedigend. evtl. habe ich auch einfach eine form der optimierung übersehen.
ansonsten sehe ich nur die lösung mit unterschiedlichen qualitätsstufen, was mir auch nicht wahnsinnig gefällt. irgendwie müsste ich diese dynamisch anpassen können, wenn ich merke dass der rechner lagt. bzw. dynamisch den sichtbaren ausschnitt verkleinern. alles nicht so befriedigend. evtl. habe ich auch einfach eine form der optimierung übersehen.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [Projekt] Cyberlympics
Die Optimierung auf einen DrawCall kannst Du Dir dann wirklich sparen. Anscheinend bist Du tatsächlich pixelshader-limitiert. Was ich auf heutiger Gamer-Hardware eigentlich für unmöglich gehalten habe, außer man baut gerade am nächsten GI-Konzept. Aber ok, wir reden ja von einem Laptop - Mobile-Hardware ist wirklich drastisch schlechter als Desktop-Hardware.
Was genau tust Du denn im PixelShader? Vielleicht können wir billigere Alternativen empfehlen.
Was genau tust Du denn im PixelShader? Vielleicht können wir billigere Alternativen empfehlen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: [Projekt] Cyberlympics
es sind die spielereien die besonders teuer sind:
- fraktale (mandelbrot/julia) -> kann ich weglassen
- perlin-noise das verwendet wird um zwei texuren miteinander zu vermischen
wenn ich für den hintergrund nur eine farbe, oder eine mit farbe gemischte textur verwende ist es deutlich besser. habe inzwischen ein paar "qualitätsstufen" eingebaut, schlussendlich hat die einstellung nur auf die hintergrund textur eine auswirkung. auf dem laptop läuft die tiefste einstellung, ich muss aber zusätzlich den sichtbereich verkleinern.
was auch noch passiert: der browser rendert das html, u.a. mein hud, welches über der action liegt. anscheinend wird das auch auf der gpu gemacht.
ich habe eben eine option eingebaut um es ohne hud zu testen. es scheint die performance minimal zu verbessern, kein quantensprung.
falls jemand interessiert ist, die shader kann man über den zusatz "&shader=[1-4]" einstellen, oder auch auf der start seite. die option "&nohud" -> kein hud.
ich habe ausserdem einen verdacht, dass meine letzten optimierungen eher nachteilig waren. wieso kann ich mir nicht erklären, ausser chrome macht noch was ganz cleveres im hintergrund dass ich nicht verstehe.
zuvor: vordergrund und hintergrund auf einen eigenen canvas gerendert und danach in einem dritten gezeichnet.
jetzt: es wird alles auf ein canvas gerendert. ich muss jetzt aber einen shader wechsel vornehmen, bei dem ich die vertexbuffer enable/disable die ich brauche.
- fraktale (mandelbrot/julia) -> kann ich weglassen
- perlin-noise das verwendet wird um zwei texuren miteinander zu vermischen
wenn ich für den hintergrund nur eine farbe, oder eine mit farbe gemischte textur verwende ist es deutlich besser. habe inzwischen ein paar "qualitätsstufen" eingebaut, schlussendlich hat die einstellung nur auf die hintergrund textur eine auswirkung. auf dem laptop läuft die tiefste einstellung, ich muss aber zusätzlich den sichtbereich verkleinern.
was auch noch passiert: der browser rendert das html, u.a. mein hud, welches über der action liegt. anscheinend wird das auch auf der gpu gemacht.
ich habe eben eine option eingebaut um es ohne hud zu testen. es scheint die performance minimal zu verbessern, kein quantensprung.
falls jemand interessiert ist, die shader kann man über den zusatz "&shader=[1-4]" einstellen, oder auch auf der start seite. die option "&nohud" -> kein hud.
ich habe ausserdem einen verdacht, dass meine letzten optimierungen eher nachteilig waren. wieso kann ich mir nicht erklären, ausser chrome macht noch was ganz cleveres im hintergrund dass ich nicht verstehe.
zuvor: vordergrund und hintergrund auf einen eigenen canvas gerendert und danach in einem dritten gezeichnet.
jetzt: es wird alles auf ein canvas gerendert. ich muss jetzt aber einen shader wechsel vornehmen, bei dem ich die vertexbuffer enable/disable die ich brauche.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
ich habe einen kleinen durchbruch erzielt! ich konnte mein spiel auf einem iphone 5 zum laufen bringen. durch spielen mit verschiedenen einstellungen siehts auch ganz passabel aus, wenn auch etwas pixelig. jetzt muss ich noch an der touch-steuerung arbeiten, wenn möglich möchte ich auf ein eingeblendetes steuerkreuz verzichten können. aktuell lässt sich alles mit einem finger steuern, geht richtung analog stick, aber es ist eindeutig noch zu schwer zu kontrollieren.
an der webgl performance habe ich nicht mehr geschraubt, ich werds mal vorerst so lassen und muss halt mit qualitätsstufen arbeiten. schön wäre wenn ich performance abhängig switchen könnte, aber das ist vermutlich auch nicht ganz so banal. das meine optimierungen für die katz waren, war auch eine fehleinschätung. ich hatte meist noch ein webgl debug-plugin aktiv, dies hat der performance nicht geholfen...
an der webgl performance habe ich nicht mehr geschraubt, ich werds mal vorerst so lassen und muss halt mit qualitätsstufen arbeiten. schön wäre wenn ich performance abhängig switchen könnte, aber das ist vermutlich auch nicht ganz so banal. das meine optimierungen für die katz waren, war auch eine fehleinschätung. ich hatte meist noch ein webgl debug-plugin aktiv, dies hat der performance nicht geholfen...
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
wers ausprobieren will, es müsste im browser auf neuen mobile geräten passabel laufen (iphone 5 ist ok). auf meinem iphone flackerts zum teil, weiss noch nicht wieso. frisst viel batterie.
die steuerung ist gewöhnungsbedürftig/experimentell. ein finger irgendwo aufs display, leicht nach oben drücken -> gas, nach unten -> bremsen, links/rechts ... es reagiert äusserst sensibel. bei den settings unten links kann man die sensibilität einstellen (touchx, touchy). je höher der wert desto sensibler.
link in signatur ;)
der start screen ist noch auf desktop ausgerichtet. am besten einfach mal play drücken.
die steuerung ist gewöhnungsbedürftig/experimentell. ein finger irgendwo aufs display, leicht nach oben drücken -> gas, nach unten -> bremsen, links/rechts ... es reagiert äusserst sensibel. bei den settings unten links kann man die sensibilität einstellen (touchx, touchy). je höher der wert desto sensibler.
link in signatur ;)
der start screen ist noch auf desktop ausgerichtet. am besten einfach mal play drücken.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
Wie cool endich darf ichs spielen, habs aber nur inter win7 probiert
Re: [Projekt] Cyberlympics
danke fürs ausprobieren. also es ist jetzt schon länger online verfügbar, das was ihr seht ist meistens mein aktueller zwischenstand. es kann durchaus sein, dass es mal ne fehlerhafte version ist :?
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
es gibt einige neuerungen. meine akustische lösung mit soundmanager2 von schillmania hat ausgesorgt. auf mobile hat die flash-lösung nicht funktioniert, ausserdem hat es mich fast zu mp3 gezwungen, das gewisse lizenzierungsproblem mit sich bringt. ich bin jetzt auf eine implementation von webaudio umgestiegen. die neuerung hat noch ein paar nette sachen mit sich gebracht die schon immer auf der "will ich haben" liste standen. stereo sound ist nun endlich wieder möglich! webaudio implementiert ausserdem den doppler-effekt, was meinen autos ein ganz neues feeling gibt. ich habe ausserdem fleissig sound-effekte hinzugefügt.
videos aufzeichnen und im eigenen format speichern funktioniert wieder (ist nicht online), falls ich doch auf die alte ki-kampf idee zurückgreifen möchte.
es gibt ein neues emp-extra, für das ich kleinere erweiterungen in der engine machen musste (bislang gab es kein skalieren von bildern). ich weiss noch nicht ob es ein gutes extra ist, aber ich lass es mal. die aktuelle version ist mit extras und speedups überladen, ein rennen ist es kaum noch. teilweise gehts nur noch ums blanke überleben ;). ist aber nur temporär, ich muss es noch besser einstellbar machen.
die extras sind jetzt nur sterne, ich habe den quadratischen rahmen entfernt. war mir zu mario-kart like und hat ausserdem die speedups-verdeckt, wenn alles sehr kompakt wurde. desweiteren bin ich am überlegen ob ich sowas wie produkt-placement machen könnte... ob dafür wohl jemand was zahlen würde?
videos aufzeichnen und im eigenen format speichern funktioniert wieder (ist nicht online), falls ich doch auf die alte ki-kampf idee zurückgreifen möchte.
es gibt ein neues emp-extra, für das ich kleinere erweiterungen in der engine machen musste (bislang gab es kein skalieren von bildern). ich weiss noch nicht ob es ein gutes extra ist, aber ich lass es mal. die aktuelle version ist mit extras und speedups überladen, ein rennen ist es kaum noch. teilweise gehts nur noch ums blanke überleben ;). ist aber nur temporär, ich muss es noch besser einstellbar machen.
die extras sind jetzt nur sterne, ich habe den quadratischen rahmen entfernt. war mir zu mario-kart like und hat ausserdem die speedups-verdeckt, wenn alles sehr kompakt wurde. desweiteren bin ich am überlegen ob ich sowas wie produkt-placement machen könnte... ob dafür wohl jemand was zahlen würde?
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
mal wieder mach ich nicht was ich soll... ich wollte die welt etwas lebendiger machen: die bäume wackeln jetzt, wenn man schnell dagegen fährt. theoretisch könnte ich damit wind simulieren, mal sehen...
es gibt jetzt ein levelpack "crazy" das nur fussbälle und "tesla"-spulen erzeugt. am besten mit einem custom race testen, wenn interesse besteht. die tesla spulen stossen den spieler ab (nicht aber die bälle). ist leider nicht sehr performant.
ansonsten ein paar bugs gefixt und vermutlich auch einige hinzugefügt.
es gibt jetzt ein levelpack "crazy" das nur fussbälle und "tesla"-spulen erzeugt. am besten mit einem custom race testen, wenn interesse besteht. die tesla spulen stossen den spieler ab (nicht aber die bälle). ist leider nicht sehr performant.
ansonsten ein paar bugs gefixt und vermutlich auch einige hinzugefügt.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space
Re: [Projekt] Cyberlympics
habe ein massives performance problem bei meinen tesla spulen entdeckt. anstatt radius*2 als einflussgebiet, wurde radius*radius verwendet, also sozusagen alles. neben abweisenden spulen, habe ich nun auch anziehende. diese stellen aber definitiv ein performance problem dar, weil immer mehr objekte in ihrer nähe zu vielen kollisionen führt. nebenbei gibts dann auch komische physik-reaktionen. ich darf das also sicher nur sehr sparsam einsetzen.
Discord: https://discord.gg/AWhsvN3 für Devader: http://devader.space