Seite 30 von 69

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 22.12.2013, 22:53
von RustySpoon
mnemonix hat geschrieben:Ich wünschte wir hätten sowas wie einen Artikel/Paper-Thread
Du meinst sowas in der Art? ;-)

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 23.12.2013, 00:42
von Chromanoid
Hehe, hast wohl nicht zu Ende gelesen :P

@mnemonix: Ja, geht mir ähnlich. Wikis finde ich aber doof für kleine Communities und besonders für Linklisten. Ich stelle mir ja eher eine Art gemeinsam pflegbares Directory vor. Ich hab schon lange vor sowas zu machen, also etwas, dass man in jede Website per IFrame o.Ä. einbinden kann. Oder gibt's schon was cooles in der Richtung?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 23.12.2013, 06:50
von RustySpoon
Doch, doch, aber irgendwie nicht mehr vollständig prozessiert. :>

Wiki find ich auch doof, da findet man erfahrungsgemäß ganz schnell gar nix mehr. Und die Hemmschwelle "da nur mal schnell 'nen Link zu posten" ist mir auch irgendwie zu hoch. Eine gemeinsam pflegbare Liste fände ich super, idealerweise mit Tags pro Eintrag um irgendwann auch mal was wieder zu finden.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 30.12.2013, 04:30
von xq
So, ein Neuling meldet sich auch mal mit Post Nummer 2:

Ein 26-Stunden-Marathon, ein Port von XNA zu einer eigenen OpenGL3.3-Engine mit OpenTK und zwischendurch mal Pausen. Das Resultat: Light Prepass Renderer
Bild

Was hat man dabei so gelernt: XNA hat eine sehr unflexible Rendering-Pipeline. IDisposable will richtig implementiert werden. 500 logische Zeilen Code für eine Engine im groben Stile von XNA sollten reichen. Assimp ist eine tolle Bilbiothek. Ändere NIEMALS die verwendete Mathe-Bibliothek.

Grüße
Felix

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 30.12.2013, 09:58
von Schrompf
Sehr schick! Der Würfel ganz rechts hinten wirkt an den Kanten, als hätte der Beleuchtungsprobleme. Da stehen ein paar helle Pixel heraus. Ist das nur Zufall oder ein bekanntes Problem?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 30.12.2013, 12:05
von xq
Schrompf hat geschrieben:Da stehen ein paar helle Pixel heraus. Ist das nur Zufall oder ein bekanntes Problem?
Das ist ein bekanntes Problem (und auch der Hauptgrund, warum ich zu OpenGL gewechselt habe. Bei XNA waren das nicht nur ein paar kleine Pixel, sondern die ganze Beleuchtung war off-by-one und hat "geschwommen". Den Effekt hab ich mir nicht erklären können, es sah aus wie eine Art Heat-Haze, wobei die Shader im Endeffekt 1:1 das Gleiche gemacht haben.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 30.12.2013, 12:43
von Schrompf
XNA ist Direct3D9-Level. Da ist der Screen Space anders definiert als bei OpenGL / DX10+. DX9 definiert (-1, 1) als Mitte des linken oberen Bildpixels, nicht als linke obere Ecke des linken oberen Pixels wie alle anderen. Dieses Offset musst Du in allen Operationen mit Rendertargets einberechnen, sonst bekommst Du potentiell die falschen Texel geliefert, wenn Du aus Texturen sampelst.

Der dort sichtbare Fehler dürfte also sein, dass da ein Pixel die falschen Normale / Weltposition / Lichtindizes benutzt, weil die Werte nicht genau deckungsgleich für die selben Daten entstanden sind.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 30.12.2013, 14:11
von xq
Ich habe jetzt das ganze nochmal überarbeitet und verwende jetzt texelFetch mit gl_FragCoord anstelle meiner eigenen Positionsberechnung.
Funktioniert super, ich finde im Moment keine Falschpixel mehr, es rauscht auch sehr viel weniger.
Habe auch mal versucht, Gamma Correction einzubauen. Schaut aus, als hätte es funktioniert :)
6528b0.png

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 03.01.2014, 12:26
von xq
Ich hoffe das zählt nicht als Doppelpost :P

Bild
Nochmal ein Bild

Der Shader ist im Moment aber nur eine Experimental-Implementierung, da meine Engine noch keine Post-Processing-Shader supported (ich kann im Moment nur einen Shader anwenden was irgendwie nich so pralle is)

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 07.01.2014, 12:43
von xq
Layout-Engine für die GUI für die obige Engine:
Bild

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 08.01.2014, 03:13
von xq
Font Rendering mit FreeType + GUI-Controls Label und Button:
Bild

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 08.01.2014, 10:58
von Jonathan
hübsch :)

GUI ist selber geschrieben?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 08.01.2014, 16:45
von xq
Ja, gerade dabei, Controls zu implementieren. Buttons und Labels sind dann doch etwas wenig ;)

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 08.01.2014, 16:58
von RazorX
Ja schon ne komplizierte Sache eine universale GUI zu entwickeln. Ich hatte Anfang des Jahres auch ein bisschen damit zu kämpfen, Layout-Manager hatte ich allerdings nicht implementiert. Meiner gemachten Erfahrung nach, ist es aber wirklich extrem wichtig ein MVC anzuwenden, zumindest den Render-Code wegzuabstrahieren. In der Iteration hatte ich das nicht gemacht und es wurde echt ekelhaft.
screenshot_2013-02-26_17-29-52.png
Ansonsten hier einmal noch etwas, was ich vor Weihnachten auf die Schnelle implementiert habe. Wellensimulation durch 512x512 IFFT via ComputeShader, Screen-Space-Refractions, sowie Reflections durch eine EnvMap.
https://developer.nvidia.com/sites/defa ... Slides.pdf
screenshot_2013-12-24_09-03-32.png

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 09.01.2014, 00:51
von Krishty
Sieht fantastisch aus, das Ganze!

————

Ich versuche gerade aus Jux, Speicherzugriffe zu protokollieren (damit ich sehe, wie sich meine Algorithmen verhalten).

Hier ist das Einfügen einiger tausend zufälliger Werte in eine std::map (die Zeit verläuft von oben nach unten):
mem xs (map random insertion).png
Hier dasselbe mit sortierten Werten:
mem xs (map sorted insertion).png
Wahrscheinlich fehlt darin noch die Hälfte (oder std::sort() kann zaubern), aber es ist ein Anfang.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 09.01.2014, 13:50
von Spiele Programmierer
Sieht interessant aus, aber ich kann mit den Bildern irgendwie wenig anfangen.
Für was steht idie X-Achse und für was Y-Achse? Ein Weißer Punkt ist ein Speicherzugriff, nehme ich an, aber in wie fern spielt die Position in den Bildern eine Rolle?
Wieso "std::sort" bei einer Map? Eine Map ist doch prinzipbedingt immer sowieso schon sortiert, da ergibt "std::sort" doch gar keinen Sinn mehr?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 09.01.2014, 14:16
von Krishty
Spiele Programmierer hat geschrieben:Sieht interessant aus, aber ich kann mit den Bildern irgendwie wenig anfangen.
Für was steht idie X-Achse und für was Y-Achse?
Die X-Achse ist der Adressraum (bzw. der Ausschnitt davon, den das Programm benutzt hat; dürfte ein Dutzend KiB sein). Die Y-Achse ist die Zeit (von oben nach unten). Bei dem Bild mit den sortierten Einfügungen kannst du vertikale Strecken sehen: Das sind offenbar die oberen Knotenpunkte des Baums, die bei jedem Suchvorgang berührt werden. Daran, wie die Abstände zwischen den Knoten nach rechts hin enger werden, kannst du erkennen, dass es sich grob um binäre Suche handeln muss.
Spiele Programmierer hat geschrieben:Ein Weißer Punkt ist ein Speicherzugriff, nehme ich an, aber in wie fern spielt die Position in den Bildern eine Rolle?
Du kannst davon ausgehen, dass das sortierte Einfügen recht leistungsstark ist weil jede Zeile nur minimal von der Zeile darüber abweicht – die Speicherzugriffe treffen also wahrscheinlich den Cache. Beim Unsortierten Einfügen unterscheiden sich die Zeilen sehr stark voneinander; das dürfte den Cache sehr strapazieren.

Ein interessantes Detail sind die Zeilen ganz unten, die relativ dunkel sind. Das ist der Destruktor der Map, der die Elemente aufräumt. Am Verlauf nach dem sortierten Einfügen kannst du erkennen, dass die Elemente gemäß ihrer Sortierung von hinten nach vorne aufgeräumt werden. Eine Map, die sortiert befüllt wurde, wird also bestimmt auch bei der Freigabe schneller sein, weil die Elemente dann ähnlich im Speicher liegen wie ihre umgekehrte Zerstörungsreihenfolge.
Wieso "std::sort" bei einer Map? Eine Map ist doch prinzipbedingt immer sowieso schon sortiert, da ergibt "std::sort" doch gar keinen Sinn mehr?
Das war ohne Bezog. Ich habe auch std::vectors mit Zufallszahlen befüllt und dann sortiert. Während man das Befüllen sehr deutlich erkennen kann, fehlt das sort() komplett – ich muss also irgendwo noch einen Fehler drinhaben, dass mir Speicherzugriffe verloren gehen :(

So richtig nützlich wird es erst, wenn man aufregendere Algorithmen wie etwa Renderschleifen analysiert. Dazu bin ich aber leider noch nicht gekommen.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 09.01.2014, 14:27
von Spiele Programmierer
Normalerweise ist doch immer die X-Achse die Zeit?
Wie überwachst du denn aus Speicherzugriffe? Ich wüsste nicht wie das gehen soll? Auf jeden Fall muss es ja ein "LowLevel"-Feature sein und kein Trick in C++ sein, wenn der Cache ein Problem darstellen kann.
Klingt auf recht nützlich, wenn man optimieren will.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 09.01.2014, 15:40
von Krishty
Spiele Programmierer hat geschrieben:Normalerweise ist doch immer die X-Achse die Zeit?
Ich hatte aber keine Zeit zum Transponieren ;-) Sonst hätte ich auch viel schönere Farben genommen.
Spiele Programmierer hat geschrieben:Wie überwachst du denn aus Speicherzugriffe? Ich wüsste nicht wie das gehen soll? Auf jeden Fall muss es ja ein "LowLevel"-Feature sein und kein Trick in C++ sein, wenn der Cache ein Problem darstellen kann.
Ich versetze alle Kacheln, die der Heap allokiert, in einen geschützten Zustand, so dass der erste Zugriff eine Ausnahme auslöst. Die fange ich ab, logge die Adresse des Zugriffs, und schalte die CPU in den Einzelschrittmodus. Nachdem die ihren Speicherzugriff durchgeführt hat, bekomme ich wieder eine Ausnahme, in der ich den Schutz der Kachel wiederherstelle damit der nächste Zugriff wieder eine Ausnahme auslöst. Es ist noch etwas komplizierter weil die CPU tatsächlich auf bis zu vier Kacheln gleichzeitig arbeiten kann, aber das wäre das grobe Konzept. Ist übrigens auch episch langsam; 1000 Elemente in die Map dauert gut eine Sekunde.
Klingt auf recht nützlich, wenn man optimieren will.
Ja das erhoffe ich mir davon.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 09.01.2014, 15:48
von Spiele Programmierer
Oh, das ist ja richtig langsam. So langsam, dass es fast an Praxistauglichkeit verliert. Aber kein Wunder, bei dem Weg.
Ich wusste gar nicht, das Windows solche Spielerereien erlaubt.

Eine andere spontane Idee von mir wäre es, automatisch entsprechende Trackinganweisungen in Assembler einzufügen.
Zum Beispiel im LLVM/Clang sollte das möglich sein. Das sollte deutlich schneller sein und hat keine Cacheeinflüsse.
Wobei mich ein wenig wundert, falls man mit dem Cache den Speicherschutz hier für einige Zeit umgehen kann. Kann man den Cache nicht irgendwie flushen? Oder auf ganz viele (sinnlose)Werte zugreifen, nur damit die zuletzt Genutzten aus dem Programm aus dem Cache verdrängt werden. Aber wie langsam es erst dann wird?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 10.01.2014, 05:17
von Yhoko
In meinem Spiel kann man Items stapeln ("Stacks") und ich habe es mir zum Ziel gemacht, alle Funktionen mit einer einzigen Maustaste (bzw. einem Finger) zugänglich zu machen. Um nun aus einem Stapel von z.B. 100 Mehl genau 45 herauszunehmen, habe ich mir folgendes Interface überlegt: Bei Doppelklick auf das Mehl erscheint ein Bogen, der die Menge von 0% bis 100% darstellt. Je nach Position des Cursors auf dem Bogen wird die dazugehörige Menge ausgewählt:

Bild

Rein rechnerisch bedeutet das: Mit einem Radius von 50 Pixeln kann mann mittels des Bogens die Menge in mindestens 235 Schritten adressieren (ist der Cursor weiter weg, vergrössert sich der Radius und die Schrittzahl erhöht sich; vom vollen Kreis fallen dabei jeweils 90° für die Mengenanzeige weg).

Yhoko

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 10.01.2014, 08:53
von Schrompf
Das sieht gut aus! Wenn ein Interface sinnvoll für Touchbedienung geplant ist, ist es *nicht ganz so* übel wie die normale Mobilphone-Bedienung.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 10.01.2014, 18:05
von Yhoko
Tatsächlich bedient es sich auch am PC sehr bequem, da man nicht auf die Tastatur angewiesen ist (also nicht das Eingabemedium wechseln muss) und doch relativ schnell mit der Maus die gewünschte Menge auswählen kann. Eine Tastatursteuerung wird natürlich auch hier von einigen Spielern gewünscht werden, von daher steht das noch auf meiner Liste, hat aber keine Priorität.

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 11.01.2014, 02:31
von Yhoko
Just for fun: der Gas-Effekt, oder "nanu, riechts hier komisch? Und wer sind die beiden hinter mir? ..."

Bild
(animiertes GIF)

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 11.01.2014, 15:44
von Krishty
Yhoko hat geschrieben:Tatsächlich bedient es sich auch am PC sehr bequem, da man nicht auf die Tastatur angewiesen ist (also nicht das Eingabemedium wechseln muss) und doch relativ schnell mit der Maus die gewünschte Menge auswählen kann.
Genau sowas schätze ich auch. Wenn ich auch nur einmal auf die Tastatur schauen oder gar umgreifen muss, vergeht mir schon die Lust …
Spiele Programmierer hat geschrieben:Oh, das ist ja richtig langsam. So langsam, dass es fast an Praxistauglichkeit verliert.
Naja; ich habe auch garkeinen realistisch proportioniertes Diagramm anvisiert – eine Übersicht über das Speichermuster sollte ausreichen um problematische Stellen zu erkennen. Wenn man einen Durchlauf der Physikschleife aufnimmt und dann so ein Wirrwarr sieht wie bei der unsortierten Map-Einfügung, sollten schon die Alarmglocken bimmeln; egal, ob die Zeitintervalle realistisch sind oder nicht.
Spiele Programmierer hat geschrieben:Eine andere spontane Idee von mir wäre es, automatisch entsprechende Trackinganweisungen in Assembler einzufügen.
Zum Beispiel im LLVM/Clang sollte das möglich sein. Das sollte deutlich schneller sein und hat keine Cacheeinflüsse.
Ja; absolut. Leider ist nicht alles LLVM-basiert; die Produkte bei mir auf der Arbeit z.B. überhaupt nicht.
Spiele Programmierer hat geschrieben:Wobei mich ein wenig wundert, falls man mit dem Cache den Speicherschutz hier für einige Zeit umgehen kann.
Wie meinen? Geht nicht jeder Speicherzugriff durch den TLB; egal ob im Cache oder nicht?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 11.01.2014, 22:43
von Spiele Programmierer
Wie meinen? Geht nicht jeder Speicherzugriff durch den TLB; egal ob im Cache oder nicht?
Du hast doch geschrieben, dass nicht alle Speicherzugriffe erfasst werden können, weil viele Werte noch im Cache sind.
Das heißt doch, dass Werte aus dem Cache nicht mehr den Speicherschutz/das Paging passieren.
Das bedeutet doch wiederum, dass auch wenn einer Anwendung das Recht entzogen wurde, eine entsprechende Stelle lesen, kann sie noch auf unbestimmte Zeit über den Cache weiterhin darauf zugreifen.
Der TLB spielt dabei keine Rolle. Bei Änderungen an den Pages müsste Windows diese doch aus dem TLB rausschmeißen. (zb. mit "invlpg")

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 12.01.2014, 00:53
von Krishty
Spiele Programmierer hat geschrieben:
Wie meinen? Geht nicht jeder Speicherzugriff durch den TLB; egal ob im Cache oder nicht?
Du hast doch geschrieben, dass nicht alle Speicherzugriffe erfasst werden können, weil viele Werte noch im Cache sind.
Dann haben wir uns wohl missverstanden. Falls du dich auf das hier bezogen hast:
Krishty hat geschrieben:Du kannst davon ausgehen, dass das sortierte Einfügen recht leistungsstark ist weil jede Zeile nur minimal von der Zeile darüber abweicht – die Speicherzugriffe treffen also wahrscheinlich den Cache.
Dann meinte ich damit: Die Zugriffe werden sehr wohl in meinem Diagramm registriert, dadurch ergeben sich ja die vertikalen Linien. Weil jede Zeile auf etwa die gleichen Stellen zugreift wie die darüber, ist der Algorithmus sehr Cache-effizient – denn er referenziert ja immer nur Daten, die kurz zuvor bereits referenziert wurden.

Meintest du das?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 12.01.2014, 13:00
von Spiele Programmierer
Ich verstehe nicht ganz, was du meinst.
Vorher hast du geschrieben, es werden nicht alle registriert, weil sie durch den Cache gehen und jetzt schreibst du, dass sehr wohl alle registriert werden sollen?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 12.01.2014, 13:29
von Krishty
Ich hatte Cache nur einmal erwähnt, und zwar so wie im vorigen Beitrag erklärt. Auf welche Aussage von mir beziehst du dich?

Re: Showroom - Aktuelle Arbeiten und Projekte

Verfasst: 12.01.2014, 13:37
von Spiele Programmierer
Kann es sein, dass ich mich verlesen habe?
Du hast ja geschrieben, dass die Hälfte der Speicherzugriffe vermutlich noch fehlen und ich habe das gestern dann irgendwie so verstanden, dass der Cache schuld ist? Ich habe mich schon gewundert. Scheinbar also doch nicht?