Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /tests/vis15-bugs/dvrbug.diderot
ViewVC logotype

Annotation of /tests/vis15-bugs/dvrbug.diderot

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4796 - (view) (download)

1 : glk 4794
2 :     input bool GfpMip = true;
3 :     input bool boundGfpByRfpIso = true;
4 :     input bool includeGfpByTindic = false;
5 :     input bool includeGfpByTdist = false;
6 :     input bool renderTdist = true;
7 :     input bool fbfaHack = true;
8 :     input real Tindic = 0;
9 :     input bool verbose = true;
10 :     input vec3 RfpCol = [1,0,0];
11 :     input vec3 GfpCol = [0,1,0];
12 :     input vec3 TrkCol = [0,0,1];
13 :     input vec3 camEye;
14 :     input vec3 camAt;
15 :     input vec3 camUp;
16 :     input real camNearAtRel;
17 :     input real camFarAtRel;
18 :     input real camFOV = 20;
19 :     input int iresU;
20 :     input int iresV;
21 :     input real refStep;
22 :     input real rayStep;
23 :     input real thickness;
24 :     input vec3 lightVsp = [1, 1, -1];
25 :     input real phongKa = 0.2;
26 :     input real phongKd = 0.8;
27 :     input real maxalpha = 1.0;
28 :     input vec3 trackedIdx = [0,0,0];
29 :     vec3 tracked = [[0.37052959203720093,-3.9941885471343994,0],
30 :     [3.9941885471343994,0.37052959203720093,0],
31 :     [0,0,-4.2697978019714355]]•trackedIdx + [2959.3408203125,1106.0570068359375,1147.5330810546875];
32 :    
33 :     input real Risoval = 1800;
34 :    
35 :     /*
36 :     //input real Gisoval = 2000;
37 :     field#1(3)[2] V = ctmr ⊛ image("vol.nrrd");
38 :     field#1(3)[] Gfp = V[0] - Gisoval;
39 :     field#1(3)[] Rfp = V[1] - Risoval;
40 :     */
41 :    
42 :     input image(3)[] Gimg = image("dvrbug-vol.nrrd");
43 :     input image(3)[] Rimg = image("dvrbug-vol.nrrd");
44 :     input image(3)[] Timg = image("dvrbug-vol.nrrd");
45 :    
46 :     field#2(3)[] Gfp = bspln3 ⊛ Gimg;
47 :     field#2(3)[] Rfp = bspln3 ⊛ Rimg - Risoval;
48 :     field#1(3)[] Tdist = c1tent ⊛ Timg - 13;
49 :    
50 :     function real alpha(real v, real g) = clamp(0, 1, (1 - |v|/(g*thickness)));
51 :     function real inalpha(real v, real g) = (1.0 if v > 0 else max(0.0, 1.0 - |v|/(g*thickness)));
52 :     function real alphx(real x) = (1 if x < 0 else clamp(0, 1, 1.4 - |x|/thickness));
53 :    
54 :     // field#0(1)[3] cmap = tent ⊛ image("isobow.nrrd");
55 :     // function vec3 color(vec3 x) = cmap(clamp(-3,1,V(x)));
56 :    
57 :     // (boilerplate) computation of camera and light info
58 :     real camDist = |camAt - camEye|;
59 :     real camNear = camNearAtRel + camDist;
60 :     real camFar = camFarAtRel + camDist;
61 :     vec3 camN = normalize(camAt - camEye); // away
62 :     vec3 camU = normalize(camN × camUp); // right
63 :     vec3 camV = camU × camN; // up
64 :     real camVmax = tan(camFOV*π/360)*camDist;
65 :     real camUmax = camVmax*iresU/iresV;
66 :     vec3 light = transpose([camU,camV,camN])•normalize(lightVsp);
67 :    
68 :     strand raycast(int ui, int vi) {
69 :     real rayU = lerp(-camUmax, camUmax, -0.5, ui, iresU-0.5);
70 :     real rayV = lerp(camVmax, -camVmax, -0.5, vi, iresV-0.5);
71 :     real rayN = camNear; // - rayStep;
72 :     vec3 rayVec = camN + (rayU*camU + rayV*camV)/camDist;
73 :     vec3 rayDir = normalize(rayVec);
74 :     real transp = 1;
75 :     vec3 RGB = [0,0,0];
76 :     real Gmax = 0;
77 :     output real TT = ∞;
78 :     output vec4 RGBa = [0,0,0,0];
79 :     update {
80 :     if (verbose && ui == 0 && rayN == camNear) {
81 :     print("", vi, "/", iresV, "\n");
82 :     }
83 :     rayN = rayN + rayStep;
84 :     if (rayN > camFar) {
85 :     stabilize;
86 :     }
87 :     real trkN = (tracked - camEye)•camN;
88 :     vec3 x = camEye + rayN*rayVec;
89 :     TT = min(TT, |x-tracked|);
90 :    
91 :     if (!inside(x,Gfp)) { continue; }
92 :    
93 :     real depth = 1; // lerp(1, 1, camNear, rayN, camFar);
94 :    
95 :     vec3 tot = tracked - x;
96 :     if (Tindic > 0) {
97 :     real val = |tot|;
98 :     vec3 grad = -tot;
99 :     real aa = clamp(0,1,3*maxalpha*(1 - |val - Tindic|/(0.7*thickness)));
100 :     aa = 1 - pow(1-aa, rayStep*|rayVec|/refStep);
101 :     vec3 gdir = normalize(grad);
102 :     aa *= 1 if (gdir•rayDir)^2 < 0.15 else 0;
103 :     real shade = lerp(0,1, -1,|gdir•light|,1)^3;
104 :     RGB += [1,1,1]*transp*depth*aa*(phongKa + phongKd*shade);
105 :     transp *= 1 - aa;
106 :     }
107 :    
108 :     // -------- Rfp isosurface
109 :     real val = Rfp(x);
110 :     vec3 grad = -∇Rfp(x);
111 :     real aa = maxalpha*alpha(val, |grad|);
112 :     vec3 gdir = normalize(grad);
113 :     if (fbfaHack) { aa *= lerp(0.25,1,(1-(gdir•rayDir)^2)^2); }
114 :     aa = 1 - pow(1-aa, rayStep*|rayVec|/refStep);
115 :     real shade = lerp(0,1, -1,gdir•light,1)^3;
116 :     RGB += RfpCol*transp*depth*aa*(phongKa + phongKd*shade);
117 :     transp *= 1 - aa;
118 :    
119 :     real inA = 0; // inalpha(val, |grad|) if boundGfpByRfpIso else 0;
120 :     if (Tindic > 0) {
121 :     if (includeGfpByTindic && |tot| < 1.5*Tindic) {
122 :     inA = max(inA, 1 if |tot| < Tindic else
123 :     lerp(1,0,Tindic,|tot|,1.5*Tindic) if |tot| < 1.5*Tindic else 0);
124 :     }
125 :     if (includeGfpByTdist && |trkN - rayN| < 1.5*Tindic) {
126 :     print("HEY HEY\n");
127 :     inA = max(inA, 1 if |trkN - rayN| < Tindic else
128 :     lerp(1,0,Tindic,|trkN - rayN|,1.5*Tindic) if |trkN - rayN| < 1.5*Tindic else 0);
129 :     }
130 :     }
131 : glk 4796 inA = 0; // BUG: adding this line crashes compiler
132 : glk 4794
133 :     if (inA > 0) {
134 :     if (GfpMip) {
135 :     Gmax = max(Gmax, inA*Gfp(x));
136 :     } else {
137 :     tensor[3,3] hh = ∇⊗∇Gfp(x);
138 :     vec3 delta = inv(hh)•∇Gfp(x);
139 :     aa = inA*alphx(|delta| - 19);
140 :     if (aa > 0) {
141 :     real{3} eval = evals(hh);
142 :     aa *= clamp(0,1,lerp(0,1,0.04,-eval{0},0.11));
143 :     }
144 :     aa = 1 - pow(1-aa, rayStep*|rayVec|/refStep);
145 :     shade = lerp(0,1, -1,normalize(delta)•light,1)^3;
146 :     RGB += GfpCol*transp*aa*(phongKa + phongKd*shade);
147 :     transp *= 1 - aa;
148 :     }
149 :     }
150 :     if (renderTdist) {
151 :     // -------- Tdist isosurface
152 :     val = Tdist(x);
153 :     grad = ∇Tdist(x);
154 :     aa = maxalpha*alpha(val, |grad|);
155 :     aa = 1 - pow(1-aa, rayStep*|rayVec|/refStep);
156 :     gdir = normalize(grad);
157 :     shade = lerp(0,1, -1,gdir•light,1)^3;
158 :     RGB += TrkCol*transp*depth*aa*(phongKa + phongKd*shade);
159 :     transp *= 1 - aa;
160 :     }
161 :     }
162 :     stabilize {
163 :     real aa = 1-transp;
164 :     real RR = RGB[0];
165 :     real GG = RGB[1];
166 :     real BB = RGB[2];
167 :     if (GfpMip) {
168 :     if (aa > 0) { RR = RR/aa; BB = BB/aa; }
169 :     GG = Gmax;
170 :     } else {
171 :     if (aa > 0) { RR = RR/aa; GG = GG/aa; BB = BB/aa; }
172 :     }
173 :     RGBa = [RR, GG, BB, aa];
174 :     }
175 :     }
176 :     initially [ raycast(ui, vi) | vi in 0..iresV-1, ui in 0..iresU-1 ];

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0