diff --git a/AssetStudio/Classes/AudioClip.cs b/AssetStudio/Classes/AudioClip.cs index ce96243..d4c8429 100644 --- a/AssetStudio/Classes/AudioClip.cs +++ b/AssetStudio/Classes/AudioClip.cs @@ -27,7 +27,7 @@ namespace AssetStudio public AudioCompressionFormat m_CompressionFormat; public string m_Source; - public long m_Offset; + public ulong m_Offset; public long m_Size; public ResourceReader m_AudioData; @@ -48,7 +48,7 @@ namespace AssetStudio var tsize = m_Size % 4 != 0 ? m_Size + 4 - m_Size % 4 : m_Size; if (reader.byteSize + reader.byteStart - reader.Position != tsize) { - m_Offset = reader.ReadInt32(); + m_Offset = reader.ReadUInt32(); m_Source = assetsFile.fullName + ".resS"; } } @@ -72,8 +72,9 @@ namespace AssetStudio m_Legacy3D = reader.ReadBoolean(); reader.AlignStream(); + //StreamedResource m_Resource m_Source = reader.ReadAlignedString(); - m_Offset = reader.ReadInt64(); + m_Offset = reader.ReadUInt64(); m_Size = reader.ReadInt64(); m_CompressionFormat = (AudioCompressionFormat)reader.ReadInt32(); } diff --git a/AssetStudio/Classes/Material.cs b/AssetStudio/Classes/Material.cs index abc689c..a4be183 100644 --- a/AssetStudio/Classes/Material.cs +++ b/AssetStudio/Classes/Material.cs @@ -95,6 +95,8 @@ namespace AssetStudio } m_SavedProperties = new UnityPropertySheet(reader); + + //vector m_BuildTextureStacks 2020 and up } } } diff --git a/AssetStudio/Classes/Renderer.cs b/AssetStudio/Classes/Renderer.cs index c964e8a..b751dc1 100644 --- a/AssetStudio/Classes/Renderer.cs +++ b/AssetStudio/Classes/Renderer.cs @@ -50,6 +50,10 @@ namespace AssetStudio { var m_RayTracingMode = reader.ReadByte(); } + if (version[0] >= 2020) //2020.1 and up + { + var m_RayTraceProcedural = reader.ReadByte(); + } reader.AlignStream(); } else diff --git a/AssetStudio/Classes/Shader.cs b/AssetStudio/Classes/Shader.cs index 26302c6..74f1141 100644 --- a/AssetStudio/Classes/Shader.cs +++ b/AssetStudio/Classes/Shader.cs @@ -201,6 +201,7 @@ namespace AssetStudio public SerializedShaderFloatValue zTest; public SerializedShaderFloatValue zWrite; public SerializedShaderFloatValue culling; + public SerializedShaderFloatValue conservative; public SerializedShaderFloatValue offsetFactor; public SerializedShaderFloatValue offsetUnits; public SerializedShaderFloatValue alphaToMask; @@ -239,6 +240,10 @@ namespace AssetStudio zTest = new SerializedShaderFloatValue(reader); zWrite = new SerializedShaderFloatValue(reader); culling = new SerializedShaderFloatValue(reader); + if (version[0] >= 2020) //2020.1 and up + { + conservative = new SerializedShaderFloatValue(reader); + } offsetFactor = new SerializedShaderFloatValue(reader); offsetUnits = new SerializedShaderFloatValue(reader); alphaToMask = new SerializedShaderFloatValue(reader); @@ -357,11 +362,18 @@ namespace AssetStudio { public int m_NameIndex; public int m_Index; + public int m_ArraySize; - public BufferBinding(BinaryReader reader) + public BufferBinding(ObjectReader reader) { + var version = reader.version; + m_NameIndex = reader.ReadInt32(); m_Index = reader.ReadInt32(); + if (version[0] >= 2020) //2020.1 and up + { + m_ArraySize = reader.ReadInt32(); + } } } diff --git a/AssetStudio/Classes/Texture2D.cs b/AssetStudio/Classes/Texture2D.cs index 8e334b1..583f9c7 100644 --- a/AssetStudio/Classes/Texture2D.cs +++ b/AssetStudio/Classes/Texture2D.cs @@ -4,13 +4,22 @@ namespace AssetStudio { public class StreamingInfo { - public uint offset; + public ulong offset; public uint size; public string path; public StreamingInfo(ObjectReader reader) { - offset = reader.ReadUInt32(); + var version = reader.version; + + if (version[0] >= 2020) //2020.1 and up + { + offset = reader.ReadUInt64(); + } + else + { + offset = reader.ReadUInt32(); + } size = reader.ReadUInt32(); path = reader.ReadAlignedString(); } @@ -59,6 +68,10 @@ namespace AssetStudio m_Width = reader.ReadInt32(); m_Height = reader.ReadInt32(); var m_CompleteImageSize = reader.ReadInt32(); + if (version[0] >= 2020) //2020.1 and up + { + var m_MipsStripped = reader.ReadInt32(); + } m_TextureFormat = (TextureFormat)reader.ReadInt32(); if (version[0] < 5 || (version[0] == 5 && version[1] < 2)) //5.2 down { @@ -68,9 +81,29 @@ namespace AssetStudio { m_MipCount = reader.ReadInt32(); } - var m_IsReadable = reader.ReadBoolean(); //2.6.0 and up - var m_ReadAllowed = reader.ReadBoolean(); //3.0.0 - 5.4 - //bool m_StreamingMipmaps 2018.2 and up + if (version[0] > 2 || (version[0] == 2 && version[1] >= 6)) //2.6.0 and up + { + var m_IsReadable = reader.ReadBoolean(); + } + if (version[0] >= 2020) //2020.1 and up + { + var m_IsPreProcessed = reader.ReadBoolean(); + } + if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up + { + var m_IgnoreMasterTextureLimit = reader.ReadBoolean(); + } + if (version[0] >= 3) //3.0.0 - 5.4 + { + if (version[0] < 5 || (version[0] == 5 && version[1] <= 4)) + { + var m_ReadAllowed = reader.ReadBoolean(); + } + } + if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up + { + var m_StreamingMipmaps = reader.ReadBoolean(); + } reader.AlignStream(); if (version[0] > 2018 || (version[0] == 2018 && version[1] >= 2)) //2018.2 and up { diff --git a/AssetStudio/Classes/VideoClip.cs b/AssetStudio/Classes/VideoClip.cs index 4261596..974fc05 100644 --- a/AssetStudio/Classes/VideoClip.cs +++ b/AssetStudio/Classes/VideoClip.cs @@ -1,17 +1,26 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; +using System.IO; namespace AssetStudio { + public class StreamedResource + { + public string m_Source; + public ulong m_Offset; + public ulong m_Size; + + public StreamedResource(BinaryReader reader) + { + m_Source = reader.ReadAlignedString(); + m_Offset = reader.ReadUInt64(); + m_Size = reader.ReadUInt64(); + } + } + public sealed class VideoClip : NamedObject { public ResourceReader m_VideoData; public string m_OriginalPath; - public string m_Source; - public ulong m_Size; + public StreamedResource m_ExternalResources; public VideoClip(ObjectReader reader) : base(reader) { @@ -32,20 +41,30 @@ namespace AssetStudio reader.AlignStream(); var m_AudioSampleRate = reader.ReadUInt32Array(); var m_AudioLanguage = reader.ReadStringArray(); - //StreamedResource m_ExternalResources - m_Source = reader.ReadAlignedString(); - var m_Offset = reader.ReadUInt64(); - m_Size = reader.ReadUInt64(); + if (version[0] >= 2020) //2020.1 and up + { + var m_VideoShadersSize = reader.ReadInt32(); + var m_VideoShaders = new PPtr[m_VideoShadersSize]; + for (int i = 0; i < m_VideoShadersSize; i++) + { + m_VideoShaders[i] = new PPtr(reader); + } + } + m_ExternalResources = new StreamedResource(reader); var m_HasSplitAlpha = reader.ReadBoolean(); + if (version[0] >= 2020) //2020.1 and up + { + var m_sRGB = reader.ReadBoolean(); + } ResourceReader resourceReader; - if (!string.IsNullOrEmpty(m_Source)) + if (!string.IsNullOrEmpty(m_ExternalResources.m_Source)) { - resourceReader = new ResourceReader(m_Source, assetsFile, (long)m_Offset, (int)m_Size); + resourceReader = new ResourceReader(m_ExternalResources.m_Source, assetsFile, m_ExternalResources.m_Offset, (int)m_ExternalResources.m_Size); } else { - resourceReader = new ResourceReader(reader, reader.BaseStream.Position, (int)m_Size); + resourceReader = new ResourceReader(reader, reader.BaseStream.Position, (int)m_ExternalResources.m_Size); } m_VideoData = resourceReader; } diff --git a/AssetStudio/ResourceReader.cs b/AssetStudio/ResourceReader.cs index 64d6cfe..2e02030 100644 --- a/AssetStudio/ResourceReader.cs +++ b/AssetStudio/ResourceReader.cs @@ -12,12 +12,12 @@ namespace AssetStudio private BinaryReader reader; - public ResourceReader(string path, SerializedFile assetsFile, long offset, int size) + public ResourceReader(string path, SerializedFile assetsFile, ulong offset, int size) { needSearch = true; this.path = path; this.assetsFile = assetsFile; - this.offset = offset; + this.offset = (long)offset; this.size = size; } diff --git a/AssetStudioGUI/Studio.cs b/AssetStudioGUI/Studio.cs index 70768bd..d0fb49f 100644 --- a/AssetStudioGUI/Studio.cs +++ b/AssetStudioGUI/Studio.cs @@ -155,7 +155,7 @@ namespace AssetStudioGUI break; case VideoClip m_VideoClip: if (!string.IsNullOrEmpty(m_VideoClip.m_OriginalPath)) - assetItem.FullSize = asset.byteSize + (long)m_VideoClip.m_Size; + assetItem.FullSize = asset.byteSize + (long)m_VideoClip.m_ExternalResources.m_Size; assetItem.Text = m_VideoClip.m_Name; exportable = true; break;