MCPcopy Create free account
hub / github.com/RenderKit/embree / derivBezier

Function derivBezier

tutorials/pathtracer/pathtracer_device.cpp:980–1020  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

978}
979
980inline Vec3fa derivBezier(const ISPCHairSet* mesh, const unsigned int primID, const float t, const float time)
981{
982 Vec3fa p00, p01, p02, p03;
983 const int i = mesh->hairs[primID].vertex;
984
985 if (mesh->numTimeSteps == 1)
986 {
987 p00 = mesh->positions[0][i+0];
988 p01 = mesh->positions[0][i+1];
989 p02 = mesh->positions[0][i+2];
990 p03 = mesh->positions[0][i+3];
991 }
992 else
993 {
994 float f = mesh->numTimeSteps*time;
995 int itime = clamp((int)floor(f),0,(int)mesh->numTimeSteps-2);
996 float t1 = f-itime;
997 float t0 = 1.0f-t1;
998 const Vec3fa a0 = mesh->positions[itime+0][i+0];
999 const Vec3fa a1 = mesh->positions[itime+0][i+1];
1000 const Vec3fa a2 = mesh->positions[itime+0][i+2];
1001 const Vec3fa a3 = mesh->positions[itime+0][i+3];
1002 const Vec3fa b0 = mesh->positions[itime+1][i+0];
1003 const Vec3fa b1 = mesh->positions[itime+1][i+1];
1004 const Vec3fa b2 = mesh->positions[itime+1][i+2];
1005 const Vec3fa b3 = mesh->positions[itime+1][i+3];
1006 p00 = t0*a0 + t1*b0;
1007 p01 = t0*a1 + t1*b1;
1008 p02 = t0*a2 + t1*b2;
1009 p03 = t0*a3 + t1*b3;
1010 }
1011
1012 const float t0 = 1.0f - t, t1 = t;
1013 const Vec3fa p10 = p00 * t0 + p01 * t1;
1014 const Vec3fa p11 = p01 * t0 + p02 * t1;
1015 const Vec3fa p12 = p02 * t0 + p03 * t1;
1016 const Vec3fa p20 = p10 * t0 + p11 * t1;
1017 const Vec3fa p21 = p11 * t0 + p12 * t1;
1018 //const Vec3fa p30 = p20 * t0 + p21 * t1;
1019 return Vec3fa(3.0f*(p21-p20));
1020}
1021
1022inline Vec3fa derivHermite(const ISPCHairSet* mesh, const unsigned int primID, const float u, const float time)
1023{

Callers 1

postIntersectGeometryFunction · 0.85

Calls 3

clampFunction · 0.50
floorFunction · 0.50
Vec3faClass · 0.50

Tested by

no test coverage detected