Merge branch 'release/0.2.0'
This commit is contained in:
		| @@ -1,5 +1,9 @@ | |||||||
| # ChangeLog | # ChangeLog | ||||||
|  |  | ||||||
|  | ## 0.2.0 (2020-01-05) | ||||||
|  |  | ||||||
|  | - 加入灰度渐变特效 | ||||||
|  |  | ||||||
| ## 0.1.0 (2020-01-01) | ## 0.1.0 (2020-01-01) | ||||||
|  |  | ||||||
| - 加入马赛克特效 | - 加入马赛克特效 | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # Cocos Creator Shader Effect Demo | # Cocos Creator Shader Effect Demo | ||||||
|  |  | ||||||
| [](CHANGELOG.md) | [](CHANGELOG.md) | ||||||
| [](LICENSE) | [](LICENSE) | ||||||
| [](http://www.cocos.com/creator) | [](http://www.cocos.com/creator) | ||||||
|  |  | ||||||
| @@ -36,6 +36,10 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ### 灰度渐变(实现原理同老照片一样,可参考[老照片实现原理文章](https://www.jianshu.com/p/711a54ff2fa0)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ### 外发光(完善中...) | ### 外发光(完善中...) | ||||||
|  |  | ||||||
| ### 外描边(完善中...) | ### 外描边(完善中...) | ||||||
|   | |||||||
							
								
								
									
										110
									
								
								assets/effects/sprite-gray.effect
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								assets/effects/sprite-gray.effect
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | |||||||
|  | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.   | ||||||
|  | // 灰化特效 | ||||||
|  | // 原理: | ||||||
|  | // r = 0.2126 * r + 0.7152 * g + 0.0722 * b | ||||||
|  | // g = 0.2126 * r + 0.7152 * g + 0.0722 * b | ||||||
|  | // b = 0.2126 * r + 0.7152 * g + 0.0722 * b | ||||||
|  |  | ||||||
|  | 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 USE_GRAY | ||||||
|  |   uniform GrayPhoto { | ||||||
|  |     // 灰化程度 | ||||||
|  |     float grayLevel; | ||||||
|  |   } | ||||||
|  |   #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 USE_GRAY | ||||||
|  |     vec4 srcColor = o; | ||||||
|  |  | ||||||
|  |     float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b; | ||||||
|  |     vec4 grayColor = vec4(gray, gray, gray, o.a); | ||||||
|  |  | ||||||
|  |     o = srcColor + (grayColor - srcColor) * grayLevel; | ||||||
|  |     #endif | ||||||
|  |     gl_FragColor = o; | ||||||
|  |   } | ||||||
|  | }% | ||||||
							
								
								
									
										17
									
								
								assets/effects/sprite-gray.effect.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								assets/effects/sprite-gray.effect.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | { | ||||||
|  |   "ver": "1.0.23", | ||||||
|  |   "uuid": "2e5b29d9-dd5e-4f3d-92e9-e580745b3bc8", | ||||||
|  |   "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 USE_GRAY\nuniform float grayLevel;\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 USE_GRAY\n  vec4 srcColor = o;\n\n  float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;\n  vec4 grayColor = vec4(gray, gray, gray, o.a);\n\n  o = srcColor + (grayColor - srcColor) * grayLevel;\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 USE_GRAY\nuniform GrayPhoto {\n\n  float grayLevel;\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 USE_GRAY\n  vec4 srcColor = o;\n\n  float gray = 0.2126 * o.r + 0.7152 * o.g + 0.0722 * o.b;\n  vec4 grayColor = vec4(gray, gray, gray, o.a);\n\n  o = srcColor + (grayColor - srcColor) * grayLevel;\n  #endif\n  gl_FragColor = o;\n}\n" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   ], | ||||||
|  |   "subMetas": {} | ||||||
|  | } | ||||||
							
								
								
									
										14
									
								
								assets/materials/sprite-gray.mtl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								assets/materials/sprite-gray.mtl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | { | ||||||
|  |   "__type__": "cc.Material", | ||||||
|  |   "_name": "", | ||||||
|  |   "_objFlags": 0, | ||||||
|  |   "_native": "", | ||||||
|  |   "_effectAsset": { | ||||||
|  |     "__uuid__": "2e5b29d9-dd5e-4f3d-92e9-e580745b3bc8" | ||||||
|  |   }, | ||||||
|  |   "_defines": { | ||||||
|  |     "USE_TEXTURE": true, | ||||||
|  |     "USE_GRAY": true | ||||||
|  |   }, | ||||||
|  |   "_props": {} | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								assets/materials/sprite-gray.mtl.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								assets/materials/sprite-gray.mtl.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | { | ||||||
|  |   "ver": "1.0.2", | ||||||
|  |   "uuid": "ee9df2cd-dc1c-4fa7-9ef6-b253eee81746", | ||||||
|  |   "dataAsSubAsset": null, | ||||||
|  |   "subMetas": {} | ||||||
|  | } | ||||||
							
								
								
									
										2062
									
								
								assets/scenes/GrayEffectScene.fire
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2062
									
								
								assets/scenes/GrayEffectScene.fire
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7
									
								
								assets/scenes/GrayEffectScene.fire.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								assets/scenes/GrayEffectScene.fire.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | { | ||||||
|  |   "ver": "1.2.5", | ||||||
|  |   "uuid": "46f3cebd-8cc8-462a-885d-9a2984712368", | ||||||
|  |   "asyncLoadAssets": false, | ||||||
|  |   "autoReleaseAssets": false, | ||||||
|  |   "subMetas": {} | ||||||
|  | } | ||||||
							
								
								
									
										59
									
								
								assets/scripts/GrayEffectScene.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								assets/scripts/GrayEffectScene.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | const { ccclass, property } = cc._decorator; | ||||||
|  |  | ||||||
|  | @ccclass | ||||||
|  | export default class GrayEffectScene 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/Sliders/GrayLevelSlider/Slider").getComponent(cc.Slider); | ||||||
|  |         this._grayLevelSliderLabel = cc.find("Canvas/Content/Sliders/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/GrayEffectScene.ts.meta
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								assets/scripts/GrayEffectScene.ts.meta
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   "ver": "1.0.5", | ||||||
|  |   "uuid": "0b2ee60e-d226-44af-bfcf-95b75266e51f", | ||||||
|  |   "isPlugin": false, | ||||||
|  |   "loadPluginInWeb": true, | ||||||
|  |   "loadPluginInNative": true, | ||||||
|  |   "loadPluginInEditor": false, | ||||||
|  |   "subMetas": {} | ||||||
|  | } | ||||||
							
								
								
									
										
											BIN
										
									
								
								static/effects/2d-sprite-gray.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/effects/2d-sprite-gray.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 374 KiB | 
		Reference in New Issue
	
	Block a user