马赛克效果(shader)
马赛克是一种常用的图像处理手段,因为这种模糊效果看上去有一个个的小格子组,便形象的称这种画面为马赛克。当画面上的马赛克格子小到一定程度的时候,画面呈现出来的风格也叫像素风
实现思路
核心思路就是把图片划分成M * N
个小格子,格子内取同一个颜色。我们前面经常用到texture(texture, v_uv0)
这个函数,它的作用就是把纹理贴图按uv进行取样,输出一个vec4
类型的颜色值,在实现马赛克效果的时候我们改为按M * N
个点来取样,也就是要找出每个格子的中心点,然后传入texture
函数,这样一来问题就变成了,如何计算每个格子的中心点。
从水平方向说起,每个格子的x轴中心坐标等于当前格子的x轴位置加上格子宽度的一半。格子数量x_count
通过外部传入,每个格子的宽为block_w = 1.0 / x_count
,每个格子的x轴位置等于当前格子的序号乘上格子的宽度,格子的序号为block_x_idx = floor(v_uv0.x / block_w)
,当前格子的位置为block_x_idx * block_w
,当前格子的中心点位置为block_w * (block_x_idx + 0.5)
。同理可以得到格子中心点的垂直方向的位置:
vec2 getUvMapPos() {float block_w = 1.0 / x_count;float block_x_idx = floor(v_uv0.x / block_w);float block_h = 1.0 / y_count;float block_y_idx = floor(v_uv0.y / block_h);return vec2(block_w * (block_x_idx + 0.5), block_h * (block_y_idx + 0.5));
}
有了映射的坐标,我们就可以直接进行颜色取样和赋值,为了便于控制,我们还可以加上一个宏开关:
void main () {vec4 o = vec4(1, 1, 1, 1);vec2 realPos = v_uv0;#if USE_MASAICrealPos = getUvMapPos();#endifo *= texture(texture, realPos);o *= v_color;gl_FragColor = o;
}
后面可以通过更改传进来的垂直和水平方向的格子数量来控制马赛克的大小,效果如下:
效果预览
源码获取请点击查看原文,长按二维码查看效果????
更
多
精
彩
融球效果(shader) 颜色滤镜 水波扩散效果(shader)
镜面光泽效果 圆形头像(shader) 追光效果
shader 溶解效果 富文本打字机效果 放大镜效果
子弹跟踪效果 移动残影效果 刮刮卡实现
微信小游戏首包超出4M之后 遥控杆实现
金币落袋效果 使用cocos进行2D和3D混合开发
Cocos游戏开发入门最佳实践 背景无限滚动
马赛克效果(shader)相关推荐
- Unity ASE制作彩色流光马赛克 像素风 舞池DJ台效果Shader
Unity ASE制作彩色流光马赛克 舞池DJ台效果 Shader@TOC 项目需求想写一个舞池DJ台的效果,尝试写了发现制作出好玩的效果. 首先想要得到这种棋盘格的效果,想到了马赛克像素平铺,平铺数 ...
- 『openframeworks』shader制作六边形马赛克效果
在天朝河蟹社会,许多影视作品中经常出现少儿不宜的片段,这时候有一个东西就少不了.没错,它就是马赛克! 以前弄过方块马赛克,圆形马赛克等,没有什么难度,最近看到苍蝇的研究,突然想能不能搞个六边形马赛克呢 ...
- Unity ShaderLab特效教程 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【将贴图转为马赛克效果】
如果代码中有什么不清楚请查看以下基础知识 Shader基础知识 unity3d 中 七种坐标知识详解 一个将贴图转为马赛克效果的shader: 万恶的马赛克其实也是一种艺术风格,如果你在开发2d游戏不 ...
- IOS – OpenGL ES 像素化马赛克效果 GPUImagePixellateFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- Java中实现六种图像处理的效果(灰度化、马赛克效果、去背景实现、珠纹化实现、黑白版画效果、油画效果)
** Java中实现六种图像处理的效果(灰度化.马赛克效果.去背景实现.珠纹化实现.黑白版画效果.油画效果) ** 本文的编程的思想: 先将实现这六种效果的方法写入一个名为pic_performanc ...
- Java中的实现马赛克效果以及灰度效果----整张图片
** Java中的实现马赛克效果以及灰度效果-----整张图片 ** 实现该效果的思路: 我们知道图片是由一个一个的像素组成的,比如一张图片的分辨率为800 * 800,则它是由800个像素 * 80 ...
- PHP实现图片马赛克效果
原理: 对图片中选定区域的每一像素,增加若干宽度及高度,来生成矩型.而每一像素的矩型重叠在一起,就形成了马赛克效果.本例使用GD库的imagecolorat获取像素颜色,使用imagefilledre ...
- python图片马赛克_Python实现PS滤镜中马赛克效果示例
本文实例讲述了Python实现PS滤镜中马赛克效果.分享给大家供大家参考,具体如下: 这里利用 Python 实现PS 滤镜中的马赛克效果,具体的算法原理和效果可以参考附录说明,Python示例代码如 ...
- 安卓马赛克view_Android马赛克效果MosaicView
图片涂鸦马赛克 之前写的项目了,因为有小伙伴问到处理后如何保存的问题我把方法加到代码里了.(最近项目时间紧未经测试>o 最近项目里用到了马赛克效果,就是对手指划过的区域打码.效果如下: 关于图片 ...
最新文章
- 0402封装ESD二极管选型
- 每日程序C语言31-auto的使用
- 超级详细的Tcpdump的用法
- 腾讯视频怎么退出青少年守护模式
- Php获取id并提交表单,提交表单后 PHP获取提交内容的实现方法
- charles工具页面介绍
- 无效的变量名c语言,变量方法用法 _C语言-w3school教程
- 【STM32H7教程】第2章 STM32H7的开发环境搭建
- IFRAME 元素语法
- php 条件求和,Excel条件求和公式是什么
- 2021-08-26小白笔记
- 基于JavaEE的实验室管理系统技术点
- dnf第七章waiguaⅢ∨dnf第七章好感度【=dnf第七章免费外挂
- 实验:Mysql实现企业级数据库主从复制架构实战
- iOS Design Patterns Excerpt
- c语言三位数中有多少素数,输出所以三位数的素数,并求素数的个数,每行输出10个数...
- 经典算法研究系列:八、再谈启发式搜索算法
- 天津web前端培训,BAT会去哪里招好前端?
- 使用图灵机器人实现微信消息的智能回复
- ansys workbench中fluent划分网格出现如下错误:The mesh file exporter failed during translation.