| 1020 | } |
| 1021 | |
| 1022 | inline Vec3fa derivHermite(const ISPCHairSet* mesh, const unsigned int primID, const float u, const float time) |
| 1023 | { |
| 1024 | Vec3fa p0, p1, t0, t1; |
| 1025 | const int i = mesh->hairs[primID].vertex; |
| 1026 | |
| 1027 | if (mesh->numTimeSteps == 1) |
| 1028 | { |
| 1029 | p0 = mesh->positions[0][i+0]; |
| 1030 | p1 = mesh->positions[0][i+1]; |
| 1031 | t0 = mesh->tangents[0][i+0]; |
| 1032 | t1 = mesh->tangents[0][i+1]; |
| 1033 | } |
| 1034 | else |
| 1035 | { |
| 1036 | float f = mesh->numTimeSteps*time; |
| 1037 | int itime = clamp((int)floor(f),0,(int)mesh->numTimeSteps-2); |
| 1038 | float time1 = f-itime; |
| 1039 | float time0 = 1.0f-time1; |
| 1040 | const Vec3fa ap0 = mesh->positions[itime+0][i+0]; |
| 1041 | const Vec3fa ap1 = mesh->positions[itime+0][i+1]; |
| 1042 | const Vec3fa at0 = mesh->tangents[itime+0][i+0]; |
| 1043 | const Vec3fa at1 = mesh->tangents[itime+0][i+1]; |
| 1044 | const Vec3fa bp0 = mesh->positions[itime+1][i+0]; |
| 1045 | const Vec3fa bp1 = mesh->positions[itime+1][i+1]; |
| 1046 | const Vec3fa bt0 = mesh->tangents[itime+1][i+0]; |
| 1047 | const Vec3fa bt1 = mesh->tangents[itime+1][i+1]; |
| 1048 | p0 = time0*ap0 + time1*bp0; |
| 1049 | p1 = time0*ap1 + time1*bp1; |
| 1050 | t0 = time0*at0 + time1*bt0; |
| 1051 | t1 = time0*at1 + time1*bt1; |
| 1052 | } |
| 1053 | const Vec3fa p00 = p0; |
| 1054 | const Vec3fa p01 = p0+(1.0f/3.0f)*t0; |
| 1055 | const Vec3fa p02 = p1-(1.0f/3.0f)*t1; |
| 1056 | const Vec3fa p03 = p1; |
| 1057 | |
| 1058 | const float u0 = 1.0f - u, u1 = u; |
| 1059 | const Vec3fa p10 = p00 * u0 + p01 * u1; |
| 1060 | const Vec3fa p11 = p01 * u0 + p02 * u1; |
| 1061 | const Vec3fa p12 = p02 * u0 + p03 * u1; |
| 1062 | const Vec3fa p20 = p10 * u0 + p11 * u1; |
| 1063 | const Vec3fa p21 = p11 * u0 + p12 * u1; |
| 1064 | //const Vec3fa p30 = p20 * u0 + p21 * u1; |
| 1065 | return Vec3fa(3.0f*(p21-p20)); |
| 1066 | } |
| 1067 | |
| 1068 | inline Vec3fa derivBSpline(const ISPCHairSet* mesh, const unsigned int primID, const float t, const float time) |
| 1069 | { |
no test coverage detected