Compare commits

...
2 Commits
20 changed files with 80 additions and 19 deletions
@@ -177,8 +177,9 @@ namespace embree
const BezierCurve3D curve3D(v0,v1,v2,v3,0.0f,1.0f,0);
Vec3fa P,T; curve3D.eval(uu,P,T);
if (T != Vec3fa(zero))
if (runIntersectionFilter1(geometry,ray,uu,0.0f,t[i],T,geomID,curve_in.primID)) return;
runIntersectionFilter1(geometry,ray,uu,0.0f,t[i],T,geomID,curve_in.primID);
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
STAT3(normal.trav_prim_hits,1,1,1);
@@ -338,8 +339,9 @@ namespace embree
const BezierCurve3D curve3D(v0,v1,v2,v3,0.0f,1.0f,0);
Vec3fa P,T; curve3D.eval(uu,P,T);
if (T != Vec3fa(zero))
if (runIntersectionFilter1(geometry,ray,uu,0.0f,t[i],T,geomID,curve_in.primID)) return;
runIntersectionFilter1(geometry,ray,uu,0.0f,t[i],T,geomID,curve_in.primID);
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
STAT3(normal.trav_prim_hits,1,1,1);
+2 -1
View File
@@ -126,8 +126,9 @@ namespace embree
const BezierCurve3D curve3D(v0,v1,v2,v3,0.0f,1.0f,0);
Vec3fa P,T; curve3D.eval(uu,P,T);
if (T != Vec3fa(zero))
if (runIntersectionFilter1(geometry,ray,uu,0.0f,t[i],T,geomID,primID)) return;
runIntersectionFilter1(geometry,ray,uu,0.0f,t[i],T,geomID,primID);
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
STAT3(normal.trav_prim_hits,1,1,1);
+2 -1
View File
@@ -149,8 +149,9 @@ namespace embree
const BezierCurve3D curve3D(v0,v1,v2,v3,0.0f,1.0f,0);
Vec3fa P,T; curve3D.eval(uu,P,T);
if (T != Vec3fa(zero))
if (runIntersectionFilter4(geometry,ray,k,uu,0.0f,t[i],T,geomID,primID)) return;
runIntersectionFilter4(geometry,ray,k,uu,0.0f,t[i],T,geomID,primID);
valid[i] = 0;
valid &= t<ray.tfar[k];
if (none(valid)) return;
i = select_min(valid,t);
STAT3(normal.trav_prim_hits,1,1,1);
+2 -1
View File
@@ -149,8 +149,9 @@ namespace embree
const BezierCurve3D curve3D(v0,v1,v2,v3,0.0f,1.0f,0);
Vec3fa P,T; curve3D.eval(uu,P,T);
if (T != Vec3fa(zero))
if (runIntersectionFilter8(geometry,ray,k,uu,0.0f,t[i],T,geomID,primID)) return;
runIntersectionFilter8(geometry,ray,k,uu,0.0f,t[i],T,geomID,primID);
valid[i] = 0;
valid &= t<ray.tfar[k];
if (none(valid)) return;
i = select_min(valid,t);
STAT3(normal.trav_prim_hits,1,1,1);
@@ -106,8 +106,9 @@ namespace embree
}
Vec3fa Ng = Vec3fa(tri.Ng.x[i],tri.Ng.y[i],tri.Ng.z[i]);
if (runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -278,8 +278,9 @@ namespace embree
}
const Vec3fa Ng(tri.Ng.x[i],tri.Ng.y[i],tri.Ng.z[i]);
if (runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -277,8 +277,9 @@ namespace embree
}
const Vec3fa Ng(tri.Ng.x[i],tri.Ng.y[i],tri.Ng.z[i]);
if (runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -124,8 +124,9 @@ namespace embree
}
Vec3fa N = Vec3fa(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],N,geomID,tri.primID<list>(i))) return;
runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],N,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -113,8 +113,9 @@ namespace embree
}
Vec3fa _Ng = Vec3fa(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],_Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],_Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -110,8 +110,9 @@ namespace embree
}
Vec3fa N = Vec3fa(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],N,geomID,tri.primID<list>(i))) return;
runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],N,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -291,8 +291,9 @@ namespace embree
}
const Vec3fa _Ng(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],_Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],_Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -280,8 +280,9 @@ namespace embree
}
const Vec3fa N(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],N,geomID,tri.primID<list>(i))) return;
runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],N,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -291,8 +291,9 @@ namespace embree
}
const Vec3fa _Ng(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],_Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],_Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -281,8 +281,9 @@ namespace embree
}
const Vec3fa N(Ng.x[i],Ng.y[i],Ng.z[i]);
if (runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],N,geomID,tri.primID<list>(i))) return;
runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],N,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -106,8 +106,9 @@ namespace embree
}
Vec3fa Ng = Vec3fa(tri.Ng.x[i],tri.Ng.y[i],tri.Ng.z[i]);
if (runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter1(geometry,ray,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar;
if (none(valid)) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -277,8 +277,9 @@ namespace embree
}
const Vec3fa Ng(tri.Ng.x[i],tri.Ng.y[i],tri.Ng.z[i]);
if (runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter4(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
@@ -276,8 +276,9 @@ namespace embree
}
const Vec3fa Ng(tri.Ng.x[i],tri.Ng.y[i],tri.Ng.z[i]);
if (runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i))) return;
runIntersectionFilter8(geometry,ray,k,u[i],v[i],t[i],Ng,geomID,tri.primID<list>(i));
valid[i] = 0;
valid &= t<ray.tfar[k];
if (unlikely(none(valid))) return;
i = select_min(valid,t);
geomID = tri.geomID<list>(i);
+6 -1
View File
@@ -16,6 +16,7 @@
#include "tutorial/tutorial.h"
#include "tutorial/obj_loader.h"
#include "tutorial/xml_loader.h"
#include "sys/taskscheduler.h"
#include "image/image.h"
@@ -192,8 +193,12 @@ namespace embree
#endif
/* load scene */
if (filename.str() != "")
if (strlwr(filename.ext()) == "obj")
loadOBJ(filename,one,g_obj_scene);
else if (strlwr(filename.ext()) == "xml")
loadXML(filename,one,g_obj_scene);
else
THROW_RUNTIME_ERROR("invalid scene type: "+strlwr(filename.ext()));
/* initialize ray tracing core */
init(g_rtcore.c_str());
@@ -135,6 +135,17 @@ extern "C" void device_init (int8* cfg)
//renderPixel = renderPixelEyeLight;
}
/*void intersectionFilter(void* This, RTCRay& ray)
{
bool backface = dot(ray.Ng,ray.dir) > 0.0f;
if (backface) ray.tfar = 1.001f*ray.tfar;
if (backface && ray.tfar > ray.time) {
ray.geomID = RTC_INVALID_GEOMETRY_ID;
} else {
ray.time = ray.tfar;
}
}*/
RTCScene convertScene(ISPCScene* scene_in)
{
/* create scene */
@@ -171,9 +182,13 @@ RTCScene convertScene(ISPCScene* scene_in)
triangles[j].v0 = mesh->triangles[j].v0;
triangles[j].v1 = mesh->triangles[j].v1;
triangles[j].v2 = mesh->triangles[j].v2;
/*triangles[mesh->numTriangles+j].v0 = mesh->triangles[j].v1;
triangles[mesh->numTriangles+j].v1 = mesh->triangles[j].v0;
triangles[mesh->numTriangles+j].v2 = mesh->triangles[j].v2;*/
}
rtcUnmapBuffer(scene_out,geometry,RTC_INDEX_BUFFER);
#endif
//rtcSetIntersectionFilterFunction(scene_out,geometry,intersectionFilter);
}
/* commit changes to scene */
@@ -200,6 +215,10 @@ Vec3fa renderPixelStandard(float x, float y, const Vec3fa& vx, const Vec3fa& vy,
/* shade background black */
if (ray.geomID == RTC_INVALID_GEOMETRY_ID) return Vec3fa(0.0f);
/*float d = dot(normalize(ray.Ng),ray.dir);
if (d < 0.0f) return abs(d)*Vec3f(0.0f,1.0f,0.0f);
else return abs(d)*Vec3f(1.0f,0.0f,0.0f);*/
/* shade all rays that hit something */
Vec3fa color = Vec3fa(0.0f);
Vec3fa Ns = Vec3fa(0.0f);
@@ -135,6 +135,17 @@ export void device_init (uniform int8* uniform cfg)
//renderPixel = renderPixelEyeLight;
}
/*void intersectionFilter(void* uniform This, RTCRay& ray)
{
bool backface = dot(ray.Ng,ray.dir) > 0.0f;
if (backface) ray.tfar = 1.001f*ray.tfar;
if (backface && ray.tfar > ray.time) {
ray.geomID = RTC_INVALID_GEOMETRY_ID;
} else {
ray.time = ray.tfar;
}
}*/
RTCScene convertScene(uniform ISPCScene* uniform scene_in)
{
/* create scene */
@@ -171,9 +182,13 @@ RTCScene convertScene(uniform ISPCScene* uniform scene_in)
triangles[j].v0 = mesh->triangles[j].v0;
triangles[j].v1 = mesh->triangles[j].v1;
triangles[j].v2 = mesh->triangles[j].v2;
/*triangles[mesh->numTriangles+j].v0 = mesh->triangles[j].v1;
triangles[mesh->numTriangles+j].v1 = mesh->triangles[j].v0;
triangles[mesh->numTriangles+j].v2 = mesh->triangles[j].v2;*/
}
rtcUnmapBuffer(scene_out,geometry,RTC_INDEX_BUFFER);
#endif
//rtcSetIntersectionFilterFunction(scene_out,geometry,intersectionFilter);
}
/* commit changes to scene */
@@ -199,6 +214,10 @@ Vec3f renderPixelStandard(float x, float y, const uniform Vec3f& vx, const unifo
/* shade background black */
if (ray.geomID == RTC_INVALID_GEOMETRY_ID) return make_Vec3f(0.0f);
/*float d = dot(normalize(ray.Ng),ray.dir);
if (d < 0.0f) return abs(d)*make_Vec3f(0.0f,1.0f,0.0f);
else return abs(d)*make_Vec3f(1.0f,0.0f,0.0f);*/
/* shade all rays that hit something */
Vec3f color = make_Vec3f(0.0f);