浏览代码

Add support for noise texture in particle prewarm

David Catuhe 7 年之前
父节点
当前提交
33d78219f5

文件差异内容过多而无法显示
+ 7662 - 7660
Playground/babylon.d.txt


文件差异内容过多而无法显示
+ 7541 - 7539
dist/preview release/babylon.d.ts


+ 15 - 1
dist/preview release/viewer/babylon.viewer.d.ts

@@ -924,7 +924,7 @@ declare module BabylonViewer {
       * @param name the name of the custom optimizer configuration
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       */
-    export function getCustomOptimizerByName(name: string, upgrade?: boolean): (sceneManager: SceneManager) => boolean;
+    export function getCustomOptimizerByName(name: string, upgrade?: boolean): typeof extendedUpgrade;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
 }
 declare module BabylonViewer {
@@ -1558,6 +1558,20 @@ declare module BabylonViewer {
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
 }
 declare module BabylonViewer {
+    /**
+        * A custom upgrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedUpgrade(sceneManager: SceneManager): boolean;
+    /**
+        * A custom degrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedDegrade(sceneManager: SceneManager): boolean;
+}
+declare module BabylonViewer {
 }
 declare module BabylonViewer {
     export interface IEnvironmentMapConfiguration {

+ 18 - 1
dist/preview release/viewer/babylon.viewer.module.d.ts

@@ -985,13 +985,14 @@ declare module 'babylonjs-viewer/templating/viewerTemplatePlugin' {
 }
 
 declare module 'babylonjs-viewer/optimizer/custom' {
+    import { extendedUpgrade } from "babylonjs-viewer/optimizer/custom/extended";
     import { SceneManager } from "babylonjs-viewer/managers/sceneManager";
     /**
       *
       * @param name the name of the custom optimizer configuration
       * @param upgrade set to true if you want to upgrade optimizer and false if you want to degrade
       */
-    export function getCustomOptimizerByName(name: string, upgrade?: boolean): (sceneManager: SceneManager) => boolean;
+    export function getCustomOptimizerByName(name: string, upgrade?: boolean): typeof extendedUpgrade;
     export function registerCustomOptimizer(name: string, optimizer: (sceneManager: SceneManager) => boolean): void;
 }
 
@@ -1662,6 +1663,22 @@ declare module 'babylonjs-viewer/loader/plugins' {
     export function addLoaderPlugin(name: string, plugin: ILoaderPlugin): void;
 }
 
+declare module 'babylonjs-viewer/optimizer/custom/extended' {
+    import { SceneManager } from 'babylonjs-viewer/managers/sceneManager';
+    /**
+        * A custom upgrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedUpgrade(sceneManager: SceneManager): boolean;
+    /**
+        * A custom degrade-oriented function configuration for the scene optimizer.
+        *
+        * @param viewer the viewer to optimize
+        */
+    export function extendedDegrade(sceneManager: SceneManager): boolean;
+}
+
 declare module 'babylonjs-viewer/configuration/interfaces' {
     export * from 'babylonjs-viewer/configuration/interfaces/cameraConfiguration';
     export * from 'babylonjs-viewer/configuration/interfaces/colorGradingConfiguration';

+ 10 - 0
src/Materials/Textures/Procedurals/babylon.proceduralTexture.ts

@@ -12,8 +12,16 @@
         private _currentRefreshId = -1;
         private _refreshRate = 1;
 
+        /**
+         * Callback called when the texture is generated
+         */
         public onGenerated: () => void;
 
+        /**
+         * Event raised when the texture is generated
+         */
+        public onGeneratedObservable = new Observable<ProceduralTexture>();
+
         private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};
         private _indexBuffer: Nullable<WebGLBuffer>;
         /** get the internal effect */
@@ -417,6 +425,8 @@
             if (this.onGenerated) {
                 this.onGenerated();
             }
+
+            this.onGeneratedObservable.notifyObservers(this);
         }
 
         public clone(): ProceduralTexture {

+ 15 - 2
src/Particles/babylon.particleSystem.ts

@@ -1030,8 +1030,21 @@
             }
 
             if (this.preWarmCycles) {
-                for (var index = 0; index < this.preWarmCycles; index++) {
-                    this.animate(true);
+                let noiseTextureAsProcedural = this.noiseTexture as ProceduralTexture;
+
+                if (noiseTextureAsProcedural && noiseTextureAsProcedural.onGeneratedObservable) {
+                    noiseTextureAsProcedural.onGeneratedObservable.addOnce(() => {
+                        setTimeout(() => {
+                            for (var index = 0; index < this.preWarmCycles; index++) {
+                                this.animate(true);
+                                noiseTextureAsProcedural.render();
+                            }    
+                        });
+                    });
+                } else { 
+                    for (var index = 0; index < this.preWarmCycles; index++) {
+                        this.animate(true);
+                    }
                 }
             }
         }