断更19个月,携 Three.js Shader 归来!(下)

原文:「断更19个月,携 Three.js Shader 归来!(下) - 牛衣古柳」 有很多视频例子,简书只能放图片,所以大家可以去原文看看!

前文回顾

上篇文章「断更19个月,携 Three.js Shader 归来!(上) - 牛衣古柳」讲到古柳虽然也曾做过3D可视化的作品,但其实一直有意回避不想碰 Three.js 和图形学等3D内容;后来因为看群友分享了 TikTok 上很火的 3D+AR/VR 可视化视频,因此终于一时兴起学起 Three.js;

然后古柳在油管偶然发现了 Yuri 的宝藏频道,并从他复现 Pepyaka 效果的教程了解到 Shader 并光速入坑。

何为 Shader ?

但讲到现在可能大家还是不知道 Shader 到底是啥?

一言以蔽之,Shader/着色器就是一段给 GPU 执行的程序,我们可以通过 Vertex Shader/顶点着色器来改变几何体的顶点坐标以及通过 Fragment Shader/片元着色器来改变每个片元的颜色,片元可以粗略地理解成像素。

对应到 Three.js 就是 ShaderMaterialvertexShaderfragmentShader 两部分的代码,其使用类C语言的 GLSL 编程语言,即 OpenGL Shading Language 进行编写。这里大家先有个印象即可,后续教程会讲解更多内容带大家入门。

const vertex = `
  void main() {
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
  }
`;

const fragment = `
  void main() {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
  }
`;

const material = new THREE.ShaderMaterial({
  vertexShader: vertex,
  fragmentShader: fragment,
  uniforms: {
    uTime: { value: 0 },
  },
});

于是在将3D物体渲染到屏幕画布的过程中,我们可以通过 Shader 在中间改变物体顶点坐标与像素颜色,这样就能像使用“魔法”一样做出各种其他技术所无法实现的、超酷炫超丝滑、令人印象深刻的效果。

Chris 的 Shader 介绍视频

这里推荐大家看下“猛男♂小哥” Chris 的2分钟 Shader 介绍视频 「Three.js Shaders in 2 Minutes - Chris Courses - YouTube」,以便有更多直观了解。

最初是看 Chris 的 Canvas 教程发现讲解地超好,然后意外地发现这肌肉太帅了,于是瞎叫他“猛男♂小哥” doge,老群友应该记得。

亿点点 GPU 带来的震撼

扯回来。上面的讲解还是比较粗浅、偏科普,想更深入了解的朋友,可以搜索关键词渲染管线/Render Pipeline/Graphic Pipeline等。

正因为有 GPU 并行计算的加持,即使在一张有上百万像素的图片上添加动画“特效”,也能在确保60FPS的同时实现丝滑效果,而如此多的像素每秒还更新60次,这是一般 CPU 下 Canvas 里遍历图片所有像素进行改变所无法想象的。

NVIDIA/英伟达有个视频「Mythbusters Demo GPU versus CPU - YouTube」直观地展示 CPU 和 GPU 绘图的不同。如果 CPU 是一个像素一个像素绘制的话,那么 GPU 就是一次性绘制所有像素,电光火石间一切就完成了。看完这个视频估计大家再难忘记 GPU 所带来的亿点点震撼了。

Photomosh 神器

而说到给图片加“特效”,就不得不提下之前古柳在某个平面设计课程里了解到的 photomosh 这个神器。

课程里讲点线面的面时,讲到随机面具有自然和个性的特点,然后演示了使用 photomosh 里的 wobble/摇晃 功能对黑底白字的文字图片进行扭曲变形,最后将具有随机面效果的文字放到海报中使用。

当时古柳第一反应就觉得这网站应该用了 Shader,但毕竟那会接触的还不多,不敢打包票,想着没准用了其他不知道的技术实现的。于是跑去体验一番,并看了下网页源码......发现果然就是 Shader!

对于这个神器,设计师朋友可以将其纳入工具箱、应用到生产实践里;程序员朋友则可以好好研究下这些 Shader 效果分别怎么实现的,毕竟这么多效果整齐地罗列着,不学习一番岂不是暴殄天物。后续古柳应该也会从中选择一些效果拆解给大家讲讲,敬请期待!

Photoshop 等软件同理

讲到这,有用过 Photoshop、Adobe Illustrator 的朋友,是不是觉得上面一些扭曲变形等操作很眼熟,这些软件也可以做出类似效果,因为它们也是支持 GPU 模式的,可以确定多半也用到 Shader。

再比如前些天,古柳看到的这个用 PS 做长虹玻璃质感海报的教程,里面这些黑白渐变、渐变重复、纹理、扭曲度/平滑度/缩放等概念,学过 Shader 后就很熟悉。后续复现试试看,再写成教程教大家。

越来越多获奖的、酷炫网站里用到 Shader

上面讲了这么多,但古柳最爱的还是很多国外 Studio/工作室用 Three.js Shader 等技术做的令人印象深刻的网站,而且这些网站许多也在 Awwwards 上获奖。

比如 Yuri 在他的多个教程里提到的带他入坑 Shader 的网站 Tao Tajima | Filmmaker——这是日本公司 ホムンクルス / homunculus Inc. 制作的于2017年12月上线的网站——其中的图片和视频上有波浪、翻页过渡等交互效果,非常的与众不同。

不论是对此前没接触过这类网站的朋友,还是对看过不少用到 Shader 的网站的 Yuri 还是古柳自己,这样的网站都是令人觉得惊艳、印象深刻。

同样的 homunculus 的官网也用到许多 Shader 效果,大家也可以去体验一番。

类似的网站还有很多,古柳也难以一一介绍,但还是精选了一些供大家前去感受下开开眼。如果有人因此迷上 Shader,在心里埋下种子,并且日后做出比肩这些作品的网站,那古柳也算是做回“引路人”了。

不过,截止目前在古柳的印象里还没怎么见到国內有类似网站用到 Shader,相较之下上述就有好几个网站是日本的,甚至 taotajima 是2017年底就有的,如此看来虽然已经2023年,但国内在这方面仍略显“荒漠”。

记得之前有人从小红书过来提到想做类似网站,但问了国内一些工作室都说难度太大......希望将来能看到更多国内的类似网站。

可视化里也有用到

毕竟古柳之前输出的都是 D3.js 数据可视化方面内容,很多人也是因为可视化而关注我的。那么可视化里能用到 Shader 吗?

虽然本身3D的数据可视化相较2D的就少些,用到 Shader 的3D可视化就更少,但巧的是古柳还真知道几个,这里介绍给大家。

Shirley Wu 的 Legends 作品

首先是古柳安利过很多次的 Nadieh BremerShirley Wu「Data Sketches」 里的 Legends 这个作品就有用到 Shader。

这是 Shirley Wu 为纪念1901年以来51位获得诺贝尔奖的传奇女性而以水晶为视觉元素所作的可视化作品,其中的水晶就是基于一般的球体几何体改变顶点坐标并且通过 fragment shader 应用上不同渐变颜色以区分自然科学与人文社会科学而得到的。

还记得当时古柳还没入坑 Three.js Shader,觉得可能一辈子都看不懂也做不出类似的作品,没想到没多久就去入坑学了起来,虽然至今有些地方不明白,但却更靠近了一步,也是蛮感慨的!

值得一提的是 「Data Sketches」 这书之前古柳和出版社的编辑推荐过,没想到后来真的会引进出中文版。而一晃也两年过去了,3月份时听说4月会上市,虽然目前还没明确消息,但应该也快了。古柳自己超喜欢的书、也是带自己入坑 D3.js 可视化的一本可视化书籍,没想到出中文版会和自己有些关系,至今觉得不可思议

详情见:独家号外!「Data Sketches」确认引进将会有中文版! - 牛衣古柳 - 20210528

澎湃美数课的作品

再比如澎湃美数课2020年9月有个关于新冠百万逝者的可视化作品——「一百万,一个全球悲剧」,其中的3D面积图上实现黑白渐变就用到了 Shader。

一开始古柳觉得这个作品像连绵起伏的群山,后来想起美籍华裔建筑师、林徽因的侄女林璎21岁时还在耶鲁大学读本科期间就在全美国众多参与者之中脱颖而出,并最终设计了华盛顿越战纪念碑这件事。于是又觉得美数课的作品更有纪念碑的感觉。

言归正传

杂七杂八讲了不少,可能大家都看烦了。其实本篇文章主要还是带大家初步了解 Three.js Shader,知道它是什么、能做什么、哪里有用到,并且为后续古柳开始写 Shader 相关教程做个引子。

不论是去年4月5月初学 Shader(那时还红码被拉去酒店隔离,疫情也是恍如隔世),还是今年年初重新啃了好多期 Yuri 频道的教程,输入或多或少在进行着,而输出却一直没开始。这次也是终于行动起来,趁着对 Shader 的热爱还在,不如就此开始写写教程,也希望能帮到想学习这方面内容的朋友。

当然 Shader/GLSL 代码和一般编程还是很不同的,理解起来也蛮抽象。古柳自身也还没多厉害仅仅入门水平而已、也依旧对后续能写出什么样的教程没那么大信心。

但就像大家都知道的王安石《游褒禅山记》那段话所说的一样:“而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉”

Shader 有多酷想来大家也有所了解了,希望大家也能和古柳一样有极大的热情一起来开启这段充满未知的 Three.js Shader 之旅。

照例

最后和古柳交流,也请多点赞支持!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容