forked from wieerwill/Informatik
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathComputergrafik - Cheatsheet.tex
2121 lines (1920 loc) · 120 KB
/
Computergrafik - Cheatsheet.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass[landscape]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{multicol}
\usepackage{calc}
\usepackage{ifthen}
\usepackage[landscape]{geometry}
\usepackage{amsmath,amsthm,amsfonts,amssymb}
\usepackage{color,graphicx,overpic}
\usepackage{listings}
\usepackage[compact]{titlesec} %less space for headers
\usepackage{mdwlist} %less space for lists
\usepackage{pdflscape}
\usepackage{verbatim}
\usepackage[hidelinks,pdfencoding=auto]{hyperref}
\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{Computergrafik}
\fancyfoot[L]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0pt} %obere Trennlinie
\renewcommand{\footrulewidth}{0pt} %untere Trennlinie
\pdfinfo{
/Title (Computergrafik - Cheatsheet)
/Creator (TeX)
/Producer (pdfTeX 1.40.0)
/Author (Robert Jeutter)
/Subject ()
}
% This sets page margins to .5 inch if using letter paper, and to 1cm
% if using A4 paper. (This probably isn't strictly necessary.)
% If using another size paper, use default 1cm margins.
\ifthenelse{\lengthtest { \paperwidth = 11in}}
{ \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} }
{\ifthenelse{ \lengthtest{ \paperwidth = 297mm}}
{\geometry{top=1.3cm,left=1cm,right=1cm,bottom=1.2cm} }
{\geometry{top=1.3cm,left=1cm,right=1cm,bottom=1.2cm} }
}
% Redefine section commands to use less space
\makeatletter
\renewcommand{\section}{\@startsection{section}{1}{0mm}%
{-1ex plus -.5ex minus -.2ex}%
{0.5ex plus .2ex}%x
{\normalfont\large\bfseries}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}%
{-1explus -.5ex minus -.2ex}%
{0.5ex plus .2ex}%
{\normalfont\normalsize\bfseries}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}%
{-1ex plus -.5ex minus -.2ex}%
{1ex plus .2ex}%
{\normalfont\small\bfseries}}
\makeatother
% Don't print section numbers
\setcounter{secnumdepth}{0}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt plus 0.5ex}
% compress space
\setlength\abovedisplayskip{0pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
\setlength{\topskip}{0pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\linespread{0.5}
\titlespacing{\section}{0pt}{*0}{*0}
\titlespacing{\subsection}{0pt}{*0}{*0}
\titlespacing{\subsubsection}{0pt}{*0}{*0}
\begin{document}
\raggedright
\scriptsize
\begin{multicols}{3}
% multicol parameters
% These lengths are set only within the two main columns
%\setlength{\columnseprule}{0.25pt}
\setlength{\premulticols}{1pt}
\setlength{\postmulticols}{1pt}
\setlength{\multicolsep}{1pt}
\setlength{\columnsep}{2pt}
\section{Mathematik Grundlagen}
\begin{description*}
\item[Vektor] $\vec{x}=(x_1,x_2,...,x_n)$
\begin{description*}
\item[Ortsvektor] $(x,y,z,1)^T$
\item[Richtungsvektor] $(x,y,z,0)^T$
\end{description*}
\item[Multiplikation] $\alpha * \vec{x} = (\alpha *x_1, \alpha *x_2,...)$
\item[Addition] $\vec{x}+\vec{r}=(x_1+r_1, x_2+r_2,...)$
\item[Linearkombination] $\vec{o} = (\alpha * \vec{p})+(\beta *\vec{q})+(\gamma * \vec{r})$
\item[Länge] $\vec{p}=(x,y,z): |\vec{p}|=\sqrt{x^2+y^2+z^2}$
\item[Skalarprodukt] $\vec{x}*\vec{r}=\sum_{i=0}^{n-1} x_i*r_i$
\item[Winkel] $\vec{a}*\vec{b}=|\vec{a}|*|\vec{b}|*cos(\phi)$ mit $cos(\phi)=\frac{\vec{a}*\vec{b}}{|\vec{a}|*|\vec{b}|}$
\item[Vektorprodukt] $\vec{a}\times\vec{b} = \begin{pmatrix} a_y b_z - a_z b_y \\ a_z b_x - a_x b_z \\ a_x b_y - a_y b_x \end{pmatrix}$
\item[Ebenen] $p=\vec{q}+\alpha*\vec{r}+\beta * \vec{s}$
\item[Dreieck] $\vec{A}+\alpha*(B-A)+\beta*(C-A)$
\item[Strahlensatz] $y'_P = \frac{y_P*z_e}{z_P}$
\item[Kugeloberfläche] $A_k = 4\pi r^2$
\end{description*}
\subsection{2D Transformation}
\begin{description*}
\item[Translation] um den Vektor $\vec{t}$
\item[Skalierung] Stauchung oder Streckung
\item[Spiegelung]
\begin{itemize*}
\item an x-Achse $S=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}$
\item an y-Achse $S=\begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix}$
\item am Ursprung $S=\begin{pmatrix} -1 & 0 \\ 0 & -1 \end{pmatrix}$
\end{itemize*}
\item[Scherung] $S=\begin{pmatrix} 1 & S_x \\ S_y & 1 \end{pmatrix}$
\item[Rotation mit Polarkoordinaten] $P'=(r,\phi+\theta)$; $\binom{x'}{y'}=\begin{pmatrix} cos(\theta) & -sin(\theta) \\ sin(\theta) & cos(\theta)\end{pmatrix}*\binom{x}{y}$
\item[Koordinatentransformation] $P\rightarrow P'$ \newline $P' =T*P = \begin{pmatrix} x_x & x_y\\ y_x & y_y \end{pmatrix} * \binom{P_x}{P_y}$
\end{description*}
Kartesische Koordinaten bezeichnen die Koordinaten direkt\\
Homogene Koordinaten besitzen ein zusätzliches Gewicht w
\paragraph{Homogene Vektorräume}
kartesischer Vektor $(\frac{x}{w},\frac{y}{w})$ oft $w=1$ gewählt (1=Punkt, 0=Richtung)
\begin{description*}
\item[Skalierung, Projektion, Spiegelung] $\begin{pmatrix} F_x & 0 & 0 \\ 0 & F_y & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} = \begin{pmatrix} F_x*x \\ F_y*y \\ 1 \end{pmatrix}$
$F_x,F_y>0$, uniform bei $F_X=F_y$\newline
$F_x=0$/$F_y=0$:Projektion auf y/x-Achse\newline
$F_x=-1$/$F_y=-1$ Spiegelung an y/x-Achse\newline
$F_x=F_y=-1$Spiegelung am Ursprung
\item[Scherung] $\begin{pmatrix} 1 & a & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix} x \\ y \\ w \end{pmatrix} = \begin{pmatrix} x+a*y \\ y \\ w \end{pmatrix}$
\item[Rotation] $R_\theta *P= \begin{pmatrix}cos(\theta) & -sin(\theta) & 0 \\ sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1 \end{pmatrix} * \begin{pmatrix}x & y & 1 \end{pmatrix} = \begin{pmatrix} x cos(\theta) - y sind(\theta)\\ x sin(\theta)+y cos(\theta)\\ 1 \end{pmatrix}$
\end{description*}
\paragraph{Invertierung}
\begin{description*}
\item[Transformation] $T_{\Delta x, \Delta y}^{-1} = T_{-\Delta x, -\Delta y}$
\item[Skalierung] $S_{F_x, F_y}^{-1}=S_{\frac{1}{F_x},\frac{1}{F_y}}=\begin{pmatrix} \frac{1}{F_x} &0&0\\ 0&\frac{1}{F_y}&0\\ 0&0&1 \end{pmatrix}$
\item[Rotation] $R_{-\theta} = \begin{pmatrix} cos(\theta) & sin(\theta) & 0 \\ -sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 1 \end{pmatrix} = R_{\theta}^{T}$
\item[Verknüpfungen] $(A*B*C)^{-1}=C^{-1}*B^{-1}*A^{-1}$
\end{description*}
\paragraph{Affine Abbildung}
$$\begin{pmatrix}a_1 & b_1 & c_1\\a_2 &b_2 & c_2\\ 0&0&1\end{pmatrix}*\begin{pmatrix} x_1\\y_1\\1\end{pmatrix}= \begin{pmatrix}x_1'\\y_1'\\1 \end{pmatrix}$$
\begin{itemize*}
\item die letzte Zeile der affinen Matrix bleibt immer 0,0,1
\item paralleles bleibt bei affinen Abbildungen stets parallel
\end{itemize*}
\subsection{Homogene Transformation in 3D}
$(a,b,c,d)$ wobei $(a,b,c)=(nx,ny,nz)$ und $d$ der Abstand der Ebene zum Ursprung
\begin{itemize*}
\item Ebene definiert durch 3 Punkte
$$\begin{pmatrix}
x_1 & x_2 & x_3 & 0 \\
y_1 & y_2 & y_3 & 0 \\
z_1 & z_2 & z_3 & 0 \\
1 & 1 & 1 & 1
\end{pmatrix}$$
\item Translation um Vektor $(\Delta x, \Delta y,\Delta z)$
$$\begin{pmatrix}
1 & 0 & 0 & \Delta x \\
0 & 1 & 0 & \Delta y \\
0 & 0 & 1 & \Delta z \\
0 & 0 & 0 & 1
\end{pmatrix}$$
\item Skalierung um Faktor $F_x,F_y,F_z$
$$\begin{pmatrix}
F_y & 0 & 0 & 0 \\
0 & F_y & 0 & 0 \\
0 & 0 & F_z & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}$$
\item Rotation um die x-Achse
$$\begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & cos(\theta) & -sin(\theta) & 0 \\
0 & sin(\theta) & cos(\theta) & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}$$
\item Rotation um die y-Achse
$$\begin{pmatrix}
cos(\theta) & 0 & sin(\theta) & 0 \\
0 & 1 & 0 & 0 \\
-sin(\theta) & 0 & cos(\theta) & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}$$
\item Rotation um z-Achse
$$\begin{pmatrix}
cos(\theta) & -sin(\theta) & 0 & 0 \\
sin(\theta) & \cos(\theta) & 0 & 0 \\
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}$$
\item Berechnung
$$\begin{pmatrix} a& b& c& 0\\ d& e& f& 0\\ g& h& i& 0\\ 0& 0& 0& 1\end{pmatrix}
* \begin{pmatrix} x \\ y \\ z \\ 0 \end{pmatrix}
= \begin{pmatrix} ax+bx+cz \\ dx+ey+fz \\ gx+hy+iz \end{pmatrix}$$
\end{itemize*}
\paragraph{Kameratransformation}
Kamera ist definiert durch
\begin{itemize*}
\item Lage des Augpunktes E (in Weltkoordinaten)
\item Blickrichtung D
\item Oben-Vektor U ('view up vector', senkrecht zu D)
\end{itemize*}
Transformation durch
\begin{itemize*}
\item Ursprung in Augpunkt
\item negative z-Achse in Blickrichtung
\item y-Achse nach oben
\end{itemize*}
\subsection{Projektion}
\paragraph{Orthogonale Projektion}
\begin{itemize*}
\item Projektionsebene ist parallel zur XY Ebene
\item Projektionsrichtung stets parallel zur z-Achse (rechtwinklig zur Projektionsebene)
\item z Koordinaten werden auf gleichen Wert gesetzten
\end{itemize*}
\paragraph{Schiefwinklige Parallelprojektion}
\begin{itemize*}
\item typische Parallelprojektion mit 2 Parametern
\item Projektionsebene ist parallel zur XY Ebene
\item Projektionsrichtung hat zwei Freiheitsgrade und ist typischerweise nicht orthogonal zur Projektionsebene
\item Projektionsrichtung (Schiefe) ist über 2 Winkel parametrisierbar
\item Herleitung $P=\begin{pmatrix}
1 & 0 & -cos(\alpha)*f & 0 \\
0 & 1 & -sin(\alpha)*f & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1
\end{pmatrix}$
\item es gilt: $x'=x-cos(\alpha)*f*z$ und $y'=y-sin(\alpha)*f*z$
\end{itemize*}
\paragraph{Zentralperspektive}
\begin{itemize*}
\item entspricht einer Lochkamera bzw etwa dem 'einäugigen' Sehen
\item Augpunkt im Ursprung des Kamerakoordinatensystems
\item Projektionsfläche ist eine Ebene parallel zu XY Ebene
\item Eigenschaften
\begin{itemize*}
\item perspektivische Verkürzung
\item parallele Linien des Objekts fluchten oft in einen Fluchtpunkt
\end{itemize*}
\item Strahlensatz: $\frac{y_p}{d}=\frac{y}{z}\Rightarrow y_p=\frac{d*y}{z}$
\end{itemize*}
$$\begin{pmatrix} d&0&0&0\\ 0&d&0&0 \\ 0&0&0&1 \\ 0&0&1&0 \end{pmatrix} * \begin{pmatrix}x\\y\\z\\1\end{pmatrix} = \begin{pmatrix} d*x\\ d*y\\ 1 \\ z \end{pmatrix} \rightarrow \begin{pmatrix} \frac{d*x}{z} \\ \frac{d*y}{z} \\ \frac{1}{z} \end{pmatrix}$$
\paragraph{Fluchtpunkte}
\begin{itemize*}
\item Wird aus einer Richtung r und dem Augpunkt eine Gerade definiert, dann schneidet diese Gerade die Projektionsfläche im Fluchtpunkt für die Richtung r
\item hat ein Modell parallele Kanten oder parallele Striche in Texturen, dann ergibt sich für jede solche Richtung r in der Abbildung ein Fluchtpunkt, auf den diese parallelen Kanten/Striche hinzu zu laufen scheinen
\item es gibt jedoch Ausnahmen, bei denen Paralleles in der Abbildung Parallel bleibt (z.B. horizontale Kanten bei Schwellen)
\item Da es beliebig viele Richtungen geben kann, sind auch beliebig viele Fluchtpunkte in einem Bild möglich
\item Rotationen können Fluchtpunkte ändern, Translationen jedoch nicht
\item Ermittlung: aus Richtung r und Augpunkt eine Gerade, dann schneidet diese Gerade die Projektionsfläche im Fliuchtpunkt für die Richtung r.
\end{itemize*}
\end{multicols}
\newpage
\begin{multicols}{3}
\section{Modellierung}
\paragraph{Boundary Representation (B-Rep)}
\begin{itemize*}
\item Beschreibung durch die begrenzende Oberflächen
\item Darstellungsform eines Flächen- oder Volumenmodells
\item Definition des Ojekts über vef-Graph (vertex, edge, face)
\begin{itemize*}
\item Knotenliste: beinhaltet Koordinatenpunkt
\item Kantenliste: pro Kante zwei Punkte referenziert
\item Flächenliste: pro Fläche die Reihenfolge der Kanten
\end{itemize*}
\item Szene: dreidimensionale Beschreibung von Objekten, Lichtquellen und Materialeigenschaften mit Betrachter
\item Szenegraph: Gruppierung der Objekte in einer Szene
\end{itemize*}
\paragraph{Vertex Shader}
\begin{itemize*}
\item verarbeitet alle Eckpunkte (Vertices) mit Shader
\item ermöglicht eine Beeinflussung der Objektform
\item Transformation der 3D Position auf 2D Koordinaten
\item Input: Vertices relevanter Objekte und gewünschte Transformation
\item Output: projizierte 2D Koordinaten mit Tiefeninformationen
\end{itemize*}
\paragraph{Model View Projection}
\begin{itemize*}
\item Gegeben
\begin{itemize*}
\item Modell als Vertices mit kartesischen 3D Koordinaten
\item betrachtende Kamera (3D Position, Ausrichtung)
\end{itemize*}
\item Umsetzung
\begin{enumerate*}
\item $M=T*R*S$ Transformation von Modellraum in Weltkoordinaten (Model)
\item $V=T_V^{-1}*R_V^{-1}$ Transformation in Kameraraum (View)
\item Projektion auf Kamerabildebene und Umrechnung in Bildraum (Projektion)
\end{enumerate*}
\item Ergebnis
\begin{itemize*}
\item MVP-Matrix $P*V*M=MVP_{Matrix}$
\item Bildraumprojektion des Modells $p'_m=P*V*M*p_m$
\end{itemize*}
\end{itemize*}
\subsection{Effiziente geometrische Datenstrukturen}
\paragraph{Bintree}
\begin{itemize*}
\item logarithmische Komplexität pro Zugriff möglich
\item Gefahr: lineare Komplexität, wenn nicht balanciert
\item typisch Teilung in Mitte (bisektion)
\item Bereiche mit homogenem Inhalt werden nicht unterteilt
\item Komprimierungseffekt
\end{itemize*}
\begin{center}
\includegraphics[width=.3 \linewidth]{Assets/Computergrafik_Bintrees}
\includegraphics[width=.5 \linewidth]{Assets/Computergrafik_Quadtree}
\end{center}
\paragraph{Quadtree}
\begin{itemize*}
\item eine Fläche wird in vier gleichgroße Quadranten unterteilt
\item Fläche wird unterteilt bis homogenität
\item Komprimierung, da nur strukturierte Bereiche unterteilt
\end{itemize*}
\paragraph{Octree}
\begin{itemize*}
\item Objekte in hierarchische Strukturen einsortiert
\item jeder Knoten hat 0 oder 8 Kindknoten (8 Unterbereiche)
\item beschleunigte räumliche Suche
\item Zeitaufwand Tiefe des Baumes $O(\log n)$
\end{itemize*}
\paragraph{KD Tree}
\begin{itemize*}
\item mehrdimensionaler binärer Baum (k-dimensional)
\item Teilung nicht zwangsläufig mittig $\rightarrow$ an Daten angepasst
\item pro Hierarchiestufe stets wechsel der Teilungsrichtung
\item Median-Cut Strategie: Teilung in zwei gleichgroße Hälften
\begin{itemize*}
\item Baum garantiert balanciert und Tiefe minimal
\item $O(\log n)$ Verhalten garantiert
\item Probleme bei lokalen Häufungen (Cluster)
\item unnötige Unterteilung weit weg (Artefakt)
\end{itemize*}
\item Middlecut-Strategie:
\begin{itemize*}
\item nicht balanciert
\item keine Unterteilung weit weg vom Cluster
\end{itemize*}
\item ein Octree lässt sich auf kd-Baum abbilden, beide Baumarten haben daher vergleichbare Eigenschaften
\end{itemize*}
\begin{center}
\includegraphics[width=.5 \linewidth]{Assets/Computergrafik_KD-tree}
\end{center}
\paragraph{BSP Tree}
\begin{itemize*}
\item Verallgemeinerung des kd-Baums
\item Trennebenen nicht nur achsenparallel
\item Unterteilung adaptiv an Modellflächen angepasst
\item Trennebenen können weiter weg liegende Objekte schneiden
\item führt bei konvexen Polyedern zu entarteten Bäumen
\end{itemize*}
\paragraph{Hüllkörper Hierarchie}
\begin{description*}
\item[AABB] (Axis-Aligned-Bounding-Box) sehr einfache Abfrage (nur ein Vergleich $<$ pro Koordinatenrichtung) einfach zu erstellen (min, max), dafür nicht optimale Packungsdichte bei schräger Lage der Objekte
\item[OBB] (Oriented Bounding Boxes) passen sich besser der räumlichen Ausrichtungen an, lassen sich auch leicht transformieren. Jedoch schwieriger zu erstellen (Wahl der Richtung), komplexere Überlappungsberechnung. Typischerweise weniger tief, weniger räumliche Abfragen dafür wesentlich mehr Berechnungsaufwand pro Rekursionsstufe.
\item[KDOP] (k-dim. Discretly Oriented Polytopes) Polyeder mit festen vorgegebenen Richtungen. Eigenschaften zwischen AABB und OBB. Bessere Raumausnützung als AABB, weniger Transformationene als OBB.
\item[BS] (Bounding Spheres) Schnelle 3D Überlappungstest (Abstand der Mittelpunkte $<$ Summe der Radien). Langgezogene Objekte können mit mehreren Hüllkugeln begrenzt werden um besseren Füllgrad zu erreichen. BS sind, bis auf die Lage der Kugelmittelpunkte, invariant gegenüber Rotation (geeignet für Kollisionserkennung bewegter Objekte).
\item[weitere Anwendungsfälle] Kollisionserkennung in Computeranmiation. Reduktion der potenziellen Kollisionspaare durch räumliche Trennung. Beschleunigung des Echtzeitrenderings großer Datenmengen. Reduktion des Aufwands durch Culling (Weglassen)
\end{description*}
\paragraph{Ray Picking mit KD Baum}
\begin{itemize*}
\item Vorverarbeitung von Objekten im kd-Baum $O(n \log n)$
\item Strahl/Objektschnitt: als rekursive Suche im kd-Baum
\item $treeIntersect$: Findet Schnittpunkt des Strahls mit den im Baum gespeicherten Dreiecken
\item $triangleIntersect$: Findet Schnittpunkt des Strahles mit Menge von Dreiecken in node
\item $subdivide$: Findet rekursiv den nächstgelegenen Schnittpunkt (kleinstes t) des Strahls im Parameterbereich
\end{itemize*}
\paragraph{Aufwandsabschätzung bzgl Dreiecksanzahl}
\begin{itemize*}
\item konvexes Objekt: Komplexität einer räumlichen Punktsuche, also zur Untersuchung einer Baumzelle $O(\log n)$
\item Polygonnebel: viele kleine Dreiecke im Such-Volumen
\item alle Zellen enthalten konstante kleine Anzahl von Dreiecken $\rightarrow$ Aufwand proportional zur Anzahl durchlaufener Baumzellen
\item Anzahl dieser Zellen ist proportional zur Länge des Strahls durchs Volumen, da der 1. Schnitt sehr wahrscheinlich mitten im Volumen oder gar nicht stattfindet $\rightarrow$ Anzahl ist proportional zur Seitenlänge des Suchvolumens
\item bei n Dreiecken im Suchvolumen ist die Anzahl t der zu untersuchenden Zellen also ca $t=O(\sqrt{n})$ $\rightarrow$ Suchaufwand pro Strahl folglich $O(\sqrt{n} \log (n))$
\end{itemize*}
\paragraph{Aufwandsabschätzung in fps}
\begin{itemize*}
\item absoluter Gesamtaufwand zum Raytracing einer Szene ist proportional zur Anzahl der Strahlen
\item rekursives RT (Reflexion, Brechung, Schattenstrahlen etc) entsprechend mehr Strahlen, d.h. weniger Performance
\item Parallelisierung einfach möglich $\rightarrow$ früher CPU, heute GPU
\end{itemize*}
\paragraph*{Heurisitk zur Unterteilung}
\begin{itemize*}
\item Surface Area Heuristic (SAH):
\begin{itemize*}
\item Strahl $i$ trifft Zelle $j$ mit Wahrscheinlichkeit $P(i,j)$, zudem sei $n_j$ die Anzahl Dreiecke in Zelle $j$
\item Aufwand für Raytracing pro Zelle proportional zur Baumtiefe und Anzahl der dortigen Dreiecke $n_j$;$\rightarrow$ Gesamtaufwand für Strahl $i$ sei $\sum(P(i,j)*n_j)$
\end{itemize*}
\item große Zellen mit wenigen Dreiecken senken Gesamtaufwand
\item $P(i,j)$ ist proportional zur Oberfläche einer Zelle
\item SAH optimiert das Produkt der Zellgröße mal Anzahl Dreiecke im Teilbaum. Für den kD-Baum in Richtung k: $D_k = D_{k_{links}} + D_{k_{rechts}}$
\item bei ungleicher Verteilung der Dreiecke enthalten große Zellen wenige oder keine Dreiecke und Baum ist nicht balanciert $\rightarrow$ implizite Abtrennung des Clusters vom Rest des Baums (vgl. Middle-Cut-Strategie)
\end{itemize*}
\paragraph{Behandlung ausgedehnter Objekte}
\begin{itemize*}
\item Punkte haben keine Ausdehnung und können an einem eindeutigen Ort im kD-Baum abgelegt sein
\item Ausgedehnte Objekte können räumlich mehrere Blatt- Zellen überlappen. Diese Objekte müssen dann in mehreren Blattzellen einsortiert werden
\end{itemize*}
\begin{enumerate*}
\item Auftrennung von Objekten, d.h. Objekte müssen an der Zellgrenze aufgeteilt werden. Einsortierung der Teilobjekte in passende Zellen. Geht gut für Dreiecke
\item Keine Unterscheidung zwischen Blattknoten und inneren Knoten. In diesem Ansatz werden Objekte soweit oben im Baum einsortiert, dass sie keine Zellgrenze schneiden. Nachteil: auch relativ kleine Objekte müssen in große Zellen einsortiert werden, wenn sie deren Unterteilungsgrenze schneiden
\item Loose Octree: die Zellen des Octrees werden so vergrößert, dass sie mit ihren direkten Nachbarn in jeder Richtung um 50\% überlappen. Objekte, die im einfachen Octree aufgrund ihrer Größe Grenzen schneiden würden, können im Loose Octree in den Zwischenknoten gespeichert werden. Ein Objekt mit Durchmesser bis zu $\frac{D}{2^L}$ kann auf der Ebene L abgelegt werden. Eine Suche im Loose Octree muss daher außer der direkt betroffenen Zelle auch die überlappenden direkten Nachbarn berücksichtigen. Dadurch vergrößert sich der Aufwand einer Suche um einen konstantne Faktor. Beachte: Die asymptotosche Komplexität (O-Notation) ist dadurch nicht beeinflusst.
\end{enumerate*}
\end{multicols}
\newpage
\begin{multicols}{3}
\section{Rastergrafik}
\subsection{ Midpoint Algorithmus}
\begin{itemize*}
\item Effizient durch Ganzzahlen, Vermeiden von $*,/$, \item Nutzung inkrementeller Arbeitsweise
\item Bresenham-Algorithmus: Mittelpunkt M; jeweils aktuellen Punkt P, der rechts von im liegende E (east) und der rechts oben liegende NE (north-east) benannt.
\item die Linie wird als Funktion repräsentiert: $y=\frac{\delta y}{\delta x}*x+B$
\item implizierte Form: $d: F(x,y)=\delta y*x-\delta x*y+B*\delta x = 0$
\item für Punkte auf der Linie wird $F(x,y)=0$
\item für Punkte unterhalb der Linie wird $F(x,y)>0$
\item für Punkte oberhalb der Linie wird $F(x,y)<0$
\item Herleitung: Steigung der Linie m ($-1<m<1$), Punkt vertikal zwischen zwei Pixeln E und NE. Falls $F(x_p + 1, y_p+\frac{1}{2})>0$ wird das nächste Pixel NE, andernfalls E
\item Insgesamt acht verschiedene Fälle nach Oktanten
\end{itemize*}
\begin{center}
\includegraphics[width=.2\linewidth]{Assets/Computergrafik_Midpoint}
\end{center}
\paragraph{Anti Aliasing}
\begin{center}
\includegraphics[width=.5\linewidth]{Assets/Computergrafik_Antialiasing}
\end{center}
\begin{itemize*}
\item Treppenstufeneffekt bei gerasterten Linien
\item Auflösungsvermögen des Auges für Punkte sei e. Strukturen wie Linien werden durch Mittelwertbildung (Fitting) vom Auge viel genauer als e lokalisiert. Eine Stufe wird umso eher erkannt, je länger die angrenzenden Segmente sind.
\begin{itemize*}
\item Statt Linie wird Rechteck mit Breite eines Pixels betrachtet
\item Graustufen darunter liegender Pixelflächen entsprechen jew. Überdeckungsgrad
\end{itemize*}
\item Praktische vereinfachte/effiziente Umsetzung
\begin{itemize*}
\item Rasterkonvertierung der Linie bei doppelter örtlicher Auflösung (Supersampling)
\item Replizieren der Linie (vertikal und/oder horizontal) um Linienbreite näherungsweise zu erhalten
\item Bestimmmung des Überdeckungsgrades pro Pixel in der ursprünglichen Auflösung (Downsampling)
\item Bestimmung des Farbwertes entsprechend des Überdeckungsgrades
\end{itemize*}
\item Ideales Antialiasing: wegen beliebig komplexen Geometrie allgemein sehr hoher Aufwand
\item Ansatz für eine 'reale Lösung'
\begin{itemize*}
\item ideale Berechnung von Farbwerten irrelevant
\item Ansätze mit gut abschätzbarem/konstanten Aufwand
\item Verwendung mehrerer Samples pro Pixel
\end{itemize*}
\item A.A. erhöht empfundene räumlich Auflösung
\end{itemize*}
\paragraph{Supersampling + Downsampling}
\begin{itemize*}
\item Grafik in höherer Auflösung gerendert (z.B. 4-fach) und aus Samples ein Farbwert gemittelt
\item Ohne A.A. pro Pixel eine Sampleposition$\Rightarrow$ gefärbt o. nicht
\item Es gibt immer eine Abstufung mehr als Subpixel pro Pixel
\item Bei vier Subpixeln können 0-4 Subpixel im Pixel gesetzt sein, d.h. 5 Intensitäten von 0\%, 25\%, 50\%, 75\% oder 100\%
\item bei Formabhängigkeit gibt es nur eine Zwischenstufe nach Phasenlage $\rightarrow$ Kante 'pumpt' bei Objektbewegung.
\item $Pixelfarbe= g*Linienfarbe+(1-g)*Hintergrundfarbe$
\end{itemize*}
\paragraph{Supersampling + Rotated Grids}
\begin{itemize*}
\item minderung der Formabhängigkeit
\item kleine Winkel führen zu langen Stufen der Polygonkante
\item bessere Verhältnisse der Grauabstufung für flache Winkel, wenn ordered-grid statt rotated-grid verwendet wird
\item Rotated grids bei anderen Winkeln etwas schlechter als ordered grid
\item gute Grauabstufung bei sehr flachen Kanten
\item optimaler Winkel bei ca. 20-30° z.B. $arctan(0.5) \approx 26,6^{\circ}$
\item sehr dünne Linien bleiben auch bei Bewegung zusammenhängend (Vermeidung von 'Line Popping')
\end{itemize*}
\paragraph{Supersampling + Multisampling}
\begin{itemize*}
\item ein Superbackpuffer (großem Buffer)
\begin{itemize*}
\item Nachteil (bei rotated grid): Anpassung der Rasterkonvertierung an verschobene Positionen
\item Vorteil: Verwendung von mehr Texturinformation (Textur wird subpixelgerecht eingetragen)
\end{itemize*}
\item mehrere Multisamplebuffer (mehrere kleinere Buffer)
\begin{itemize*}
\item Mehrfachrendering in normaler Größe mit versetzter Geometrie (Vertexverschiebung pro Sub-Bild)
\item Vorteil: keine Veränderung im Rendering
\item Nachteil: nur ein Texturwert pro Makro-/Sub-Pixel
\end{itemize*}
\item Gezielter Ressourceneinsatz durch Kantenglättung
\begin{itemize*}
\item Effizienzsteigerung durch Beschränkung auf reine Kantenglättung möglich
\item Aliasing bei Mustern in Texturen schon beim Auslesen der Werte aus Pixeltextur unterdrückbar
\item Kantenpixel bekannt als separate Linien oder Berandung von Polygonen/Dreiecken
\end{itemize*}
\item adaptives Samplen: statt feste Anzahl nach dem Bedarf
\end{itemize*}
\paragraph{Quincunx Verfahren}
\begin{itemize*}
\item 2x Multisampling mit rotated grid; Informationszuwachs durch doppelte Anzahl von Samples
\item Information für Kantenglättung beruht auf 2 Subpixeln
\item Entspricht zusätzlicher Tiefpass-Überfilterung. Durch Unschärfe sehen Polygonkanten glatter aus.
\item Harte Kanten nicht mehr möglich; Rand 'Zappeln' reduziert
\item Aber: Texturinformation, von 2$>$Subpixeln, verschmiert
\end{itemize*}
\paragraph{Pseudozufälliges Supersampling}
\begin{itemize*}
\item Kombination: Supersampling, Multisampling und Quincunx
\item bei Überwindung der Grenzen für Füllrate und Bandbreite überwiegen Vorteile des Supersamplings
\item Ordered/rotated grid weisen nach Strukturklassen Vor-/Nachteile auf. Verbleibende Artefakte wiederholen sich bei großen Flächen - oft als störend empfunden
\item pszufällige Auswahl von Abtastmustern für Supersampling
\item nachträgliche Abminderung regelmäßiger Strukturen durch vorsichtiges Verrauschen (Rauschfilter)
\item entfernungsabhängiges Antialiasing
\item pseudozufällig
\begin{itemize*}
\item Samples können nur an n vordefinierten Positionen stattfinden (Sample-Positionsmuster)
\item Je nach Methode werden daraus m Positionen für das Samplen zufällig ausgewählt (beachte: $m < n$)
\item Anzahl der Muster als kombinatorisches Problem: m aus n (ohne Wiederholungen)
\end{itemize*}
\end{itemize*}
\paragraph{Downsampling}
Mittelwertbildung: lineare Filterung (2x - AA), bilineare Filterung (4x - AA). Gleichgültig ob ordered/rotated grid.
Beim pseudozufälligen Supersampling ist entsprechend der 'frei gewählten' Positionen der 'Subpixel' zu modifizieren (z.B. Gewichte nach Abstand der Abfragepositionen zur Makropixelposition)
\subsection{Polygonfüllalgorithmus}
\begin{itemize*}
\item Ansatz
\begin{itemize*}
\item finde die Pixel innerhalb des Polygons
\item weise ihnen Farbe zu
\item dabei zeilenweises Vorgehen pro Rasterlinie
\item schneide die Polygonkante mit der aktuellen Bildzeile
\item füge Schnittpunkt $x_s$ in eine Liste ein
\item sortiere Schnittpunkte der Bildzeile in x-Richtung
\item Paritätsregel: fülle die Pixel jeweils nur zwischen ungeraden und nächstem geraden Schnittpunkt
\end{itemize*}
\item Allgemeine Sicht auf die Strategie: Ein Pixel wird mit der Farbe des Polygons gefüllt, das sich rechts von ihm befindet. Sollte dort eine Kante sein, so wird die Farbe des oberen Polygons verwendet.
\item Effiziente Ermittlung der Schnittpunkte
\begin{itemize*}
\item Polygonkanten von unten nach oben bearbeitet
\item horizontale Polygonkanten nicht bearbeiten $\rightarrow m\not=0$
\item $d_y = y_1 - y_0$ ist stets positiv (auch nie 0)
\item $d_x = x_1 - x_0$ kann positiv und negativ sein
\item damit können 4 Bereiche unterschieden werden
\item Berechnung von x bzw y:
\begin{itemize*}
\item $y=y_0+m(x-x_0)= y_0+\frac{y_1-y_0}{x_1-x_0}(x-x_0)$,
\item $x=x_0+\frac{1}{m}(y-y_0)= x_0+\frac{x_1-x_0}{y_1-y_0}(y-y_0)$
\end{itemize*}
\item x-/y-Werte noch nicht ganzzahlig
\item Die Rundung kann inkrementell ermittelt werden
\item Die Rundungsregel für Bruchwerte hängt davon ab, ob es eine linke oder rechte Kante ist. Links wird z.B. aufgerundet
\end{itemize*}
\item Edge-Tabelle
\begin{itemize*}
\item Verkettete Liste/Array für nicht-horizontalen Kanten
\item Sortierung nach Scan-Line, wo Kanten beginnen
\item In Scan-Line wieder Liste mit z.B. $x_0, y_1$, Zähler
\end{itemize*}
\item Active-Edge-Tabelle
\begin{itemize*}
\item speichert Kanten die gegenwärtige Scan-Linie schneiden
\item Liste hat die gleiche Struktur wie eine Zeile der ET
\item Kanten gelöscht wenn oberes Ende der Kante erreicht
\end{itemize*}
\item Scan Convert Polygon: Es existiert immer eine gerade Anzahl Kanten. Viele Grafikbibliotheken beschränkt auf konvexe Polygone. Nichtkonvexe Polygone müssen vorher in konvexe Komponenten zerlegt werden.
\item Bemerkungen zur Effizienz: Polygon belegt meist mehr Pixel als es Eckpunkte/Kanten besitzt. Deshalb sind effiziente per-Pixel-Operationen wichtig. Der Rechenaufwand sollte vermieden werden (fallende Priorität) für: pro Pixel (sehr häufig auszuführen), pro Rasterzeile, pro Kante (möglichst viel vorberechnen)
\end{itemize*}
\paragraph{Füllmuster}
\begin{itemize*}
\item Füllen eines Polygons mit Pattern statt Farbwert
\item benutze dazu BITMAPs
\item 2-dimensionales Array
\item besteht aus M Spalten und N Zeilen
\item $BITMAP = ARRAY [0... (M-1), 0...(N-1)]$
\end{itemize*}
\paragraph{Dithering - Floyd-Steinberg-Algorithmus}
\begin{itemize*}
\item Ersetzen 'genauer' Farbwerte durch grobe Quantisierung
\item Durchlaufen aller Pixel beginnend links oben
\item pro Pixel P die beste Ersetzung in Tabelle finden \& setzen
\item verursachte Fehler $\delta$ nach Schema auf unbearbeitete Nachbarpixel verteilen
\item bei kleinen Bildern mit hoher Auflösung kaum erkennbar
\item erhöht Farbauflösung $\rightarrow$ Verringert räumlichen Auflösung
\item komplementär zu A.A.
\end{itemize*}
\end{multicols}
\newpage
\begin{multicols}{3}
\section{Farbräume}
\subsection{Farbwahrnehmung - Phänonmenologie}
\begin{itemize*}
\item Hell- und Farbempfinden als Sinneseindruck beschrieben
\item Tageslicht als weiß/grau mit unterschiedlichen Helligkeiten aber farblos empfunden
\item Abwesenheit von Licht wird als schwarz empfunden
\item Regenbogen bunt mit verschiedenen Farbtönen empfunden
\end{itemize*}
\begin{description*}
\item[Farbton] (Hue)
\begin{itemize*}
\item Farbpalette aus Abstufung grober Farbtöne
\item direkt nebeneinander liegende Farben im Farbspektrum werden als ähnlich empfunden
\item Farbwerte lassen sich ordnen
\item als bunt empfunden (voll gesättigte Farben im Gegensatz zu Grautönen)
\begin{center}
\includegraphics[width=.4\linewidth]{Assets/Computergrafik_Farbton}
\end{center}
\end{itemize*}
\item[Farbsättigung] (Saturation)
\begin{itemize*}
\item Stufen zwischen Bunt und Grau
\item Pastelltöne sind weniger bunt aber nicht farblos
\item Grauton (keine Farbwerte unterscheidbar)
\item jedem Farbton können Abstufungen bis Grau zugeordnet werden
\begin{center}
\includegraphics[width=.4\linewidth]{Assets/Computergrafik_Farbsättigung}
\end{center}
\end{itemize*}
\item[Helligkeitsstufen] (Lightness/Brightness/Value/Intensity)
\begin{itemize*}
\item unterschiedliche Helligkeitsabstufungen bis Schwarz
\item im Schwarzen sind keine Farbtöne mehr unterscheidbar
\begin{center}
\includegraphics[width=.4\linewidth]{Assets/Computergrafik_Helligkeitsstufen}
\end{center}
\end{itemize*}
\end{description*}
\subsection{Modell der Farben}
\paragraph{DIN 5033}
Farbe ist die Empfindung eines dem Auge strukturlos erscheinenden Teils eines Gesichtsfeldes, durch die sich dieser Teil bei einäugiger Beobachtung mit unbewegtem Auge von einem gleichzeitig gesehenem, ebenfalls strukturlos angrenzendem Bezirk allein unterscheidet.
\paragraph{HSL Farbraum (bzw HSB, HSV, HSI)}
\begin{itemize*}
\item Dimension des Farbtons wiederholt sich periodisch
\item Darstellung als Winkelkoordinate eines Polarkoordinaten-Systems in der HS-Ebene oder dreidimensional als Zylinderkoordinaten HSL darstellt.
\item Darstellungsformen nicht fest vorgeschrieben. Eine Darstellung als (Doppel)-Kegel oder sechseitige (Doppel-) Pyramide ist ebenso möglich
\item Der HSL Farbraum entspricht grob unserer Farbwahrnehmung. Daher geeignet zur intuitiven und qualitativen Einstellung von Farben in Illustrationsgrafiken
\item Relative Skala 0-255
\item Quantisierbarkeit der Farben und Helligkeit
\item Bezug zur Physik des Lichtes (Energie, Spektrum)
\end{itemize*}
\paragraph{RGB Farbraum}
\begin{itemize*}
\item Hypothese, dass Farbsehen auf drei Arten von Sinneszellen beruht (rot, grün, blau) (Young)
\item Farbwahrnehmungen durch drei beliebige, linear unabhängige Größen darstellbar (Graßmann)
\item Mit Grundfarben Rot, Grün und Blau können weitere Farben additiv gemischt werden
\item Bestimmen der Anteile der Mischfarben
\begin{itemize*}
\item Empfindlichkeitskurven R,G,B und zugehörige Lichtquellen r,g,b
\item alle 3 Lichtquellen zusammen ergeben weis wahrgenommenes Licht: $r=g=b=1$
\item damit 3d-Farbraum (RGB-Farbraum) aufspannen
\item Lage einer monochromatischen Lichtwelle: $x(\lambda_0)=p*r+\gamma*g+\beta*b$
\item Achtung: hängt von Wellenlängen der verwendeten Grundfarben r,g,b (Primärvalenzen) ab.
\end{itemize*}
\item Beispiel für Reizung durch monochromatisches Licht (Laser):
\begin{itemize*}
\item $r=0,2R(\lambda)$
\item $y=0,5R(\lambda)+0,3G(\lambda)$
\item $g=0,2R(\lambda)+0,5G(\lambda)$
\item $b=0,02B(\lambda)$
\end{itemize*}
\item Intensität: $I=\frac{R+G+B}{3}$
\item Innere Farbmischung: mischen direkt aus Grundfarben
\item Äußere Farbmischung: hinzufügen von Grundfarben zu bestehender Mischung
\end{itemize*}
Farberzeugung durch Mischung: $$y=1,9r + 0,6g =0,5R(\lambda)+0,3G(\lambda)$$
Idee:
\begin{itemize*}
\item drei linear-unabhängige Größen benötigt, zur Beschreibung und (technischen) Reproduktion der Farbempfindung
\item zunächst werden folgende Werte gewertet
\begin{itemize*}
\item die additive Mischung als Reproduktionsmethode
\item drei Primärfarben Rot, Grün, Blau
\item drei linear unabhängige Größen spannen stets einen 3D Raum auf
\end{itemize*}
\item die RGB Werte werden den drei ortogonalen Achsen dieses Raumes zugeordnet
\end{itemize*}
Darstellung des RGB Farbraums:
\begin{itemize*}
\item alle technisch/additiv erzeugbaren Farben liegen innerhalb eines Würfels
\item Im Koordinatenursprung befindet sich Schwarz
\item auf der Raumdiagonalen liegen dazwischen die Graustufen
\end{itemize*}
RGB Farbtafel:\\
Alle Farben gleicher Buntheit führen zum gleichen Farbort, der durch die Farbwertanteile r,g,b beschrieben wird:
$$r=\frac{R}{R+G+B}, g=\frac{G}{R+G+B}, b=\frac{B}{R+G+B} \leftrightarrow r+g+b=1$$
Aus dem rechten Teil der Gleichung folgt mit $b=1-r-g$, dass sich die Buntheit allein durch r und g darstellen lässt (entspricht $R^2$).
\subsection{CIE System}
\begin{minipage}[b]{0.25\textwidth}
Um eine Relation zwischen der menschlichen Farbwahrnehmung und den physikalischen Ursachen des Farbreizes herzustellen, wurde das CIE-Normvalenzsystem definiert. Es stellt die Gesammtheit der wahrnehmbaren Farben dar.
\end{minipage}
\includegraphics[width=0.15\linewidth]{Assets/Computergrafik_CIE}
\subsubsection{Farbkörperunterschiede}
Es finden sich Unterschiede welche Farbbereiche nach dem CIE Normalvalenzsystem von den jeweiligen Systemen dargestellt werden können:
\begin{itemize*}
\item menschliche Farbwahrnehmung ca. 2-6 Mio Farben
\item Monitor ca. 1/3 davon. Bei Monitoren wird die additive Farbmischung verwendet, da die einzelnen Lichtquellen aufsummiert werden.
\item Druckprozess deutlich weniger Farben. Es werden einzelne Farbschichten auf Papier gedruckt und das resultierende Bild wird über subtraktive Farbmischung bestimmt
\end{itemize*}
\subsubsection{Subtraktive Farbmischung}
Je nachdem welche Farbe ein Material hat, werden entsprechende Farbanteile absorbiert oder reflektiert. Eine gelbe Oberfläche sieht gelb aus, da sie das Blau aus weißem Licht absorbiert, aber Rot und Grün reflektiert.
Achtung: Dies gilt nur für die Bestrahlung mit weißem Licht. Wird beispielsweise ein gelbes Blatt mit blauem Licht bestrahlt, dann wirkt es schwarz, da das blaue Licht vom gelben Blatt absorbiert wird.
\subsubsection{Umwandlung}
Von einem Farbort im XYZ-System $F_P=(X Y Z)^T$ in das equivalente CIE Diagramm $F'_P=(X' Y')^T$ durch $$F'_P=\begin{pmatrix}X' \\ Y'\end{pmatrix} = \begin{pmatrix} \frac{X}{X+Y+Z} \\ \frac{Y}{X+Y+Z}\end{pmatrix}$$
\begin{tabular}{l | c | c}
Farbraum & gerätespezifisch & gleichabständig \\\hline
RGB & ja & nein \\
CMY & ja & nein \\
HSI & ja & nein \\
HLS & ja & nein \\
XYZ (CIE) & nein & nein \\
$L*a*b*$ ($CIE_{Lab}$) & nein & ja \\
\end{tabular}
\end{multicols}
\newpage
\begin{multicols}{3}
\section{Licht \& Reflexion}
\begin{description*}
\item[Licht] Teil der elektromagnetischen Strahlung
\item[Photon] Elementarteilchen der elektromagnetischen Wechselwirkung
\item[Radiometrie] Messung elektromagnetischer Strahlung
\item[Photometrie] Messverfahren im Wellenlängenbereich
\item[Strahlungsäquivalent] $K =\frac{\phi_v}{\phi_e}$
\item[Lumen] 1 Lumen ist der Lichtstrom einer 1,464 mW starken 555-nm-Lichtquelle mit 100\% Lichtausbeute
\item[Raumwinkel] $\Omega = \frac{Flaeche}{Radius}= \frac{A}{r^2} [sr]$
\end{description*}
\subsection{Radiometrie (energetisch "$_e$")}
\begin{description*}
\item[Q] Strahlungsenergie $Q = \#Photonen * Photonenenergie [J]$
\item[$\Phi$] Strahlungsleistung $\Phi = \frac{Q}{t} [W]$
\item[I] Strahlstärke $I = \frac{\Phi}{\Omega} [\frac{w}{sr}]$
\item[E] Bestrahlungsstärke $E = \frac{\Phi}{A_i} [\frac{W}{m^2}]$
\item[L] Strahldichte $L = \frac{I}{A'_r} = \frac{\Phi}{cos(\phi * A_r * \Omega)}$
\end{description*}
\subsection{Photometrie (visuell "$_v$")}
\begin{description*}
\item[Q] Lichtmenge $lm * s$
\item[$\Phi$] Lichtstrom $[Lumen]$
\item[I] Lichtstärke $[Candela]$ cd
\item[E] Beleuchtungsstärke $\frac{lm}{m^2}=I_{in}\cos(\Phi) [Lux]$
\item[L] Leuchtdichte $\frac{cd}{m^2}$
\end{description*}
\subsection{Lichtquellen}
\begin{description}
\item[Ambient] Licht strahlt gleichmäßig aus jeder beliebigen Richtung
\item[Parallel] Licht strahlt in gleichmäßigen, parallelen Strahlen aus einer festgelegtenRichtung
\item[Punkt] Licht wird gleichmäßig in alle Richtungen abgestrahlt
\item[Spot] Licht wird in den Halbraum abgestrahlt, wobei das meiste Licht in eineVorzugsrichtung abgegeben wird
\end{description}
\begin{center}
\includegraphics[width=0.15\linewidth]{Assets/Computergrafik_ambientes-licht}
\includegraphics[width=0.15\linewidth]{Assets/Computergrafik_paralleles-licht}
\includegraphics[width=0.15\linewidth]{Assets/Computergrafik_punkt-licht}
\includegraphics[width=0.15\linewidth]{Assets/Computergrafik_spot-licht}
\end{center}
\paragraph{Räumliche Ausbreitung}
Flächen Energieübertragung
\begin{itemize*}
\item der Abstand zwischen den beiden Flächen beträgt r
\item die Flächen stehen nicht notwendigerweise senkrecht zur Ausbreitungsrichtung des Lichts
\item abstrahlende und empfangende Fläche jeweils in Ausbreitungsrichtung mit projizierten Flächen $A'_r$ und $A'_i$.
\item Punktlichtquellen von der abstrahlenden Fläche $A_r$, welche ihre Strahlungsleistung in den Raumwinkel $\Omega$ abgeben
\item $\Omega$ ist somit die in Abstrahlrichtung reduzierte Fläche $A'_i$ , projiziert auf die Einheitskugel: $\Omega=A'_i \backslash r^2$
\item Die übertragene Energie nimmt quadratisch zu r ab
\end{itemize*}
\paragraph{Reflexion}
Nach Auftreffen auf einer opaken Oberfläche wird Strahlung spektral unterschiedlich stark und geometrisch auf unterschiedliche Weise reflektiert.
Fälle der Reflexion:
\begin{itemize*}
\item spekulär (spiegelnde) Reflexion (Einfallsw.=Ausfallswinkel)
\item Diffuse Reflexion
\item Diffus-gerichtete Reflexion
\end{itemize*}
\begin{center}
\includegraphics[width=0.3\linewidth]{Assets/Computergrafik_spekuläre-reflexion}
\includegraphics[width=0.3\linewidth]{Assets/Computergrafik_diffuse-reflexion}
\includegraphics[width=0.3\linewidth]{Assets/Computergrafik_diffus-gerichtete-reflexion}
\end{center}
\paragraph{Diffuse Reflexion}
Eingestrahlte Strahlstärke verteilt sich durch Projektion auf größere Fläche. Die Bestrahlungsstärke ist dadurch proportional zum Vergrößerungsfaktor der Fläche abgeschwächt.
In Richtung Betrachter reflektierte Strahlstärke $I_{out}$ Aufgrund von Interferenz phasengleicher Lichtstrahlen $\rightarrow$ Projektion auf Normalenrichtung $I_{out}= E_{refl} * \cos(\phi)$
\begin{itemize*}
\item Senkrecht zur Oberfläche: Maximale Kohärenz (Addition)
\item Parallel zur Oberfläche: Keine Kohärenz (Auslöschung)
\end{itemize*}
$$\frac{A_r}{A'_r}=\frac{1}{\cos(\phi)} \rightarrow L=\frac{I_{out}}{\cos(\phi)}=I_{refl}$$
Ein Betrachter mit flachem Blickwinkel sieht Licht aus größerer Fläche $A_r$ durch Kombination dieser Effekte, kürzt sich der Einfluss des Betrachterwinkels $\cos(\phi)$ weg und es bleibt nur der Einfluss des Lichteinfallswinkels übrig: Strahldichte des reflektierten Lichtes: $L=I_{in}*k_d(\lambda)*\cos(\phi)$
\paragraph{Spekuläre Reflexion}
(gestreut spiegelnd)
\begin{itemize*}
\item Speckles bzw. Facetten sind einzeln jeweils 'ideal'
\item spiegelnd: $\text{Einfallswinkel } \phi = \neg \text{Ausfallswinkel} = -\phi$
\item Microfacettenausrichtung weichen von Gesamtflächennormalen ab
\item dadurch Streuung des Lichts (Keule) um den Winkel $\theta$ der idealen Spiegelung herum
\item Je größer der Winkel $\theta$ zwischen idealer Spiegelrichtung und Richtung zum Betrachter, desto schwächer ist die Reflexion
\item Modellierung meist per $\cos^k(\theta)$ (Phong-Modell)
\end{itemize*}
Gestreute Spiegelung im Phong Modell mit $L=I*k_s*\cos^k(\theta)$
\begin{itemize*}
\item glänzende Fläche: großer Exponent k; kleine Streuung $\epsilon$
\item matte Fläche: kleiner Exponent k; große Streuung $\epsilon$
\end{itemize*}
Für Energieerhaltung zusätzlicher Normierungsfaktor benötigt:
\begin{itemize*}
\item physikalisch nicht korrekt: $L=I*k_s*\cos^k(\theta)$
\item gebräuchliche Normierung $L=I*k_s*\frac{k+2}{2\pi}*cos^k(\theta)$
\end{itemize*}
\paragraph{Remittierende Flächen}
ideal diffus remittierende weiße Flächen $(\beta(\lambda) = 1)$:
\begin{itemize*}
\item von Quellen in Fläche $dA$ eingetragene Leistung führt zu Bestrahlungsstärke $E_{\lambda}$
\item bei vollständiger Reflexion $\beta(\lambda) = 1$ ist $E_{\lambda} = R_{\lambda}$
\item zugehörige Strahlungsfluss $d\phi = R_{\lambda} * dA = E_{\lambda} * dA$ wird bei ideal diffusen streuenden Oberflächen gleichmäßig über den Halbraum verteilt, wobei die Strahldichte (Lambertsches Gesetz) konstant ist.
\end{itemize*}
\subsection{BRDF: Bidirektionale Reflexionsverteilung}
\begin{itemize*}
\item Funktion für das Reflexionsverhalten von Oberflächen eines Materials unter beliebigen Einfallswinkeln
\item nach gewählter Genauigkeit sehr komplex
\item $f_r(\omega_i, \omega_r)=\frac{dL_r(\omega_r)}{dE_i(\omega_i)}=\frac{dL_r(\omega_r)}{L_i(\omega_i)\cos(\theta_i)d\omega_i}$
\item BRDF beschreibt wie gegebene Oberfläche Licht reflektiert.
\item $p(\lambda)=\frac{L_r}{E_i}=[\frac{1}{sr}]$
\item BRDF ist 5-dim skalare Funktion: $p(\lambda, \phi_e, \theta_e, \phi_i, \theta_i)$
\item Reziprozität: $\rho(\lambda)$ ändert sich nicht, wenn Einfalls- und Ausfallsrichtung vertauscht werden
\item $\rho(\lambda)$ kann anisotrop sein, d.h. der Anteil des reflektierten Lichtes ändert sich, wenn bei gleicher Einfalls- und Ausfallsrichtung die Fläche um die Normale gedreht wird
\item Superposition gilt $\Rightarrow$ mehrere Quellen überlagern sich linear
\end{itemize*}
Für Menge Q von Lichtquellen gesamte reflektierte Strahlstärke: $L_r=p_a*E_a+\sum_{1\leq j \leq Q} E_j * (k_d*p_d + k_s*p_s)$ mit $k_d+k_s=1$
\paragraph{Rendering-Equation}
Für ambiente und gerichtete Lichtquellen aus der Hemisphäre:
$L_r=p_a + \int_{Omega} L*(k_d*p_d+k_s*p_s) \omega_i*n d\Omega$
\paragraph{Strahlungsquellenarten}
\begin{description*}
\item[Ambiente Strahlung]
\begin{itemize*}
\item stark vereinfachtes Modell für Streuung der Atmosphäre
\item Strahlung kommt von allen Seiten
\item keine Abhängigkeit von Winkeln und Entfernungen
\item Beschreibung indirekt durch konst. Bestrahlstärke
\item $E=\frac{\Phi}{A}=E_a$
\end{itemize*}
\item[Parallele Strahlung]
\begin{itemize*}
\item Strahlung ist gerichtet und parallel
\item Richtung und Strahlungsleistung auf senkrecht zur Ausbreitungsrichtung stehende Fläche $R=E_q=\frac{\Phi}{A_q}$
\item für Schattierungsrechnung lässt sich Bestrahlungsstärke der Oberfläche berechnen: $E=\frac{\Phi}{A}=\frac{E_q*A_q}{A}=E_q*\cos(\phi) = E_q*V_I^T*n$
\end{itemize*}
\item[Ideale Punktlichtquelle]
\begin{itemize*}
\item Ort bekannt und Strahlstärke in alle Richtungen konstant $I=\frac{\Phi}{\Omega}=konstant$
\item Bestrahlungsstärke eines physikalischen vorliegenden, beliebig orientierten Flächenelementes A: $E=\frac{\Phi}{A}=\frac{I*\Omega}{A}, \Omega=\frac{A}{r^2}*\cos(\phi)*\omega_r \rightarrow E=\frac{I}{r^2}*\cos(\phi)*\omega_r$
\item für Adaptionsfähigkeit des Auges oft $E=\frac{I}{c_1+c_2*|r|+c_3*r^2}*\cos(\phi)*\omega_r$
\end{itemize*}
\item[Remittierende Flächen] von reflektierenden Fläche weitergegebenen Strahldichte L sind Bestrahlungsstärken E für unterschiedlichen Quellen mit Faktor $\frac{\beta(\lambda)}{\pi\omega_r}$ bewerten
\end{description*}
\begin{tabular}{l | c | l}
Quelle & Ref. & Spektale Strahldichte $L(\lambda)$ \\\hline
ambient & diffus & $L(\lambda)=\frac{E(\lambda)}{\pi\omega_r}*\beta(\lambda)$ \\
gerichtet & diffus & $L(\lambda)=\frac{E(\lambda)}{\pi\omega_r}*\cos(\phi)*\beta(\lambda)$ \\
punktförmig & diffus & $L(\lambda) = \frac{I(\lambda)}{\pi r^2 }*\cos(\phi)*\beta(\lambda)$ \\
gerichtet diffus & diffus & $L(\lambda)=\frac{I(\lambda)}{\pi r^2 }* \cos^m(\theta)*\cos(\phi)*\beta(\lambda)$ \\
\end{tabular}
\subsection{Beleuchtungsmodelle}
\begin{description*}
\item[Lokale] simulieren Verhalten von Licht auf einzelnen Materialoberflächen; nur Beleuchtungseffekte die direkt durch Lichtquellen auf einzelnen Objekt entstehen
\item[Global] simulieren Ausbreitung von Licht innerhalb der Szene; dabei wird Wechselwirkung in der Szene beachtet (Schatttenwurf, Spiegelung, indirekte Beleuchtung)
\end{description*}
\paragraph{Phong-Modell}
\begin{itemize*}
\item lokales Beleuchtungsmodell
\item zur Darstellung von glatten, plastikähnlichen Oberflächen
\item widerspricht dem Energieerhaltungssatz
\item Allgemein: $L=I_{out}=I_{ambient}+I_{diffus}+I_{specular}$
\item Ambiente: $I_{ambient}=I_a * k_a$
\item Diffus: $I_{diffus}=I_{in}*k_d*\cos(\phi)$
\item Spiegelnd: $I_{specular}=I_{in}*k_s*\frac{n+2}{2\pi}*\cos^n({\theta})$
\begin{itemize*}
\item $I$ Lichtstärke/Intensität der Lichtquelle
\item $k_a$ Materialkonstante
\item $k_{d/s}$ empirischem Reflexionsfaktor
\item $\phi$ Winkel: Oberflächennormale - Richtung Lichtstrahl
\item $\theta$ Winkel: ideale Reflexionsrichtung - Blickrichtung
\item $n$ konstante Exponent zur Beschreibung der Oberflächenbeschaffenheit
\end{itemize*}
\item $\frac{n+2}{2\pi}$ Normalisierungsfaktor zur Helligkeitsregulierung
\item $I_{out}=I_a*k_a+I_{in}*k_d*\cos(\phi)+I_{in}*k_s*\frac{n+2}{2\pi}*\cos^n(\theta)$
\item $\cos(\phi)=V^T_I*n_i$, $cos^n(\theta)=(V^T_r * V_e)^n$
\end{itemize*}
\paragraph{Cook-Torrance}
\begin{itemize*}
\item Lichtstreuung um Winkel der idealen Spiegelung
\item Berücksichtigt auch die gegenseitigen Abschattung
\item Vollständig physikbasiertes Modell, spekulare Reflexion
\item Aufwendige Berechnung
\item Beckmann-Verteilung: $l_{spec}=\frac{exp(-\frac{tan^2(\alpha)}{m^2})}{\pi m^2 cos^4 (\alpha)}$ mit $\alpha=arccos(N*H)$
\end{itemize*}
\end{multicols}
\newpage
\begin{multicols}{3}
\section{Schattierungsverfahren}
\subsection{ Direkte Schattierung}
\begin{itemize*}
\item Zerlegung gekrümmter Flächen in Polygone
\item Positionen der (Eck-)Punkte und Normalen im 3D sowie der Punkte im 2D-Bild sind bekannt
\item Pixelpositionen für Polygone im Bild per Scanline-Alg.
\item lokale Beleuchtungsmodelle für 3D-Punkte
\end{itemize*}
\paragraph{Flat-Shading}
Arbeitsweise
\begin{itemize*}
\item eine Berechnung, gleiche Farbe für alle Pixel des Polygons
\item stets nur 1 Farbwert pro (ebener) Fläche,
\item Stelle der Berechnung frei wählbar (mögl. repräsentativ),
\item z.B. Punkt (Ort mit Normale) in der Mitte der Fläche
\end{itemize*}
Auswirkungen
\begin{itemize*}
\item 'flaches' Aussehen und Helligkeitssprünge an Kanten
\item gut für abstraktere technische Darstellungen
\item wichtig für realistische Darstellung kantiger Körper
\item schneller als die anderen Verfahren,
\item d.h. nur ca. 1 Pixel pro Polygon gerendert wird ($n==1$)
\end{itemize*}
\paragraph{Gouraud-Shading}
[H. Gouraud 1971]
\begin{itemize*}
\item pro Eckpunkt eine Farbe berechnen, dann lineare Interpolation (pro Dreieck) für jedes Pixel
\item schattiert Dreiecke kontinuierlich,