calculating improved epsilon for triangles and quads in pathtracer

This commit is contained in:
Sven Woop
2023-02-15 18:11:45 +01:00
committed by Sven Woop
parent 90441b555e
commit d6119cc78d
3 changed files with 35 additions and 1 deletions
+1 -1
View File
@@ -2,5 +2,5 @@
## SPDX-License-Identifier: Apache-2.0
set(CTEST_PROJECT_NAME "Embree")
set(TEST_MODELS_HASH d0c335fb50d2582b250218c7cde66c981d58426d)
set(TEST_MODELS_HASH 05b5a61035485d3090868f9abf5cc057d1e31101)
@@ -1111,6 +1111,14 @@ void postIntersectGeometry(const TutorialData& data, const Ray& ray, Differentia
{
ISPCTriangleMesh* mesh = (ISPCTriangleMesh*) geometry;
materialID = mesh->geom.materialID;
ISPCTriangle* tri = &mesh->triangles[dg.primID];
const Vec3fa p0 = Vec3fa(mesh->positions[0][tri->v0]);
const Vec3fa p1 = Vec3fa(mesh->positions[0][tri->v1]);
const Vec3fa p2 = Vec3fa(mesh->positions[0][tri->v2]);
const Vec3fa e = max(max(abs(p0),abs(p1)),max(abs(p2),abs(ray.org)));
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
if (mesh->texcoords)
{
ISPCTriangle* tri = &mesh->triangles[dg.primID];
@@ -1158,6 +1166,15 @@ void postIntersectGeometry(const TutorialData& data, const Ray& ray, Differentia
{
ISPCQuadMesh* mesh = (ISPCQuadMesh*) geometry;
materialID = mesh->geom.materialID;
ISPCQuad* quad = &mesh->quads[dg.primID];
const Vec3fa p0 = Vec3fa(mesh->positions[0][quad->v0]);
const Vec3fa p1 = Vec3fa(mesh->positions[0][quad->v1]);
const Vec3fa p2 = Vec3fa(mesh->positions[0][quad->v2]);
const Vec3fa p3 = Vec3fa(mesh->positions[0][quad->v3]);
const Vec3fa e = max(max(max(abs(p0),abs(p1)),max(abs(p2),abs(p3))),abs(ray.org));
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
if (mesh->texcoords)
{
ISPCQuad* quad = &mesh->quads[dg.primID];
@@ -1109,6 +1109,14 @@ void postIntersectGeometry(const uniform TutorialData& data, const Ray& ray, Dif
{
uniform ISPCTriangleMesh* uniform mesh = (uniform ISPCTriangleMesh* uniform) geometry;
materialID = mesh->geom.materialID;
ISPCTriangle* tri = &mesh->triangles[dg.primID];
const Vec3f p0 = make_Vec3f(mesh->positions[0][tri->v0]);
const Vec3f p1 = make_Vec3f(mesh->positions[0][tri->v1]);
const Vec3f p2 = make_Vec3f(mesh->positions[0][tri->v2]);
const Vec3f e = max(max(abs(p0),abs(p1)),max(abs(p2),abs(ray.org)));
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
if (mesh->texcoords)
{
ISPCTriangle* tri = &mesh->triangles[dg.primID];
@@ -1156,6 +1164,15 @@ void postIntersectGeometry(const uniform TutorialData& data, const Ray& ray, Dif
{
uniform ISPCQuadMesh* uniform mesh = (uniform ISPCQuadMesh* uniform) geometry;
materialID = mesh->geom.materialID;
ISPCQuad* quad = &mesh->quads[dg.primID];
const Vec3f p0 = make_Vec3f(mesh->positions[0][quad->v0]);
const Vec3f p1 = make_Vec3f(mesh->positions[0][quad->v1]);
const Vec3f p2 = make_Vec3f(mesh->positions[0][quad->v2]);
const Vec3f p3 = make_Vec3f(mesh->positions[0][quad->v3]);
const Vec3f e = max(max(max(abs(p0),abs(p1)),max(abs(p2),abs(p3))),abs(ray.org));
dg.eps = 32.0f*1.19209e-07f*max(max(e.x,e.y),max(e.z,ray.tfar));
if (mesh->texcoords)
{
ISPCQuad* quad = &mesh->quads[dg.primID];