7/5/07. Beispiel: Hello_GLSL. Setzen von "uniform"-variablen. Inspektion der Parameter eines GLSL-Programms. Attribut-Variablen: Uniform-Variablen:

Ähnliche Dokumente
Computer-Graphik I Verallgemeinerte Baryzentrische Koordinaten

Computer-Graphik I Transformationen & Viewing

Einführung in GLSL - OpenGL Shading Language. Athanasios Karamalis

(7) Normal Mapping. Vorlesung Computergraphik II S. Müller. Dank an Stefan Rilling U N I V E R S I T Ä T KOBLENZ LANDAU

Prozedurale Texturen >>Was nicht passt wird passend gemacht...<<

Texture Based Direct Volume Rendering

Workshop: Einführung in die 3D-Computergrafik. Julia Tolksdorf Thies Pfeiffer Christian Fröhlich Nikita Mattar

Softwareprojekt Spieleentwicklung

Tag der Mathematik 2013

GL ShadingLanguage(GLSL)

Computer-Graphik I Baryzentrische Koordinaten

C A R L V O N O S S I E T Z K Y. Licht & Material. Johannes Diemke. Übung im Modul OpenGL mit Java Wintersemester 2010/2011

Diana Lange. GENERATIVE GESTALTUNG Arten des Zufalls

3. Übungsblatt zur Lineare Algebra I für Physiker

Animation ist das Erzeugen von Filmen mit Hilfe der Computergrafik. Objekte bewegen sich hierbei oder Beleuchtung, Augpunkt, Form,... ändern sich.

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

4.1. Vektorräume und lineare Abbildungen

Kapitel 2: Mathematische Grundlagen

$Id: linabb.tex,v /01/09 13:27:34 hk Exp hk $

Länge eines Vektors und Abstand von zwei Punkten 2. 4 = 6. Skalarprodukt und Winkel zwischen Vektoren

4 Affine Koordinatensysteme

Computer-Graphik 1 Lighting & Shading

Lokale Beleuchtungsmodelle

Kapitel 4: Schattenberechnung

Computer Graphik I Polygon Scan Conversion

Erweiterung: Flächeninhalt mit Vorzeichen. a b, P, Q, R gegen Uhrzeigersinn a b, P, Q, R im Uhrzeigersinn

EVC Repetitorium Blender

Lineare Algebra II 8. Übungsblatt

Programmieren mit DirectX

Christina Nell. 3D-Computergrafik

HSV. Problem: RGB & CMY sind sehr unintuitiv Menschliche Farbspezifikation arbeitet eher mit

Rechnen mit Vektoren. 1. Vektoren im Koordinatensystem Freie Vektoren in der Ebene

Asteroids3D Seminar: Game Programming. Anita Dieckhoff, Pedro Flemming, Jan Ole Vollmer Betreuung: Christine Lehmann

Projektarbeit: GPU Programmierung

f f(x ɛξ) f(x) 0, d.h. f (x)ξ = 0 für alle ξ B 1 (0). Also f (x) = 0. In Koordinaten bedeutet dies gerade, dass in Extremstellen gilt: f(x) = 0.

Numerisches Programmieren

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker

Prüfungsprotokoll Computergrafik 1 und 2 (1692 & 1693) Prüfer: M. Felten von: Lindig Florian. Dauer: 30 min jeweils. Note: 1.

1 Transformationen. 1.1 Transformationsmatrizen. Seite 1

computer graphics & visualization

WiMa-Praktikum 1. Woche 8

Thema: Hardware-Shader

, Uhr Dr. Thorsten Weist. Name Vorname Matrikelnummer. Geburtsort Geburtsdatum Studiengang

P (X = 2) = 1/36, P (X = 3) = 2/36,...

TECHNISCHE UNIVERSITÄT MÜNCHEN

Wertebereich und Genauigkeit der Zahlendarstellung

1 Eigenschaften von Abbildungen

7.1 Matrizen und Vektore

Computergraphik I. Scan Conversion: Lines & Co. Einordnung in die Pipeline. G. Zachmann Clausthal University, Germany zach@tu-clausthal.

Viele wichtige Operationen können als lineare Abbildungen interpretiert werden. Beispielsweise beschreibt die lineare Abbildung

1 Transponieren, Diagonal- und Dreiecksmatrizen

Volumen Visualisierung

Teil 7: Beleuchtung. Einleitung. Einleitung. Beleuchtungsmodelle, Schattierungsmodelle

NPR NON-PHOTOREALISTIC-RENDERING

RTT DeltaGen Suite. Materialeinstellungen für OpenGL, RTT RealTrace & Global illumination. Copyright 2010 by Realtime Technology AG

2. Dezember Lineare Algebra II. Christian Ebert & Fritz Hamm. Skalarprodukt, Norm, Metrik. Matrizen. Lineare Abbildungen

4. Kapitel 3D Engine Geometry

Koordinaten und darstellende Matrizen

Computer-Graphik 2 Visibility Computations II Culling

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr

Implementierung und Evaluierung von Video Feature Tracking auf moderner Grafik Hardware

D-Texturen. Reflectance Mapping 3D-Texturen. Farbtexturen

Rendering Grundlagen Autodesk Maya. Grundlagen. Version Ingo Clemens brave rabbit

Mathematischer Vorkurs Lösungen zum Übungsblatt 5

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

Ausgewählte Lösungen zu den Übungsblättern 4-5

Musterlösung 7 Lineare Algebra für die Naturwissenschaften

Lineare Gleichungssysteme

Mathematische Probleme lösen mit Maple

Bildverarbeitung: Filterung. D. Schlesinger () Bildverarbeitung: Filterung 1 / 17

Affine Geometrie (Einfachere, konstruktive Version)

Shadingalgorithmen zur Visualisierung nanostrukturierter Oberflächen

5 Eigenwerte und die Jordansche Normalform

(12) Wiederholung. Vorlesung Computergrafik T. Grosch

7. Wie lautet die Inverse der Verkettung zweier linearer Abbildungen? 9. Wie kann die Matrixdarstellung einer linearen Abbildung aufgestellt werden?

Vorlesung 27. Der projektive Raum. Wir werden den projektiven Raum zunehmend mit mehr Strukturen versehen.

Vektorräume. 1. v + w = w + v (Kommutativität der Vektoraddition)

Erweiterte Koordinaten

Überbestimmte Gleichungssysteme

Brückenkurs Elementarmathematik

Klausurenkurs zum Staatsexamen (SS 2015): Lineare Algebra und analytische Geometrie 5

WS 2010/ Januar Mathematisches Institut der Universität München Prof. Dr. Rudolf Fritsch

3 Lineare Abbildungen und Matrizen

Rendering: Lighting & Shading

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Eine Einführung Computergrafik SS14 Timo Bourdon

10.2 Linearkombinationen

Objekterkennung durch Vergleich von Farben. Videoanalyse Dr. Stephan Kopf HWS2007 Kapitel 5: Objekterkennung

Vektorielle Addition von Kräften

SS08, LS12, Friedrich-Alexander-Universität Erlangen Florian Hänel, Frederic Pollmann HS Multicore Architectures and Programming GPU EVOLUTION

8 Polynominterpolation

Bildrekonstruktion & Multiresolution

Lineare Algebra Weihnachtszettel

Statistik II. Lineare Regressionsrechnung. Wiederholung Skript 2.8 und Ergänzungen (Schira: Kapitel 4) Statistik II

Computergrafik 2010 Oliver Vornberger. Kapitel 18: Beleuchtung

Systeme von Differentialgleichungen. Beispiel 1: Chemische Reaktionssysteme. Beispiel 2. System aus n Differentialgleichungen 1. Ordnung: y 1.

Kapitel 3: Variablen

Informatik II Grundbegriffe der Wahrscheinlichkeitsrechnung

Mathematik II für Studierende der Informatik. Wirtschaftsinformatik (Analysis und lineare Algebra) im Sommersemester 2016

11 Untermannigfaltigkeiten des R n und lokale Extrema mit Nebenbedingungen

Transkript:

Beispiel: Hello_LSL Inspektion der Parameter eines LSL-Programms Attribut-Variablen: glprogramiv() : liefert die Anzahl aktiver attribute -Parameter gletactiveattrib() : liefert Info über ein bestimmtes Attribut gletattriblocation() : liefert einen Handle ein Attribut Uniform-Variablen: glprogramiv() : liefert die Anzahl aktiver "uniform"-parameter gletactiveuniform() : liefert Info zu einem Parameter Benötigt man vor allem zur Implementierung von sog. Shader- Editoren lighthouse_tutorial/hello_glsl*. Zachmann omputer-raphik 2 - SS 07 Shader 49. Zachmann omputer-raphik 2 - SS 07 Shader 50 Setzen von "uniform"-variablen Beispiel für uniform-variable Erst gluseprogram() Dann Handle auf Variable besorgen: uint var_handle = gletuniformlocation( progr_handle, "uniform_name" ) Setzen einer uniform-variable: Für Float: gluniform1f( var_handle, f ) Für Matrizen gluniform4fv( var_handle, count, transpose, float * v) analog gibt es gluniform{2,3}fv. Zachmann omputer-raphik 2 - SS 07 Shader 51. Zachmann omputer-raphik 2 - SS 07 Shader 52 1

Die spezielle Funktion ftransform Beispiel für die Modifikation der eometrie Tut genau das, was die fixed-function pipeline in der Vertex- Transformations-Stufe auch tut: einen Vertex von Model- Koordinaten in View-Koordinaten abbilden Wie man mit den Koordinaten (und sonstigen Attributen) eines Vertex im Vertex-Shader verfährt, ist völlig frei: Idiom: gl_position = ftransform(); Identisch: gl_position = gl_modelviewprojectionmatrix * gl_vertex;. Zachmann omputer-raphik 2 - SS 07 Shader 53. Zachmann omputer-raphik 2 - SS 07 Shader 54 Zustandsvariablen Zeigen den aktuellen Zustand von OpenL an Sind als "uniform" Variablen implementiert Das aktuelle Material: Die aktuellen Matrizen: uniform mat4 gl_modelviewmatrix; uniform mat4 gl_projectionmatrix; uniform mat4 gl_modelviewprojectionmatrix; uniform mat3 gl_normalmatrix; uniform mat4 gl_texturematrix[n]; uniform mat4 gl_*matrixinverse; struct gl_materialparameters { vec4 emission; vec4 ambient; vec4 diffuse; vec4 specular; float shininess; }; uniform gl_materialparameters gl_frontmaterial;. Zachmann omputer-raphik 2 - SS 07 Shader 55. Zachmann omputer-raphik 2 - SS 07 Shader 56 2

Beispiel für Verwendung von varying- und Zustands-Variablen Aktuelle Lichtquellen(-Parameter): struct gl_lightsourceparameters { vec4 ambient; vec4 diffuse; vec4 specular; vec4 position; vec4 halfvector; vec3 spotdirection; float spotexponent; float spotutoff; float spotosutoff; float constantattenuation; float linearattenuation; float quadraticattenuation; }; uniform gl_lightsourceparameters gl_lightsource[gl_maxlights]; Und viele weitere (z.b. zu Texturen, lipping Planes, ) Der "Toon-Shader": Berechnet einen stark diskretisierten diffusen Farbanteil (typ. 3 Stufen) Der "ooch-shader": Interpoliert zwischen 2 Farben, abhängig vom Winkel zwischen Normale und Lichtvektor Sind schon einfache Beispiele für "non-photorealistic rendering" (NPR). Zachmann omputer-raphik 2 - SS 07 Shader 57. Zachmann omputer-raphik 2 - SS 07 Shader 58 Attribute Beispiel: Per-Pixel Lighting Vordefiniert: 1. Diffuse lighting per-vertex attribute vec4 gl_vertex; attribute vec3 gl_normal; attribute vec4 gl_olor; attribute vec4 gl_multitexoord[n]; attribute vec4 gl_secondaryolor; attribute float gl_fogoord; 2. Mit ambientem Licht 3. Mit spekularem Lichtanteil 4. Per-Pixel Lighting Man kann selbst Attribute definieren: Im Vertex-Shader: attribute vec3 myattrib; Im -Programm: handle = gletattriblocation( prog_handle, "myattrib"); glvertexattrib3f( handle, v1, v2, v3 ); LSL_editor/lighting[1-4].*. Zachmann omputer-raphik 2 - SS 07 Shader 59. Zachmann omputer-raphik 2 - SS 07 Shader 60 3

Achtung bei Subtraktion homogener Punkte Zugriff auf Texturen im Shader Homogener Punkt = vec4(v.xyz, v.w) Deklariere Textur im Shader (Vertex oder Fragment): 3D-Äquivalent = v.xyz/v.w Subtraktion zweier Punkte/Vektoren: Homogen: Als 3D-Äquivalent: uniform sampler2d mytex; Lade und binde Textur im -Programm wie gehabt: glbindtexture( L_TEXTURE_2D, mytexture ); glteximage2d(...); Verbinde beide: Normalisierung: normalize(v.xyz/v.w) = normalize(v.xyz) uint mytex = gletuniformlocation( prog, "mytex" ); gluniform1i( mytex, 0 ); // 0 = texture unit, not ID Zusammen : Zugriff im Fragment-Shader: normalize(v-e) = normalize(v.xyz*e.w - e.xyz*v.w) vec4 c = texture2d( mytex, gl_texoord[0].xy );. Zachmann omputer-raphik 2 - SS 07 Shader 61. Zachmann omputer-raphik 2 - SS 07 Shader 62 Beispiel: eine einfache "loss-textur" Eine einfache prozedurale Textur Ziel: Ziegelstein-Textur Vereinfachung & Parameter: BrickPercent.x BrickStepSize.y BrickPercent.y Mortarolor Brickolor LSL_editor/gloss.{frag,vert} BrickStepSize.x. Zachmann omputer-raphik 2 - SS 07 Shader 63. Zachmann omputer-raphik 2 - SS 07 Shader 64 4

Rauschen enerelle Funktionweise: Vertex-Shader: normale Beleuchtungsrechung Fragment-Shader: - bestimme pro Fragment anhand der xy-koordinaten des zugehörigen Punktes im Objektraum, ob der Punkt im Ziegel oder im Mörtel liegt - danach, entsprechende Farbe mit Beleuchtung multiplizieren Beispiele: Die meisten prozeduralen Texturen sehen zu "clean" aus Idee: addiere Rauschen (Schmutz), für realistischeres Aussehen ewünschte Eigenschaften einer Rausch-Funktion: Stetig Es reicht, wenn sie (nur) zufällig aussieht - Keine offensichtlichen Muster / Wiederholungen Wiederholbar (gleiche Ausgabe bei gleichem Input) Wertebereich [-1,1] Kann für 1 4 Dimensionen definiert werden Isotrop (invariant unter Rotation). Zachmann omputer-raphik 2 - SS 07 Shader 65. Zachmann omputer-raphik 2 - SS 07 Shader 66 Einfache Idee, am 1-dimensionalen Beispiel: 1. Wähle zufällige y-werte aus [-1,1] an den Integer-Stellen: 3. eneriere mehrere Rausch-funktionen mit verschiedenen Frequenzen 2. Interpoliere dazwischen, z.b. kubisch (linear reicht nicht): Diese Art Rauschfunktion heißt "value noise" 4. Addiere alle diese zusammen Ergibt Rauschen auf verschiedenen "Skalen". Zachmann omputer-raphik 2 - SS 07 Shader 67. Zachmann omputer-raphik 2 - SS 07 Shader 68 5

Dasselbe in 2D: radient noise: Spezifiert die radienten an den Integer-Stellen (statt den Werten): Ergebnis Interpolation: Läßt sich leicht verallgemeinern in höhere Dimensionen Heißt auch Perlin noise, pink noise, oder fractal noise Ken Perlin; hat sich zuerst damit beschäftigt bei der Arbeit an TRON - Berechne y 0 und y 1 als Wert der eraden durch 0 und 1 mit den vorgegebenen (zufälligen) radienten - Interpoliere y 0 und y 1 mit einer Blending- Funktion, z.b. oder 0 x y 0 y 1 1. Zachmann omputer-raphik 2 - SS 07 Shader 69. Zachmann omputer-raphik 2 - SS 07 Shader 70 Vorteil der quintischen Blending-Funktion: 2-te Ableitung bei t=0 und t=1 ist 0 die gesamte Noise-Funktion ist 2 -stetig Beispiel, wo man das sieht: Ken Perlin radient noise im 2D: ebe an Integer-itterpunkten radienten vor (2D Vektoren, nicht notw.weise mit Länge 1) Interpolation (wie im 1D): - O.B.d.A. P = (x,y) in [0,1]x[0,1] - Seien die radienten g 00 = radient an (0,0), g 01 = radient an (0,1), g 10 = radient an (1,0), g 11 = radient an (1,1) - Berechne den Wert der "radienten-rampen" am Punkt P: y kubische Interpolation quintische Interpolation x. Zachmann omputer-raphik 2 - SS 07 Shader 71. Zachmann omputer-raphik 2 - SS 07 Shader 72 6

- Blending der 4 "z"-werte durch bilineare Interpolation: Analog im 3D: Spezifiziere radienten auf einem 3D-itter Werte 2 3 =8 "radienten-rampen" aus Interpoliere diese mit trilinearer Interpolation und der Blending-Fkt Und im d-dim. Raum? Aufwand ist O(2 d )! Ziel: wiederholbare Rauschfunktion D.h., f(x) liefert bei gleichem x immer denselben Wert Wähle feste radienten an den itterpunkten Beobachtung: es genügen einige wenige verschiedene Z.B. für 3D genügen radienten aus dieser Menge: Integer-Koordinaten der itterpunkte werden einfach gehasht Index in eine Tabelle vordefinierter radienten. Zachmann omputer-raphik 2 - SS 07 Shader 73. Zachmann omputer-raphik 2 - SS 07 Shader 74 d-dimensionaler Simplex := Verbindung von d + 1 affin unabhängigen Punkten Beispiele: 1D: Linie, 2D: Dreieck, 3D: Tetraeder Allgemein: Mit gleichseitigen(!) d-dimensionalen Simplices kann man den d-dim. Raum partitionieren (tesselieren): Punkte P 0,, P d Simplex = alle Punkte X mit P 3 mit P 0 P 1 P 2. Zachmann omputer-raphik 2 - SS 07 Shader 75. Zachmann omputer-raphik 2 - SS 07 Shader 76 7

enerell gilt: Ein d-dimensionaler Simplex hat d+1 Ecken Mit gleichseitigen d-dimensionaler Simplices kann man einen Würfel partitionieren, der entlang seiner Diagonalen geeignet "gestaucht" wurde Solch ein d-dim. gestauchter Würfel enthält d! viele Simplices Konstruktion der Noise-Funktion über einer Simplex- Partitionierung (daher "simplex noise"): Bestimme den Simplex, in dem ein Punkt P liegt Bestimme alle dessen Ecken und die radienten in den Ecken Bestimme (wie vorher) den Wert dieser "radienten-rampen" in P Bilde eine gewichtete Summe dieser Werte Wähle dabei ewichtungsfunktionen so, daß der "Einfluß" eines Simplex-itter-Punktes sich gerade nur die inzidenten Simplizes erstreckt. Zachmann omputer-raphik 2 - SS 07 Shader 77. Zachmann omputer-raphik 2 - SS 07 Shader 78 Ein großer Vorteil: nur noch Aufwand O(d) Zu den Details siehe "Simplex noise demystified" (auf der Homepage der Vorlesung) Vergleich zwischen klassischem Perlin-Noise und Simplex-Noise: klassisch simplex 2D 3D 4D Im LSL-Standard werden 4 noise-funktionen definiert: float noise1(gentype), vec2 noise2(gentype), vec3 noise3(gentype), vec4 noise4(gentype). Aufruf einer Noise-Funktion: v = noise2( f*x + t, f*y + t ) Mit f kann man die räumliche Frequenz steuern, mit t kann man eine Animation erzeugen (t="zeit). Analog für 1D- und 3D-Noise Achtung: Wertebereich ist [-1,+1]! Nachteile: Sind nicht überall implementiert Sind laaangsam. Zachmann omputer-raphik 2 - SS 07 Shader 79. Zachmann omputer-raphik 2 - SS 07 Shader 80 8

Beispiel Unsere prozedurale Ziegelstein-Textur: Beispiel-ode auf der Homepage der Vorlesung: LSL_editor/ brick.vert und brick[4-8].frag. Zachmann omputer-raphik 2 - SS 07 Shader 81 9