@@ -515,12 +515,21 @@ void MeshData::TransformBuffer(const Matrix& matrix)
|
||||
for (int32 i = 0; i < blendShape.Vertices.Count(); i++)
|
||||
{
|
||||
auto& v = vv[i];
|
||||
Float3 p = Positions[v.VertexIndex], vp;
|
||||
Float3::Transform(p + v.PositionDelta, matrix, vp);
|
||||
|
||||
Float3 p = Positions[v.VertexIndex];
|
||||
Float3 vp = p + v.PositionDelta;
|
||||
Float3::Transform(vp, matrix, vp);
|
||||
Float3::Transform(p, matrix, p);
|
||||
v.PositionDelta = vp - p;
|
||||
Float3::TransformNormal(v.NormalDelta, inverseTransposeMatrix, v.NormalDelta);
|
||||
v.NormalDelta.Normalize();
|
||||
|
||||
Float3 n = Normals[v.VertexIndex];
|
||||
Float3 vn = n + v.NormalDelta;
|
||||
vn.Normalize();
|
||||
Float3::TransformNormal(vn, inverseTransposeMatrix, vn);
|
||||
vn.Normalize();
|
||||
Float3::TransformNormal(n, inverseTransposeMatrix, n);
|
||||
n.Normalize();
|
||||
v.NormalDelta = vn - n;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -640,7 +640,7 @@ void AnimatedModel::RunBlendShapeDeformer(const MeshBase* mesh, MeshDeformationD
|
||||
ASSERT_LOW_LAYER(blendShapeVertex.VertexIndex < vertexCount);
|
||||
VB0SkinnedElementType& vertex = *(data + blendShapeVertex.VertexIndex);
|
||||
vertex.Position = vertex.Position + blendShapeVertex.PositionDelta * q.Second;
|
||||
Float3 normal = (vertex.Normal.ToFloat3() * 2.0f - 1.0f) + blendShapeVertex.NormalDelta;
|
||||
Float3 normal = (vertex.Normal.ToFloat3() * 2.0f - 1.0f) + blendShapeVertex.NormalDelta * q.Second;
|
||||
vertex.Normal = normal * 0.5f + 0.5f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -786,11 +786,13 @@ bool ProcessMesh(ModelData& result, OpenFbxImporterData& data, const ofbx::Mesh*
|
||||
auto shapeNormals = shape->getNormals();
|
||||
for (int32 i = 0; i < blendShapeData.Vertices.Count(); i++)
|
||||
{
|
||||
/*auto delta = ToFloat3(shapeNormals[i + firstVertexOffset]) - mesh.Normals[i];
|
||||
auto length = delta.Length();
|
||||
if (length > ZeroTolerance)
|
||||
delta /= length;*/
|
||||
auto delta = Float3::Zero; // TODO: blend shape normals deltas fix when importing from fbx
|
||||
auto delta = ToFloat3(shapeNormals[i + firstVertexOffset]);
|
||||
if (data.ConvertRH)
|
||||
{
|
||||
// Mirror normals along the Z axis
|
||||
delta.Z *= -1.0f;
|
||||
}
|
||||
delta = delta - mesh.Normals.Get()[i];
|
||||
blendShapeData.Vertices.Get()[i].NormalDelta = delta;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user