让 2D 图像展示虚拟 3D 的效果。

效果

随着鼠标移动,一张2d图片表现出3d动态的效果。

动图

效果预览

视频

https://www.bilibili.com/video/BV1Xy4y1L7s6

视频预览

实现

原理

程序是处理输入和输出的,我们要明确各个条件和结果。

  • 输入条件

    • 一张图片

    • 该图片的深度纹理(越白越近,越黑越远)

    • 鼠标移动的位置

  • 处理

    • 片段着色器处理(根据深度纹理与鼠标位置对原图片采样偏移处理)

  • 输出

    • 根据鼠标位置,图片出现3d动态的效果

原理

代码

参考 https://github.com/akella/fake3d 中的代码,在 Cocos Creator 3.1.0 中实现的effect片段着色器核心代码如下。

  vec2 mirrored(vec2 v) {vec2 m = mod(v,2.);return mix(m,2.0 - m, step(1.0 ,m));}vec4 frag () {vec4 o = vec4(1, 1, 1, 1);vec4 depth = CCSampleWithAlphaSeparated(depthTexture, uv0);vec2 uMouse = mouseAndThreshold.xy;vec2 threshold = mouseAndThreshold.zw;vec2 offsetUv = vec2(depth.r*uMouse.x/threshold.x, depth.r*uMouse.y/threshold.y);o *= CCSampleWithAlphaSeparated(cc_spriteTexture, mirrored(uv0+offsetUv));return o;}

关于如何移植shader代码,可参考之前的文章《如何抄一个 shader 到 Cocos Creator》。

其中 vec2 mirrored(vec2 v),先用mod求余,再用mixstep构成一个分段函数,达到uv坐标镜像的结果。

mirrored

生成深度纹理图

  • 输入

    • 一张图片

  • 输出

    • 该图片的深度纹理

Photoshop

白玉无冰????的ps技术拙劣,只能简单的抠图和填色,勉勉强强生成了深度纹理图。

ps生成的深度纹理

相机人像图

善用搜索引擎,搜索depth map extractor 找到一个在线工具,通过以下操作可生成一张深度图。

  • 用手机选择人像模式,拍照。

  • 打开 http://www.hasaranga.com/dmap/,传入图片,生成深度纹理图。

人像模式生成的深度纹理

猜测其中的原理是人像模式的图片含有一些深度信息,该工具提取深度信息生成深度纹理图片。

机器学习训练

这几年人工智能不是很火嘛?刚好在github找到这个项目,https://github.com/intel-isl/MiDaS。

这个项目已经有训练好的数据,主要的工作就是配置环境和下载对应的训练模型结果。

机器学习生成的深度纹理

其他方法

当然还有其他方法,这里没做尝试了,有兴趣的可以去玩玩哈~

  • https://github.com/panrafal/depthy

  • https://stereo.jpn.org/eng/stphmkr/

  • ....

小结

完整代码工程:https://github.com/baiyuwubing/cocos-creator-examples/tree/master/awesome-shader

以上为白玉无冰使用 Cocos Creator 3.1.0 实现 "2D 图像展示虚拟 3D 效果" 的技术分享。

更多

MatCap && Shader
如何抄shader
3D折纸
渐变色文字3.0
水排序效果

点击“阅读原文”查看精选导航

“点赞“ ”在看” 鼓励一下

Fake3D Depth Map Cocos Creator Shader相关推荐

  1. Cocos Creator Shader实现镂空遮罩

    Cocos Creator Shader实现镂空遮罩 前言 想不到距离上一遍博客更新已经有13个月之久了,之前定下的一个月至少更新一遍早已不知什么时候抛之脑后.今天开个头,希望以后输出更多的学习总结. ...

  2. cocos creator shader实现汽车氮气加速特效

    1:材质和shader Shader 是一种給GPU执行的代码,GPU的渲染流水线,为了方便开发人员定制效果,开放出接口給程序员编写代码来控制,这种程序叫作shader, shader开发语言,coc ...

  3. cocos creator shader 方形头像变为圆形头像

    将方形头像转变为圆形头像我起初的思路就是,先在一个图片上绘制一个在中心点带颜色的圆: 1:如果uv坐标在圆内的话就会和图片的颜色进行混合只不过混合的时候,带颜色的圆的插值为0,图片的插值为1 2:如果 ...

  4. cocos cretor shader effect-the book of shader前言

    前言 说来惭愧,半年前开始接触cocso creator shader的时候,看了官方教程,看了大神写的例子,搞懂了一些语法概念.可是当时看一遍有种似懂非懂的感觉,那种感觉就是听过很多道理,任然过不好 ...

  5. 用 shader effect 实现雨滴落水效果!Cocos Creator 3D !

    最近逛论坛时,看到一位大佬在分享各种 shader 特效.基于其中的水波 shader ,白玉无冰写了一个玩水效果!文章底部获取完整代码!还可以试试水哦! 先一起看看效果- 点击任意位置,会在该位置生 ...

  6. 麒麟子Cocos Creator 3D研究笔记十一:实用Shader之单张纹理实现武器动态发光

    零.别看广告,看疗效 虽然标题叫武器发光,其实它还能实现魔法护盾.动态光柱等效果.别说话,看图! 阿子最近沉迷于学英语和写代码,可HIGH了. 一看时间,竟然已经十天没发稿了. 但这不能怪阿子,要怪就 ...

  7. 研究了3天,终于将 Shader 移植到 Cocos Creator 2.2.0 上了

    01 预览 扫光特效-Fluxay2 马赛克像素特效-Mosaic 过渡效果-Transfer Shawn 花了3天时间,研究了Cocos Creator 2.2.0 的 Effect 语法,终于在1 ...

  8. Cocos creator 导入 tiled map地图资源,cocos 显示地图错乱偏移

    1)Tiled map 中显示 (举例子随便画了一个) 2)Cocos creator显示的地图(严重错乱偏移) 3)修改过程 ①第一步: ②修改Trim type=none ③保存(正常显示了)

  9. java适合舰旗_飘扬的旗帜!shader 编程实战!Cocos Creator!

    > 用 shader + mesh 立个 flag 吧! 文章底部获取完整代码! 效果预览 使用方法 创建一个空节点 添加用户脚本组件 mesh-texture-flag 添加图片 修改对应属性 ...

最新文章

  1. R语言包_knitr
  2. 构建之法阅读笔记01
  3. stl clocklist 查找元素_剑指信奥 C++ 之 STL 迭代器(上)
  4. Pycharm中的Debug工具以及简单的使用方法
  5. beautifulsoup find函数返回值_再端一碗BeautifulSoup
  6. 流畅的python 函数
  7. MacPE+WinPE-黑苹果之路
  8. 拓端tecdat|matlab递归神经网络RNN实现:桨距控制控制风力发电机组研究
  9. 【datamining】OLTP,OLAP,维度数据库,事实表,维度表、星形和雪花模式、数据立方体、概念分层...
  10. Java基础学习之画板1
  11. ap启动失败 ensp_eNSP模拟WLAN——上线华为真实AP的方法及配置
  12. Word高效指南 - 如何批量删除空格空白行
  13. 计算机专业英语朱龙主编,计算机专业英语(高职高专计算机系列)
  14. 点餐app的初步总结
  15. 固态硬盘SSD的接口如何选择
  16. 通过摄像机视频设备或者流媒体服务器SDK获取到数据转换成RTMP流实现网页手机微信播放
  17. CSS实验案例02简单专业介绍网页
  18. vue 修改模板{{}}标签_vue.js - Vue单文件的template标签
  19. EFR32BG22性能
  20. 数字逻辑实验|逻辑函数及其描述工具(Logisim)

热门文章

  1. 激活函数ReLU和SiLU的区别
  2. 针对unity2020版本中Handles.ArrowCap不存在的问题
  3. GWT 2.8的调试
  4. [GWT-RPC]RequestBuilder发起http请求实例
  5. BetterScroll 2.x 的 pulldown 使用、pullup使用
  6. Verilog中pullup(scl)和assign (weak0, weak1) scl = 1‘b1的区别
  7. 查询抖音账号关注数点赞数
  8. 我与虚拟机的爱恨情仇
  9. QT24A01单端口变压器Base-T TNK
  10. RocketMQ学习笔记三之【DefaultMQPushConsumer流量控制】