Example #1
0
        public static IMaterialGenerator GetDefaultMaterialGenerator()
        {
            if (defaultMaterialGenerator != null)
            {
                return(defaultMaterialGenerator);
            }

            // ReSharper disable once Unity.PerformanceCriticalCodeNullComparison
            if (GraphicsSettings.renderPipelineAsset != null)
            {
#if USING_URP
                if (GraphicsSettings.renderPipelineAsset is UniversalRenderPipelineAsset urpAsset)
                {
                    defaultMaterialGenerator = new UniveralRPMaterialGenerator(urpAsset);
                    return(defaultMaterialGenerator);
                }
#endif
#if USING_HDRP
                if (GraphicsSettings.renderPipelineAsset is HDRenderPipelineAsset)
                {
                    defaultMaterialGenerator = new HighDefinitionRPMaterialGenerator();
                    return(defaultMaterialGenerator);
                }
#endif
                throw new System.Exception("glTFast: Unknown Render Pipeline");
            }
#if GLTFAST_BUILTIN_RP || UNITY_EDITOR
            defaultMaterialGenerator = new BuiltInMaterialGenerator();
            return(defaultMaterialGenerator);
#else
            throw new System.Exception("Could not determine default MaterialGenerator");
#endif
        }
Example #2
0
        public override async Task <bool> Load(
            string url,
            IDownloadProvider downloadProvider   = null,
            IDeferAgent deferAgent               = null,
            IMaterialGenerator materialGenerator = null,
            ICodeLogger logger = null
            )
        {
            logger = logger ?? new ConsoleLogger();
            var success = await base.Load(url, downloadProvider, deferAgent, materialGenerator, logger);

            if (success)
            {
                if (deferAgent != null)
                {
                    await deferAgent.BreakPoint();
                }
                // Auto-Instantiate
                if (sceneId >= 0)
                {
                    InstantiateScene(sceneId, logger);
                }
                else
                {
                    Instantiate(logger);
                }
            }
            return(success);
        }
Example #3
0
        /// <summary>
        /// Provides the default material generator that's being used if no
        /// custom material generator was provided. The result depends on
        /// the currently used render pipeline.
        /// </summary>
        /// <returns>The default material generator</returns>
        /// <exception cref="Exception"></exception>
        public static IMaterialGenerator GetDefaultMaterialGenerator()
        {
            if (defaultMaterialGenerator != null)
            {
                return(defaultMaterialGenerator);
            }

            var renderPipeline = RenderPipelineUtils.renderPipeline;

            switch (renderPipeline)
            {
#if UNITY_SHADER_GRAPH_12_OR_NEWER && GLTFAST_BUILTIN_SHADER_GRAPH
            case RenderPipeline.BuiltIn:
                defaultMaterialGenerator = new BuiltInShaderGraphMaterialGenerator();
                return(defaultMaterialGenerator);
#elif GLTFAST_BUILTIN_RP || UNITY_EDITOR
            case RenderPipeline.BuiltIn:
                defaultMaterialGenerator = new BuiltInMaterialGenerator();
                return(defaultMaterialGenerator);
#endif
#if USING_URP
            case RenderPipeline.Universal:
                var urpAsset = (UniversalRenderPipelineAsset)(QualitySettings.renderPipeline ? QualitySettings.renderPipeline : GraphicsSettings.defaultRenderPipeline);
                defaultMaterialGenerator = new UniversalRPMaterialGenerator(urpAsset);
                return(defaultMaterialGenerator);
#endif
            case RenderPipeline.HighDefinition:
#if USING_HDRP
                defaultMaterialGenerator = new HighDefinitionRPMaterialGenerator();
                return(defaultMaterialGenerator);
#endif
            default:
                throw new System.Exception($"Could not determine default MaterialGenerator (render pipeline {renderPipeline})");
            }
        }
Example #4
0
        public override async Task <bool> Load(
            string url,
            IDownloadProvider downloadProvider   = null,
            IDeferAgent deferAgent               = null,
            IMaterialGenerator materialGenerator = null,
            ILogger logger = null
            )
        {
            importer = new GltfImport(downloadProvider, deferAgent, materialGenerator);
            var success = await importer.Load(url);

            if (success)
            {
                var insta = (GameObjectBoundsInstantiator)GetDefaultInstantiator(logger);
                // Auto-Instantiate
                if (sceneId >= 0)
                {
                    success = importer.InstantiateScene(insta, sceneId);
                }
                else
                {
                    success = importer.InstantiateMainScene(insta);
                }

                if (success)
                {
                    SetBounds(insta);
                }
            }
            return(success);
        }
Example #5
0
 /// <summary>
 /// Method for manual loading with custom <see cref="IDownloadProvider"/> and <see cref="IDeferAgent"/>.
 /// </summary>
 /// <param name="url">URL of the glTF file.</param>
 /// <param name="downloadProvider">Download Provider for custom loading (e.g. caching or HTTP authorization)</param>
 /// <param name="deferAgent">Defer Agent takes care of interrupting the
 /// loading procedure in order to keep the frame rate responsive.</param>
 /// <param name="materialGenerator">Used to convert glTF materials to <see cref="Material"/> instances</param>
 /// <param name="logger">Used for message reporting</param>
 /// <returns>Async Task that loads the glTF's contents</returns>
 public virtual async Task <bool> Load(
     string url,
     IDownloadProvider downloadProvider   = null,
     IDeferAgent deferAgent               = null,
     IMaterialGenerator materialGenerator = null,
     ICodeLogger logger = null
     )
 {
     importer = new GltfImport(downloadProvider, deferAgent, materialGenerator, logger);
     return(await importer.Load(url));
 }
Example #6
0
 public void Load(string url = null, IDeferAgent deferAgent = null, IMaterialGenerator matGenerator = null, Func <string, string> urlOverrideFunc = null)
 {
     urlFunc = urlOverrideFunc;
     if (url != null)
     {
         this.url = url;
     }
     if (gLTFastInstance == null && loadRoutine == null)
     {
         this.deferAgent = deferAgent ?? new DeferTimer();
         loadRoutine     = StartCoroutine(LoadRoutine());
     }
     if (matGenerator == null)
     {
         matGenerator = new DefaultMaterialGenerator();
     }
     materialGenerator = matGenerator;
 }
Example #7
0
        public override async Task <bool> Load(string url, IDownloadProvider downloadProvider = null, IDeferAgent deferAgent = null, IMaterialGenerator materialGenerator = null)
        {
            var success = await base.Load(url, downloadProvider, deferAgent, materialGenerator);

            if (success)
            {
                var insta = new GameObjectBoundsInstantiator(transform);
                // Auto-Instantiate
                gLTFastInstance.InstantiateGltf(insta);

                var sceneBounds = insta.CalculateBounds();
                if (sceneBounds.HasValue)
                {
                    bounds = sceneBounds.Value;
                    if (createBoxCollider)
                    {
#if UNITY_PHYSICS
                        var boxCollider = gameObject.AddComponent <BoxCollider>();
                        boxCollider.center = bounds.center;
                        boxCollider.size   = bounds.size;
#else
                        Debug.LogError("GltfBoundsAsset requires the built-in Physics package to be enabled (in the Package Manager)");
#endif
                    }
                }
            }
            return(success);
        }
Example #8
0
 /// <summary>
 /// Method for manual loading with custom <see cref="IDownloadProvider"/> and <see cref="IDeferAgent"/>.
 /// </summary>
 /// <param name="url">URL of the glTF file.</param>
 /// <param name="downloadProvider">Download Provider for custom loading (e.g. caching or HTTP authorization)</param>
 /// <param name="deferAgent">Defer Agent takes care of interrupting the
 /// loading procedure in order to keep the frame rate responsive.</param>
 public virtual async Task <bool> Load(string url, IDownloadProvider downloadProvider = null, IDeferAgent deferAgent = null, IMaterialGenerator materialGenerator = null)
 {
     gLTFastInstance = new GLTFast(downloadProvider, deferAgent, materialGenerator);
     return(await gLTFastInstance.Load(url));
 }
Example #9
0
 public GLTFast(byte[] bytes, Transform parent = null)
 {
     materialGenerator = new DefaultMaterialGenerator();
     LoadGlb(bytes, parent);
 }
Example #10
0
 public GLTFast()
 {
     materialGenerator = new DefaultMaterialGenerator();
 }
Example #11
0
        public override async Task <bool> Load(string url, IDownloadProvider downloadProvider = null, IDeferAgent deferAgent = null, IMaterialGenerator materialGenerator = null)
        {
            var success = await base.Load(url, downloadProvider, deferAgent, materialGenerator);

            if (success)
            {
                if (deferAgent != null)
                {
                    await deferAgent.BreakPoint();
                }
                // Auto-Instantiate
                gLTFastInstance.InstantiateGltf(transform);
            }
            return(success);
        }
Example #12
0
 /// <summary>
 /// Method for manual loading with custom <see cref="IDownloadProvider"/> and <see cref="IDeferAgent"/>.
 /// </summary>
 /// <param name="url">URL of the glTF file.</param>
 /// <param name="downloadProvider">Download Provider for custom loading (e.g. caching or HTTP authorization)</param>
 /// <param name="deferAgent">Defer Agent takes care of interrupting the
 /// loading procedure in order to keep the frame rate responsive.</param>
 public virtual void Load(string url, IDownloadProvider downloadProvider = null, IDeferAgent deferAgent = null, IMaterialGenerator materialGenerator = null)
 {
     gLTFastInstance = new GLTFast(this, downloadProvider, deferAgent, materialGenerator);
     gLTFastInstance.onLoadComplete += OnLoadComplete;
     gLTFastInstance.Load(url);
 }