06:18:42 Schrompf joined the channel
06:29:54 Essex20 joined the channel
06:30:12 Essex20: eyoo
06:48:29 Schrompf: hiii
09:32:43 Hannes joined the channel
09:40:37 Hannes: bin wieder da
09:41:14 Schrompf: wb
09:41:19 Schrompf: war cool gestern
09:41:22 Hannes: haben noch bis 6uhr gequatscht und jetzt trau ich mich nicht ins bett
09:41:24 Schrompf: muss leider immer so früh weg
09:41:27 Schrompf: echt?
09:41:34 Schrompf: um 6?
09:41:39 Schrompf: zudo, oder?
09:41:41 Hannes: ja
09:41:47 Hannes: und half noch
09:42:07 Hannes: mein tag/nacht rhythmus ist im arsch
09:42:24 Schrompf: mein beileid
09:42:36 Schrompf: aber du bist einer der wenigen menschen, die das in ihrem leben einfach so abfedern können
09:42:40 Schrompf: also nutze die chance!
09:42:48 Schrompf: ahja, hast du ja schon gestern nacht :-)
09:43:55 Hannes: alle die früh raus müssen sind wohl deshalb gegangen
09:46:57 Schrompf: ich zumindest, ja
09:51:54 Hannes: was speichert man in einer normalmap texture? einfach eine normale?
09:52:13 Hannes: also ein Vektor?
09:52:31 Hannes: pro pixel
10:37:34 Schrompf: genau
10:37:56 Schrompf: du hast die wahl: tangent space oder object space
10:38:32 Schrompf: object space ist einfacher: da speicherst du einfach den vektor an der stelle, so wie du ihn von außen siehst, wenn du auf das objekt drauf guckst
10:39:00 Schrompf: du musst dann noch ne matrix in den pixelshader reinreichen, um abzubilden, wenn das objekt gedreht wird
10:39:03 Hannes: tangent space ist texture space?
10:39:07 Schrompf: aber dnn bist du fertig
10:39:32 Schrompf: genau, tangent space ist quasi auf der oberfläche des objekts und entlang der textur-richtung
10:40:21 Schrompf: dann reicht bei deiner normale x und y, weil Z ja aus der oberfläche raus geht und sich eigentlich berechnen lässt
10:40:40 Schrompf: und das x der normale geht dann in richtung der x-texturkoordinate
10:40:48 Schrompf: und das y der normale in y-richtung der texturkoordinate
10:41:29 Schrompf: hat den vorteil, dass du die textur dann auch frei verwenden kannst, z.b. auf terrain oder so, wo man ja die textur in allen möglichen ausrichtungen braucht
10:51:17 Hannes: für nen face hab ich die face normale und noch die tangente, daraus kann ich mit nem kreuzprodukt eine dritte achse berechnen und daraus eine matrize erstellen. wie mache ich aus der matrix im objekt-space und der texelnormalen im tangent-space die normale im objekt-space? ist das nur eine multiplikation?
10:51:54 Schrompf: ne vektor-multiplikation, ja
10:52:03 Schrompf: du hast ne normale (x, y, z)
10:52:30 Schrompf: und jede der drei zahlen hat im raum eine richtung: x entlang der richtung, wo im raum die textur-x-koordinate steigt
10:52:35 Schrompf: y ebenso
10:52:47 Schrompf: z aus der oberfläche heraus, die flächennormale
10:53:15 Schrompf: du hast also drei vektoren: tangente, bitangente, normale
10:53:21 Schrompf: und packst die in ne matrix:
10:53:29 Schrompf: tx, bx, nx
10:53:32 Schrompf: ty, by, ny
10:53:38 Schrompf: tz, bz, nz
10:53:57 Schrompf: und wenn du diese matrix mit der tangent-space-normale multiplizierst:
10:54:23 Schrompf: |tx, bx, nx| |vx|
10:54:34 Schrompf: |ty, by, ny| * |vy|
10:54:46 Schrompf: |tz, bz, nz| |vz|
10:55:13 Schrompf: ich hab die normale im tangent space, die aus der normal map, jetzt mal v genannt)
10:55:39 Schrompf: dann ergibt sich da durch die kramersche regel ne ganz plumpe matrix-vektor-multiplikation von:
10:56:09 Schrompf: wx = tx*vx + bx*vy + nx*vz
10:56:28 Schrompf: wy = ty*vx + by*vy + ny*vz
10:56:57 Schrompf: wz = tz*vx + bz*vy + nz*vz
10:57:35 Schrompf: die drei vektoren tangente, bitangente, normale spannen also einen vektorraum auf, sie sind die basisvektoren des raumes
11:00:59 Hannes: das ist also ähnlich wie bei ner kameramatrix und ner welttransform matrix, ohne translation. die eine achse dreht sich um die andere
11:01:24 Schrompf: das sind mir zuviele aussagen ineinander gemischt
11:02:13 Schrompf: ja; es ist dasselbe wie bei der kameramatrix. es ist halt ne matrix-vektor-multiplikation, die funktionieren immer so. Hier halt nur halt ohne translation, weil die normale nur ne richtung ist, die du an beliebigen stellen im raum ansetzen kannst
11:02:41 Schrompf: und ich hab das hier so ausgewalzt, weil das für mich damals der augenöffner war:
11:02:57 Schrompf: die drei spalten der matrix sind drei richtungsvektoren!
11:03:33 Schrompf: wenn du bissl x im vektor hinzufügst, kriegst du eine portion (tx, ty, tz) auf dein ergebnis
11:04:11 Schrompf: und ne matrix-multiplikation ist nicht mehr als "ein bisschen von basisvektor A, ein bissl was von B, ein bissl was von C"
11:04:36 Hannes: ok
11:09:19 Hannes: wenn ich die normale, für den pixel, im object space habe, multipliziere ich sie mit der world matrix und kann dann berechnungen für nen directional-light machen
11:10:14 Schrompf: genau
11:11:26 Schrompf: die tangent matrix (die oben aus tangente, bitangente, normale) macht aus der "tangent space normal" eine "object space normal"
11:11:38 Schrompf: und die world matrix trägt sie dann weiter in den world space
11:12:12 Schrompf: weißt du, wie du die translation in die matrix kriegst?
11:12:43 Hannes: ok, danke. dann weiß ich jetzt wozu man die tangenten normale im vertex braucht
11:13:13 Schrompf: ja
11:13:41 Schrompf: warnung: die bitangente kann man nicht einfach per kreuzprodukt aus vertex-normale und vertex-tangente ausrechnen
11:14:00 Schrompf: du brauchst außerdem ein vorzeichen!
11:14:15 Schrompf: denn wenn du die bitangente ausrechnest und sie geht in die eine richtung
11:14:16 Hannes: währe ja zu einfach :-)
11:14:25 Schrompf: müsstest du nur die textur an der achse spiegeln
11:14:37 Schrompf: und plötzlich müsste die bitangente in die andere richtung zeigen!
11:14:53 Schrompf: daher hab ich immer faul die bitangente einfach auch ausgerechnet und im vertex mitgeschickt
11:15:18 Schrompf: bissl speicherverschwendung, aber dafür eindeutig und bequem und läuft gut mit mesh-optimizern
11:17:08 Hannes: die translation wird in einer 4x4 matrix in der 4. zeile gespeichert?
11:17:19 Schrompf: spalte
11:17:24 Schrompf: also: moment!
11:17:45 Schrompf: *ich* schreibe meine matrizen, so dass die drei bzw. vier basisvektoren spaltenweise nebeneinander stehen
11:18:10 Schrompf: es gibt aber eine ebenso gültige schreibweise, wo man die drei/vier basisvektoren zeilenweise untereinander schreibt
11:18:26 Schrompf: diese darstellung ist also ganz schlicht transponiert gegenüber meiner methode
11:18:35 Schrompf: kennst du das wort "transponieren"?
11:19:06 Hannes: ist das die spiegelung an der vertikalen?
11:19:15 Hannes: oder noch was anderes?
11:19:17 Schrompf: ne, an der diagonalen
11:19:33 Hannes: ja diagonalen
11:19:37 Schrompf: du hast da nen dönerspies schräg durch von links oben nach rechts unten
11:19:39 Hannes: falsches wort
11:19:54 Schrompf: und du drehst die matrix an diesem spies, bis du die rückseite siehst
11:20:17 Schrompf: |a b|
11:20:23 Schrompf: | \ |
11:20:28 Schrompf: |c d|
11:20:42 Schrompf: und jetzt transponieren, also umdrehen an der diagonalen:
11:20:46 Schrompf: |a c|
11:20:49 Schrompf: | \ |
11:20:53 Schrompf: |b d|
11:21:38 Schrompf: und dann siehst du, dass die zeile a-b jetzt die spalte a-b geworden ist
11:21:50 Schrompf: und die spalte a | c ist jetzt die zeile a-c
11:22:12 Schrompf: das verändert auch die wirkung der reihenfolge
11:22:34 Schrompf: vorher, so wie ich das mache, ist Matrix * Vektor = Ergebnis
11:22:54 Schrompf: nach dem transponieren muss man für's selbe ergebnis aber machen: Vektor * Matrix = Ergebnis
11:25:14 Hannes: wie hat man matrizenrechnung entdeckt? das ist ziemlich gut um sich im 3d raum zu orientieren. irgendwie magisch
11:25:37 Schrompf: keine ahnung
11:26:01 Schrompf: aber ich glaube, sowas entsteht augenscheinlich. kann man ja auch mit drei bleistiften nachspielen
11:28:26 Essex20: re
11:28:36 Essex20: Mein Ohr tut weh, zu viel telefoniert
11:28:38 Hannes: am anfang hab ich diese berechnungen für drehung und translation händisch gemacht, weil ich es komisch fand so viele multiplikationen mit 0 oder 1 zu haben.
11:29:11 Schrompf: joa, kann sich lohnen
11:29:30 Schrompf: aber sobald mit bissl rotation, bissl schiebung, vielleicht noch ne rotation hinterher hat
11:29:35 Schrompf: lohnt sich ne matrix
11:30:03 Schrompf: weil man all diese aktionen durch matrix-multiplikation kombinieren kann
11:30:11 Schrompf: und dann spart man rechenoperationen
11:30:51 Schrompf: warte, ich muss mal kurz Essex20 anrufen, damit sein ohr nicht kalt wird
11:33:02 Hannes: ich glaub jetzt könnte ich normal mapping umsetzen
11:33:43 Hannes: aber wer malt die ganzen maps
11:34:34 Essex20: Hannes, du Arsch, hör auf mich anzurufen
11:34:39 Essex20: waaaaaahhhhh
11:36:45 Hannes: werden normalmaps heutzutage generiert? brauch man die überhaupt noch wen ein dreieck eh nur so groß ist wie nen pixel?
11:40:02 Schrompf: man malt die nicht
11:40:07 Schrompf: hat man nie
11:40:20 Schrompf: die entstehen auf zwei mögliche arten:
11:40:36 Schrompf: a) du hast ne height map, also pro pixel ne graustufe, wie hoch es an der stelle ist
11:40:52 Schrompf: sowas geht gut für wiederholbare texturen wie z.B. mauern
11:41:09 Schrompf: da malst du die steine erstmal weiß und die kanten dazwischen schwarz
11:41:37 Schrompf: und dann rechnest du daraus die normal map aus, indem du für jeden pixel die "schräge" an der stelle ausrechnest, so wie die höhen drumrum es sagen
11:42:27 Schrompf: oder b) du hast ein hipoly-modell da
11:42:34 Schrompf: irgendwas mit irrsinnig vielen flächen
11:43:20 Schrompf: und ne lowpoly-version davon, die du dann rendern willst
11:43:52 Schrompf: und jetzt kannst du das hipoly auf das lowpoly draufstellen und rechnest für jeden texturpixel aus, wie das hipoly-modell an der stelle aussieht
11:44:40 Schrompf: dann entsteht ne unikate normal map, die das objekt unter licht so aussehen lässt, wie als ob es hipoly wäre
11:45:23 Schrompf: und die andere frage: ja, man braucht die noch,weil man eigentlich vermeiden will, dass dreiecke so groß wie ein pixel werden
11:45:39 Schrompf: aber der unreal-renderer, wiehießernoch?
11:46:04 Schrompf: der geht die texturen durch und hat winzige dreiecke für jeden texel raus
11:46:52 Schrompf: und der rendert dann nur pixelgroße dreiecke, die sind dann einfarbig, und haben eine normale, die sich plump aus der position ergibt
11:46:57 Schrompf: die brauchen dann keine normal map mehr
11:49:34 Hannes: an meinem ersten 14 Zoll CRT Monitor war ein einzelner Pixel noch gut als kreis sichtbar, heutzutage muss ich meine Brille aufsetzen
11:50:14 Schrompf: kreis, echt?
11:50:48 Schrompf: ich bin mal mit der lupe reingekrochen und hab so kleine rote, grüne, blaue längliche blobs gesehen
11:50:53 Hannes: halt son leuchtfleck
11:51:23 Essex20: Nanite?
11:51:34 Hannes: das böse wort
11:52:09 Hannes: das hab ich zu oft beim stammtisch gehört
11:52:30 Schrompf: stimmt, Nanite
11:52:51 Schrompf: "was verspürst du, wenn du den unreal-renderer siehst?" "nanite!"
12:00:59 Hannes: Warum findet man beim thema shader meist nur vertex- und pixelshader. es gibt doch noch andere?
12:02:50 Essex20: Techno-Nanny => Nanite
12:03:15 Essex20: fragment, compute hör ich öfter
12:03:36 Essex20: wobei das irgendwie überhaupt ned meine welt ist.. mir reicht sw-rendern :D
12:27:53 Essex20: Ne Stunde noch
12:44:09 Schrompf: fragment ist pixelshader
12:44:25 Schrompf: pixelshader ist das alte wort, wo man noch einne pixel pro pixel hatte
12:44:43 Schrompf: in der zeit von multisampling hatte man dann mehrere farbwerte pro pixel, die sogenannten "fragments"
12:44:48 Schrompf: und daher stammt der name
12:45:13 Schrompf: gibt dann noch den geometry shader. der kann dreiecke rauspumpen oder verschwinden lassen, der läuft nach dem vertexshader
12:45:32 Schrompf: und dann gab's noch zwei tesselation stages, vor und nach dem vertexshader, aber ich habe vergessen, wie die hießen
12:45:37 Schrompf: hull shader oder so?
12:45:39 Schrompf: egal
12:45:54 Schrompf: das alles ist hinfällig mit mesh shadern, was jetzt der heiße scheiß ist
12:46:27 Schrompf: wo man einfach ein programm hat, was aus den buffern die daten nach eigenem gusto zieht und dreier-päkchen von vertices rauspumpt
12:47:17 Schrompf: darin kann man dann nen klassischen vertexshader mit vertex assembly bauen, ganz artig drei indizes ausm indexbuffer ziehen, drei vertices fetchen, dreimal transformieren und so
12:47:46 Schrompf: oder man macht geiles zeuchs wie meshlets, wo man oberflächenteilstücke im ganzen verwurstet und sichtbarkeitsprüfungen und lichtquellen-zuordnungen macht
12:48:26 Schrompf: und ja, stimmt, gibt auch noch compute shader
12:49:00 Schrompf: das sind einfach nur funktionen, von denen man vorher weiß, dass sie gleich in ganzen päkchen zu 8x8x4 gleichzeitig laufen
12:49:15 Schrompf: nuja, off to the child. ich wünsch euch was
13:05:51 Essex20: und ich dachte kuchen backen sei kompliziert
15:42:19 nnm joined the channel
15:45:49 Essex20: Hi
15:46:04 Essex20: und danke für die werbung
15:46:23 Essex20: !coffee
15:46:24 zfx-logger-v3 gives Essex20 a cup of coffee!
16:13:44 Hannes: zwei kaffe, damit hast du ihn verschäucht
16:23:42 Essex20: und dich angezogen
16:23:44 Essex20: :P
16:30:23 Hannes: ich glaub nicht das ich dich angerufen hab. möglich währe es ja. schließlich hab ich dein profil auf deiner arbeitshomepage er-stalkt. da stand bestimmt auch ne bürotelefonnummer
18:52:54 Schrompf joined the channel
19:01:01 Essex20: eyoo
19:01:07 Schrompf: ahjaa
19:10:21 Essex20: Na, dann wäre ja alles geklärt
19:10:46 Schrompf: so wie die abwässer
19:10:57 Essex20: lol
19:11:09 Essex20: der Stau hat sich gelöst
19:14:42 Schrompf: du sprichst jetzt von deinem letzten klo-gang?
19:14:51 Essex20: Nein, den hab ich noch vor mir
19:14:54 Schrompf: bei meiner heimfahrt war hier und da ein bissl stau, aber nix dramatisches
19:22:35 Essex20: Biste wieder einfach bei der Fahrt stehengeblieben?
19:23:58 Schrompf: ja, wahllos, mittendrin
19:30:11 Essex20: Wie nennt man bei diesen schmalen, ausziehbaren Gardinenstangen diese Haltedinger, die man an den Rahmen klebt? Die mit dem Metallstift
19:30:56 Schrompf: "nubsis"
19:31:03 Essex20: "dinger"
19:31:14 Schrompf: den namen teilen sie sich mit diesen schwarzen muffen unter den schrauben des bürostuhls
19:31:37 Essex20: klingt komisch, ist aber so
19:31:38 Essex20: :P
19:32:39 Essex20: "Selbstklebehaken"
19:33:16 Essex20: Das klingt so logisch, kein Wunder dass ich nicht darauf gekommen bin
19:52:42 Magister joined the channel
21:38:29 Biolunar joined the channel