Cocos Creator 3.8.x 制作模糊效果(比如游戏弹窗需要的模糊效果)

news2024/11/26 4:52:59

接着上一个讨论的话题,关于3.8.x的后效,今天来分享自定义后效来制作模糊效果,并将他应用到弹窗中做背景,话不多说开整。

一:最终效果

首先咱们来看官网自定义后效怎么搞的,从它的实例开始:自定义后效

二:定义PostProcessSettings给节点提供资源(通过编辑器修改参数的方式) 

首先自定义后效pass,需要一个组件用来我们可以修改具体的参数,传入具体的数据,就要用到postProcess.PostProcessSetting这个类:

import { _decorator, gfx, postProcess, Material, EffectAsset, renderer, rendering, Vec4, Camera, CachedArray, Sprite } from 'cc';
const { Format } = gfx

const { ccclass, property, menu, executeInEditMode } = _decorator;

/**
 * 
 * 就是一个普通的组件 自定义后处理节点的资源和行为
 * 
 */
@ccclass('GaussianBlur')
@menu('PostProcess/GaussianBlur')
@executeInEditMode
export class GaussianBlur extends postProcess.PostProcessSetting {
    
    /** 3d场景的摄像机 */
    @property(Camera)
    mainCamera: Camera = null;
    
    /* 需要把后效产生的图片输出到特定的Sprite上 */
    @property(Sprite)
    preview: Sprite = null;

    /** 模糊材质 */
    @property(EffectAsset)
    _effectAsset: EffectAsset | undefined

    @property(EffectAsset)
    get effect() {
        return this._effectAsset;
    }
    set effect(v) {
        /** 根据传入的模糊效果shader创建一个材质 当然你也可以在编辑器中拖入一个已经绑定模糊shader的材质 */
        this._effectAsset = v;
        if (this._effectAsset == null) {
            this._material = null;
        }
        else {
            if (this._material == null) {
                this._material = new Material();
            }
            this._material.reset({ effectAsset: this._effectAsset });
        }
        this.updateMaterial();
    }

    @property
    iterations = 3;

    @property
    get blurRadius() {
        return this._blurParams.x;
    }
    set blurRadius(v) {
        this._blurParams.x = v;
        this.updateMaterial();
    }


    private _material: Material;
    public get material(): Material {
        return this._material;
    }

    @property
    private _blurParams: Vec4 = new Vec4(1.0, 0.0, 0.0, 0.0);
    public get blurParams(): Vec4 {
        return this._blurParams;
    }

    updateMaterial() {
        /** 设置材质属性 */
        if (!this._material) {
            return;
        }
        this._material.setProperty('blurParams', this.blurParams);
    }

    protected start(): void {
        if (this._effectAsset) {
            this._material = new Material();
            this._material.initialize({ effectAsset: this._effectAsset });

            this._material.setProperty('blurParams', this.blurParams);
        }
    }
}

 三:定义接收输入定向输出的节点 SettingPass

既然是自定义管线,你做的效果总得有一个流入流出的节点吧,就相当于blender里面的材质节点,虚幻的蓝图,你当前的效果是需要依赖上一个流程中的输入才可以正常工作的,当然你处理完了还要将处理的结果返回到渲染管线当中去利用,再处理等等操作。所以现在需要定义一个这样一个节点,反应在cocos中就是SettingPass类:我们定义自己的SettingPass类

import { Camera, RenderTexture, SpriteFrame, Texture2D, UITransform, Vec2, Vec3, gfx, postProcess, renderer, rendering } from "cc";
import { GaussianBlur } from "./GaussianBlur";

export class GaussianBlurPass extends postProcess.SettingPass {

    get setting() {
        return this.getSetting(GaussianBlur);
    }

    checkEnable(camera: renderer.scene.Camera) {
        // 判断次后效是否开启

        let enable = super.checkEnable(camera);
        if (postProcess.disablePostProcessForDebugView()) {
            enable = false;
        }
        return enable && this.setting.material != null;
    }

    name = 'GaussianBlurPass';
    outputNames = ['GaussianBlurMap'];

    private _blurPreview(camera: renderer.scene.Camera) {
        const setting = this.setting;
        let w, h;
        [w, h] = [camera.window.width, camera.window.height];

        let frame = new SpriteFrame();
        let texture = new RenderTexture();

        texture.initialize({
            name: "s",
            w

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript】Map、Reduce 和 Filter - 通过代码示例解释 JS 数组函数

Map、reduce 和 filter 都是 JavaScript 中的数组方法。每个都将迭代一个数组并执行转换或计算。每个函数都会根据函数的结果返回一个新数组。在本文中,您将了解为什么以及如何使用每一个。 以下是 Steven Luscher 的有趣总结: Map map()方法用于从现…

抖音开店实操步骤,图文详解!

大家好,我是电商糖果 话不多说,最近准备在抖音开店的朋友,这份图文开店笔记,记得收藏! 一、开店前的准备 1. 营业执照 执照最好选个体的,个体执照可以直接去工商局办理,也可以找专业的代办。…

2024/3/5打卡最长上升子序列**----线性DP,贪心,单调栈

目录 题目: DP分析: 代码: 3.6更新 贪心 第一个思考方式 先上代码: 解析: 贪心 第二个思考方式 (与上面的思路差不多,但是换了个角度) 思路: 代码: …

探索神经网络在商品销售和图像识别中的应用

目录 前言人工神经网络简介1.1 人工神经网络与深度学习简介1.2 生物神经元结构与神经元机器模型1.3 神经网络的数据量与性能关系 2 需求预测2.1 需求预测的背景2.2 商品销售神经元机器模型2.3 多层神经网络结构的优势 3 图像识别3.1 图像识别神经网络技术3.2 实际应用场景 结语…

AI领域再出“王炸“----Claude3是否会成为下一个“神“

目录 一.Claude3最新发布 二.Claude3支持20万token 三.Claude3在未公开算法上取得重大突破 1.Claude 3读懂博士论文 2.量子跃迁集成: Claude 3智商:101 测试方法 测试细节 通过Karpathy挑战 Claude 3自画像,突破本我 从洛杉矶排到…

3_1储能容量配置

% 创建优化问题 problem optimproblem(ObjectiveSense, minimize);% 定义变量 x optimvar(x, 2, 1, LowerBound, 0); % 储能设备容量变量% 定义目标函数 problem.Objective 2*x(1) 3*x(2); % 假设成本函数为2*x1 3*x2% 定义约束条件 problem.Constraints.capacity1 x(1) …

01-环境搭建、SpringCloud微服务(注册发现、服务调用、网关)

环境搭建、SpringCloud微服务(注册发现、服务调用、网关) 1)课程对比 2)项目概述 2.1)能让你收获什么 2.2)项目课程大纲 2.3)项目概述 随着智能手机的普及,人们更加习惯于通过手机来看新闻。由于生活节奏的加快,很多人只能利用碎片时间来获取信息&…

画图解题思路( ccf 201512-3)

分析 首先需要转换坐标系,可以将两个坐标系的点写出来,对比一下找规律 可以发现题目中的坐标(x, y)转变成数组坐标系为(n - y - 1, x); 然后再判断是画线还是填充 画线:先转换题目坐标,再遍历画线 填充:采用dfs

Vue中有哪些优化性能的方法?

Vue是一款流行的JavaScript框架,用于构建交互性强的Web应用程序。在前端开发中,性能优化是一个至关重要的方面,尤其是当应用程序规模变大时。Vue提供了许多优化性能的方法,可以帮助开发人员提升应用程序的性能,从而提升…

LABEL-EFFICIENT SEMANTIC SEGMENTATION WITHDIFFUSION MODELS

基于扩散模型的标签高效语义分割 摘要: 去噪扩散概率模型最近受到了很多研究的关注,因为它们优于gan等替代方法,并且目前提供了最先进的生成性能。扩散模型的优越性能使其成为一些应用程序的吸引人的工具,包括绘图,超…

【Python】3. 基础语法(2)

顺序语句 默认情况下, Python 的代码执行顺序是按照从上到下的顺序, 依次执行的. print("1") print("2") print("3")执行结果一定为 “123”, 而不会出现 “321” 或者 “132” 等. 这种按照顺序执行的代码, 我们称为 顺序语句. 这个顺序是很关…

使用php_screw实现PHP代码加密

一:php_screw下载地址 https://gitee.com/splot/php-screw-plus https://github.com/del-xiong/screw-plus 二:php_screw安装 1:解压并修改加密key unzip php-screw-plus-master.zip cd php-screw-plus-master 打开php-screw-plus-mast…

【Docker】技术架构演变

【Docker】技术架构演变 目录 【Docker】技术架构演变架构中的概念架构演进单机架构相关软件 应用数据分离架构应用服务集群架构相关软件 读写分离/主从分离架构相关软件 引入缓存——冷热分离架构相关软件 垂直分库(分布式数据库架构)相关软件 业务拆分…

力扣--动态规划516.最长回文子序列

思路分析: 创建一个二维动态规划表dp,其中dp[i][j]表示在子串s[i...j]中的最长回文子序列的长度。初始化基本情况:对角线上的元素dp[i][i]都为1,因为单个字符本身就是长度为1的回文子序列。从字符串末尾向前遍历,填充…

Java Day2 面向对象

这里写目录标题 1、static总结1.1 代码块1.1.1 静态代码块1.1.2 实例代码块1.1.3 小例子 2、继承2.1 权限修饰符2.2 方法重写2.3 子类访问成员特点2.4子类构造器的特点 3、多态4、final、常量4.1 final4.2 常量 5 抽象类5.1 概念5.2 模板设计方法 6、接口6.1 接口新方法6.2 接口…

Java工程师必备知识,系列教学

一、前言 在这里我不得不感慨Spring的代码的完善与优秀,从之前看源码迷迷糊糊到现在基本了解Spring的部分源码后,愈来愈发现Spring开发者的思虑之周全! 之前说过学习源码的目的在哪?正如我特别喜欢的一句话,有道无术…

进口及国内细胞分析仪厂家名录大全-贝克曼、安捷伦、希森美康、迈瑞.....

流式细胞仪是一种测量层流中细胞的设备(细胞仪),其通过将每个细胞排列在鞘液中,加以激光束照射,可测量散射光和荧光,从而获得有关每个细胞的信息,包含细胞结构(如大小、粒度、表面积…

移动开发:网格视图

一、在新建GridView模块下添加图片以及创建cell.xml文件 1.粘贴图片时选择红框中的路径,点击“OK” 2.在路径后添加-mdpi后缀,再点击“OK” 二、相关代码块 1.MainActivity.java文件代码 package com.example.gridview;import androidx.appcompat.app.AppCompatAc…

指针的学习4

目录 回调函数 qsort使用样例 使用qsort函数排序整形数据 使用qsort函数排序结构体 回调函数 回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时&#xf…

如何使用达摩盘

目录 1.定义 2.功能:圈人群、画像洞察、同步到站内渠道投放; 1.定义 是阿里妈妈基于商业化营销场景打造的人群精细化运营定向中台,涵盖消费行为、兴趣偏好、地理位置等海量数据标签,为商家提供个性化人群圈选,识别店…