mirror of
https://github.com/aelurum/AssetStudio.git
synced 2025-05-27 22:00:23 -04:00
2018.2 support
This commit is contained in:
parent
18275557df
commit
54c2bdc728
@ -125,23 +125,27 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
reader.Position += 4;
|
reader.Position += 4;
|
||||||
}
|
}
|
||||||
//--- vector m_Handles
|
|
||||||
int numHandles = reader.ReadInt32();
|
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
||||||
for (int i = 0; i < numHandles; i++)
|
|
||||||
{
|
{
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
//--- vector m_Handles
|
||||||
reader.Position += 48;
|
int numHandles = reader.ReadInt32();
|
||||||
else
|
for (int i = 0; i < numHandles; i++)
|
||||||
reader.Position += 56;
|
{
|
||||||
}
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
||||||
//--- vector m_ColliderArray
|
reader.Position += 48;
|
||||||
int numColliders = reader.ReadInt32();
|
else
|
||||||
for (int i = 0; i < numColliders; i++)
|
reader.Position += 56;
|
||||||
{
|
}
|
||||||
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))//5.4 and up
|
//--- vector m_ColliderArray
|
||||||
reader.Position += 72;
|
int numColliders = reader.ReadInt32();
|
||||||
else
|
for (int i = 0; i < numColliders; i++)
|
||||||
reader.Position += 80;
|
{
|
||||||
|
if (version[0] > 5 || (version[0] == 5 && version[1] >= 4)) //5.4 and up
|
||||||
|
reader.Position += 72;
|
||||||
|
else
|
||||||
|
reader.Position += 80;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//--- staticvector m_HumanBoneIndex
|
//--- staticvector m_HumanBoneIndex
|
||||||
numIndexes = reader.ReadInt32();
|
numIndexes = reader.ReadInt32();
|
||||||
@ -155,11 +159,14 @@ namespace AssetStudio
|
|||||||
{
|
{
|
||||||
reader.Position += 4;
|
reader.Position += 4;
|
||||||
}
|
}
|
||||||
//--- staticvector m_ColliderIndex
|
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
||||||
int numColliderIndexes = reader.ReadInt32();
|
|
||||||
for (int i = 0; i < numColliderIndexes; i++)
|
|
||||||
{
|
{
|
||||||
reader.Position += 4;
|
//--- staticvector m_ColliderIndex
|
||||||
|
int numColliderIndexes = reader.ReadInt32();
|
||||||
|
for (int i = 0; i < numColliderIndexes; i++)
|
||||||
|
{
|
||||||
|
reader.Position += 4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var m_Scale = reader.ReadSingle();
|
var m_Scale = reader.ReadSingle();
|
||||||
var m_ArmTwist = reader.ReadSingle();
|
var m_ArmTwist = reader.ReadSingle();
|
||||||
|
@ -643,24 +643,34 @@ namespace AssetStudio
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
#region read vertex stream
|
#region read vertex stream
|
||||||
m_Skin = new List<BoneInfluence>[reader.ReadInt32()];
|
|
||||||
//m_Skin = new Dictionary<int, float>[a_Stream.ReadInt32()];
|
if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
|
||||||
for (int s = 0; s < m_Skin.Length; s++)
|
|
||||||
{
|
{
|
||||||
m_Skin[s] = new List<BoneInfluence>();
|
m_Skin = new List<BoneInfluence>[reader.ReadInt32()];
|
||||||
for (int i = 0; i < 4; i++) { m_Skin[s].Add(new BoneInfluence() { weight = reader.ReadSingle() }); }
|
//m_Skin = new Dictionary<int, float>[a_Stream.ReadInt32()];
|
||||||
for (int i = 0; i < 4; i++) { m_Skin[s][i].boneIndex = reader.ReadInt32(); }
|
for (int s = 0; s < m_Skin.Length; s++)
|
||||||
|
{
|
||||||
|
m_Skin[s] = new List<BoneInfluence>();
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
m_Skin[s].Add(new BoneInfluence() {weight = reader.ReadSingle()});
|
||||||
|
}
|
||||||
|
|
||||||
/*m_Skin[s] = new Dictionary<int, float>();
|
for (int i = 0; i < 4; i++)
|
||||||
float[] weights = new float[4] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
{
|
||||||
for (int i = 0; i < 4; i++)
|
m_Skin[s][i].boneIndex = reader.ReadInt32();
|
||||||
{
|
}
|
||||||
int boneIndex = a_Stream.ReadInt32();
|
|
||||||
m_Skin[s][boneIndex] = weights[i];
|
/*m_Skin[s] = new Dictionary<int, float>();
|
||||||
}*/
|
float[] weights = new float[4] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
int boneIndex = a_Stream.ReadInt32();
|
||||||
|
m_Skin[s][boneIndex] = weights[i];
|
||||||
|
}*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (version[0] == 3 || (version[0] == 4 && version[1] <= 2))
|
if (version[0] == 3 || (version[0] == 4 && version[1] <= 2))
|
||||||
{
|
{
|
||||||
m_BindPose = new float[reader.ReadInt32()][,];
|
m_BindPose = new float[reader.ReadInt32()][,];
|
||||||
@ -737,59 +747,45 @@ namespace AssetStudio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
if (version[0] >= 5) //ComputeCompressedStreams
|
||||||
//actual Vertex Buffer
|
|
||||||
byte[] m_DataSize = new byte[reader.ReadInt32()];
|
|
||||||
reader.Read(m_DataSize, 0, m_DataSize.Length);
|
|
||||||
|
|
||||||
if (version[0] >= 5) //create streams
|
|
||||||
{
|
{
|
||||||
m_Streams = new StreamInfo[streamCount];
|
var streamList = new List<StreamInfo>(streamCount);
|
||||||
for (int s = 0; s < streamCount; s++)
|
uint offset = 0;
|
||||||
|
for (int str = 0; str < streamCount; str++)
|
||||||
{
|
{
|
||||||
m_Streams[s] = new StreamInfo();
|
|
||||||
m_Streams[s].offset = 0;
|
|
||||||
m_Streams[s].stride = 0;
|
|
||||||
|
|
||||||
uint chnMask = 0;
|
uint chnMask = 0;
|
||||||
for (var chn = 0; chn < m_Channels.Length; chn++)
|
byte stride = 0;
|
||||||
|
for (int chn = 0; chn < m_Channels.Length; chn++)
|
||||||
{
|
{
|
||||||
var m_Channel = m_Channels[chn];
|
var m_Channel = m_Channels[chn];
|
||||||
if (m_Channel.stream == s)
|
if (m_Channel.stream == str)
|
||||||
{
|
{
|
||||||
|
stride += (byte)(m_Channel.dimension * (m_Channel.format == 0 ? 4 : 1));
|
||||||
if (m_Channel.dimension > 0)
|
if (m_Channel.dimension > 0)
|
||||||
{
|
{
|
||||||
chnMask |= 1u << chn;
|
chnMask |= 1u << chn;
|
||||||
}
|
}
|
||||||
m_Streams[s].stride += m_Channel.dimension * (4 / (int)Math.Pow(2, m_Channel.format));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s > 0)
|
var streamInfo = new StreamInfo
|
||||||
{
|
{
|
||||||
m_Streams[s].offset = m_Streams[s - 1].offset + m_Streams[s - 1].stride * m_VertexCount;
|
channelMask = new BitArray(new[] { (int)chnMask }),
|
||||||
//sometimes there are 8 bytes between streams
|
offset = (int)offset,
|
||||||
//this is NOT an alignment, even if sometimes it may seem so
|
stride = stride,
|
||||||
|
dividerOp = 0,
|
||||||
if (streamCount == 2)
|
frequency = 0
|
||||||
{
|
};
|
||||||
m_Streams[s].offset = m_DataSize.Length - m_Streams[s].stride * m_VertexCount;
|
streamList.Add(streamInfo);
|
||||||
}
|
offset += (uint)m_VertexCount * stride + (((uint)m_VertexCount & 1) != 0 ? (uint)8 : 0);
|
||||||
else
|
|
||||||
{
|
|
||||||
m_VertexCount = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*var absoluteOffset = a_Stream.Position + 4 + m_Streams[s].offset;
|
|
||||||
if ((absoluteOffset % m_Streams[s].stride) != 0)
|
|
||||||
{
|
|
||||||
m_Streams[s].offset += m_Streams[s].stride - (int)(absoluteOffset % m_Streams[s].stride);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
m_Streams[s].channelMask = new BitArray(new[] { (int)chnMask });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_Streams = streamList.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//actual Vertex Buffer
|
||||||
|
byte[] m_DataSize = new byte[reader.ReadInt32()];
|
||||||
|
reader.Read(m_DataSize, 0, m_DataSize.Length);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region compute FvF
|
#region compute FvF
|
||||||
|
@ -116,10 +116,13 @@ namespace AssetStudio
|
|||||||
// Matrix4x4f data
|
// Matrix4x4f data
|
||||||
size = reader.ReadInt32();
|
size = reader.ReadInt32();
|
||||||
reader.Position += size * 64;
|
reader.Position += size * 64;
|
||||||
// vector m_SourceSkin
|
if (version[0] == 2018 && version[1] < 2) //2018.2 down
|
||||||
// BoneWeights4 data
|
{
|
||||||
size = reader.ReadInt32();
|
// vector m_SourceSkin
|
||||||
reader.Position += size * 32;
|
// BoneWeights4 data
|
||||||
|
size = reader.ReadInt32();
|
||||||
|
reader.Position += size * 32;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -68,8 +68,13 @@ namespace AssetStudio
|
|||||||
|
|
||||||
m_IsReadable = reader.ReadBoolean(); //2.6.0 and up
|
m_IsReadable = reader.ReadBoolean(); //2.6.0 and up
|
||||||
m_ReadAllowed = reader.ReadBoolean(); //3.0.0 - 5.4
|
m_ReadAllowed = reader.ReadBoolean(); //3.0.0 - 5.4
|
||||||
|
//m_StreamingMipmaps 2018.2 and up
|
||||||
reader.AlignStream(4);
|
reader.AlignStream(4);
|
||||||
if (preloadData.HasStructMember("m_StreamingMipmapsPriority"))
|
if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up
|
||||||
|
{
|
||||||
|
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
||||||
|
}
|
||||||
|
else if (preloadData.HasStructMember("m_StreamingMipmapsPriority")) //will fix in some patch version bundle
|
||||||
{
|
{
|
||||||
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
var m_StreamingMipmapsPriority = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user