Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 |
ax²+bx+c = threshold ax²+bx+c-threshold=0 //Nullstelle (x>0) (Mitternachtsformel) |
Zitat von »http://wiki.delphigl.com/index.php/Shader#Beispiel_Cube-Maps_Environment-Mapping«
Beispiel: Cube-Maps / Environment-Mapping
Beispiel: Cube-Maps / Environment-Mapping
Der Geometryshader stellt ein neues Vertexattribut gl_Layer zur Verfügung. Dieses erlaubt es zu bestimmen in welchen Framebuffer ein Dreieck gerendert werden soll. Dies kann man nun benutzen um in 6 Framebuffer gleichzeitig zu rendern. Der Geometryshader arbeitet dabei als Geometrie-Duplizierer. Da wir volle Kontrolle über die erzeugte Geometrie haben, können wir für jeden Framebuffer eine andere ModelViewProjection-Matrix zur Transformation verwenden. Man muss natürlich beachten, dass in diesem Fall das Frustum-Culling zu einem großen Teil im Shader stattfinden muss. Aber, letztendlich kann man so in einem einzigen Durchgang alle 6 Seiten einer Environment-Cubemap rendern!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Spiele Programmierer« (17.12.2012, 20:52)
Zum Lichtquellen-Radius: Du brauchst absurd niedrige Cutoff-Helligkeiten, wenn Du gammakorrekte Beleuchtung oder gar HDR benutzt. Ansonsten siehst Du permanent die Kanten von Lichtquellen, vor allem bei bewegten Lichtquellen sehr hässlich. Ich empfehle Dir stattdessen, die Attenuation anders zu berechnen. Nimm einen komplett linearen Falloff, oder ziehe die Cutoff-Helligkeit bereits in der Attenuation ab, so dass diese sauber bei 0 endet. Also Threshold statisch von c subtrahieren.
Allerdings möchte ich es für Anwender einfachen halten, Pointlights mit Attenuation zu erstellen. Ich setze zwar c=1 , da bei x=0 die Attenuation 1 [bzw. 1-threshold] sein soll, für a und b habe ich allerdings noch keine guten Default-Werte gefunden. Ich habe nun gehört, dass man in den meisten 3d-Programmen (z.B. Blender) weder den Radius noch die Variablen a,b,c definiert, sondern das es fixe Werte gibt für Radius,a,b und c und das man das nur über die Light-Intensity ändern kann. Mir ist allerdings schleierhaft wie das funktionieren soll...
Habt ihr Ideen, wie man das sinnvoll handlen und berechnen kann?
Denn die Lichtberechnung folgt ja dem simplen Muster: col = calculatedCol * intensity * attenuation.
Zitat
Diese (a,b,c)-Einstellerei habe ich das letzte Mal bei Fixed Function Grafikkarten gesehen... Geforce2 und Konsorten. DAS waren noch Zeiten.
Zitat von »https://developer.valvesoftware.com/wiki/Constant-Linear-Quadratic_Falloff«
While this is typical real world attenuation (accordng to inverse-square law), this rate is often too fast for virtual environments, creating unnatural glares on nearby textures (like the ceiling). [...] A real-world point light will fall off following the inverse-square law(plus some linear attenuation due to atmospheric scattering).
Werbeanzeige