Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d515dd015f | ||
|
|
ce043ad1d1 |
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user