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 }
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); }
/// <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})"); } }
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); }
/// <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)); }
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; }
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); }
/// <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)); }
public GLTFast(byte[] bytes, Transform parent = null) { materialGenerator = new DefaultMaterialGenerator(); LoadGlb(bytes, parent); }
public GLTFast() { materialGenerator = new DefaultMaterialGenerator(); }
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); }
/// <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); }