Wie funktioniert per Pixel Lightning ?
-
Hi,
Jo wie funktioniert das mit dem Pixel/Vertex Shader genau ?
Gehen wir mal von einem Dreieck aus:
Das Dreieck hat einen Normalenvector, welcher für jeden Pixel gilt.
Normalerweise berechnet man den Noramlenvector eines Dreiecks und schiebt die Daten dann durch meine Shader und berechnet anhand des Winkels die Lichtidensität.Bye
-
"lightning" heißt "Gewitter".
wie willst du denn ein Gewitter rendern???
-
Eigentlich ist doch alles über FlatShading ein Per Pixel Lighting, denn das sagt doch nur aus, das jedem Pixel ein anderer Licht/Farbwert zugewiesen wird. Ob das nun eine simple Interpolationsformel ist, ist doch erstmal zweitens.
-
Hi,
wenn schon Orthographie kritisieren und nichts zum Thema beitragen dann richtig! Lightning heisst nicht Gewitter, sodern Blitz. War aber immerhin schon nah dran. Thunderstorm ist ein Gewitter.
Per-Pixel Lighting:
Was Du beschrieben hast geht schon in Richtung Bump Mapping (=>google). Man kann aber auch PerPixel Lighting über z.B. Attenuation Maps machen ohne eine Normale für jeden Pixel zu haben (=>google) http://personal.telefonica.terra.es/web/codegarrofi/perPixelLighting/perPixelLighting.htmCiao,
Stefan
-
Nobbi02 schrieb:
Hi,
Normalerweise berechnet man den Noramlenvector eines Dreiecks und schiebt die Daten dann durch meine Shader und berechnet anhand des Winkels die Lichtidensität.das wäre die einfachste art von ppl, den normalvector bekommst am einfachsten indem du die vertexnormals in die texturinterpolatoren vom pixelshader steckst, das mußt du mit der vertexposition auch machen.
objectsspace bumpmapping wäre eine alternative, das ist ohne grossen aufwand zu implementieren und du mußt die vertexdaten nicht extra bearbeiten, damit wäre ein vertexshader nicht nötig, das bumpmapping selbst würd auch mit normalen texturestage/"register combiner" setups gehen.
rapso->greets();
-
Hi,
Estmal Danke für die vielen Antworten.
@dämlak:
Ich denke, dass du durch meine Beschreibung wissen müsstest was ich meine.@dämlak:
Theoretisch schon, aber ob praktisch das gleiche Ergebnis herrauskommt, ka@Stefan Zerbst:
Was Du beschrieben hast geht schon in Richtung Bump Mapping
Hm, hat perPixel Beleuchtung wirklich was BM zu tun ? BM wäre doch eher für einer Oberflächenstruktur, oder irre ich mich da ?
Man kann aber auch PerPixel Lighting über z.B. Attenuation Maps machen ohne eine Normale für jeden Pixel zu haben
Wäre das Ergebnis nicht fast das gleiche wie Flatshading ?
Aber ich Les mir das einfach mal durch. Danke !
So nu mal eine kurze Frage dazwischen:
Was verwendet ihr für Licht/Schatten berechnung ?Bye
-
wenn ich mal drauf antworten darf. PPL hat was mit bumpmapping zu tun, denn nur durch PPL sieht man die struktur der bumpmaps. aber wie ich schon schrieb, du braucht keine bumpmap, die normalen zwischen den vertices zu interpolieren und pro pixel als berechnungsgrundlage zu nehmen reicht auch schon.
ach jo: ich verwende Pixelshader für lichtberechnung (da kann man sich ja jede art von pixelberechnung ausdenken, das machen dann die 3d modeller), für schatten schadowmaps als normal projezierte map oder dual parabolid map.
rapso->greets();
-
Hi,
so gesehen ist alles das gleiche wie Flat-Shading. Das besagt ja nichts anderes, als dass alle Pixel mit derselben Normalen denselben Helligkeitswert erhalten. Mit Flat Shading meint man aber, dass alle Pixel eines ebenen Polygons dieselbe Normalen, nämlich die der Ebene, verwenden.
Beim Gouraud Shading interpoliert man zwischen verschiedenen Normalenvektoren um eine PerPixel Normalen zu erhalten. In diesem Kontext verwendet man dazu die Normalen der Vertices.
Beim Bump Mapping machst Du dasselbe, nur dass man dort die Nomalenvektoren über eine Normalmap beliebig festlegen kann, und sie nicht bei einem Triangle aus den gleichförmigen Interpolationen aus drei vorgegebenen Normalen berechnet werden. Bump Mapping ist damit PerPixel.
Über Shader kannst Du aber jeden Pixel so beleuchten wie Du lustig bist.
Ciao,
Stefan
-
Stefan Zerbst schrieb:
wenn schon Orthographie kritisieren und nichts zum Thema beitragen dann richtig! Lightning heisst nicht Gewitter, sodern Blitz. War aber immerhin schon nah dran. Thunderstorm ist ein Gewitter.
Och Mensch, Stefan!!
*ICH* wollte doch dem Korinthenkacker mal zeigen, was ein wahrer Korinthenkacker ist...!!
Du bist gemein... *schneuz*
-
The early worm is catched by the bird!
-
Stefan Zerbst schrieb:
Hi,
so gesehen ist alles das gleiche wie Flat-Shading. Das besagt ja nichts anderes, als dass alle Pixel mit derselben Normalen denselben Helligkeitswert erhalten. Mit Flat Shading meint man aber, dass alle Pixel eines ebenen Polygons dieselbe Normalen, nämlich die der Ebene, verwenden.
Beim Gouraud Shading interpoliert man zwischen verschiedenen Normalenvektoren um eine PerPixel Normalen zu erhalten. In diesem Kontext verwendet man dazu die Normalen der Vertices.
Du erzählst hier Unsinn.
Bei Flatshading hat nicht jeder Punkt dieselbe Normale, sondern jeder Punkt dieselbe Farbe. Dieselbe Normale bedeutet nämlich bei point lights nicht dieselbe Farbe, da von jedem Punkt aus der Winkel zwischen Normale und point light verschieden sein kann. Dies gilt nur bei directional lights. Da hier eine Farbe benötigt wird, ist das "per face lighting".
Ebenso wird bei gouraud shading nicht die Normale, sondern die Farbe der Eckpunkte interpoliert. Dies ist der Grund, warum gouraud shading highlights von (nahen) Lichtquellen verpasst. Da hier die Farbe nur an jedem Vertex benötigt wird, ist dies "per vertex lighting".
Diese Shadings funktionieren deshalb auch ohne Normalen, da sie für die Farbe nicht gebraucht werden, wenn man sie z.b. schon vorgibt/vorberechnet.
Was du als zweites beschrieben hast, ist das phong shading, dieses ist eigentlich das simpelste "per pixel lighting".
Hier kann man sich die Unterschiede etwas anschauen, man sieht deutlich wie phong bessere "highlights" auf den Objekten erzeugen kann:
http://escience.anu.edu.au/lecture/cg/Illumination/index.en.htmlBye, TGGC