uniform
方案和assembler
方案的实现。
效果预览
GT
在Assembler 源码解读及使用 一文中提到自定义渲染可以实现很多酷炫的 shader 特效,目前常用的有两种方法:
创建自定义材质,给材质增加参数。这个参数会作为
uniform
变量传入 shader 由于渲染合批要求材质参数保持一致,所以如果大量对象使用自定义材质时,并且材质参数各不相同,是无法进行合批渲染的,一个对象占一个draw call
。创建自定义
assembler
,在顶点数据输入渲染管道前修改它的值。
本文将用这两种方案实现亮度/饱和度/对比度的调整。(注意效果图中不同方式的draw call不同)
如何使用
uniform 方案
新建 Sprite
组件,选择材质 BrightSaturaContrastUniform.mtl
,添加用户脚本 BrightSaturaContrastUniform.ts
,调整对应参数即可。
![](https://i-blog.csdnimg.cn/blog_migrate/2fbf5114cc7be947702476b43ac2867c.png)
assembler 方案
新建一个节点,添加用户脚本 BrightSaturaContrastAssemblerSprite.ts
,选择材质 BrightSaturaContrastAssembler.mtl
,调整对应参数即可。
实现步骤
调色效果的逻辑参考《Unity Shader入门精要》中的介绍。
亮度的调整只需要把原颜色乘以亮度系数
brightness
即可。然后,我们计算该像素对应的亮度值(luminance
),这是通过对每个颜色分量乘以一个特定的系数再相加得到的。我们使用该亮度值创建了一个饱和度为0的颜色值,并使用saturation