阅读原文
即可跳转到对应页面之前麒麟子写过一套框架,但使用很不方便。最近麒麟子就在想,能不能实现一套,不依赖prefab
、不污染场景节点树
、简单调用几个参数
就能使用的后期效果解决方案
。经过一个多星期的设计与编码,终于把它弄出来了,希望大家能够喜欢。
Cocos Creator 3.3.2
TypeScript
原生
H5
小游戏
平台无需修改引擎管线
对场景节点树零污染
,只需复制到resources
目录,简单调用API即可使用GLOW
(单个物体发光)DISTORTION
(屏幕扭曲,空间扰动)BLOOM
(全屏柔光)LUT
(颜色查找表后期较色)良好的架构设计
增加新效果非常容易,且不会影响已存在的效果如下图所示点击右上角 … 处即可查看
-以下为录制的GIF,具体的参数释义,在动图之后。
导入
按钮,即可导入创建
按钮,创建一个新的Cocos Creator 3.3.2项目assets/resources/kylins_post_effects
拷贝到自己项目的 assets/resources
目录下TestApp.ts
以及 SettingsUI.ts
中的写法,开启后效和设置后效参数如图所示,框架资源放在了
assets/resources/kylins_post_effects
目录下,只需要拷贝kylins_post_effects
目录到自己项目的assets/resources
目录下,就算集成成功了
我直接上代码吧,简单、直接、易使用,不是吹出来的。
export class TestApp extends Component { start() { //获取主摄像相 let mainCamera = find('Main Camera').getComponent(Camera); //设置需要的后效(由于每一个后效都会占用若干个RenderTexture,消耗显存,所以如果项目中有不需要的效果,则建议不要出现在列表中 let efxList = [ PEFX_GrapScene, //抓取主摄像机的内容,供所有后效使用 要确保它是第一个 PEFX_Glow, PEFX_Distortion, PEFX_Bloom, PEFX_Lut, PEFX_Final //最后呈现到屏幕上 要确保它是最后一个 ]; PostEFXMgr.inst.setup(efxList, mainCamera, () => { //开启Glow效果 PostEFXMgr.inst.setEfxEnable(PEFX_Glow.NAME,true); let glow = PostEFXMgr.inst.getPEFX(PEFX_Glow.NAME) as PEFX_Glow; //设置Glow效果参数 //设置模糊范围 值越大,GLOW的溢出边缘越大, 建议不要大于6.0 glow.blurRadius = 4.5; //设置混合强度 值越大越亮 glow.blendIntensity = 1.5; //开启屏幕扰动效果 PostEFXMgr.inst.setEfxEnable(PEFX_Distortion.NAME,true); let distortion = PostEFXMgr.inst.getPEFX(PEFX_Distortion.NAME) as PEFX_Distortion; //设置扰动强度,值越大扭动得越厉害 distortion.intensity = 0.15; //开启BLOOM效果 PostEFXMgr.inst.setEfxEnable(PEFX_Bloom.NAME,true); let bloom = PostEFXMgr.inst.getPEFX(PEFX_Bloom.NAME) as PEFX_Bloom; //设置全屏泛光亮阀值, 亮度大于此值的像素才会参与BLOOM效果。 如果为0,表示所有像素都会参与。 bloom.luminanceThreshold = 0.4; //设置强度,通过luminanceThreshold测试的像素,在BLUR之前,做的一次缩放操作 bloom.intensity = 1.5; //设置模糊范围 值越大,亮色部分的泛光越大 bloom.blurRadius = 4.5; //与原图合成的时候的强度因子,越大越亮 bloom.blendIntensity = 1.0; let lut = PostEFXMgr.inst.getPEFX(PEFX_Lut.NAME) as PEFX_Lut; //设置LUT样式 lut.setLut(2); }); } }
PEFX_Glow.ts
,PEFX_Bloom.ts
等源码PostEFXMgr
会在setup
时进行统一加载kylins_post_effects/scripts/GlowObject.ts
Glow
的对象上GlowObject
组件的allChildren
为TRUE
,表示会作用到所有子节点,如果不需要,请关闭掉kylins_post_effects/scripts/DistortionObject.ts
Distortion
的对象上DistortionObject
组件的allChildren
为TRUE
,表示会作用到所有子节点,如果不需要,请关闭掉Layer3D.ts
中,防止已占用的layer被用于后效渲染,导致不可知的渲染错误加麒麟子微信
加QQ群或者
关注麒麟子微信公众号`,方便第一时间获取最新进展麒麟子熬夜写的,希望大家能够喜欢