Bump-/ Parallax-/ Occlusion Mapping
-
rapso schrieb:
this->that schrieb:
Wie du an die modifizierte Normale kommst hängt vorm Verfahren ab (Heightmap beim Parallaxmapping, Normalmap beim Normalmapping usw.)
heightmap der parallaxmap? ich glaube auch in diesem fall nimmt man immer nur die normalmap.
Beim Standard Parallaxmapping verschiebt man einfach die Texturkoordinate entlang des Viewvektors, basierend auf einem Höhenwert (der aus der Heightmap gelesen wird). Natürlich kann man das auch theoretisch mit ner Normalmap machen.
-
this->that schrieb:
rapso schrieb:
this->that schrieb:
Wie du an die modifizierte Normale kommst hängt vorm Verfahren ab (Heightmap beim Parallaxmapping, Normalmap beim Normalmapping usw.)
heightmap der parallaxmap? ich glaube auch in diesem fall nimmt man immer nur die normalmap.
Beim Standard Parallaxmapping verschiebt man einfach die Texturkoordinate entlang des Viewvektors, basierend auf einem Höhenwert (der aus der Heightmap gelesen wird).
um dann aus der normalmap zu lesen
Natürlich kann man das auch theoretisch mit ner Normalmap machen.
nein, kann man leider nicht, eine normalmap gibt dir leider keine information mehr ueber die hoehe und entsprechend kannst du damit keinen parallaxeffekt errechnen.
-
rapso schrieb:
um dann aus der normalmap zu lesen
Das hat nichts mit dem Parallaxmapping an sich zu tun. Beim Parallexmapping gehts im Grunde nur um die Modifizierung der Texturkoordinaten (eben basierend auf ner Heightmap). Man wird danach meistens zusätzlich nochmal eine Normalmap samplen, um eine realistischere (falls man das bei diesen Verfahren überhaupt sagen kann
) Beleuchtung zu bekommen. Zwingend notwendig is das jedoch nicht.
nein, kann man leider nicht, eine normalmap gibt dir leider keine information mehr ueber die hoehe und entsprechend kannst du damit keinen parallaxeffekt errechnen.
Ich kann doch einfach die Länge der Normalen zur Verschiebung benutzen.
-
this->that schrieb:
rapso schrieb:
um dann aus der normalmap zu lesen
Das hat nichts mit dem Parallaxmapping an sich zu tun. Beim Parallexmapping gehts im Grunde nur um die Modifizierung der Texturkoordinaten (eben basierend auf ner Heightmap). Man wird danach meistens zusätzlich nochmal eine Normalmap samplen, um eine realistischere (falls man das bei diesen Verfahren überhaupt sagen kann
) Beleuchtung zu bekommen. Zwingend notwendig is das jedoch nicht.
damit widersprichst du dir:
Wie du an die modifizierte Normale kommst hängt vorm Verfahren ab (Heightmap beim Parallaxmapping
also stimmst du nun zu dass man ueber die heightmap keine normale bekommt?
nein, kann man leider nicht, eine normalmap gibt dir leider keine information mehr ueber die hoehe und entsprechend kannst du damit keinen parallaxeffekt errechnen.
Ich kann doch einfach die Länge der Normalen zur Verschiebung benutzen.
die laenge der normalen ist 1. es wird auch vermutlich niemand die qualitaet der normale verschlechtern indem er deren laenge kuerzt, du wuerdest ansonsten in tiefen bereichen extrem schlechte beleuchtung haben.
-
rapso schrieb:
also stimmst du nun zu dass man ueber die heightmap keine normale bekommt?
Ok dann haben wir wohl aneinander vorbeigeredet. Ich dachte du wolltest sagen, dass man den Texture Offset per Normalmap berechnet.
die laenge der normalen ist 1. es wird auch vermutlich niemand die qualitaet der normale verschlechtern indem er deren laenge kuerzt, du wuerdest ansonsten in tiefen bereichen extrem schlechte beleuchtung haben.
Die Länge kann jeden beliebigen Wert annehmen und für die Beleuchtung kann ich sie ja renormalisieren. Wird nur niemand machen und der Ablauf läuft immer hinaus auf ein: heightmap samplen mit (u,v) => (u',v') berechnen => Normale N berechnen durch Samplen der Normalmap bei (u', v') => Diffuse Texture Color C per (u',v') samplen => Finale Farbe aus C, N+Beleuchtungsmodell berechnen.
-
this->that schrieb:
rapso schrieb:
also stimmst du nun zu dass man ueber die heightmap keine normale bekommt?
Ok dann haben wir wohl aneinander vorbeigeredet. Ich dachte du wolltest sagen, dass man den Texture Offset per Normalmap berechnet.
die laenge der normalen ist 1. es wird auch vermutlich niemand die qualitaet der normale verschlechtern indem er deren laenge kuerzt, du wuerdest ansonsten in tiefen bereichen extrem schlechte beleuchtung haben.
Die Länge kann jeden beliebigen Wert annehmen und für die Beleuchtung kann ich sie ja renormalisieren.
das wird die quantitisierung nicht aufheben, es wird sehr schlecht aussehen wo die normale kurz ist.
Wird nur niemand machen und der Ablauf läuft immer hinaus auf ein: heightmap samplen mit (u,v) => (u',v') berechnen => Normale N berechnen durch Samplen der Normalmap bei (u', v') => Diffuse Texture Color C per (u',v') samplen => Finale Farbe aus C, N+Beleuchtungsmodell berechnen.
jap, normale aus normalmap, egal ob parallax oder nicht.
-
Ich habe die letze Zeit noch etwas anderes gemacht, aber jetzt will ich mich noch mal stärker mit BumpMapping auseinander setzen.
Ich habe in zwischen in Erfahrung gebracht, dass es im groben Überblick 3 Arten von BumpMapping gibt (ohne ParallaxMapping mit zu zählen natürlich):
- Emboss Bump Mapping (hässlich, langsam, kompliziert)
- DOT3 Bump Mapping (schön, schnell, teilweise kompliziert)
- Environmental Bump Mapping (sehr schön - wird in den meisten Shootern verwendet, relativ schnell, kompliziert)Mit den Angaben in den Klammern dürft ihr mir gerne widersprechen, wenn ihr es besser wisst
Ich interessiere mich für DOT3 Bump Mapping weil ich gelesen habe, dass das sehr schön ist und vor allem schnell, da es komplett von der Grafikkarte berechnet wird.
So weit ich bisher weiß, muss man das über die Texture Umgebung und einige Combiner einstellen. In OpenGL mit "glTexEnv" aber ich habe keine Ahnung was man mit dem glTexEnv Parametern alles einstellt.
Ich habe zwar schon einbischen damit herumgespielt aber so wirklich verstehen tue ich das noch nicht.Wäre vielleicht jemand von euch so freundlich und erklärt mir mal die Grundsätze dieser unzähligen Paremtern oder gibt mir einen Link, zu einem guten Tutorial was das angeht??
Danke schon mal
-
LukasBanana schrieb:
So weit ich bisher weiß, muss man das über die Texture Umgebung und einige Combiner einstellen.
Zwischenzeitlich hat man aber GLSL erfunden.
-
Du würdest doch nicht ernsthaft die gesammte Welt mit Shader zuhaufen um alles mit BumpMapping darzustellen?? Ich glaube nicht, dass in dem Shooter HL2 alles mit Shadern gelöst ist, oder?!
-
Du würdest doch nicht ernsthaft die gesammte Welt mit Shader zuhaufen um alles mit BumpMapping darzustellen??
Welchen Zusammenhang hat denn diese Frage mit meinem Verweis auf Shader?
"Shader" sind nichts weiter als eine Verallgemeinerung der Register-Combiner.
Generell kann man davon ausgehen, dass der Treiber einer aktuellen Grafikkarte einen gegebenen Shader-Source erheblich besser optimieren kann als ein vergleichbares Combiner-Konstrukt weil es kaum noch Zusammenhang zwischen Hardware und Texture-Stages gibt.
Im Falle von HL2 gibt es jeweils ein "fallback" Material dass zum Einsatz kommt wenn die Hardware keine Shader unterstuetzt. Darueber hinaus macht man wohl umfangreichen Gebrauch von Shadern.
-
LukasBanana schrieb:
Du würdest doch nicht ernsthaft die gesammte Welt mit Shader zuhaufen um alles mit BumpMapping darzustellen??
wieso sollte man das anders machen?
Ich glaube nicht, dass in dem Shooter HL2 alles mit Shadern gelöst ist, oder?!
doch, ist es wie du hier lesen kannst. warum sollte es anders sein?
-
Nun wenn das so ist, muss man aber auch das Multitexturing, Beleuchtung usw. im Shader alles selbst programmieren, oder?!
Macht es dann eigentlich einen Performance Unterschied, ob man HighLevel Shading Languages benutzt (HLSL, GLSL) oder einfache Vertex Programme (bin nicht sicher ob die so heißen, Assembler Shader so zu sagen)??
-
LukasBanana schrieb:
Nun wenn das so ist, muss man aber auch das Multitexturing, Beleuchtung usw. im Shader alles selbst programmieren, oder?!
ja, das muss man ueblicherweise, aber soviele unterschiedliche sind es meistens nicht.
Macht es dann eigentlich einen Performance Unterschied, ob man HighLevel Shading Languages benutzt (HLSL, GLSL) oder einfache Vertex Programme (bin nicht sicher ob die so heißen, Assembler Shader so zu sagen)??
wenn man sich super auskennt, kann man in assembler die besten resultate erziellen, aber das kostet sehr viel zeit und kaum einer hat in der oeffentlichkeit zugang zu den ganzen details der hardware um das zu koennen, somit sollte man sich auf den compiler und treiber verlassen.
da du wohl d3d und ogl benutzt, empfehle ich dir nvidia's CG als shadersystem. das ist HLSL compatibel (weitesgehend) und laeuft auf beiden APIs.
-
Cg ist aber von nVidia, läuft das auch auf ATI Karten?
-
läuft das auch auf ATI Karten?
Cg kann sowohl GLSL als auch HLSL erzeugen.
Wenn man aber ohnehin nur eine API nutzt ist es Umweg.wenn man sich super auskennt, kann man in assembler die besten resultate erzielen
Was dann darauf hinaus laeuft, dass man fuer jede GPU-Architektur einen anders optimierten Assembler-Shader hat. Der Vorteil gegenueber "Hochsprachen"-Shadern ist gering.