ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Cocos Creator Shader 手把手指南:3 步做出第一个自定义 PBR 材质,附排错菜单

2026/9/18 19:38:59 拓冰建站 浏览量
Cocos Creator Shader 手把手指南:3 步做出第一个自定义 PBR 材质,附排错菜单 Cocos Creator Shader 手把手指南3 步做出第一个自定义 PBR 材质附排错菜单【免费下载链接】cocos-engineCocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-performance, engaging 2D/3D games and instant web entertainment.项目地址: https://gitcode.com/GitHub_Trending/co/cocos-engine角色逆光时皮肤泛着塑料光泽、阴影边缘发虚——这通常是材质和光照没做好而不是模型的问题。本文以 Cocos Creator 材质系统为主线3 步做出第一个 PBR 材质末尾附一份 Cocos Creator Shader 常见问题的自救菜单。30 秒看懂 Cocos Creator 渲染链路从场景到 GPU 先给全景图后面所有操作都发生在这条链路的某一环环节干什么去哪看场景与节点游戏世界、相机、灯光、模型cocos/scene-graph/材质挂在渲染器上的属性集合cocos/asset/assets/material.tsEffectShader 源码 属性/变体/状态的声明式描述编译逻辑见 cocos/core/data/utils/compiler.ts渲染队列每帧排序并派发绘制任务cocos/rendering/render-queue.tsGFX 后端落到具体图形 APIWebGL 1/2、WebGPUcocos/gfx/两个细节点到为止每帧给 Shader 喂的相机矩阵、时间这类公共数据会打包进统一缓冲区UBO一次传给 GPU核心结构UBOGlobal、UBOCamera定义在 cocos/rendering/define.tsShader 的资源布局则交给 LayoutGraph 管理。知道它们存在即可不影响你写 Shader。手把手做第一个自定义材质Effect 文件 → 最小着色器 → 验证整条主线就是三件事建文件、写最少的代码、挂上去看效果。步骤一建 Effect 文件在项目assets/目录下新建custom-pbr.effect。.effect文件是 Cocos 的 Shader 开发规范开头CCEffect %{ }%声明技术、Pass 和暴露给编辑器的属性后面跟CCProgram块写着色器。想抄作业的话内置的一大批 effect 都在 editor/assets/effects/翻一两个最简单的就能上手。步骤二写最小可跑通的着色器先别碰光照做一个纯色材质把链路跑通CCEffect %{ techniques: - name: opaque passes: - vert: vs frag: fs properties: mainColor: { val: [1, 1, 1, 1], editor: { type: color } } }% CCProgram vs %{ in a_position; GL_Position cc_matProj * cc_matView * cc_matWorld * vec4(a_position, 1.0); }%CCProgram fs %{ out v_color; v_color u_mainColor; // 直接把编辑器里暴露的颜色当最终输出 }%顶点着色器只做一件事把顶点位置按世界 → 视角 → 投影三组矩阵变换到屏幕坐标。片段着色器暂时只用属性值mainColor因为声明了editor: { type: color }会自动在检查器里生成一个取色面板。步骤三挂到模型上验证再谈 PBRimport { Material, Color } from cc; // 先实例化再改属性避免影响共享同一材质的其他对象 const mat new Material(); mat.initialize({ effectName: builtin-unlit, technique: 0 }); mat.setProperty(mainColor, new Color(255, 80, 80, 255)); // 挂到模型上预览窗口立刻能看到红色 meshRenderer.material mat;验证通过后再升级为金属度-粗糙度工作流在properties里加metallic和roughness配{ editor: { range: [0, 1] } }在fs里写 Cook-Torrance 高光计算即可。材质运行时如何实例化可翻 Material 类 的实现。效果升级菜单想要什么效果就查哪一条 ️不需要全学按需求取用。想要皮肤、果皮那种半透明感次表面散射思路是双 Pass 后处理第一 Pass 渲染基础色并记下深度第二 Pass 采样周边像素模拟光线在表层下的散射。引擎现成的实现看 skin-pass.ts里面的SSSSBlurData类就是干这个的。想要近景阴影不发虚级联阴影优化Cocos 支持级联阴影映射CSM把视锥拆成几段近处贴图画得密远处画得粗兼顾清晰度和开销。层级划分在 cocos/rendering/shadow/csm-layers.ts。调参就三件事阴影距离拉太大远处级联分辨率不够反而更糊级联数量从 2 级起步多数手游场景够用贴图分辨率移动端先锁 1024桌面端再谈 2048想要环境天空和快速起步材质仓库自带一整套默认资源天空盒贴图在 editor/assets/default_skybox/基础材质模板在 editor/assets/default_materials/。下面这张就是引擎默认的天空盒贴图理解成一张 360° 全景球面的展开即可想拆开看渲染怎么分阶段引擎的 DebugView 能把渲染过程按阶段拆开展示排查画面不对是哪一步出的错时很有用。Shader 翻车与自救 QA编译报错、材质污染、性能预算 QShader 编译报错先看什么先看编辑器控制台打印出来的着色器源码90% 的问题出在#include拼错、用了当前后端不支持的 API、或者属性名和CCProgram里对不上。错误码可以对照 EngineErrorMap.md 查。下面是编辑器里报错展示的样子红框标出的就是需要定位的报错位置Q为什么改了一个材质别的对象也跟着变了因为多个渲染器可能共享同一份材质实例。运行时想单独改必须先拿到独立实例再改属性material.clone()或按上面示例new Material()后initialize别直接setProperty共享实例——这是新手最常被坑的一点。Q掉帧了从哪找瓶颈用 cocos/profiler/ 模块看两样东西DrawCall 数量和 GPU 耗时。然后给自己定一条可执行的性能预算移动端以整帧 DrawCall ≤ 150、阴影贴图 1024、级联 ≤ 2作为起步线超标就去合批、降贴图、砍后处理达标后再逐项往上加。预算数字不是引擎规定而是给你一条可以量化进退的基准线。材质是模型的皮肤Effect 文件是它的配方GFX 后端是厨房——把这条链路看明白视觉问题就解决了一半。下期聊聊如何在 Cocos Creator 里搭一条自定义渲染管线把 Stage 和 Flow 完全交到你手里。【免费下载链接】cocos-engineCocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-performance, engaging 2D/3D games and instant web entertainment.项目地址: https://gitcode.com/GitHub_Trending/co/cocos-engine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考