Showroom - Aktuelle Arbeiten und Projekte

Hier könnt ihr euch selbst, eure Homepage, euren Entwicklerstammtisch, Termine oder eure Projekte vorstellen.
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.
scheichs
Establishment
Beiträge: 879
Registriert: 28.07.2010, 20:18

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von scheichs »

Danke für die guten Ideen und die motivierende Resonanz. Auch schön, dass meine Idee der räumlichen Teilnehmer-Gliederung positive aufgenommen wird. Im Vorfeld hatten da einige Bedenken, dass es "Platzverschwendung" sei.
Erstaunlicherweise habe ich bereits eine halbwegs positive Antwort vom Landesinstitut für Pädagogik und Medien, dass die Idee sehr interessant wäre.
Allerdings gehen sie davon aus, dass ich auf ein bestehendes Web-basierendes-System aufsetze... :/
Naja, immerhin soll ich bitte mich telefonisch melden um Detail-Fragen zu klären.
Ich werde berichten!
LONy
Establishment
Beiträge: 145
Registriert: 29.09.2011, 10:04

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von LONy »

Hi scheichs,

ich hab mich heute zufällig mit einer Grundschullehrerin unterhalten... An der Schule an der Sie unterrichtet sind die Fächer auf das Wesentliche reduziert und momentan natürlich nur per Video Chat. Sie hat gesagt, dass sie leider vom Kultusministerium keine klaren Vorgaben geben und erst recht kein Programm gestellt wird und sie aus der Not zoom nutzt, weil es halt recht einfach zu handhaben ist. Ich hab Ihr gleich mal dien YT Video geschickt ;)
scheichs
Establishment
Beiträge: 879
Registriert: 28.07.2010, 20:18

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von scheichs »

Hey LONy,

danke für die Infos und die Weiterempfehlung! Interessant, dass es bei euch keine klaren Vorgaben gibt und einfach ein Programm genutzt werden darf. An unserer Grundschule (Saarland) ist man da extrem zurückhaltend. Ich telefonier' mich grad rund um Leute zu erreichen, die da eine Entscheidungsgewalt haben. Sehr nervzehrend das ganze, zumal viele wegen Corona nicht im Büro sind. Ich hoffe bis spätestens nächste Woche eine Version zum Einsatz zu haben.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2516
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Jonathan »

Ich könnte mir Vorstellen, dass das Problem an offiziellen Vorgaben ist, dass die entsprechenden Produkte dafür zertifiziert oder sonstwas sein müssten. Und etwas offiziell zu benutzen kann ich Nachhinein vermutlich mehr Ärger geben, als wenn etwas eine Weile unter der Hand geduldet wurde. Ist natürlich eine blöde Situation weil es scheinbar keinen Mittelweg zwischen "die sehr gute, offiziell abgesegnete Lösung" und "jeder macht irgendeinen Quatsch" gibt, aber irgendwo zumindest nachvollziehbar.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
scheichs
Establishment
Beiträge: 879
Registriert: 28.07.2010, 20:18

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von scheichs »

Jedes Bundesland scheint eine eigene Regelung zu haben. Z.B. muss scheinbar Hessen während der Krise eine Ausnahmeregelung haben, dass jede Schule selber entscheiden darf, welche Tools eingesetzt werden. In jedem Fall ist meine App jetzt zur "weiteren Prüfung" eingereicht. Der Direktor der Grundschule und die Lehrerin meiner Tochter würden das Tool gerne einsetzen. Fehlen dann noch die Eltern... und ich muss noch fertig werden :)
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4272
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Chromanoid »

Also ich kenne das so, dass das die Schulleitung ggf. in Abstimmung mit der städtischen IT/IT des Trägers entscheiden kann. Zumindest läuft das so bei Smartboard-Software, Zeugnis-Software und so. Ein Bekannter entwickelt https://www.schule-plus.com/. Da ist es soweit ich weiß auch nicht so, dass das von hoher Stelle irgendwie abgesegnet werden muss. Da gibt es soweit ich weiß einfach gar keine Vorgaben oder offiziell empfohlene Blaupausen für die Schul-IT, das ist ja genau das Problem. Digitale und organisatorische Vernachlässigung der schlimmsten Sorte.

Nachtrag:
Programme vom Bundesland o.Ä. sind glaube ich auch eher freiwillig und setzen stark auf die Beteiligung der jew. Lehrkräfte und der Schulleitung. Das führt dazu, dass jede Schule ein eigener kleiner Kosmos ist.

Der größte Hohn ist aus meiner Sicht eigentlich, dass alle Lehrkräfte zwar für den Staat arbeiten, ihre Arbeit aber nicht öffentlich zugänglich ist. Aus meiner Sicht müsste man Schulen und Lehrkräfte dazu verpflichten Arbeitsblätter und Unterrichtsvorbereitung bundesweit in ein gemeinnütziges staatlich betriebenes Portal hochzuladen. Urheberrechtsverletzungen gegenüber Dritten müssten durch extra dafür angestellte Leute geregelt werden (entweder durch überarbeiten der Materialien oder durch Lizenzierung). Es ist doch Wahnsinn, dass es zig Portale gibt, die die Arbeit von Lehrkräften verkaufen und so viele Lehrkräfte sich jeden Tag wieder zu den gleichen Sachen Unterrichtsmaterialien vorbereiten wie tausende andere. Lehrkräfte werden zu Einzelkämpfern ausgebildet - völliger Wahnsinn. Ich glaube langsam dreht sich das, aber nur ganz ganz langsam.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

ShaderToy: https://www.shadertoy.com/view/Ws2fDy

Mich hat die Idee des analytischen Antialiasings nicht mehr losgelassen. AntiAliasing ist im Wortsinne ja die Unterabtastung des darzustellenden Signals.
Die GPU lässt den Fragment-Shader für einen ganz bestimmten Punkt in jedem Pixel laufen (oder für x Punkte bei Super Sampling), aber es bleiben diskrete Messpunkte der eigentlich kontinuierlichen "Bild"-Funktion. Der aktuelle Umgang mit dem Problem lautet, mit cleverer Methoden mehr Samples über die Zeit anzuhäufen oder die Fehler des Abtastens zu erkennen und rauszurechnen. Aber mich verfolgt schon eine Weile der Gedanke, das Sampling im Ganzen sein zu lassen und stattdessen das Signal über die gesamte Fläche des Pixels zu integrieren.

Dazu ignorieren wir erstmal alles Komplexere wie Albedo, Rauheit oder BRDFs und konzentrieren uns auf die reine Anwesenheit eines Primitives. Im Rahmen einer ZfxAction habe ich ja schon mal nen Point Cloud Renderer gebastelt, der jeden Punkt mit einem Rechteck dargestellt hat. Siehe hier: viewtopic.php?f=49&t=4493 Die Überdeckung eines rechteckigen Pixel-Bereichs mit einem rechteckigen Punkt ist einfach zu berechnen. Das sah in der Nähe nicht so toll aus, aber ergab selbst in großer Entfernung mit Primitiven viel kleiner als ein Pixel ein ruhiges Bild. Ich wollte damals eigentlich kreisförmige Punkte rendern, aber das habe ich nicht geschafft.

Dann gab es vor Kurzem ja das Werbevideo für die Unreal Engine 5. Darin und in herumspekulierenden Artikeln fand sich der Hinweis darauf, dass dort für winzige Dreiecke die Coverage analytisch berechnet wird. Im Video sah man jedenfalls praktisch kein Aliasing, auch wenn das bei Youtube&Co auch schlicht in der hyperagressiven Kompression verloren gegangen sein könnte.

Und ich habe schon lange für mein VoxelSurvival-Projekt herumgegrübelt. Und einem Denkfehler habe ich zu verdanken, dass ich die Kreisform sqrt(x² + y²) bzw. sqrt³(x³ + y³) für "eigentlich ganz einfach" gehalten habe und mal im Shader ausprobieren wollte. Ich bin dabei wieder gescheitert, habe jetzt aber eine halbwegs ähnliche Punktform gefunden, die ich tatsächlich analytisch berechnen kann. Das Ergebnis seht ihr im obigen ShaderToy-Link.

Das Problem ist eigentlich, dass man ein definiertes Flächenintegral einer binären 2D-Funktion berechnen will. Da der Zielbereich (ein Pixel aufm Bildschirm) ein Rechteck ist, würden sich... wiehießesnoch..., schlichtes 2D anbieten. Und wir können obige Funktionen auch schön als y = f(x) umschreiben. Das Problem ist, dass die Funktion a) einfach integrierbar und b) invertierbar sein muss. Und daran bin ich gescheitert. Das Integral von f(x) = sqrt(1 - x²) ist ein hyperkomplexes Massaker, das von f(x) = sqrt³(1 - x³) noch schlimmer. Die Invertierten dagegen sind trivial, weil die Funktionen ja diagonal-symmetrisch sind. (Gibt's das Wort?). Ich habe das Flächenintegral geschrieben als "ganzes Rechteck bis zu der Stelle, wo die Kurve sich mit der Rechteckhöhe schneidet, Rest als Fläche unter der Kurve" implementiert. Der Schnittpunkt lässt sich mit der Invertierten berechnen, ab da übernimmt das Integral. Und daran ist auch mein Versuch gescheitert, das heftige echte Integral per Augenmaß zu approximieren. Man bekommt Unstetigkeiten rein, sobald man die echte Invertierte mit dem nicht ganz passenden Approx-Integral kombiniert.

Daher gibt's im ShaderToy jetzt die nur optisch ähnliche Funktion f(x) = 1 - x^5. Die ist einfach zu integrieren und halbwegs machbar zu invertieren. Schon eine leichte Erweiterung f(x) = 1 - a*x^4 + b*x^6 ist quasi unmöglich zu invertieren - Wolfram Alpha hat Epochen gerechnet und mir dann bildschirmfüllende und teilweise komplexe Lösungen angeboten. Naja. Die Form sieht ein bssl verbeult aus, aber um Millionen Voxel zu rendern, wird es hoffentlich reichen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8305
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Krishty »

Habe mich nicht durch die Mathematik gewühlt, aber das ShaderToy sieht super aus und dafür meine Hochachtung!
Schrompf hat geschrieben: 29.05.2020, 15:26Dazu ignorieren wir erstmal alles Komplexere wie Albedo, Rauheit oder BRDFs und konzentrieren uns auf die reine Anwesenheit eines Primitives.
Da beginnt für mich nochmal ganz andere Magie, denn BRDFs und Texturen samplen auf einem Primitive, das weniger als eine Handvoll Pixel Fläche besetzt, das schreit für mich nur so nach Flimmern.

Naja, äh, weiter so!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Bergmon
Beiträge: 46
Registriert: 03.05.2003, 16:39
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Bergmon »

Schrompf hat geschrieben: 29.05.2020, 15:26 Das Integral von f(x) = sqrt(1 - x²) ist ein hyperkomplexes Massaker, das von f(x) = sqrt³(1 - x³) noch schlimmer.
Da du Mathematica verwendet hast entnehme ich deinem Kommentar, dass du dabei einer (verallgemeinerten) hypergeometrischen Funktion vom Typ 2F1 begegnet bist. Du kannst immer versuchen diese durch ihre Taylorreihe zu approximieren. Sind deine Koordinaten normalisiert auf (-1,1)? Im Falle der Quadratwurzel gibt mir Mathematica auch eine Formel mit arcsin (ist sicherlich langsam im Shader zu berechnen) aus.

VG
Bergmon
Zuletzt geändert von Bergmon am 24.06.2020, 17:50, insgesamt 1-mal geändert.
Bergmon
Beiträge: 46
Registriert: 03.05.2003, 16:39
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Bergmon »

Eine kurze Nachbetrachtung meines SARS-CoV-2-Skriptes:

Ich habe (fast) keine Änderungen vorgenommen und es einfach arbeiten lassen. Zu dem größten (Programmier)Fehler gehört wohl die Limitierung auf 32(16)Bit in der Ganzzahlarithmetik (es gibt einen netten Trick, wie man diese Größe ermitteln kann) durch die verwendete Shell und die damit einhergehenden zahlreichen Konsequenzen. Ansonsten scheint es recht gut zu funktionieren. Zur Erinnerung: ich berechne die durchschnittliche Zeit zwischen zwei beobachteten Infektionen und interpoliere arithmetisch ausgehend von der Gegenwart in die Vergangenheit. Eine Abweichung von der Zeit zum Vortag kann nur dann entstehen, wenn mehr oder weniger Ereignisse beobachtet wurden oder der Zeitpunkt (ich aktualisiere z.B. alle 10 Minuten) der Beobachtung sich geändert hat. Wenn man davon ausgeht, dass die Werte zu gleichen Ländern immer zu gleichen Zeiten auf dem Server landen, dann bekommt man also einen Tagestrend für die Gegenwart angezeigt. Durch das Interpolieren fallen Anomalien (z.B. nachträgliche Beobachtungen) heraus und die Werte werden stabiler.
Im Bild sieht man z.B. für Europa vor 19 Tagen einen deutlichen Abfall der Zeiten. Der Tag fällt unmittelbar in die Woche nach Pfingsten und man sieht, dass sich Europa im Gesamten davon noch nicht wieder erholt hat. Das Gegenteil ist nun wohl leider sogar der Fall. Was man aus anderen Daten sehen würde (nicht im.Bild): obwohl sich Europa als Gesamtes vor Pfingsten erholt hat, galt dies nicht für Osteuropa mit Russland als stärkste Quelle.

Im allgemeinen kann man mit etwas Übung recht schnell aus der Präsentation der Daten ablesen: Trends, exponentieller Abfall/Anstieg auf verschiedenen Zeitskalen.
Was ich gerne hätte, wäre das automatische Auffinden von Orakelzeitpunkten. D.h. findet Zeitpunkte zu denen die aktuelle Datenlage der in der entsprechenden Zukunft sehr Nahe kommt um so Projektionen zu beschleunigen.

Eine optimistische Vorhersage wäre nun für die nächste Nacht von Sonntag auf Montag: mind. 10.06*10^6 bekannte Infektionen auf der Erde, da sich eine (optimistische) durchschnittliche Zeit von 0,57 s/Infektion für diese Woche ablesen lässt.

VG
Bergmon
Screenshot_20200623-163753_SManager.png
p.s. Der offiziellen Berichterstattung der WHO ist man mind. 24 Stunden voraus.

p.p.s. Im übrigen stehen wir wohl an der Schwelle, an der das Virus endemisch wird. Das lässt sich ableiten aus den Zeiten für Europa, als man die starken Einschränkungen traf. Es war etwas über 3s/Infektion und danach ging die Zeit wieder hoch. Nun haben die anderen Kontinente schon Zeiten um 2 s/I bis auf Antarktis, Ozeanien und Afrika (fallend, langsam doch konsequent).
Die Maßnahmen, die man damals in Europa traf sind für die Kontinente eventuell nur noch notwendig aber nicht hinreichend.

p.p.p.s. Ausgehend, von dem was man über das jeweilige erste Auftreten des Virus weiß bzw. auch vermutet konnte man von ca 3 Monaten ausgehen (ohne Mutation), bis sich die Infektionen in destruktivem Maße äußern:
Frankreich/Italien im Dezember erstes Aufkommen, Maximum der Neuinfektionen Mitte März.
China man vermutet vor Dezember, evt. im letztes Drittel von Oktober 2019, Maximum der Neuinfektionen Anfang Februar.
Die nächste Welle wird diese Zeitskala im ungebremsten Fall nur unterschreiten auf Grund der Mutation S-D614G.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

Bergmon hat geschrieben: 23.06.2020, 23:35
Schrompf hat geschrieben: 29.05.2020, 15:26 Das Integral von f(x) = sqrt(1 - x²) ist ein hyperkomplexes Massaker, das von f(x) = sqrt³(1 - x³) noch schlimmer.
Da du Mathematica verwendet hast entnehme ich deinem Kommentar, dass du dabei einer (verallgemeinerten) hypergeometrischen Funktion vom Typ 2F1 begegnet bist. Du kannst immer versuchen diese durch ihre Taylorreihe zu approximieren. Sind deine Koordinaten normalisiert auf (-1,1)? Im Falle der Quadratwurzel gibt mir Mathematica auch eine Formel mit arcsin (ist sicherlich langsam im Shader zu berechnen) aus.

VG
Bergmon
Sorry, jetzt erst gesehen. Ich habe Wolfram Alpha benutzt, das ist Mathematica, soweit ich weiß. Ja, Bereich ist auf (0,1) eingeschränkt, alles außerhalb behandle ich mit Ausnutzung der Symmetrien und schlichter Zahlenlimitierung. Und Du hast wahrscheinlich recht: die Lösung mit nem ArcSin ist wahrscheinlich nicht viel langsamer als die Lösung mit nem pow(), wie ich sie jetzt habe. Zumal das ArcSin in der GPU wahrscheinlich mit ner Taylor-Reihe emuliert wird, also im Gegensatz zum pow() auch auf 4xfloat parallel anwendbar ist.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

Analytisches Rasterizing, Teil II: Dreieck.

Bild

Live: https://www.shadertoy.com/view/tlBcRw - Reinklicken und -ziehen.

Aktuell nur ne Kante bis zur Basisachse des Quadranten im Uhrzeigersinn. Ich dachte, ich könnte ganz fix aus dreien dieser Kanten ein Dreieck konstruieren, indem ich die Kante von der abziehe und die dritte an der Achse unterteile und so weiter. Falsch gedacht. Wird wohl doch ein bisschen komplexeres Gebastel mit Quadranten-Fallunterscheidungen.

Wenn das dann läuft, bin ich auch relativ sicher, dass ich am Kanten-Rasterizing noch einiges vereinfachen kann.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
starcow
Establishment
Beiträge: 551
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von starcow »

Sehr interessant und faszinierend, Schrompf! Ich muss allerdings gestehen, dass mir noch das nötige Wissen dazu fehlt, um genau zu verstehen, was du beabsichtigst. Eine Art "alternatives" Antialiasing das systemisch den bekannten Ansätzen überlegen ist?
Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

Das ist der Anfang, ja. Ein Antialiasing, was nicht auf der Anzahl Samples beruht, sondern mathematisch exakt berechnen kann, um wieviel ein Primitive (also zumeist ein Dreieck) einen Pixel beeinflusst. Ich hab das schonmal in einer ZfxAction erprobt und meine Welt mit einer Punktewolke aus ein paar Millionen Rechtecken dargestellt. Es gibt ein enorm ruhiges Bild auch bei Kamerabewegungen.

Das ist aber nur der Anfang. Weil Du mathematisch berechnest, wieviel Einfluss jedes Primitive hat, kannst Du nicht mehr den (fragment-basierten) DepthBuffer der GPU benutzen. Stattdessen ermittelst Du mit üblichen Beschleunigungsstrukturen für jeden Pixel, welche Primitives den Pixel berühren. Wenn Du Dir aber den Weg vom Betrachter durch den Pixel denkst, siehst Du eine Pyramide. Du hast mit der Methode also quasi einen Weg, alle Einflüsse innerhalb einer Pyramide durch die Szene zu sammeln. Das ist Raytracing, nur mit Volumen anstatt mit einem unendlich dünnen Strahl. Und dadurch, dass Du den Einfluss eines Primitives analytisch berechnen kannst, kannst Du jetzt ohne den Noise eines Raytracings z.b. penumbra-korrekte Schatten ausrechnen, diffuse Specular Reflections berechnen oder mit wenigen dicken Pyramiden Global Illumination einsammeln. Wenn Deine Datenstrukturen es hergeben, kannst Du bei breiten Pyramiden auch geringer aufgelöste Szenengeometrie akkumulieren. Wenn Du den Lichtweg umdrehst, könntest Du damit sogar Caustics berechnen, indem Du dünne Pyramidenstümpfe vom Licht an Oberflächen reflektierst und damit Licht auf Oberflächen splattest. Das berühmte Fenster, der beim Öffnen einen hellen Fleck über den Boden zieht, kriegst Du damit auch hin.

Hach. Ich werde ganz hibbelig, wenn ich mir die Anwendungsmöglichkeiten dieser Tech vorstelle. Ich bin damit allerdings sicher nicht der Erste. Nach dem diffusen Andeutungen in den UnrealEngine5-Videos bin ich sicher, dass die z.B. ihre Schatten so berechnen. Ihre GI machen sie etwas komplizierter, soweit ich das verstanden habe.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Matthias Gubisch
Establishment
Beiträge: 487
Registriert: 01.03.2009, 19:09

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Matthias Gubisch »

Cooles Projekt
Ja erinnert tatsächlich an die Andeutung zur schattenberechnung in der quer.
Bin mal gespannt was du damit auf die Beine stellen kannst
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

YEEEEEHAAAAW

https://www.shadertoy.com/view/wljyz3
Bild

Hat noch leichte Probleme in Quadranten links/oben und rechts/unten und Totalversagen im Quadrant links/unten. Aber heilige Fäkalie, ES GEHT. Mehrere Dutzend Zeilen, dieses Mal ab Werk bereits vektorisiert, viel kann man da nicht mehr rausholen. Aber kommt Zeit, kommt Speed. Erstmal korrekt kriegen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8305
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Krishty »

Interessant.

Insbesondere wenn du von einer Pyramide (Frustum) und Schatten sprichst, hätte ich erwartet, dass die meisten Dreiecke kleiner als ein Pixel sind und dass Dreiecke über mehrere Pixel der Sonderfall wären. Dann wäre der Fast Path, die Dreiecksfläche auszurechnen (Kreuzprodukt?) und durch die Frustumfläche zu teilen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
xq
Establishment
Beiträge: 1585
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von xq »

Krishty hat geschrieben: 20.07.2020, 23:22 Interessant.

Insbesondere wenn du von einer Pyramide (Frustum) und Schatten sprichst, hätte ich erwartet, dass die meisten Dreiecke kleiner als ein Pixel sind und dass Dreiecke über mehrere Pixel der Sonderfall wären. Dann wäre der Fast Path, die Dreiecksfläche auszurechnen (Kreuzprodukt?) und durch die Frustumfläche zu teilen.
Wenn ich el' Schrompfo richtig verstanden habe, möchte er mit den Dreiecken seinen Voxel-Renderer auf niedere Temperaturen kühlen und auch ansonsten ist das ziemlich sexy Tech, analytisches Antialias zu haben. Nice work, Schrompf!
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

Krishty hat geschrieben: 20.07.2020, 23:22 Interessant.

Insbesondere wenn du von einer Pyramide (Frustum) und Schatten sprichst, hätte ich erwartet, dass die meisten Dreiecke kleiner als ein Pixel sind und dass Dreiecke über mehrere Pixel der Sonderfall wären. Dann wäre der Fast Path, die Dreiecksfläche auszurechnen (Kreuzprodukt?) und durch die Frustumfläche zu teilen.
Das stimmt zwar, aber nur für wirklich viele kleine Dreiecke. Ein optisch dichtes Dreiecksnetz liegt zwangsweise oft auf Pixelkanten. Der Ansatz über den Flächeninhalt ist super, wenn Du wirklich viele Dreiecke pro Pixel hast. Dann kann es Dir wurscht sein, ob ein paar Dreieck halb hier und halb da liegen. Aber meiner Meinung nach sollte es soweit nie kommen, dann ist Dein Datensatz ungeeignet. Dann wird halt geloddet. Die weiterführenden Techniken auf Basis des Strumpf-Castings sind ja auch nur dann effizient, wenn Du in Deinem Datensatz schnell die Geometrie-Darstellung auswählen kannst, bei der die Dreiecke grob so groß sind wie der Querschnitt der Pyramide an der Stelle.

Wenn Du Globale Beleuchtung mittels ner breiten Pyramide einsammelst und dann pro Pyramide Hunderte Dreiecke einberechnen musst, hast Du gegenüber Raytracing wenig gewonnen. Das Ding rockt erst dann, wenn die Pyramide durch die Szene rauscht und passend zu ihrer aktuellen Weite die richtigen Dreiecke rendert, in denen dann repräsentativ die Werte der kleinen Dreiecke gemittelt wurden. Wie MipMapping halt, nur für Geometrie.

@xq: Danke!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2258
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Zudomon »

Auch von mir mal ein Lob an den el' Schrompfo!
Das sieht schon sehr solide aus!
smurfer
Establishment
Beiträge: 208
Registriert: 25.02.2002, 14:55

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von smurfer »

Schrompf hat geschrieben: 20.07.2020, 22:51 YEEEEEHAAAAW

https://www.shadertoy.com/view/wljyz3
Bild

Hat noch leichte Probleme in Quadranten links/oben und rechts/unten und Totalversagen im Quadrant links/unten. Aber heilige Fäkalie, ES GEHT. Mehrere Dutzend Zeilen, dieses Mal ab Werk bereits vektorisiert, viel kann man da nicht mehr rausholen. Aber kommt Zeit, kommt Speed. Erstmal korrekt kriegen.
Hallo Schrompf, coole Sache, sieht sehr vielversprechend aus. Ein Frage allerdings: ist das wirklich analytisch? Es geht doch beim Aliasing um Frequenzen, d.h. dein Dreieck hat in diesem Fall in drei Richtungen einen Sprung im Ortsbereich, also in diesen Richtungen eine sinc-Funktion im Frequenzbereich. Im Frequenzbereich müsstest Du doch genau die (hohen) Frequenzen rausfiltern, die du nicht abbilden kannst, also vermutlich mit einer 2D-Fensterfunktion (sprich, mit einem Rechteck/Quadrat im Frequenzbereich multiplizieren). Ich habe ehrlich gesagt gerade gar keine Vorstellung, ob das das gleiche ist, wie den vom Dreieck "berührten" Anteil des Pixels zu berechnen?!
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

Danke nochmal. Ich habe mich ehrlich gesagt nicht mit den signaltheoretischen Erwägungen beschäftigt. Ich habe aus dem An/Aus des sample-basierten Betriebsmodus der GPU halt einen analogen Betriebsmodus gemacht. Wenn ich mich an Abi-Mathe richtig erinnere, hat man das Integral so begründet, dass man nen Funktionswert f(x) genommen hat und das Rechteck mit einer gewissen Breite und dieser Höhe berechnet hat. Das ist natürlich nur ungefähr die Fläche unter der Kurve. Also nimmt man mehrere Werte und macht deren Breite schmaler. Und wenn man die Sample-Anzahl gegen Unendlich und damit die Breite gegen 0 gehen lässt, wird daraus das Integral. Daher denke ich, dass das Flächenintegral hier der passende Begriff ist.

Die Schnittfläche Dreieck vs. Rechteck ist schon irgendwie das Flächenintegral, aber halt nur über die reine Anwesenheitsfunktion des Dreiecks, die halt von 0 (kein Dreieck) auf 1 (Dreieck) springt. Krishty schrieb schon, das alle anderen hochfrequenten Signale wie z.B. irgendwelche Specular Highlights nicht mit drin sind, und die wären die eigentlichen Burner. Für mich reicht das erstmal, auch wenn ich natürlich weiter wüst darüber spekuliere, ob und wie man die auch erfassen könnte. Ich denke, ich überlasse das den Mathe-Profis und versuche mich lieber in diversen Rendertechniken, die man mit nem kleinen oder großen Integral schön annähern kann.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
smurfer
Establishment
Beiträge: 208
Registriert: 25.02.2002, 14:55

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von smurfer »

Das ist tatsächlich ein sehr cooles und spannendes Thema. Ich stelle mir gerade ein sehr schmales Rechteck vor, ausgerichtet an einer der Bildschirmachsen und mittig auf den Pixeln liegend, also schmaler als ein Pixel. Habe ich es richtig verstanden, dass Du wegen des flächenhaften Anteils innerhalb des Pixels dann eine proportional dunklere, pixelbreite Linie erhältst?!

Gefühlt würde das beim Filtern der hohen Frequenzen qualitativ das Gleiche sein, bin mir nur nicht sicher ob das linear wie beim Flächenintegral verläuft.

Spannend wir es jetzt bei zweien solcher Rechtecke (eventuell verschiedener Breite) nebeneinander, mit etwas mehr als einer Pixelreihe Abstand und der Frage, ob sich nach dem Tiefpass ein Einfluss auf die mittlere Reihe ergibt.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

Zwei Themen:
smurfer hat geschrieben: 22.07.2020, 10:26 Das ist tatsächlich ein sehr cooles und spannendes Thema. Ich stelle mir gerade ein sehr schmales Rechteck vor, ausgerichtet an einer der Bildschirmachsen und mittig auf den Pixeln liegend, also schmaler als ein Pixel. Habe ich es richtig verstanden, dass Du wegen des flächenhaften Anteils innerhalb des Pixels dann eine proportional dunklere, pixelbreite Linie erhältst?!
Genau das. Kannst Du auf https://www.shadertoy.com/view/wljyz3 live ausprobieren, indem Du den Öffnungswinkel des Testdreiecks auf Zeile 132 senkst. Ich kann jetzt keinen fixen Screenshot davon erzeugen, weil das Ding auf meinem Linux-Native-Rechner ohne Angabe von Fehlern einen grauen Bildschirm ergibt :-/
Spannend wir es jetzt bei zweien solcher Rechtecke (eventuell verschiedener Breite) nebeneinander, mit etwas mehr als einer Pixelreihe Abstand und der Frage, ob sich nach dem Tiefpass ein Einfluss auf die mittlere Reihe ergibt.
Du sprichst beharrlich vom Frequenzbereich, und ja, man könnte Aliasing auch so lösen. Dann würde wahrscheinlich kein Flächenintegral rauskommen, sondern irgendne Suppe von gewichteten Sinüssen. Ich bleibe erstmal beim Integral-Ansatz.

Das Kombinieren von mehreren Dreiecken ist ein separates Problem. Und es gibt verschiedene Lösungsansätze. Tim Sweeney, der Gründer der Unreal-Engine, wird auf Twitter nicht müde, darauf hinzuweisen, dass er das Thema seit >10 Jahren verfolgt. Er hat *damals* überlegt, pro Pixel einen kleinen BSP-Tree zu pflegen. Geht natürlich, stell ich mir speziell auf der GPU aber sehr anstrengend vor.

Meine Idee war eher eine stumpfe Heuristik: falls der DepthRange der drei Vertices mit dem DepthRange des vorherigen Dreiecks überschneidet, gehe ich davon aus, dass die beiden Dreiecke verbunden sind. Damit überdecken sie einander nicht, nehmen einander also keine Coverage weg, also addiere ich deren Gewichte. Falls deren DepthRanges einander nicht überlappen, geh ich von separaten Oberflächen aus und unterstelle Überschneidung, die Coverage des hinteren Dreiecks füllt also nur den übriggebliebenen Anteil der vorherigen Dreiecke auf.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4996
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas
Wohnort: Dresden
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Schrompf »

xq hat ein Bild davon gemacht, wie ein sehr dünnes Dreieck aussieht:

https://mq32.de/public/060f42dc963918d2 ... df7d0a.png

und es passiert genau das, was man erwartet: ein dünner Streifen inmitten eines Pixels wirkt anteilig. Man sieht auf dem Bild rechts allerdings auch noch nen Bug. Davon hab ich noch ein paar.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
smurfer
Establishment
Beiträge: 208
Registriert: 25.02.2002, 14:55

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von smurfer »

Schrompf hat geschrieben: 22.07.2020, 12:29 Genau das. Kannst Du auf https://www.shadertoy.com/view/wljyz3 live ausprobieren, indem Du den Öffnungswinkel des Testdreiecks auf Zeile 132 senkst. Ich kann jetzt keinen fixen Screenshot davon erzeugen, weil das Ding auf meinem Linux-Native-Rechner ohne Angabe von Fehlern einen grauen Bildschirm ergibt :-/
Hatte es schon ausprobiert und bin genau da gelandet. Habe es jetzt aber mal von meinem Arbeitsrechner ausprobiert: Sehr schön, wirkt echt sehr smooth und angenehm.
Schrompf hat geschrieben: 22.07.2020, 12:29 Du sprichst beharrlich vom Frequenzbereich, und ja, man könnte Aliasing auch so lösen. Dann würde wahrscheinlich kein Flächenintegral rauskommen, sondern irgendne Suppe von gewichteten Sinüssen. Ich bleibe erstmal beim Integral-Ansatz.
Alles gut, finde deinen Ansatz ebenso richtig wie gut und wollte dich auch nicht davon abbringen. Das war eher laut gedacht, da es -- zumindest wenn man an das Abtasttheorem glaubt -- in der Form analytisch gelöst werden kann und ich mich nur rein interessehalber gefragt habe, ob dein Ansatz nicht am Ende auf das gleiche Ergebnis führt oder ob es Unterschiede gibt.
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Spiele Programmierer »

@smurfer
Ob man das gleiche Resultat bekommt, hängt von der Fensterfunktion ab, aber ein perfekter Tiefpass, der einfache alle Frequenzen unter über einer Schwellwert auf 0 setzen, liefert ein anderes Resultat. Nämlich eins mit solchen Ringing-Artefakten.

Dies kann man relativ leicht bestimmen, wenn man da die Multiplikation mit der Fensterfunktion im Frequenzraum mit dem Faltungssatz als Faltung mit der Fouriertransformation der Fensterfunktion im Bildraum ausdrückt. Die Fouriertransformation der Stufenfunktion, die alle Frequenzen ab einem Schwellwert abschneidet, ist eine Sinc-Funktion. Also muss man die Faltung einer einzelnen geraden Kante im Bildbereich mit dieser Sinc-Funktion ausrechnen. Diese 2D-Faltung ist gleich einer 1D-Faltung senkrecht zur Kante. Man bekommt das Integral der Sinc-Funktion von -∞ bis zum aktuellen Koordinatenwert. Also hat man diese Wellen senkrecht zur Kante.

Die Wellen sind im Vergleich zur Kante nicht sehr stark. Ungezoomt auf einem üblichen Display merkt man davon wahrscheinlich kaum etwas. Ob es besser aussieht, käme auf einen Versuch an, aber durch den viel höheren Rechenbedarf lohnt sich das bestimmt nicht. Ganz abgesehen davon, dass man ja auch noch die Faltung an den Ecken von Dreiecken gesondert bestimmen müsste, ganz zu schweigen von Überdeckungen...

EDIT:
Nachdem mir gerade bewusst geworden ist, dass wir ja ja hier im Showroom sind, bin ich jetzt doch noch neugierig geworden und habe jetzt Testbildchen für beide Methoden gemacht. Das Ergebnis mit der Frequenzmethode ist wenig überzeugend. Theoretisch könnte wohl eine andere Fensterfunktion einen brauchbaren Kompromis schaffen.
Dateianhänge
Out Smurfer.png
Out Smurfer.png (2.35 KiB) 3181 mal betrachtet
Out Schrompf.png
Out Schrompf.png (919 Bytes) 3181 mal betrachtet
smurfer
Establishment
Beiträge: 208
Registriert: 25.02.2002, 14:55

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von smurfer »

Spiele Programmierer hat geschrieben: 22.07.2020, 18:09 Ob man das gleiche Resultat bekommt, hängt von der Fensterfunktion ab, aber ein perfekter Tiefpass, der einfache alle Frequenzen unter einer Schwellenfrequenz auf 0 setzen, liefert ein anderes Resultat. Nämlich eins mit solchen Ringing-Artefakten.
Ah, stimmt, mit dem idealen Tiefpass und der Faltung mit der Sinc-Funktion im Ortsbereich hast Du natürlich recht. In der Praxis faltet man ja unter solchen Umständen eher mit Sinc-Lanczos, um einen vernünftigen Kompromiss zu haben. Oder eben Gauss in Orts- bzw. Frequenzbereich, aber der glättet dann recht stark eine der beiden Domänen, da ist auch keine Vergleichbarkeit mit Schrompfs Lösung gegeben.
Zuletzt geändert von smurfer am 22.07.2020, 19:53, insgesamt 1-mal geändert.
smurfer
Establishment
Beiträge: 208
Registriert: 25.02.2002, 14:55

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von smurfer »

Spiele Programmierer hat geschrieben: 22.07.2020, 18:09 EDIT:
Nachdem mir gerade bewusst geworden ist, dass wir ja ja hier im Showroom sind, bin ich jetzt doch noch neugierig geworden und habe jetzt Testbildchen für beide Methoden gemacht. Das Ergebnis mit der Frequenzmethode ist wenig überzeugend. Theoretisch könnte wohl eine andere Fensterfunktion einen brauchbaren Kompromis schaffen.
Ja, wie gesagt Gauss im Frequenzbereich ist Gauss im Ortsbereich, der hätte kein Ringing, aber wäre entweder sehr "weich" an der Kante oder könnte nicht ideal das Aliasing verhindern, weil er in den Frequenzen zu weich ist. Sinc-Lanczos als Kompromiss ist wahrscheinlich auch nicht so sauber wie Schrompfs.

Edit: Aber nimm doch mal spaßeshalber einen Gauss, wahrscheinlich etwas breiter im Frequenzbereich, damit die Kante im Ortsbereich nicht so stark geglättet ist, wenn ich mal Wünsche äußern darf :-D

Edit 2: Ach lass, eigentlich ist das auch Quatsch. Dass ein Gauss ein geeignetes Tiefpassfilter für die Unterabtastung ist, weiß man, dass ein Mittelwertfilter es nicht ist, auch. Sinc ist ideal in der Frequenz, aber hat Ringing und Sinc-Lanczos ist irgendwo dazwischen. An sich ist Schrompfs Ansatz ja maßgeblich deshalb anders (und sehr cool), weil eine kontinuierliche Kante gesampled wird und nicht ein diskretes Bild. Und ob ich nun ein hoch aufgelöstes Bild Gauss-falte oder die kontinuierliche Kante direkt Gauss-gefiltert male, macht den Kohl auch nicht fett. Die Idee ist die kontinuierliche Kantenbeschreibung, ob nun per Flächenintegral oder Tiefpass gesampled wird, ist ja wahrscheinlich gar nicht der Kern.
Benutzeravatar
Krishty
Establishment
Beiträge: 8305
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Showroom - Aktuelle Arbeiten und Projekte

Beitrag von Krishty »

Ach Schrompf, ist das Ganze eigentlich Gamma-korrekt? Bei Shadertoy weiß ich gar nicht, ob man nun in sRGB oder linear rendert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten