mirror of
https://github.com/4sval/FModel.git
synced 2026-09-09 10:06:35 -05:00
bump and improving MorphTarget data generation for Snooper
Some checks are pending
FModel QA Builder / build (push) Waiting to run
Some checks are pending
FModel QA Builder / build (push) Waiting to run
This commit is contained in:
Submodule CUE4Parse updated: 33ba4d6886...1692f1e6c3
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using CUE4Parse.UE4.Assets.Exports.Animation;
|
||||
using CUE4Parse.UE4.Objects.Core.Math;
|
||||
using OpenTK.Graphics.OpenGL4;
|
||||
@@ -60,6 +61,27 @@ public class Morph : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
public Morph(float[] vertices, Dictionary<uint, int> dict, UMorphTarget morphTarget)
|
||||
{
|
||||
Name = morphTarget.Name;
|
||||
Vertices = new float[vertices.Length];
|
||||
Array.Copy(vertices, Vertices, vertices.Length);
|
||||
|
||||
foreach (var vert in morphTarget.MorphLODModels[0].Vertices)
|
||||
{
|
||||
var count = 0;
|
||||
if (dict.TryGetValue(vert.SourceIdx, out var baseIndex))
|
||||
{
|
||||
Vertices[baseIndex + count++] += vert.PositionDelta.X * Constants.SCALE_DOWN_RATIO;
|
||||
Vertices[baseIndex + count++] += vert.PositionDelta.Z * Constants.SCALE_DOWN_RATIO;
|
||||
Vertices[baseIndex + count++] += vert.PositionDelta.Y * Constants.SCALE_DOWN_RATIO;
|
||||
Vertices[baseIndex + count++] += vert.TangentZDelta.X;
|
||||
Vertices[baseIndex + count++] += vert.TangentZDelta.Z;
|
||||
Vertices[baseIndex + count++] += vert.TangentZDelta.Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Setup()
|
||||
{
|
||||
_handle = GL.CreateProgram();
|
||||
|
||||
@@ -79,13 +79,31 @@ public class SkeletalModel : UModel
|
||||
|
||||
export.PopulateMorphTargetVerticesData();
|
||||
|
||||
var verticesCount = Vertices.Length / VertexSize;
|
||||
var cachedVertices = new float[verticesCount * Morph.VertexSize];
|
||||
var vertexLookup = new Dictionary<uint, int>(verticesCount);
|
||||
for (int i = 0; i < Vertices.Length; i += VertexSize)
|
||||
{
|
||||
var count = 0;
|
||||
var baseIndex = i / VertexSize * Morph.VertexSize;
|
||||
vertexLookup[(uint) Vertices[i]] = baseIndex;
|
||||
{
|
||||
cachedVertices[baseIndex + count++] = Vertices[i + 1];
|
||||
cachedVertices[baseIndex + count++] = Vertices[i + 2];
|
||||
cachedVertices[baseIndex + count++] = Vertices[i + 3];
|
||||
cachedVertices[baseIndex + count++] = Vertices[i + 7];
|
||||
cachedVertices[baseIndex + count++] = Vertices[i + 8];
|
||||
cachedVertices[baseIndex + count++] = Vertices[i + 9];
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var morph in export.MorphTargets)
|
||||
{
|
||||
if (!morph.TryLoad(out UMorphTarget morphTarget) || morphTarget.MorphLODModels.Length < 1 ||
|
||||
morphTarget.MorphLODModels[0].Vertices.Length < 1)
|
||||
continue;
|
||||
|
||||
Morphs.Add(new Morph(Vertices, VertexSize, morphTarget));
|
||||
Morphs.Add(new Morph(cachedVertices, vertexLookup, morphTarget));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user