Skip to content

Commit b8f8b2b

Browse files
brechtvllgritz
authored andcommitted
Fix missing faceforward() implementation. (#759)
1 parent c8ad35d commit b8f8b2b

3 files changed

Lines changed: 24 additions & 2 deletions

File tree

src/shaders/stdosl.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,14 @@ float distance (point a, point b, point q)
202202
}
203203
normal normalize (normal v) BUILTIN;
204204
vector normalize (vector v) BUILTIN;
205-
vector faceforward (vector N, vector I, vector Nref) BUILTIN;
206-
vector faceforward (vector N, vector I) BUILTIN;
205+
vector faceforward (vector N, vector I, vector Nref)
206+
{
207+
return (dot(I, Nref) > 0) ? -N : N;
208+
}
209+
vector faceforward (vector N, vector I)
210+
{
211+
return faceforward(N, I, Ng);
212+
}
207213
vector reflect (vector I, vector N) { return I - 2*dot(N,I)*N; }
208214
vector refract (vector I, vector N, float eta) {
209215
float IdotN = dot (I, N);

testsuite/geomath/ref/out.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ Compiled test.osl -> test.oso
33
hypot (3, 4, 5) = 7.07107
44
reflect (0.447214 -0.894427 0, 0 1 0) = 0.447214 0.894427 0
55
reflect (0.447214 -0.894427 0, -1 0 0) = -0.447214 -0.894427 0
6+
faceforward (0 0 1, 0 -0.707107 -0.707107) = 0 0 1
7+
faceforward (0 0 1, 0 -0.707107 -0.707107, 0 0 -1) = 0 0 -1
68
testing total-internal reflection:
79
refract (0.707107 -0.707107 0, 0 1 0, 1.42) = 0 0 0
810
frensel: Kr= 1 Kt = 0 R = 0.707107 0.707107 0 T = 0 0 0
@@ -23,6 +25,8 @@ Compiled test.osl -> test.oso
2325
hypot (3, 4, 5) = 7.07107
2426
reflect (0.447214 -0.894427 0, 0 1 0) = 0.447214 0.894427 0
2527
reflect (0.447214 -0.894427 0, -1 0 0) = -0.447214 -0.894427 0
28+
faceforward (0 0 1, 0 -0.707107 -0.707107) = 0 0 1
29+
faceforward (0 0 1, 0 -0.707107 -0.707107, 0 0 -1) = 0 0 -1
2630
testing total-internal reflection:
2731
refract (0.707107 -0.707107 0, 0 1 0, 1.42) = 0 0 0
2832
frensel: Kr= 1 Kt = 0 R = 0.707107 0.707107 0 T = 0 0 0
@@ -43,6 +47,8 @@ Compiled test.osl -> test.oso
4347
hypot (3, 4, 5) = 7.07107
4448
reflect (0.447214 -0.894427 0, 0 1 0) = 0.447214 0.894427 0
4549
reflect (0.447214 -0.894427 0, -1 0 0) = -0.447214 -0.894427 0
50+
faceforward (0 0 1, 0 -0.707107 -0.707107) = 0 0 1
51+
faceforward (0 0 1, 0 -0.707107 -0.707107, 0 0 -1) = 0 0 -1
4652
testing total-internal reflection:
4753
refract (0.707107 -0.707107 0, 0 1 0, 1.42) = 0 0 0
4854
frensel: Kr= 1 Kt = 0 R = 0.707107 0.707107 0 T = 0 0 0
@@ -63,6 +69,8 @@ Compiled test.osl -> test.oso
6369
hypot (3, 4, 5) = 7.07107
6470
reflect (0.447214 -0.894427 0, 0 1 0) = 0.447214 0.894427 0
6571
reflect (0.447214 -0.894427 0, -1 0 0) = -0.447214 -0.894427 0
72+
faceforward (0 0 1, 0 -0.707107 -0.707107) = 0 0 1
73+
faceforward (0 0 1, 0 -0.707107 -0.707107, 0 0 -1) = 0 0 -1
6674
testing total-internal reflection:
6775
refract (0.707107 -0.707107 0, 0 1 0, 1.42) = 0 0 0
6876
frensel: Kr= 1 Kt = 0 R = 0.707107 0.707107 0 T = 0 0 0

testsuite/geomath/test.osl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ test ()
1616
printf (" reflect (%g, %g) = %g\n", vI, vN, pretty(reflect (vI, vN)));
1717
vN = vector(-1, 0, 0);
1818
printf (" reflect (%g, %g) = %g\n", vI, vN, pretty(reflect (vI, vN)));
19+
vI = vector(0, -1, -1);
20+
vI = normalize(vI);
21+
vN = vector(0, 0, 1);
22+
printf (" faceforward (%g, %g) = %g\n",
23+
vN, vI, pretty(faceforward (vN, vI)));
24+
vector vNg = vector(0, 0, -1);
25+
printf (" faceforward (%g, %g, %g) = %g\n",
26+
vN, vI, vNg, pretty(faceforward (vN, vI, vNg)));
1927

2028
// test total internal reflection (going from greater to lesser IOR)
2129
printf (" testing total-internal reflection:\n");

0 commit comments

Comments
 (0)