当前位置: 首页 > article >正文

Cocos Creator Shader入门实战(一):材质和Effect的了解

引擎版本:3.8.5

环境: Windows


简介


在Cocos Creator中,游戏炫彩缤纷的效果是借助着色器(Shader)来实现的。

Cocos主要基于OpenGL ES,而Shader的编写则是在可编程渲染管线中基于修改:顶点着色器(Vertex)片段着色器(Fragment) 完成的。

Cocos官方,为了简化着色器的复杂配置,更多灵活性,以及能够通过编译器进行可视化管理等等,在Cocos Creator中,实现Shader主要借助两个文件:EffectAssetMaterial材质

两者都属于资源文件,简单的理解:

一、EffectAsset 负责Shader的编写、配置和各种属性定义等

二、Material材质 负责对EffectAsset的数据包装,并将一些属性数据可视化显示在属性检查器中,方便用户管理和操作。

可以认为:在Cocos Creator中,想实现各种不同的渲染效果;需要通过Effect配置属性和着色器编写,通过材质来实现对Effect的包装,进而显示出不同的效果。

两者是相辅相成的,缺一不可的。


学习的困惑


初次接触材质和Effect的时候,我一脸的茫然。

毕竟从事游戏开发,像OpenGL、渲染、Shader等这些专业的术语,即使不曾使用,在面试中也是无法摆脱的。

当我第一次看到Material材质的属性配置:
请添加图片描述

第一次看到Effect的属性配置:
请添加图片描述

即使有着官方文档的加持,我也是一脸的茫然,不知道这些到底代表着什么,以及如何使用。

再到后来,慢慢的明白:看似好像没有接触使用过它们,但实际上它们就像是空气一样,在你的周围弥漫。

因为不管怎样,游戏客户端中所展现的任何可视性的效果都是渲染。

如果从细节上来说,比如:

在Creator 2.4.x版本中,关于某个Sprite的属性显示:

请添加图片描述

在Creator 3.8.x版本中,关于某个Sprite的属性显示:
请添加图片描述

这些都是官方对渲染组件的默认配置,前者展示了默认的材质配置,而后者虽然没有显示出来,但依然会默认配置。

稍微延伸下,为什么CocosCreator针对于组件的设定,分为UI组件和渲染组件呢,原因也在这里。

困惑、畏难这些都是难免的,早晚都需要经历和学习,这里提前预祝您的成功。

注:当你慢慢开始学习的时候,你可能会想我一样:哦,原来是这样子!


编译器创建


接下来,我们继续说明材质Material和EffectAsset。在编译器中,它们都是支持编译器创建的。


材质的构建

主要有两种:

一、物理材质:Physics Material,主要用于记录物体的物理属性相关,被用于碰撞系统。

二、普通材质: Material,主要被用于管理Effect资源,并控制着色效果的展示。

请添加图片描述

以普通材质Material为例,创建后的属性如下图所示:

请添加图片描述

主要属性有:

  • sphere: 材质的预览效果,可选择box、sphere、capsule等进行预览
  • Light: 指的是是否启用光照效果
  • Effect: 指的是材质当前使用的着色器,可通过下拉框进行选择
  • Technique: 指的是材质使用着色器中的哪种技术
  • Pass… 指的是Effect中Technique所包含的Pass流程,每种Technique可以包含多个Pass
  • USE INSTANCING 指的是Effect中宏定义的开关

针对于Technique、Pass和宏定义这三个参数,是在Effect中使用 YAML语言配置的参数属性。


EffectAsset的构建

着色器资源的创建,编译器同样支持两种:

一、传统无光照着色器: Effect,同文字描述所言,没有光照效果的实现。

二、表面着色器:Surface Effect, 基于PBR的着色器。

PBR全称:Physically Based Rendering 基于物理的光照模型

CocosCreator 从 v3.0 开始提供了基于物理渲染(PBR)的光照着色器:builtin-standard.effect

它可根据现实中光线传播原理和能量守恒定律,模拟出近似于真实物理光照的效果,主要用于3D。

请添加图片描述

这里以构建无光照的着色器为例,创建后的属性如下:

请添加图片描述

主要属性部分有:

  • shaders : 当前的着色器名称相关
  • Precompile Combinations 预处理宏定义组合相关,通过on/off的开关来决定是否是否启用
  • GLSL 300 ES/100 Output 着色器的输出模式和预览

这里要说明下:

一、宏定义的组合可以更灵活的实现不同着色器效果的实现,并实现复用性。

二、300 ES 和 100 是引擎主要用于适配不同的WebGL版本和硬件支持。

前者基于WebGL 2.0标准,支持更多的图形功能、更复杂着色器功能实现和更高的性能化;而后者主要基于WebGL 1.0标准,功能有限,主要用于向下兼容旧的硬件和浏览器。

三、输出的代码是引擎根据Effect提供的配置参数,解析后生成的。

在实际的编写中,我们只需关注:

  • CCEffect属性的配置

  • CCProgram着色器片段的编写


写到最后

今天的文章暂且就告一段落,因为贪多嚼不烂。

另外,总结了几个小小的想法或者说是建议,主要有这么几点:

一、Shader的使用,由于游戏引擎的封装的便利性,很可能导致我们认为这是一门很遥远的技术,不是不用,而是没有关注过。

二、请不要过于的追求极致性,还有真正的了解,便开始了各种底层的学习,先模仿再创造,先完成再完美。

三、CocosShader效果的实现需要借助Material来,我们通过代码实现Effect效果也是通过获取材质来设置属性。

四、Effect的实现主要两部分: 一是通过CCEffect配置属性 二是通过CCProgram编写着色器片段。

理解可能有误,但依然希望能够帮助到您,感谢!

相关文章:

Cocos Creator Shader入门实战(一):材质和Effect的了解

引擎版本:3.8.5 环境: Windows 简介 在Cocos Creator中,游戏炫彩缤纷的效果是借助着色器(Shader)来实现的。 Cocos主要基于OpenGL ES,而Shader的编写则是在可编程渲染管线中基于修改:顶点着色器(Vertex) 和 片段着色…...

学习笔记04——JMM内存模型

一、Java内存模型(JMM)是什么? Java内存模型(Java Memory Model, JMM)是Java多线程编程中共享内存的访问规则,定义了线程如何与主内存(Main Memory)和工作内存(Work Mem…...

前端面试真题 2025最新版

文章目录 写在前文CSS怪异盒模型JS闭包闭包的形成闭包注意点 CSS选择器及优先级优先级 说说flex布局及相关属性Flex 容器相关属性:Flex 项目相关属性 响应式布局如何实现是否用过tailwindcss,有哪些好处好处缺点 说说对象的 prototype属性及原型说说 pro…...

Android 老项目 jcenter 库失效

最近重新维护了一些老项目发现大部分jcenter库失效了, Could not resolve com.xx:2.1.3. 如果你也遇到了,不妨试试 替换为 aliyun的jcenter服务,就不用一个个找代替库了。 project 下的 build.gradle 文件添加: maven { url htt…...

《论多源数据集成及应用》审题技巧 - 系统架构设计师

论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战,特别是如何有效地收集、整理和清洗来自不同渠…...

2025.2.23机器学习笔记:PINN文献阅读

2025.2.23周报 一、文献阅读题目信息摘要Abstract创新点网络架构架构A架构B架构C 实验结论后续展望 一、文献阅读 题目信息 题目: Physics-Informed Neural Networks for Modeling Water Flows in a River Channel期刊: IEEE TRANSACTIONS ON ARTIFICI…...

Python Django系列—入门实例(二)

数据库配置 现在,打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。 默认情况下,​ DATABASES 配置使用 SQLite。如果你是数据库新手,或者只是想尝试 Django,这是最简单的选择。SQLite 包含在 Python 中…...

【DeepSeek系列】05 DeepSeek核心算法改进点总结

文章目录 一、DeepSeek概要二、4个重要改进点2.1 多头潜在注意力2.2 混合专家模型MoE2.3 多Token预测3.4 GRPO强化学习策略 三、2个重要思考3.1 大规模强化学习3.2 蒸馏方法:小模型也可以很强大 一、DeepSeek概要 2024年~2025年初,DeepSeek …...

独立开发者之Google Analytics使用教程

Google Analytics(GA)是Google提供的一款免费的网络分析服务,用于追踪和报告网站流量。以下是独立开发者如何使用Google Analytics的详细教程: 1. 创建Google Analytics账户 注册Google账户:如果你还没有Google账户&…...

C++ 编程语言简介

C 是一种通用编程语言,它是作为 C 语言的增强而开发的,以包含面向对象的范例。它是一种命令式和编译语言。 C 是一种高级的通用编程语言,专为系统和应用程序编程而设计。它由贝尔实验室的 Bjarne Stroustrup 于 1983 年开发,作为…...

计算机毕业设计SpringBoot+Vue.js明星周边产品销售网站(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

JavaScript系列(86)--现代构建工具详解

JavaScript 现代构建工具详解 🔨 现代前端开发离不开构建工具,它们帮助我们处理模块打包、代码转换、资源优化等任务。让我们深入了解主流的构建工具及其应用。 构建工具概述 🌟 💡 小知识:构建工具主要解决代码转换…...

C/C++高性能Web开发框架全解析:2025技术选型指南

一、工业级框架深度解析(附性能实测) 1. Drogon v2.1:异步框架性能王者 核心架构: Reactor 非阻塞I/O线程池(参考Nginx模型) 协程实现:基于Boost.Coroutine2(兼容C11)…...

使用Windbg调试目标进程排查C++软件异常的一般步骤与要点分享

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上,或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来,输入g命令将该中断跳过去 3、分析实例说明 …...

npm使用了代理,但是代理软件已经关闭导致创建失败

如果在关闭前打开了vscode,此时vscode中的终端没有刷新,就会出现这个问题,最开始会一直转圈圈,直到超时,然后出现该报错 ❯ npm create vuelatest npm error code ECONNREFUSED npm error syscall connect npm error …...

ddd 文章总结分享,ddd实战代码分享, 领域驱动设计java实战源码大全,我看过的ddd java源码

1. 前段时间研究ddd, 收藏了很多相关知识,分享出来,希望能够帮助更多的小伙伴了解ddd, 什么是领域驱动设计,并分享在github发现的开源ddd代码 2. ddd 必须强烈点赞阿里两位大佬,一个为殷浩, 一个为cola作者 2.1.1 殷浩…...

什么是MySql的主从复制(主从同步)?

主页还有其他面试题总结,有需要的可以去看一下,喜欢的就留个三连再走吧~ 1.什么是MySql的主从复制原理? 主从复制的核心就是二进制binlog(DDL(数据定义语言)语句和DML(数据操纵语言&#xff09…...

蓝桥云课python代码

第一章语言基础 第一节编程基础 1 python开发环境 第一个Python程序 # 打印"Hello World" print("Hello World")# 打印2的100次方 print(2 ** 100)# 打印112 print("11",1 1)""" Hello World 126765060022822940149670320537…...

网站快速收录:如何优化网站H标签使用?

为了优化网站H标签的使用并促进网站快速收录,可以从以下几个方面进行考虑和操作: 一、理解H标签的重要性及作用 H标签,也称为Heading标签,是HTML中用于强调文本标题的元素,分为H1到H6六个级别,其重要性依…...

c#丰田PLC ToyoPuc TCP协议快速读写 to c# Toyota PLC ToyoPuc读写

源代码下载 <------下载地址 历史背景与发展 TOYOPUC协议源于丰田工机&#xff08;TOYODA&#xff09;的自动化技术积累。丰田工机成立于1941年&#xff0c;最初是丰田汽车的机床部门&#xff0c;后独立为专注于工业机械与控制系统的公司。2006年与光洋精工&#xff08;Ko…...

深入解析-无状态服务-StatefulSet (一)

一、有状态服务 VS 无状态服务 1.无状态服务介绍 1.数据方面&#xff1a;无状态服务不会在本地存储持久化数据.多个实例可以共享相同的持久化数据 2.结果方面&#xff1a;多个服务实例对于同一个用户请求的响应结果是完全一致的 3.关系方面&#xff1a;这种多服务实例之间是…...

3.18 ReAct 理论实战:构建动态推理-行动循环的企业级 Agent

ReAct 理论实战:构建动态推理-行动循环的企业级 Agent 关键词:ReAct 理论实践, 动态工具调用, 反思迭代机制, 企业级 Agent 架构, LangChain 集成 1. ReAct 理论核心要素解析 1.1 传统 Agent vs ReAct Agent 架构对比 #mermaid-svg-t2TFPvWG94jJjpRG {font-family:"tr…...

【JavaScript】JavaScript 常见概念 - 变量与数据类型 - 运算符 - 条件语句 - 循环 - 函数 - 数组操作 - 对象

1. 变量与数据类型 变量声明 JavaScript 提供了三种方式来声明变量&#xff1a; var&#xff08;全局或函数作用域&#xff0c;不推荐&#xff09;let&#xff08;块级作用域&#xff0c;推荐&#xff09;const&#xff08;常量&#xff0c;块级作用域&#xff0c;推荐&…...

常用视频格式及其编码方式对比

视频格式和编码方式是两个不同的概念&#xff0c;视频格式通常指的是视频文件的容器格式&#xff0c;它定义了如何将视频、音频和其他数据&#xff08;如字幕&#xff09;打包在一起&#xff0c;而编码方式是指视频和音频数据的压缩算法。不同的编码方式决定了视频的质量、文件…...

hackmyvm-buster

题目地址 信息收集 主机发现 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: C…...

模型蒸馏:让人工智能更智能、更小、更高效的艺术

你有没有想过,我们如何才能让一个需要巨大计算能力的庞大人工智能模型变得更精简、更快速、更强大?答案在于模型蒸馏,这是一种允许知识从大型、计算成本高昂的人工智能系统转移到较小、更高效的系统的技术,而不会牺牲智能。 什么是模型蒸馏 模型蒸馏是一种技术,其…...

【原创】Windows11安装WSL“无法解析服务器的名称或地址”问题解决方法

原因分析 出现这个问题一开始以为WSL设置了某个服务器&#xff0c;但是通过运行 nslookup www.microsoft.com 出现下面的提示 PS C:\Windows\system32> nslookup www.microsoft.com 服务器: UnKnown Address: 2408:8000:XXXX:2b00:8:8:8:8非权威应答: 名称: e13678…...

基于模仿学习(IL)的端到端自动驾驶发展路径

基于模仿学习&#xff08;IL&#xff09;的端到端自动驾驶发展路径 1. 核心论文解析 (1) UniAD&#xff1a;感知-规划一体化 核心思想&#xff1a;首次提出将感知任务&#xff08;如目标检测、车道线识别、轨迹预测&#xff09;与规划任务集成到统一的端到端框架中&#xff…...

网页制作08-html,css,javascript初认识のhtml使用框架结构,请先建立站点!

框架一般由框架集和框架组成。 框架集就像一个大的容器&#xff0c;包括所有的框架&#xff0c;是框架的集合。 框架是框架集中一个独立的区域用于显示一个独立的网页文档。 框架集是文件html&#xff0c;它定义一组框架的布局和属性&#xff0c;包括框架的数目&#xff0c;框架…...

【Vscode 使用】集合1

一、使用make工具管理工程 windows下&#xff0c;下载mingw64&#xff0c;配置好mingw64\bin 为 Win10系统全局变量后。 在mingw64/bin目录下找到mingw32-make.exe工具。复制一份改名为&#xff1a;make.exe&#xff0c;没错&#xff0c;就是那么简单&#xff0c;mingw64自带m…...