什么是SDF

SDF(Signed Distance Field),有向距离场 ,用于表示空间中各点距离物体表面的距离。SDF技术已经被应用于字体渲染、Ray Marching、物理引擎等领域。

在 ShaderToy 上可以找到大量用 SDF 渲染的作品,ShaderToy 创办人 Inigo Quilez 大神是运用SDF的专家,本文封面就摘自他的博客,用 SDF 和 Ray Marching 技术渲染的基本几何图形。

SDF 如何运用在 2D 游戏渲染?在 2D 图像里,SDF 表示的是图片中每个像素距离图片轮廓的距离,通过 SDF 可以很方便地对图片的轮廓施加特效。

如何生成SDF

目前有线性时间生成 SDF 的算法,这里使用了开源的TinySDF。
TinySDF计算SDF纹理完全在CPU上运行,对于小图可以直接运行时生成对应SDF纹理。考虑到苹果手机某些场合无法开启 JIT,对于大图可以采用离线生成的方式或者分帧计算的方式获取 SDF 纹理。

外发光之类的特效可能会超出原图的边缘,在计算 SDF 纹理前需要对原图进行扩边。SDF 信息生成后是一个和扩边后图片大小相同的二维数据,可以用该数组生成内存纹理,赋值给材质进行渲染。

简单起见,本文 Demo 直接将 SDF 纹理作为alpha通道和原图合并,不适合原图里本身有较大区域半透明像素的图片。

基于SDF的shader

轮廓Bloom

外发光

用 SDF 实现 2D 外发光的优势是 SDF 纹理计算是一次性的,之后通过 shader 渲染的成本非常低。实现原理和 Bloom 类似,加上原图的混合即可。

变形

在两个SDF纹理之间插值,可以实现轮廓的变形

代码 & Demo

代码已经上架 Cocos Store 先免费放几天,欢迎大家白漂!感谢支持

源码地址:http://store.cocos.com/app/detail/2875

[论坛讨论帖]
https://forum.cocos.org/t/topic/110559

这是我的公众号,关注有更多精彩,一起交个朋友吧!

  • Creator全平台游戏开发教程 PDF 免费下载(800+页)

  • 编写高效 TS 的一些建议

  • Creator 3.0 折纸效果!超赞

  • 隔壁老王,带你入坑腾讯联机对战引擎!

  • 更新!Creator最佳文字书写解决方案!

SDF!这特效牛不牛?相关推荐

  1. 计算机视觉界CV牛人牛事

    CV人物1:Jianbo Shi史建波毕业于UC Berkeley,导师是Jitendra Malik.其最有影响力的研究成果:图像分割.其于2000年在PAMI上多人合作发表"Noraml ...

  2. 牛客21781 牛兄牛弟

    链接:https://ac.nowcoder.com/acm/problem/21781 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  3. 《转贴》机器学习 机器视觉 图像处理 牛人牛站

    <转贴>机器学习 机器视觉 图像处理 牛人牛站 转贴:看到的一个来源是http://blog.sina.com.cn/s/blog_631a4cc40101d00t.html,不确定是否是 ...

  4. CV牛人牛事简介之一(转载)

    http://doctorimage.cn/2013/01/01/cv-intro-niubility/#6481970-qzone-1-83120-80417069b226f89a8531d1742 ...

  5. 牛客——牛妹与牛牛的游戏

    牛客--牛妹与牛牛的游戏 一天,牛妹找牛牛做一个游戏,牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 1.在当前数字的基 ...

  6. CV牛人牛事简介之一

    [论坛按] 发帖人转载自: http://doctorimage.cn/2013/01/01/cv-intro-niubility/#6481970-qzone-1-83120-80417069b22 ...

  7. JS特效之很牛叉的轮播图

    //HTML部分: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  8. C语言简单的练习题目——牛生牛

    问题描述: 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始, 每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? 输入: 输入数据由多个测试实例组成,每个测试实例占一行 ...

  9. 牛客-牛客练习赛24-B 凤 凰

    链接:https://www.nowcoder.com/acm/contest/157/B 来源:牛客网 题目描述 凤凰于飞,翙翙其羽,亦集爰止. --<诗经·卷阿> 传说,凤凰是百鸟之王 ...

最新文章

  1. LeetCode215:数组中第K个最大元素
  2. VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...
  3. LeetCode 1966. Binary Searchable Numbers in an Unsorted Array
  4. 教育部建议采纳:给予导师决定硕博士能否毕业的自主权!
  5. 《编程珠玑》课后答案
  6. Unity插件 - MeshEditor(九) 模型涡流扭曲特效(黑洞吸引特效)
  7. Qt关于connect和拉姆达表达式
  8. 技术人,一定要保持一颗有空就学习的心。
  9. SOtime -- JS的时间戳与日期转换操作
  10. shiro反序列化漏洞
  11. html页面禁止竖屏,关于移动端页面强制竖屏的方法
  12. 浙江大学ACM俱乐部 1036:镂空三角形
  13. net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting head
  14. 关于GPL协议的理解(开源与商用、免费与收费)
  15. p73 应急响应-WEB 分析 phpjavaweb自动化工具
  16. Apple ProRes格式版本
  17. 强连通分量/点双连通分量/边双联通分量 总结
  18. 审稿人意见回复 Response to revierwers (Updating)
  19. 机器人genghis_iRobot:机器人思维引领下一个机器人时代
  20. 递推 SDUT 王小二切饼

热门文章

  1. spring整合aspects做aop演示
  2. 产品需求分析与市场分析方法汇总(SWOT+PDCA+波士顿矩阵BCG+5W2H分析法+STAR关键事件分析法+目标管理SMART+时间管理紧急重要矩阵+WBS任务分解法)
  3. 数学建模--综合评价方法
  4. PySpark线性回归与广义线性模型
  5. MUI tabbar购物车小图标的制作
  6. 封装篇——图片模块(Glide)
  7. 1. 用户行为采集平台概述
  8. Ubuntu 16.04下装ROS Kinetic问题若干、安装后首次运行
  9. anaconda 代码提示,Anaconda安装OpenCV没有自动代码补全
  10. 遇到bug我们如何分析定位?