-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTODO.txt
152 lines (127 loc) · 5.52 KB
/
TODO.txt
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
- antialising [hotovo]
- ruska ruleta [hotovo]
- phongovo stínování [rozpracované]
- v projektu bylo hodně špatně věcí, kde se používal direction vektor
=== [ZATIM NEPOTREBNE]
- průhledné materiály
- bipolární interpolace
==
// pocud dobre, pak se vlastne pomoci hodnot u, v musi vybrat 1 ze tri trojuhelniku,
// ktere se spocitaly jak per vertex normaly v geometrii
// podle tohoto treba: u > 0.5 vybrat 2
// v > 0.5 > vybrat 1
// jinak vybrat 0, cislo zname normalu v bode
==
per vertex normaly
http://blackpawn.com/texts/pointinpoly/default.html
http://mrl.cs.vsb.cz/people/fabian/pg1_course.html
vše je hotovo, ve volném čase optimalizace kódu
http://en.wikipedia.org/wiki/Fresnel_equations
http://en.wikipedia.org/wiki/Snell's_law
bipolarni interpolace
return BilinearInterpolation(maps_[map], x * maps_[map]
Cviko 09
--------
Transparentní materiály
- problém, zvnikají dva paprsky, propuštěný a odražený
index refrakce 1.5, vzduch má 1, dva druhy materiálů, které se vyskytují za a před
interfacem, musíme je zaintegrovat do geometrického výpočtu, kudy má nový paprsek
směřovat, reflexivita a transmitivita, totální odraz = totální reflexe, rychlost
šíření světla v prostředí ku vakuu,
sin o1
------
sin o2 = teta 2 / teta 1; teta2 je paprsek propagujici se do materialu, prvni zakon
http://en.wikipedia.org/wiki/Snell's_law
n - normalovy, l dopadajici paprsek, svetelny zdroj nahradit okem, potřebujueme se
dopídít k cos o2, přes goniometrickou 1 se dá dostat ke vztahu, dvě dosazení a jsem
na druhém řádku, v druhém řádku v odmocnině je potřeba si ohlídat to za -(n1/n2)2,
toto nesmí být větší jak 1, to znamená že nastala totální reflexe, to jak to máme
teďka, pokud projdeme tuto podmínku, stačí vypočítat odražený parpsek a jeho
směrový vektor, musíme se trekovat kde jsme, nesmíme se spoléhat na normálu,
toto je geometrická část, to je v druhé části: http://en.wikipedia.org/wiki/Fresnel_equations
R = (Rs + Rp) / 2
místo material transmitivity dáme na R, počítáme z těch levých vzorců, práve jsou
moc složité, toto počítáme v případě, kdy chceme spočítat odrazený paprsek,
pokud chceme ten co proletí, zákon energie, Tp = 1 - Rp, z tohoto vypočítáme Tp,
když známe Rp, transmivita alias propustnost,
real cos_phi1 = cos <- tento cos skrtnout
light(vector3(0.2, 0.3f, 0.5f)
IOR_MATERIAL = 1.00029;
IOR_MATERIAL = 1.5; // sklo 1.5
Trace 3
if (ray.target.surface >= 0)
{
REAL R, T;
REAL reflectivity;
{
vlastní kod
const REAL cos_phi1 = cos(abs(n.DotProduct
const REAL sin_phi1 = sqrt(1 - sqr(cos_phi1));
const REAL n1 = current material vzduch 1;
const real n2 = (n1 = IOR_AIR) ? IOR_MATERIAL : IOR_AIR;
ReAL tmp = (n1 / n2) * sin_phi1;
if (tmp >= 1) // totalni reflexe
{
R = 1;
T = 0;
reflectivity = R;
}
else
{
// reflekce a refrakce
const REAL cos_phi2 = sqrt(1 - SQR(tmp));
const REAL n1_cos_phi1 = n1 * cos_phi1;
const REAL n2_cos_phi1 = n2 * cost_phi1;
const REAL rs = (n1_cos_phi1 - n2_cos_phi2) / (n1_cos_p
// koeficinty transmize
real conservation = R + T;
// ruska ruleta
REAL ksi = rnd(); // 0 až 1
if (ksi <= R)
{
// dale pocitame pouze s odrazenym paprsekem
current_material_ior = n1;
refelctivity = R;
}
else if (ksi <= R+ T) // toto vyjde skoro vzdycky
{
// dale poictame pouze s propustenym paprskem
current_material_ior = n2;
reflectivity = T;
r = (n1 / n2) * ray.direction + (n1_cos_phi1 / n2 - vektorova podoba snerova zakona // smerovy paprsek noveho paprsku
r.Normalize();
}
}
// zbytek kodu stejny jako predtim
new ray, ray = new ray, jeste barvy phongova stinovani
Cviko 09
--------
Transparentní materiály
- problém, zvnikají dva paprsky, propuštěný a odražený
index refrakce 1.5, vzduch má 1, dva druhy materiálů, které se vyskytují za a před
interfacem, musíme je zaintegrovat do geometrického výpočtu, kudy má nový paprsek
směřovat, reflexivita a transmitivita, totální odraz = totální reflexe, rychlost
šíření světla v prostředí ku vakuu,
sin o1
------
sin o2 = teta 2 / teta 1; teta2 je paprsek propagujici se do materialu, prvni zakon
http://en.wikipedia.org/wiki/Snell's_law
n - normalovy, l dopadajici paprsek, svetelny zdroj nahradit okem, potřebujueme se
dopídít k cos o2, přes goniometrickou 1 se dá dostat ke vztahu, dvě dosazení a jsem
na druhém řádku, v druhém řádku v odmocnině je potřeba si ohlídat to za -(n1/n2)2,
toto nesmí být větší jak 1, to znamená že nastala totální reflexe, to jak to máme
teďka, pokud projdeme tuto podmínku, stačí vypočítat odražený parpsek a jeho
směrový vektor, musíme se trekovat kde jsme, nesmíme se spoléhat na normálu,
toto je geometrická část, to je v druhé části: http://en.wikipedia.org/wiki/Fresnel_equations
R = (Rs + Rp) / 2
místo material transmitivity dáme na R, počítáme z těch levých vzorců, práve jsou
moc složité, toto počítáme v případě, kdy chceme spočítat odrazený paprsek,
pokud chceme ten co proletí, zákon energie, Tp = 1 - Rp, z tohoto vypočítáme Tp,
když známe Rp, transmivita alias propustnost
Nejlepe zkontrolovat na tvaru koule, krychle
kvuli ruske rulete potrebujeme vice samplu, na jeden pixel, zaciname v kamere,
1 paprsek, pak se hodne deli, kvuli tomu musi byt hodne vzorku, SAMPLES_PER_PIXEL dame 7,
7*7 na jeden pixel, supersampling pro antialiasing a potlačení šumu, rozdíl mezi
1 a 7, 7 je lepší
is transparent si dat k materialu a podle toho se rozhodnout, pokud neni transparenti,
jedem podle toho co mame tedka