Skip to content

Commit d6119cc

Browse files
committed
calculating improved epsilon for triangles and quads in pathtracer
1 parent 90441b5 commit d6119cc

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

CTestConfig.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
## SPDX-License-Identifier: Apache-2.0
33

44
set(CTEST_PROJECT_NAME "Embree")
5-
set(TEST_MODELS_HASH d0c335fb50d2582b250218c7cde66c981d58426d)
5+
set(TEST_MODELS_HASH 05b5a61035485d3090868f9abf5cc057d1e31101)
66

tutorials/pathtracer/pathtracer_device.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,14 @@ void postIntersectGeometry(const TutorialData& data, const Ray& ray, Differentia
11111111
{
11121112
ISPCTriangleMesh* mesh = (ISPCTriangleMesh*) geometry;
11131113
materialID = mesh->geom.materialID;
1114+
1115+
ISPCTriangle* tri = &mesh->triangles[dg.primID];
1116+
const Vec3fa p0 = Vec3fa(mesh->positions[0][tri->v0]);
1117+
const Vec3fa p1 = Vec3fa(mesh->positions[0][tri->v1]);
1118+
const Vec3fa p2 = Vec3fa(mesh->positions[0][tri->v2]);
1119+
const Vec3fa e = max(max(abs(p0),abs(p1)),max(abs(p2),abs(ray.org)));
1120+
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
1121+
11141122
if (mesh->texcoords)
11151123
{
11161124
ISPCTriangle* tri = &mesh->triangles[dg.primID];
@@ -1158,6 +1166,15 @@ void postIntersectGeometry(const TutorialData& data, const Ray& ray, Differentia
11581166
{
11591167
ISPCQuadMesh* mesh = (ISPCQuadMesh*) geometry;
11601168
materialID = mesh->geom.materialID;
1169+
1170+
ISPCQuad* quad = &mesh->quads[dg.primID];
1171+
const Vec3fa p0 = Vec3fa(mesh->positions[0][quad->v0]);
1172+
const Vec3fa p1 = Vec3fa(mesh->positions[0][quad->v1]);
1173+
const Vec3fa p2 = Vec3fa(mesh->positions[0][quad->v2]);
1174+
const Vec3fa p3 = Vec3fa(mesh->positions[0][quad->v3]);
1175+
const Vec3fa e = max(max(max(abs(p0),abs(p1)),max(abs(p2),abs(p3))),abs(ray.org));
1176+
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
1177+
11611178
if (mesh->texcoords)
11621179
{
11631180
ISPCQuad* quad = &mesh->quads[dg.primID];

tutorials/pathtracer/pathtracer_device.ispc

+17
Original file line numberDiff line numberDiff line change
@@ -1109,6 +1109,14 @@ void postIntersectGeometry(const uniform TutorialData& data, const Ray& ray, Dif
11091109
{
11101110
uniform ISPCTriangleMesh* uniform mesh = (uniform ISPCTriangleMesh* uniform) geometry;
11111111
materialID = mesh->geom.materialID;
1112+
1113+
ISPCTriangle* tri = &mesh->triangles[dg.primID];
1114+
const Vec3f p0 = make_Vec3f(mesh->positions[0][tri->v0]);
1115+
const Vec3f p1 = make_Vec3f(mesh->positions[0][tri->v1]);
1116+
const Vec3f p2 = make_Vec3f(mesh->positions[0][tri->v2]);
1117+
const Vec3f e = max(max(abs(p0),abs(p1)),max(abs(p2),abs(ray.org)));
1118+
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
1119+
11121120
if (mesh->texcoords)
11131121
{
11141122
ISPCTriangle* tri = &mesh->triangles[dg.primID];
@@ -1156,6 +1164,15 @@ void postIntersectGeometry(const uniform TutorialData& data, const Ray& ray, Dif
11561164
{
11571165
uniform ISPCQuadMesh* uniform mesh = (uniform ISPCQuadMesh* uniform) geometry;
11581166
materialID = mesh->geom.materialID;
1167+
1168+
ISPCQuad* quad = &mesh->quads[dg.primID];
1169+
const Vec3f p0 = make_Vec3f(mesh->positions[0][quad->v0]);
1170+
const Vec3f p1 = make_Vec3f(mesh->positions[0][quad->v1]);
1171+
const Vec3f p2 = make_Vec3f(mesh->positions[0][quad->v2]);
1172+
const Vec3f p3 = make_Vec3f(mesh->positions[0][quad->v3]);
1173+
const Vec3f e = max(max(max(abs(p0),abs(p1)),max(abs(p2),abs(p3))),abs(ray.org));
1174+
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
1175+
11591176
if (mesh->texcoords)
11601177
{
11611178
ISPCQuad* quad = &mesh->quads[dg.primID];

0 commit comments

Comments
 (0)