public void Update_LightingMode(bool enabled, LightingMode lightingMode, float indirectBounce, int directSamples, int indirectSamples, bool aoEnabled, float aoDistance, float aoIntensityDirect, float aoIntensityIndirect, float backfaceTolerance, float resolution)
    {
        if (enabled)
        {
                        #if UNITY_EDITOR
            LB_LightingSettingsHepler.SetDirectSamples(directSamples);
            LB_LightingSettingsHepler.SetIndirectSamples(indirectSamples);
            LightmapEditorSettings.bakeResolution = resolution;
            LightmapParameters a = new LightmapParameters();
            a.name                  = "Lighting Box Very-Low";
            a.resolution            = 0.125f;
            a.clusterResolution     = 0.4f;
            a.irradianceBudget      = 96;
            a.irradianceQuality     = 8192;
            a.modellingTolerance    = 0.001f;
            a.stitchEdges           = true;
            a.isTransparent         = false;
            a.systemTag             = -1;
            a.blurRadius            = 2;
            a.antiAliasingSamples   = 8;
            a.directLightQuality    = 64;
            a.bakedLightmapTag      = -1;
            a.AOQuality             = 256;
            a.AOAntiAliasingSamples = 16;
            a.backFaceTolerance     = backfaceTolerance;

            LB_LightingSettingsHepler.SetLightmapParameters(a);

            LB_LightingSettingsHepler.SetDirectionalMode(LightmapsMode.NonDirectional);
            LB_LightingSettingsHepler.SetAmbientOcclusion(aoEnabled);
            LB_LightingSettingsHepler.SetAmbientOcclusionDirect(aoIntensityDirect);
            LB_LightingSettingsHepler.SetAmbientOcclusionDistance(aoDistance);
            LB_LightingSettingsHepler.SetAmbientOcclusionIndirect(aoIntensityIndirect);
            LB_LightingSettingsHepler.SetBounceIntensity(indirectBounce);
                        #endif
            RenderSettings.reflectionIntensity   = 0;
            RenderSettings.defaultReflectionMode = UnityEngine.Rendering.DefaultReflectionMode.Custom;

                        #if UNITY_EDITOR
            if (lightingMode == LightingMode.RealtimeGI)
            {
                Lightmapping.realtimeGI            = true;
                Lightmapping.bakedGI               = false;
                LightmapEditorSettings.lightmapper = LightmapEditorSettings.Lightmapper.Enlighten;
            }
            if (lightingMode == LightingMode.BakedProgressive)
            {
                Lightmapping.realtimeGI            = false;
                Lightmapping.bakedGI               = true;
                LightmapEditorSettings.lightmapper = LightmapEditorSettings.Lightmapper.ProgressiveCPU;
            }
            if (lightingMode == LightingMode.BakedEnlighten)
            {
                Lightmapping.realtimeGI            = false;
                Lightmapping.bakedGI               = true;
                LightmapEditorSettings.lightmapper = LightmapEditorSettings.Lightmapper.Enlighten;
            }
                        #endif
        }
    }
Exemple #2
0
        public static void SetParameters(this Renderer renderer, LightmapParameters dstParameters)
        {
            SerializedObject   rendererSO   = new SerializedObject(renderer);
            SerializedProperty parametersSP = rendererSO.FindProperty("m_LightmapParameters");

            parametersSP.objectReferenceValue = dstParameters;

            rendererSO.ApplyModifiedProperties();
        }
Exemple #3
0
        // Reference Enlighten RTGI parameters
        public static void SetLightmapParameters(SerializedObject lightmapSettings, LightmapParameters lightmapParameters)
        {
            // QUESTION: Could the parameter fields be directly embedded in the scene instead?
            // https://forum.unity.com/threads/access-lighting-window-properties-in-script.328342/#post-3320725
            // m_LightmapEditorSettings with child field m_LightmapParameters is an object reference to a .giparams file
            SerializedProperty lightmapParametersReference = lightmapSettings.FindProperty("m_LightmapEditorSettings.m_LightmapParameters");

            lightmapParametersReference.objectReferenceValue = lightmapParameters;
        }
Exemple #4
0
    }//End the button press if statement

    LightmapParameters CreateLightmapParameterFile(string path, string name, int bakeTag)//创建lightmapparameter
    {
        LightmapParameters lp = new LightmapParameters();

        lp.bakedLightmapTag = bakeTag;
        path = path + "/" + name + ".asset";
        AssetDatabase.CreateAsset(lp, path);
        AssetDatabase.ImportAsset(path);
        return((LightmapParameters)AssetDatabase.LoadAssetAtPath(path, typeof(LightmapParameters)));
    }
Exemple #5
0
    void SetRenderLightmapParameters(Terrain terrain, LightmapParameters param)//将lightmapparameter赋值给Terrain  //Renderer renderer,
    {
        //SerializedObject so = new SerializedObject(renderer);
        SerializedObject so = new SerializedObject(terrain);
        var sp = so.FindProperty("m_LightmapParameters");
        var ss = so.FindProperty("m_ScaleInLightmap");

        sp.objectReferenceValue = param;
        ss.floatValue           = 1;
        so.ApplyModifiedProperties();
    }
Exemple #6
0
        public void Read(AssetReader reader)
        {
            Resolution     = reader.ReadSingle();
            BakeResolution = reader.ReadSingle();
            TextureWidth   = reader.ReadInt32();
            TextureHeight  = reader.ReadInt32();
            AO             = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);

            AOMaxDistance        = reader.ReadSingle();
            CompAOExponent       = reader.ReadSingle();
            CompAOExponentDirect = reader.ReadSingle();
            Padding = reader.ReadInt32();
            LightmapParameters.Read(reader);
            LightmapsBakeMode    = reader.ReadInt32();
            TextureCompression   = reader.ReadBoolean();
            FinalGather          = reader.ReadBoolean();
            FinalGatherFiltering = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);

            FinalGatherRayCount   = reader.ReadInt32();
            ReflectionCompression = reader.ReadInt32();
            MixedBakeMode         = reader.ReadInt32();
            BakeBackend           = reader.ReadInt32();
            PVRSampling           = reader.ReadInt32();
            PVRDirectSampleCount  = reader.ReadInt32();
            PVRSampleCount        = reader.ReadInt32();
            PVRBounces            = reader.ReadInt32();
            PVRFilterTypeDirect   = reader.ReadInt32();
            PVRFilterTypeIndirect = reader.ReadInt32();
            PVRFilterTypeAO       = reader.ReadInt32();
            PVRFilteringMode      = reader.ReadInt32();
            PVRCulling            = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);

            PVRFilteringGaussRadiusDirect           = reader.ReadInt32();
            PVRFilteringGaussRadiusIndirect         = reader.ReadInt32();
            PVRFilteringGaussRadiusAO               = reader.ReadInt32();
            PVRFilteringAtrousPositionSigmaDirect   = reader.ReadSingle();
            PVRFilteringAtrousPositionSigmaIndirect = reader.ReadSingle();
            PVRFilteringAtrousPositionSigmaAO       = reader.ReadSingle();
            ShowResolutionOverlay = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);
        }
Exemple #7
0
        // Configure scene for lightmap baking
        public static void ConfigureLightmaps(Scene scene, LightmapBakeMode lightmapBakeMode = LightmapBakeMode.none)
        {
            // TODO: Merge these with the serialized object editing below
            Lightmapping.giWorkflowMode          = Lightmapping.GIWorkflowMode.OnDemand;
            LightmapEditorSettings.lightmapper   = LightmapEditorSettings.Lightmapper.Enlighten;
            LightmapEditorSettings.lightmapsMode = LightmapsMode.CombinedDirectional;
            Lightmapping.realtimeGI = true;
            Lightmapping.bakedGI    = true;
            LightmapEditorSettings.mixedBakeMode = MixedLightingMode.IndirectOnly;             // Expect no mixed mode lighting

            if (lightmapBakeMode == LightmapBakeMode.none)
            {
                return;
            }
            LightmapParameters lightmapParameters = null;
            SerializedObject   lightmapSettings   = GetLightmapSettings(scene);

            switch (lightmapBakeMode)
            {
            case LightmapBakeMode.fast:
                FastResolution(lightmapSettings);
                FastAmbientOcclusion(lightmapSettings);
                FastFinalGather(lightmapSettings);
                lightmapParameters = AssetDatabase.LoadAssetAtPath <LightmapParameters>(fastParametersPath);
                break;

            case LightmapBakeMode.good:
                GoodResolution(lightmapSettings);
                GoodAmbientOcclusion(lightmapSettings);
                GoodFinalGather(lightmapSettings);
                lightmapParameters = AssetDatabase.LoadAssetAtPath <LightmapParameters>(goodParametersPath);
                break;
            }
            if (lightmapParameters)
            {
                SetLightmapParameters(lightmapSettings, lightmapParameters);
            }
            else
            {
                Debug.LogWarning($"Missing asset: {fastParametersPath}");
            }
            lightmapSettings.ApplyModifiedProperties();
        }
Exemple #8
0
        public YAMLNode ExportYAML(IExportContainer container)
        {
            YAMLMappingNode node = new YAMLMappingNode();

            node.AddSerializedVersion(GetSerializedVersion(container.Version));
            node.Add("m_Resolution", Resolution);
            node.Add("m_BakeResolution", BakeResolution);
            node.Add("m_TextureWidth", TextureWidth);
            node.Add("m_TextureHeight", TextureHeight);
            node.Add("m_AO", AO);
            node.Add("m_AOMaxDistance", AOMaxDistance);
            node.Add("m_CompAOExponent", CompAOExponent);
            node.Add("m_CompAOExponentDirect", CompAOExponentDirect);
            node.Add("m_Padding", Padding);
            node.Add("m_LightmapParameters", LightmapParameters.ExportYAML(container));
            node.Add("m_LightmapsBakeMode", LightmapsBakeMode);
            node.Add("m_TextureCompression", TextureCompression);
            node.Add("m_FinalGather", FinalGather);
            node.Add("m_FinalGatherFiltering", FinalGatherFiltering);
            node.Add("m_FinalGatherRayCount", FinalGatherRayCount);
            node.Add("m_ReflectionCompression", ReflectionCompression);
            node.Add("m_MixedBakeMode", MixedBakeMode);
            node.Add("m_BakeBackend", BakeBackend);
            node.Add("m_PVRSampling", PVRSampling);
            node.Add("m_PVRDirectSampleCount", PVRDirectSampleCount);
            node.Add("m_PVRSampleCount", PVRSampleCount);
            node.Add("m_PVRBounces", PVRBounces);
            node.Add("m_PVRFilterTypeDirect", PVRFilterTypeDirect);
            node.Add("m_PVRFilterTypeIndirect", PVRFilterTypeIndirect);
            node.Add("m_PVRFilterTypeAO", PVRFilterTypeAO);
            node.Add("m_PVRFilteringMode", PVRFilteringMode);
            node.Add("m_PVRCulling", PVRCulling);
            node.Add("m_PVRFilteringGaussRadiusDirect", PVRFilteringGaussRadiusDirect);
            node.Add("m_PVRFilteringGaussRadiusIndirect", PVRFilteringGaussRadiusIndirect);
            node.Add("m_PVRFilteringGaussRadiusAO", PVRFilteringGaussRadiusAO);
            node.Add("m_PVRFilteringAtrousPositionSigmaDirect", PVRFilteringAtrousPositionSigmaDirect);
            node.Add("m_PVRFilteringAtrousPositionSigmaIndirect", PVRFilteringAtrousPositionSigmaIndirect);
            node.Add("m_PVRFilteringAtrousPositionSigmaAO", PVRFilteringAtrousPositionSigmaAO);
            node.Add("m_ShowResolutionOverlay", ShowResolutionOverlay);
            return(node);
        }
Exemple #9
0
        public YAMLNode ExportYAML(IExportContainer container)
        {
            YAMLMappingNode node = new YAMLMappingNode();

            node.AddSerializedVersion(GetSerializedVersion(container.ExportVersion));
            node.Add(ResolutionName, Resolution);
            node.Add(BakeResolutionName, BakeResolution);
            if (IsReadAtlasSize(container.Version))
            {
                node.Add(AtlasSizeName, AtlasSize);
            }
            else
            {
                node.Add(TextureWidthName, TextureWidth);
                node.Add(TextureHeightName, TextureHeight);
            }
            node.Add(AOName, AO);
            node.Add(AOMaxDistanceName, AOMaxDistance);
            node.Add(CompAOExponentName, CompAOExponent);
            node.Add(CompAOExponentDirectName, CompAOExponentDirect);
            if (IsReadExtractAmbientOcclusion(container.ExportVersion))
            {
                node.Add(ExtractAmbientOcclusionName, ExtractAmbientOcclusion);
            }
            node.Add(PaddingName, Padding);
            node.Add(LightmapParametersName, LightmapParameters.ExportYAML(container));
            node.Add(LightmapsBakeModeName, (int)LightmapsBakeMode);
            node.Add(TextureCompressionName, TextureCompression);
            node.Add(FinalGatherName, FinalGather);
            node.Add(FinalGatherFilteringName, FinalGatherFiltering);
            node.Add(FinalGatherRayCountName, FinalGatherRayCount);
            node.Add(ReflectionCompressionName, (int)ReflectionCompression);
            node.Add(MixedBakeModeName, (int)MixedBakeMode);
            node.Add(BakeBackendName, (int)BakeBackend);
            node.Add(PVRSamplingName, (int)PVRSampling);
            node.Add(PVRDirectSampleCountName, PVRDirectSampleCount);
            node.Add(PVRSampleCountName, PVRSampleCount);
            node.Add(PVRBouncesName, PVRBounces);
            if (IsReadPVREnvironmentSampleCount(container.ExportVersion))
            {
                node.Add(PVREnvironmentSampleCountName, GetPVREnvironmentSampleCount(container.Version));
                node.Add(PVREnvironmentReferencePointCountName, GetPVREnvironmentReferencePointCount(container.Version));
            }
            node.Add(PVRFilteringModeName, (int)GetPVRFilteringMode(container.Version));
            if (IsReadPVREnvironmentSampleCount(container.ExportVersion))
            {
                node.Add(PVRDenoiserTypeDirectName, (int)GetPVRDenoiserTypeDirect(container.Version));
                node.Add(PVRDenoiserTypeIndirectName, (int)GetPVRDenoiserTypeIndirect(container.Version));
                node.Add(PVRDenoiserTypeAOName, (int)GetPVRDenoiserTypeAO(container.Version));
            }
            node.Add(PVRFilterTypeDirectName, (int)GetPVRFilterTypeDirect(container.Version));
            node.Add(PVRFilterTypeIndirectName, (int)PVRFilterTypeIndirect);
            node.Add(PVRFilterTypeAOName, (int)GetPVRFilterTypeAO(container.Version));
            if (IsReadPVREnvironmentMIS(container.ExportVersion))
            {
                node.Add(PVREnvironmentMISName, GetPVREnvironmentMIS(container.Version));
            }
            node.Add(PVRCullingName, PVRCulling);
            node.Add(PVRFilteringGaussRadiusDirectName, GetPVRFilteringGaussRadiusDirect(container.Version));
            node.Add(PVRFilteringGaussRadiusIndirectName, GetPVRFilteringGaussRadiusIndirect(container.Version));
            node.Add(PVRFilteringGaussRadiusAOName, GetPVRFilteringGaussRadiusAO(container.Version));
            node.Add(PVRFilteringAtrousPositionSigmaDirectName, PVRFilteringAtrousPositionSigmaDirect);
            node.Add(PVRFilteringAtrousPositionSigmaIndirectName, PVRFilteringAtrousPositionSigmaIndirect);
            node.Add(PVRFilteringAtrousPositionSigmaAOName, PVRFilteringAtrousPositionSigmaAO);
            if (IsReadShowResolutionOverlay(container.ExportVersion))
            {
                node.Add(ShowResolutionOverlayName, ShowResolutionOverlay);
            }
            if (IsReadExportTrainingData(container.ExportVersion))
            {
                node.Add(ExportTrainingDataName, ExportTrainingData);
            }
            if (IsReadTrainingDataDestination(container.ExportVersion))
            {
                node.Add(TrainingDataDestinationName, GetTrainingDataDestination(container.Version));
            }
            return(node);
        }
Exemple #10
0
        public void Read(AssetReader reader)
        {
            Resolution     = reader.ReadSingle();
            BakeResolution = reader.ReadSingle();
            if (IsReadAtlasSize(reader.Version))
            {
                int AtlasSize = reader.ReadInt32();
                TextureWidth = TextureHeight = AtlasSize;
            }
            else
            {
                TextureWidth  = reader.ReadInt32();
                TextureHeight = reader.ReadInt32();
            }
            AO = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);

            AOMaxDistance        = reader.ReadSingle();
            CompAOExponent       = reader.ReadSingle();
            CompAOExponentDirect = reader.ReadSingle();
            if (IsReadExtractAmbientOcclusion(reader.Version))
            {
                ExtractAmbientOcclusion = reader.ReadBoolean();
                reader.AlignStream(AlignType.Align4);
            }
            Padding = reader.ReadInt32();
            LightmapParameters.Read(reader);
            LightmapsBakeMode    = (LightmapsMode)reader.ReadInt32();
            TextureCompression   = reader.ReadBoolean();
            FinalGather          = reader.ReadBoolean();
            FinalGatherFiltering = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);

            FinalGatherRayCount   = reader.ReadInt32();
            ReflectionCompression = (ReflectionCubemapCompression)reader.ReadInt32();
            MixedBakeMode         = (MixedLightingMode)reader.ReadInt32();
            BakeBackend           = (Lightmapper)reader.ReadInt32();
            PVRSampling           = (Sampling)reader.ReadInt32();
            PVRDirectSampleCount  = reader.ReadInt32();
            PVRSampleCount        = reader.ReadInt32();
            PVRBounces            = reader.ReadInt32();
            if (IsReadPVREnvironmentSampleCount(reader.Version))
            {
                PVREnvironmentSampleCount         = reader.ReadInt32();
                PVREnvironmentReferencePointCount = reader.ReadInt32();
                PVRFilteringMode        = (FilterMode)reader.ReadInt32();
                PVRDenoiserTypeDirect   = (DenoiserType)reader.ReadInt32();
                PVRDenoiserTypeIndirect = (DenoiserType)reader.ReadInt32();
                PVRDenoiserTypeAO       = (DenoiserType)reader.ReadInt32();
            }
            PVRFilterTypeDirect   = (FilterType)reader.ReadInt32();
            PVRFilterTypeIndirect = (FilterType)reader.ReadInt32();
            PVRFilterTypeAO       = (FilterType)reader.ReadInt32();
            if (IsReadPVREnvironmentMIS(reader.Version))
            {
                PVREnvironmentMIS = reader.ReadInt32();
            }
            if (!IsReadPVREnvironmentSampleCount(reader.Version))
            {
                PVRFilteringMode = (FilterMode)reader.ReadInt32();
            }
            PVRCulling = reader.ReadBoolean();
            reader.AlignStream(AlignType.Align4);

            PVRFilteringGaussRadiusDirect           = reader.ReadInt32();
            PVRFilteringGaussRadiusIndirect         = reader.ReadInt32();
            PVRFilteringGaussRadiusAO               = reader.ReadInt32();
            PVRFilteringAtrousPositionSigmaDirect   = reader.ReadSingle();
            PVRFilteringAtrousPositionSigmaIndirect = reader.ReadSingle();
            PVRFilteringAtrousPositionSigmaAO       = reader.ReadSingle();
            if (IsReadShowResolutionOverlay(reader.Version))
            {
                ShowResolutionOverlay = reader.ReadBoolean();
            }
            reader.AlignStream(AlignType.Align4);

            if (IsReadExportTrainingData(reader.Version))
            {
                ExportTrainingData = reader.ReadBoolean();
                reader.AlignStream(AlignType.Align4);
            }
            if (IsReadTrainingDataDestination(reader.Version))
            {
                TrainingDataDestination = reader.ReadString();
            }
        }
        private static bool GetEngineBuildInAsset(Object asset, Version version, out EngineBuiltInAsset engineAsset)
        {
            switch (asset.ClassID)
            {
            case ClassIDType.Material:
            {
                Material material = (Material)asset;
                if (EngineBuiltInAssets.TryGetMaterial(material.Name, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.Texture2D:
            {
                Texture2D texture = (Texture2D)asset;
                if (EngineBuiltInAssets.TryGetTexture(texture.Name, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.Mesh:
            {
                Mesh mesh = (Mesh)asset;
                if (EngineBuiltInAssets.TryGetMesh(mesh.Name, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.Shader:
            {
                Shader shader = (Shader)asset;
                if (EngineBuiltInAssets.TryGetShader(shader.ValidName, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.Font:
            {
                Font font = (Font)asset;
                if (EngineBuiltInAssets.TryGetFont(font.Name, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.Sprite:
            {
                Sprite sprite = (Sprite)asset;
                if (EngineBuiltInAssets.TryGetSprite(sprite.Name, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.LightmapParameters:
            {
                LightmapParameters lightParams = (LightmapParameters)asset;
                if (EngineBuiltInAssets.TryGetLightmapParams(lightParams.Name, version, out engineAsset))
                {
                    return(true);
                }
            }
            break;

            case ClassIDType.MonoBehaviour:
            {
                MonoBehaviour behaviour = (MonoBehaviour)asset;
                if (behaviour.Name != string.Empty)
                {
                    if (EngineBuiltInAssets.TryGetBehaviour(behaviour.Name, version, out engineAsset))
                    {
                        return(true);
                    }
                }
            }
            break;
            }
            engineAsset = default;
            return(false);
        }
Exemple #12
0
 public static void SetLightmapParameters(LightmapParameters parameter)
 {
     SetObject("m_LightmapEditorSettings.m_LightmapParameters", (Object)parameter);
 }
Exemple #13
0
 public IEnumerable <Object> FetchDependencies(ISerializedFile file, bool isLog = false)
 {
     yield return(LightmapParameters.FetchDependency(file, isLog, () => nameof(LightmapEditorSettings), LightmapParametersName));
 }
Exemple #14
0
        private static EngineBuiltInAsset GetEngineBuildInAsset(Object asset)
        {
            switch (asset.ClassID)
            {
            case ClassIDType.Material:
            {
                Material material = (Material)asset;
                if (EngineBuiltInAssets.Materials.TryGetValue(material.Name, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;

            case ClassIDType.Texture2D:
            {
                Texture2D texture = (Texture2D)asset;
                if (EngineBuiltInAssets.Textures.TryGetValue(texture.Name, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;

            case ClassIDType.Mesh:
            {
                Mesh mesh = (Mesh)asset;
                if (EngineBuiltInAssets.Meshes.TryGetValue(mesh.Name, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;

            case ClassIDType.Shader:
            {
                Shader shader = (Shader)asset;
                if (EngineBuiltInAssets.Shaders.TryGetValue(shader.ValidName, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;

            case ClassIDType.Font:
            {
                Font font = (Font)asset;
                if (EngineBuiltInAssets.Fonts.TryGetValue(font.Name, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;

            case ClassIDType.Sprite:
            {
                Sprite sprite = (Sprite)asset;
                if (EngineBuiltInAssets.Sprites.TryGetValue(sprite.Name, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;

            case ClassIDType.LightmapParameters:
            {
                LightmapParameters lightParams = (LightmapParameters)asset;
                if (EngineBuiltInAssets.LightmapParams.TryGetValue(lightParams.Name, out EngineBuiltInAsset engineAsset))
                {
                    return(engineAsset);
                }
            }
            break;
            }
            return(default);
        private static Object ReadAsset(AssetStream stream, AssetInfo assetInfo, long offset, int size)
        {
            Object asset;

            switch (assetInfo.ClassID)
            {
            case ClassIDType.GameObject:
                asset = new GameObject(assetInfo);
                break;

            case ClassIDType.Transform:
                asset = new Transform(assetInfo);
                break;

            case ClassIDType.Camera:
                asset = new Camera(assetInfo);
                break;

            case ClassIDType.Material:
                asset = new Material(assetInfo);
                break;

            case ClassIDType.MeshRenderer:
                asset = new MeshRenderer(assetInfo);
                break;

            case ClassIDType.Texture2D:
                asset = new Texture2D(assetInfo);
                break;

            case ClassIDType.SceneSettings:
                asset = new OcclusionCullingSettings(assetInfo);
                break;

            case ClassIDType.MeshFilter:
                asset = new MeshFilter(assetInfo);
                break;

            case ClassIDType.OcclusionPortal:
                asset = new OcclusionPortal(assetInfo);
                break;

            case ClassIDType.Mesh:
                asset = new Mesh(assetInfo);
                break;

            case ClassIDType.Shader:
                asset = new Shader(assetInfo);
                break;

            case ClassIDType.TextAsset:
                asset = new TextAsset(assetInfo);
                break;

            case ClassIDType.Rigidbody2D:
                asset = new Rigidbody2D(assetInfo);
                break;

            case ClassIDType.Rigidbody:
                asset = new Rigidbody(assetInfo);
                break;

            case ClassIDType.CircleCollider2D:
                asset = new CircleCollider2D(assetInfo);
                break;

            case ClassIDType.PolygonCollider2D:
                asset = new PolygonCollider2D(assetInfo);
                break;

            case ClassIDType.BoxCollider2D:
                asset = new BoxCollider2D(assetInfo);
                break;

            case ClassIDType.PhysicsMaterial2D:
                asset = new PhysicsMaterial2D(assetInfo);
                break;

            case ClassIDType.MeshCollider:
                asset = new MeshCollider(assetInfo);
                break;

            case ClassIDType.BoxCollider:
                asset = new BoxCollider(assetInfo);
                break;

            case ClassIDType.SpriteCollider2D:
                asset = new CompositeCollider2D(assetInfo);
                break;

            case ClassIDType.EdgeCollider2D:
                asset = new EdgeCollider2D(assetInfo);
                break;

            case ClassIDType.CapsuleCollider2D:
                asset = new CapsuleCollider2D(assetInfo);
                break;

            case ClassIDType.AnimationClip:
                asset = new AnimationClip(assetInfo);
                break;

            case ClassIDType.AudioListener:
                asset = new AudioListener(assetInfo);
                break;

            case ClassIDType.AudioSource:
                asset = new AudioSource(assetInfo);
                break;

            case ClassIDType.AudioClip:
                asset = new AudioClip(assetInfo);
                break;

            case ClassIDType.RenderTexture:
                asset = new RenderTexture(assetInfo);
                break;

            case ClassIDType.Cubemap:
                asset = new Cubemap(assetInfo);
                break;

            case ClassIDType.Avatar:
                asset = new Avatar(assetInfo);
                break;

            case ClassIDType.AnimatorController:
                asset = new AnimatorController(assetInfo);
                break;

            case ClassIDType.GUILayer:
                asset = new GUILayer(assetInfo);
                break;

            case ClassIDType.Animator:
                asset = new Animator(assetInfo);
                break;

            case ClassIDType.RenderSettings:
                asset = new RenderSettings(assetInfo);
                break;

            case ClassIDType.Light:
                asset = new Light(assetInfo);
                break;

            case ClassIDType.Animation:
                asset = new Animation(assetInfo);
                break;

            case ClassIDType.MonoScript:
                asset = new MonoScript(assetInfo);
                break;

            case ClassIDType.NewAnimationTrack:
                asset = new NewAnimationTrack(assetInfo);
                break;

            case ClassIDType.FlareLayer:
                asset = new FlareLayer(assetInfo);
                break;

            case ClassIDType.Font:
                asset = new Font(assetInfo);
                break;

            case ClassIDType.PhysicMaterial:
                asset = new PhysicMaterial(assetInfo);
                break;

            case ClassIDType.SphereCollider:
                asset = new SphereCollider(assetInfo);
                break;

            case ClassIDType.CapsuleCollider:
                asset = new CapsuleCollider(assetInfo);
                break;

            case ClassIDType.SkinnedMeshRenderer:
                asset = new SkinnedMeshRenderer(assetInfo);
                break;

            case ClassIDType.BuildSettings:
                asset = new BuildSettings(assetInfo);
                break;

            case ClassIDType.AssetBundle:
                asset = new AssetBundle(assetInfo);
                break;

            case ClassIDType.WheelCollider:
                asset = new WheelCollider(assetInfo);
                break;

            case ClassIDType.MovieTexture:
                asset = new MovieTexture(assetInfo);
                break;

            case ClassIDType.TerrainCollider:
                asset = new TerrainCollider(assetInfo);
                break;

            case ClassIDType.TerrainData:
                asset = new TerrainData(assetInfo);
                break;

            case ClassIDType.LightmapSettings:
                asset = new LightmapSettings(assetInfo);
                break;

            case ClassIDType.OcclusionArea:
                asset = new OcclusionArea(assetInfo);
                break;

            case ClassIDType.NavMeshSettings:
                asset = new NavMeshSettings(assetInfo);
                break;

            case ClassIDType.ParticleSystem:
                asset = new ParticleSystem(assetInfo);
                break;

            case ClassIDType.ParticleSystemRenderer:
                asset = new ParticleSystemRenderer(assetInfo);
                break;

            case ClassIDType.SpriteRenderer:
                asset = new SpriteRenderer(assetInfo);
                break;

            case ClassIDType.Sprite:
                asset = new Sprite(assetInfo);
                break;

            case ClassIDType.Terrain:
                asset = new Terrain(assetInfo);
                break;

            case ClassIDType.AnimatorOverrideController:
                asset = new AnimatorOverrideController(assetInfo);
                break;

            case ClassIDType.CanvasRenderer:
                asset = new CanvasRenderer(assetInfo);
                break;

            case ClassIDType.Canvas:
                asset = new Canvas(assetInfo);
                break;

            case ClassIDType.RectTransform:
                asset = new RectTransform(assetInfo);
                break;

            case ClassIDType.NavMeshData:
                asset = new NavMeshData(assetInfo);
                break;

            case ClassIDType.OcclusionCullingData:
                asset = new OcclusionCullingData(assetInfo);
                break;

            case ClassIDType.SceneAsset:
                asset = new SceneAsset(assetInfo);
                break;

            case ClassIDType.LightmapParameters:
                asset = new LightmapParameters(assetInfo);
                break;

            case ClassIDType.SpriteAtlas:
                asset = new SpriteAtlas(assetInfo);
                break;

            default:
                return(null);
            }

            stream.BaseStream.Position = offset;
            if (Config.IsGenerateGUIDByContent)
            {
                byte[] data = stream.ReadBytes(size);
                asset.Read(data);

                using (MD5 md5 = MD5.Create())
                {
                    byte[] md5Hash = md5.ComputeHash(data);
                    assetInfo.GUID = new UtinyGUID(md5Hash);
                }
            }
            else
            {
                stream.AlignPosition = offset;
                asset.Read(stream);
                long read = stream.BaseStream.Position - offset;
                if (read != size)
                {
                    throw new Exception($"Read {read} but expected {size} for object {asset.GetType().Name}");
                }
            }
            return(asset);
        }