初始化高斯模糊场景相关
This commit is contained in:
		
							
								
								
									
										115
									
								
								assets/effects/sprite-gaussian-blur.effect
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								assets/effects/sprite-gaussian-blur.effect
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.   | ||||
| // 高斯模糊 | ||||
|  | ||||
| CCEffect %{ | ||||
|   techniques: | ||||
|   - passes: | ||||
|     - vert: vs | ||||
|       frag: fs | ||||
|       blendState: | ||||
|         targets: | ||||
|         - blend: true | ||||
|       rasterizerState: | ||||
|         cullMode: none | ||||
|       properties: | ||||
|         texture: { value: white } | ||||
|         alphaThreshold: { value: 0.5 } | ||||
|         # # 灰化程度 | ||||
|         # grayLevel: { | ||||
|         #   value: 1.0, | ||||
|         #   inspector: { | ||||
|         #     tooltip: "灰化程度", | ||||
|         #     range: [0.0, 1.0] | ||||
|         #   } | ||||
|         # } | ||||
| }% | ||||
|  | ||||
|  | ||||
| CCProgram vs %{ | ||||
|   precision highp float; | ||||
|  | ||||
|   #include <cc-global> | ||||
|   #include <cc-local> | ||||
|  | ||||
|   in vec3 a_position; | ||||
|   in vec4 a_color; | ||||
|   out vec4 v_color; | ||||
|  | ||||
|   #if USE_TEXTURE | ||||
|   in vec2 a_uv0; | ||||
|   out vec2 v_uv0; | ||||
|   #endif | ||||
|  | ||||
|   void main () { | ||||
|     vec4 pos = vec4(a_position, 1); | ||||
|  | ||||
|     #if CC_USE_MODEL | ||||
|     pos = cc_matViewProj * cc_matWorld * pos; | ||||
|     #else | ||||
|     pos = cc_matViewProj * pos; | ||||
|     #endif | ||||
|  | ||||
|     #if USE_TEXTURE | ||||
|     v_uv0 = a_uv0; | ||||
|     #endif | ||||
|  | ||||
|     v_color = a_color; | ||||
|  | ||||
|     gl_Position = pos; | ||||
|   } | ||||
| }% | ||||
|  | ||||
|  | ||||
| CCProgram fs %{ | ||||
|   precision highp float; | ||||
|    | ||||
|   #include <alpha-test> | ||||
|  | ||||
|   in vec4 v_color; | ||||
|  | ||||
|   #if USE_TEXTURE | ||||
|   in vec2 v_uv0; | ||||
|   uniform sampler2D texture; | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLE_GAUSSIAN_BLUR | ||||
|  | ||||
|   // 定义无理数 | ||||
|   #define e 2.718281828459045 | ||||
|  | ||||
|   // 定义标准方差值 | ||||
|   #define stdDev 0.84089642 | ||||
|  | ||||
|   // 定义π | ||||
|   #define pi 3.141592653589793 | ||||
|  | ||||
|   // // 接收外部变量 | ||||
|   // uniform GaussianBlur { | ||||
|   // } | ||||
|  | ||||
|   float getGaussianBlur() | ||||
|  | ||||
|  | ||||
|   // float matrix[4];  | ||||
|   // float matrix[0] = 0.0; | ||||
|   #endif | ||||
|  | ||||
|   void main () { | ||||
|     vec4 o = vec4(1, 1, 1, 1); | ||||
|  | ||||
|     #if USE_TEXTURE | ||||
|     o *= texture(texture, v_uv0); | ||||
|       #if CC_USE_ALPHA_ATLAS_TEXTURE | ||||
|       o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r; | ||||
|       #endif | ||||
|     #endif | ||||
|  | ||||
|     o *= v_color; | ||||
|  | ||||
|     ALPHA_TEST(o); | ||||
|  | ||||
|     #if ENABLE_GAUSSIAN_BLUR | ||||
|     #endif | ||||
|     gl_FragColor = o; | ||||
|   } | ||||
| }% | ||||
							
								
								
									
										17
									
								
								assets/effects/sprite-gaussian-blur.effect.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								assets/effects/sprite-gaussian-blur.effect.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| { | ||||
|   "ver": "1.0.23", | ||||
|   "uuid": "41f4d474-d707-45bb-af93-637573f92d54", | ||||
|   "compiledShaders": [ | ||||
|     { | ||||
|       "glsl1": { | ||||
|         "vert": "\nprecision highp float;\nuniform mat4 cc_matViewProj;\nuniform mat4 cc_matWorld;\n\nattribute vec3 a_position;\nattribute vec4 a_color;\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nattribute vec2 a_uv0;\nvarying vec2 v_uv0;\n#endif\n\nvoid main () {\n  vec4 pos = vec4(a_position, 1);\n\n  #if CC_USE_MODEL\n  pos = cc_matViewProj * cc_matWorld * pos;\n  #else\n  pos = cc_matViewProj * pos;\n  #endif\n\n  #if USE_TEXTURE\n  v_uv0 = a_uv0;\n  #endif\n\n  v_color = a_color;\n\n  gl_Position = pos;\n}\n", | ||||
|         "frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n  \n  uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n  #if USE_ALPHA_TEST\n      if (color.a < alphaThreshold) discard;\n  #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n  #if USE_ALPHA_TEST\n      if (alpha < alphaThreshold) discard;\n  #endif\n}\n\nvarying vec4 v_color;\n\n#if USE_TEXTURE\nvarying vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if ENABLE_GAUSSIAN_BLUR\n\n#endif\n\nvoid main () {\n  vec4 o = vec4(1, 1, 1, 1);\n\n  #if USE_TEXTURE\n  o *= texture2D(texture, v_uv0);\n    #if CC_USE_ALPHA_ATLAS_TEXTURE\n    o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n    #endif\n  #endif\n\n  o *= v_color;\n\n  ALPHA_TEST(o);\n\n  #if ENABLE_GAUSSIAN_BLUR\n  #endif\n  gl_FragColor = o;\n}\n" | ||||
|       }, | ||||
|       "glsl3": { | ||||
|         "vert": "\nprecision highp float;\nuniform CCGlobal {\n  vec4 cc_time;\n\n  vec4 cc_screenSize;\n\n  vec4 cc_screenScale;\n\n  vec4 cc_nativeSize;\n\n  mat4 cc_matView;\n  mat4 cc_matViewInv;\n  mat4 cc_matProj;\n  mat4 cc_matProjInv;\n  mat4 cc_matViewProj;\n  mat4 cc_matViewProjInv;\n  vec4 cc_cameraPos;\n\n  vec4 cc_exposure;\n\n  vec4 cc_mainLitDir;\n\n  vec4 cc_mainLitColor;\n\n  vec4 cc_ambientSky;\n  vec4 cc_ambientGround;\n};\nuniform CCLocal {\n  mat4 cc_matWorld;\n  mat4 cc_matWorldIT;\n};\n\nin vec3 a_position;\nin vec4 a_color;\nout vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 a_uv0;\nout vec2 v_uv0;\n#endif\n\nvoid main () {\n  vec4 pos = vec4(a_position, 1);\n\n  #if CC_USE_MODEL\n  pos = cc_matViewProj * cc_matWorld * pos;\n  #else\n  pos = cc_matViewProj * pos;\n  #endif\n\n  #if USE_TEXTURE\n  v_uv0 = a_uv0;\n  #endif\n\n  v_color = a_color;\n\n  gl_Position = pos;\n}\n", | ||||
|         "frag": "\nprecision highp float;\n\n#if USE_ALPHA_TEST\n  \n  uniform ALPHA_TEST {\n    float alphaThreshold;\n  }\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n  #if USE_ALPHA_TEST\n      if (color.a < alphaThreshold) discard;\n  #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n  #if USE_ALPHA_TEST\n      if (alpha < alphaThreshold) discard;\n  #endif\n}\n\nin vec4 v_color;\n\n#if USE_TEXTURE\nin vec2 v_uv0;\nuniform sampler2D texture;\n#endif\n\n#if ENABLE_GAUSSIAN_BLUR\n\n#endif\n\nvoid main () {\n  vec4 o = vec4(1, 1, 1, 1);\n\n  #if USE_TEXTURE\n  o *= texture(texture, v_uv0);\n    #if CC_USE_ALPHA_ATLAS_TEXTURE\n    o.a *= texture2D(texture, v_uv0 + vec2(0, 0.5)).r;\n    #endif\n  #endif\n\n  o *= v_color;\n\n  ALPHA_TEST(o);\n\n  #if ENABLE_GAUSSIAN_BLUR\n  #endif\n  gl_FragColor = o;\n}\n" | ||||
|       } | ||||
|     } | ||||
|   ], | ||||
|   "subMetas": {} | ||||
| } | ||||
							
								
								
									
										13
									
								
								assets/materials/sprite-gaussian-blur.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								assets/materials/sprite-gaussian-blur.mtl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| { | ||||
|   "__type__": "cc.Material", | ||||
|   "_name": "", | ||||
|   "_objFlags": 0, | ||||
|   "_native": "", | ||||
|   "_effectAsset": { | ||||
|     "__uuid__": "41f4d474-d707-45bb-af93-637573f92d54" | ||||
|   }, | ||||
|   "_defines": { | ||||
|     "USE_TEXTURE": true | ||||
|   }, | ||||
|   "_props": {} | ||||
| } | ||||
							
								
								
									
										6
									
								
								assets/materials/sprite-gaussian-blur.mtl.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								assets/materials/sprite-gaussian-blur.mtl.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| { | ||||
|   "ver": "1.0.2", | ||||
|   "uuid": "dd3d8f78-9b79-4ca7-9bf7-7a09f7b34108", | ||||
|   "dataAsSubAsset": null, | ||||
|   "subMetas": {} | ||||
| } | ||||
							
								
								
									
										2062
									
								
								assets/scenes/GaussianBlurEffectScene.fire
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2062
									
								
								assets/scenes/GaussianBlurEffectScene.fire
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								assets/scenes/GaussianBlurEffectScene.fire.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								assets/scenes/GaussianBlurEffectScene.fire.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
|   "ver": "1.2.5", | ||||
|   "uuid": "147d5b9f-b769-4112-9daf-2e28236161fa", | ||||
|   "asyncLoadAssets": false, | ||||
|   "autoReleaseAssets": false, | ||||
|   "subMetas": {} | ||||
| } | ||||
							
								
								
									
										59
									
								
								assets/scripts/GaussianBlurEffectScene.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								assets/scripts/GaussianBlurEffectScene.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| const { ccclass, property } = cc._decorator; | ||||
|  | ||||
| @ccclass | ||||
| export default class GaussianBlurEffectScene extends cc.Component { | ||||
|     private _grayLevelSlider: cc.Slider = null; | ||||
|     private _grayLevelSliderLabel: cc.Label = null; | ||||
|  | ||||
|     private _examplesParentNode: cc.Node = null; | ||||
|  | ||||
|     onLoad() { | ||||
|         this._grayLevelSlider = cc.find("Canvas/Content/Controller/GrayLevelSlider/Slider").getComponent(cc.Slider); | ||||
|         this._grayLevelSliderLabel = cc.find("Canvas/Content/Controller/GrayLevelSlider/ValueLabel").getComponent(cc.Label); | ||||
|  | ||||
|         this._examplesParentNode = cc.find("Canvas/Content/Examples"); | ||||
|     } | ||||
|  | ||||
|     onEnable() { | ||||
|         this._grayLevelSlider.node.on("slide", this._onSliderChanged, this); | ||||
|     } | ||||
|  | ||||
|     onDisable() { | ||||
|         this._grayLevelSlider.node.off("slide", this._onSliderChanged, this); | ||||
|     } | ||||
|  | ||||
|     start() { | ||||
|         this._onSliderChanged(); | ||||
|     } | ||||
|  | ||||
|     private _onSliderChanged() { | ||||
|         this._grayLevelSliderLabel.string = `${this._grayLevelSlider.progress.toFixed(2)}`; | ||||
|  | ||||
|         // 更新材质 | ||||
|         this._updateRenderComponentMaterial({ | ||||
|             grayLevel: this._grayLevelSlider.progress | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 更新渲染组件的材质 | ||||
|      * | ||||
|      * 1. 获取材质 | ||||
|      * 2. 给材质的 unitform 变量赋值 | ||||
|      * 3. 重新将材质赋值回去 | ||||
|      */ | ||||
|     private _updateRenderComponentMaterial(param: { | ||||
|         /** | ||||
|          * 灰化程度 [0.0, 1.0] ,1.0 表示完全灰化 | ||||
|          */ | ||||
|         grayLevel: number; | ||||
|     }) { | ||||
|         this._examplesParentNode.children.forEach(childNode => { | ||||
|             childNode.getComponents(cc.RenderComponent).forEach(renderComponent => { | ||||
|                 let material: cc.Material = renderComponent.getMaterial(0); | ||||
|                 material.setProperty("grayLevel", param.grayLevel); | ||||
|                 renderComponent.setMaterial(0, material); | ||||
|             }); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										9
									
								
								assets/scripts/GaussianBlurEffectScene.ts.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								assets/scripts/GaussianBlurEffectScene.ts.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| { | ||||
|   "ver": "1.0.5", | ||||
|   "uuid": "f460d8cf-51f7-4476-ba59-170dec68f562", | ||||
|   "isPlugin": false, | ||||
|   "loadPluginInWeb": true, | ||||
|   "loadPluginInNative": true, | ||||
|   "loadPluginInEditor": false, | ||||
|   "subMetas": {} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user