GT's Indie Road

游戏开发 | 程序设计 | 算法

在Shader中处理Atlas的uv以及一点小优化

背景 接上一篇https://forum.cocos.org/t/topic/95986如何在最小改动shader的前提下,让shader支持atlas? 方法 一个相对通用的方法,是将子纹理uv射到[0, 1]区间,其余部分保留shader原来的逻辑。普通的映射函数如下, Remap01 将子纹理uv映射到[0, 1]区间, Remap 则支持任意两个区间的映射。 1 2 3 4 ...

自定义渲染应用——图片遮罩合批

性能和特效我全都要!

背景 不少同学在用shader实现某个特效后都会遇到这样一个问题,在测试的时候效果完全正确,一集成到项目中后纹理就发生错位。这种情况大多是由于shader使用的纹理参与了合图导致uv发生了变化。 简单的处理方法是去掉纹理的packable属性,使其不参与合图。但是这样会带来一个问题: 不合图意味着渲染时无法参与合批,如果有大量节点用到了这个shader,那么drawcall就会较高。 经过...

Shader练习场


Cocos Creator自动分层渲染

背景 在实现背包或者列表页时往往要去考虑合批渲染的问题,因为这两个场景的item往往较多。有时候一个item由多层渲染组件组成,父子节点之间还不能合批,这个时候要考虑通过分层合批的方式降低Draw Call。 目前常用的两种分层合批方式: 拆分无法合批的父子节点,将他们分别装入两个容器,每个容器内可以合批渲染。这种方法对业务改动较大,在原父节点的位置、透明度、active属性被...

Cocos Creator自定义渲染 —— 自定义顶点格式

背景 在Cocos Creator中通过自定义渲染可以实现很多酷炫的shader特效,目前常用的有两种方法: 创建自定义材质,给材质增加参数。这个参数会作为uniform变量传入shader由于渲染合批要求材质参数保持一致,所以如果大量对象使用自定义材质时,并且材质参数各不相同,是无法进行合批渲染的,一个对象占一个draw call 创建自定义assembler,在顶点数据输入...