MCPcopy Create free account
hub / github.com/Meshcapade/difflocks / interpolate_tbn

Function interpolate_tbn

data_loader/mesh_utils.py:112–134  ·  view source on GitHub ↗
(barys, vertex_idxs, v_tangents, v_bitangents, v_normals)

Source from the content-addressed store, hash-verified

110 return v_t, v_b, v_n
111
112def interpolate_tbn(barys, vertex_idxs, v_tangents, v_bitangents, v_normals):
113 nr_positions=barys.shape[0]
114
115 sampled_tangents = v_tangents[vertex_idxs.reshape(-1),:].reshape(nr_positions,3,3) #nr_positions x vertices_on_face(3) x 3
116 weighted_tangents = sampled_tangents*barys.reshape(nr_positions,3,1)
117 point_tangents = weighted_tangents.sum(axis=1)
118 point_tangents= point_tangents/np.linalg.norm(point_tangents,axis=-1, keepdims=True)
119
120
121 sampled_normals = v_normals[vertex_idxs.reshape(-1),:].reshape(nr_positions,3,3)
122 weighted_normals = sampled_normals*barys.reshape(nr_positions,3,1)
123 point_normals = weighted_normals.sum(axis=1)
124 point_normals= point_normals/np.linalg.norm(point_normals,axis=-1, keepdims=True)
125
126
127 point_bitangents=np.cross(point_normals,point_tangents)
128 point_bitangents= point_bitangents/np.linalg.norm(point_bitangents,axis=-1, keepdims=True)
129
130 #make sure the tangent is also orthogonal
131 point_tangents=np.cross(point_bitangents,point_normals)
132 point_tangents= point_tangents/np.linalg.norm(point_tangents,axis=-1, keepdims=True)
133
134 return point_tangents, point_bitangents, point_normals
135
136
137#strands_tbn is [B, Nr_strands, 3, 3] where each column of the 3x3 matrix is T,B,N

Callers 3

horizontally_flipFunction · 0.90
compute_tbnMethod · 0.85
tbn_space_to_worldFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected