前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解剖 WebGL & Three.js 工作原理

解剖 WebGL & Three.js 工作原理

作者头像
万技师
修改于 2017-06-19 11:01:37
修改于 2017-06-19 11:01:37
9.9K00
代码可运行
举报
文章被收录于专栏:万波的专栏万波的专栏
运行总次数:0
代码可运行

一、我们讲什么?

我们讲两个东西:

1、WebGL背后的工作原理是什么?

2、以Three.js为例,讲述框架在背后扮演什么样的角色?

二、我们为什么要了解原理?

我们假定你对WebGL已经有一定了解,或者用Three.js做过了一些东西,这个时候,你可能碰到了这样一些问题:

1、很多东西还是做不出来,甚至没有任何思路;

2、碰到bug无法解决,甚至没有方向;

3、性能出现问题,完全不知道如何去优化。

这个时候,我们需要了解更多。

三、先了解一个基础概念

1、什么是矩阵?

简单说来,矩阵用于坐标变换,如下图:

2、那它具体是怎么变换的呢,如下图:

3、举个实例,将坐标平移2,如下图:

如果这时候,你还是没有理解,没有关系,你只需要知道,矩阵用于坐标变换。

四、WebGL的工作流程

4.1、WebGL API

在了解一门新技术前,我们都会先看看它的开发文档或者API

查看Canvas的绘图API,我们会发现它能画直线、矩形、圆、弧线、贝塞尔曲线。 于是,我们看了看WebGL绘图API,发现:

也就是说,再复杂的3D图形,也是通过顶点,绘制出一个个三角形来表示的:

4.2、WebGL绘制流程

简单说来,WebGL绘制过程包括以下三步:

1、获取顶点坐标

2、图元装配(即画出一个个三角形)

3、光栅化(生成片元,即一个个像素点)

接下来,我们分步讲解每个步骤。

4.2.1、获取顶点坐标

顶点坐标从何而来呢?一个立方体还好说,如果是一个机器人呢?

没错,我们不会一个一个写这些坐标。

往往它来自三维软件导出,或者是框架生成,如下图:

写入缓存区是啥?

没错,为了简化流程,之前我没有介绍。

由于顶点数据往往成千上万,在获取到顶点坐标后,我们通常会将它存储在显存,即缓存区内,方便GPU更快读取。

4.2.2、图元装配

我们已经知道,图元装配就是由顶点生成一个个图元(即三角形)。那这个过程是自动完成的吗?答案是并非完全如此。

为了使我们有更高的可控性,即自由控制顶点位置,WebGL把这个权力交给了我们,这就是可编程渲染管线(不用理解)。

WebGL需要我们先处理顶点,那怎么处理呢?我们先看下图:

我们引入了一个新的名词,叫“顶点着色器”,它由opengl es编写,由javascript以字符串的形式定义并传递给GPU生成。

比如如下就是一段顶点着色器代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
attribute vec4 position;
void main() {
  gl_Position = position;  
}

attribute修饰符用于声明由浏览器(javascript)传输给顶点着色器的变量值; position即我们定义的顶点坐标;

gl_Position是一个内建的传出变量。

这段代码什么也没做,如果是绘制2d图形,没问题,但如果是绘制3d图形,即传入的顶点坐标是一个三维坐标,我们则需要转换成屏幕坐标。

比如:v(-0.5, 0.0, 1.0)转换为p(0.2, -0.4),这个过程类似我们用相机拍照。

4.2.2.1、顶点着色器处理流程

回到刚才的话题,顶点着色器是如何处理顶点坐标的呢?

如上图,顶点着色器会先将坐标转换完毕,然后由GPU进行图元装配,有多少顶点,这段顶点着色器程序就运行了多少次。

你可能留意到,这时候顶点着色器变为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
attribute vec4 position;
uniform mat4 matrix;
void main() {
  gl_Position = position * matrix;  
}

这就是应用了矩阵matrix,将三维世界坐标转换成屏幕坐标,这个矩阵叫投影矩阵,由javascript传入,至于这个matrix怎么生成,我们暂且不讨论。

4.2.3、光栅化

和图元装配类似,光栅化也是可控的。

在图元生成完毕之后,我们需要给模型“上色”,而完成这部分工作的,则是运行在GPU的“片元着色器”来完成。

它同样是一段opengl es程序,模型看起来是什么质地(颜色、漫反射贴图等)、灯光等由片元着色器来计算。

如下是一段简单的片元着色器代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
precision mediump float;  
void main(void) { 
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
}

gl_FragColor即输出的颜色值。

4.2.3.1、片元着色器处理流程

如上图,顶点着色器是有多少顶点,运行了多少次,而片元着色器则是,生成多少片元(像素),运行多少次。

4.3、WebGL的完整工作流程

至此,实质上,WebGL经历了如下处理流程:

1、准备数据阶段

在这个阶段,我们需要提供顶点坐标、索引(三角形绘制顺序)、uv(决定贴图坐标)、法线(决定光照效果),以及各种矩阵(比如投影矩阵)。 其中顶点数据存储在缓存区(因为数量巨大),以修饰符attribute传递给顶点着色器;

矩阵则以修饰符uniform传递给顶点着色器。

2、生成顶点着色器

根据我们需要,由Javascript定义一段顶点着色器(opengl es)程序的字符串,生成并且编译成一段着色器程序传递给GPU。

3、图元装配

GPU根据顶点数量,挨个执行顶点着色器程序,生成顶点最终的坐标,完成坐标转换。

4、生成片元着色器

模型是什么颜色,看起来是什么质地,光照效果,阴影(流程较复杂,需要先渲染到纹理,可以先不关注),都在这个阶段处理。

5、光栅化

能过片元着色器,我们确定好了每个片元的颜色,以及根据深度缓存区判断哪些片元被挡住了,不需要渲染,最终将片元信息存储到颜色缓存区,最终完成整个渲染。

五、three.js究竟做了什么?

我们知道,three.js帮我们完成了很多事情,但是它具体做了什么呢,他在整个流程中,扮演了什么角色呢?

我们先简单看一下,three.js参与的流程:

黄色和绿色部分,都是three.js参与的部分,其中黄色是javascript部分,绿色是opengl es部分。

我们发现,能做的,three.js基本上都帮我们做了。

  • 辅助我们导出了模型数据;
  • 自动生成了各种矩阵;
  • 生成了顶点着色器;
  • 辅助我们生成材质,配置灯光;
  • 根据我们设置的材质生成了片元着色器。

而且将webGL基于光栅化的2D API,封装成了我们人类能看懂的 3D API。

5.1、three.js顶点处理流程

从WebGL工作原理的章节中,我们已经知道了顶点着色器会将三维世界坐标转换成屏幕坐标,但实际上,坐标转换不限于投影矩阵。

如下图:

之前WebGL在图元装配之后的结果,由于我们认为模型是固定在坐标原点,并且相机在x轴和y轴坐标都是0,其实正常的结果是这样的:

5.1.1、模型矩阵

现在,我们将模型顺时针旋转Math.PI/6,所有顶点位置肯定都变化了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
box.rotation.y = Math.PI/6;

但是,如果我们直接将顶点位置用javascript计算出来,那性能会很低(顶点通常成千上万),而且,这些数据也非常不利于维护。

所以,我们用矩阵modelMatrix将这个旋转信息记录下来。

5.1.2、视图矩阵

然后,我们将相机往上偏移30。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
camera.position.y = 30;

同理,我们用矩阵viewMatrix将移动信息记录下来。

5.1.3、投影矩阵

这是我们之前介绍过的了,我们用projectMatrix记录。

5.1.4、应用矩阵

然后,我们编写顶点着色器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gl_Position = position * modelMatrix * viewMatrix * projectionMatrix;

这样,我们就在GPU中,将最终顶点位置计算出来了。

实际上,上面所有步骤,three.js都帮我们完成了。

5.1.5、three.js顶点处理具体流程

所以有了,多次矩阵计算,多次坐标换算。three.js具体是怎么做的呢?

坐标转换流程:

1、首先,顶点坐标存储在Mesh.Vertex.position中;

2、随后,如果模型(Mesh)设置了旋转、缩放、移动,那将这些转换信息存储在Mesh的模型矩阵里;

3、同样,相机转换信息存储在视图矩阵(Camera._verMatrix);

4、然后生成顶点着色程序,如上图。

5.2、片元着色器处理流程

我们已经知道片元着色器负责处理材质、灯光等信息,但具体是怎么处理呢?

5.3、three.js完整的运行流程

当我们选择材质后,three.js会根据我们所选的材质,选择对应的顶点着色器和片元着色器。

three.js中已经内置了我们常用着色器。

文章来源:http://www.cnblogs.com/wanbo/p/6754066.html

本文系转载,如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
大模型的现在进行时:走出对话框,走向产业端
大模型热潮涌动了一年多后,越来越多人平复了激动的情绪,开始从客观的视角重新思考大模型的价值和机会。
Alter聊科技
2024/04/25
1730
大模型的现在进行时:走出对话框,走向产业端
端侧大模型浪潮奔涌而至:态势、影响与建议
10月10日,Vivo推出蓝心端侧大模型 3B,其AI能力已覆盖60多个国家和地区,服务超5亿手机用户,大模型token输出量超过3万亿;随后,字节发布首款AI智能体耳机Ola Friend,与豆包深度集成;18日,荣耀同期发布了Magic OS 9.0 ,打造AI OS,其上的YOYO智慧助手已经打通了多款APP,可以实现一句话充值、一句话点外卖等服务。中国信通院与荣耀等企业还共同发布了《终端智能化分级研究报告》,推出了行业首个终端智能化分级体系。
小腾资讯君
2024/10/31
4380
以芯片、工具链和生态为引擎,MediaTek掀起智能体AI普及的第一波浪潮
基于大语言模型,智能体具备自主思考、规划,调用工具并处理复杂任务的能力,且无需依赖人类明确的驱动指令。在底层技术持续突破的当下,智能体正在重塑人机交互方式。
机器之心
2025/04/18
1130
以芯片、工具链和生态为引擎,MediaTek掀起智能体AI普及的第一波浪潮
​大模型进化论:AI产业落地将卷向何方?
“百模大战”爆发不久,大模型价格战随之而来,成本高昂的大模型几乎进入了免费时代。大模型从庞大的实验室工具,转变为高效灵活的应用助手,以狂飙猛进的速度在众多行业落地生根。
科技云报道
2025/03/04
800
​大模型进化论:AI产业落地将卷向何方?
构建端侧生成式AI生态,联发科领先高通的一步好棋
继去年11月推出天玑9300,率先将生成式人工智能(AI)带入到智能手机端之后,芯片大厂联发科(MediaTek)为了引领移动生态抓住“生成式AI手机”市场机遇,近日召开了首届“天玑开发者大会”(MDDC 2024),并携手合作伙伴共建“生成式AI手机”标准与天玑移动AI生态,加速推动 “生成式AI手机”的普及。
芯智讯
2024/05/17
1880
构建端侧生成式AI生态,联发科领先高通的一步好棋
苹果放弃造车:AI布局已被中国手机甩开一年 | 深网
意料之外的是,花费数十亿美元、秘密开展了10年的Titan项目(造车计划)会成为苹果的“弃子”。但在电车突破寥寥、生成式AI已成为全球最重要风口的背景下,苹果放弃造车专注AI项目又在情理之中。
小腾资讯君
2024/03/13
1890
加速分化:关于大模型走势的十个判断
大模型进入加速发展的第二年,技术迭代和竞争更为激烈。令全球震撼的文生视频Sora世界模拟器、拥有更强智能的谷歌Gemini 1.5、Meta的世界模型的雏形V-JEPA同一天推出,Claude3超越了GPT4的能力。Open AI的GPT5呼之欲出,奥特曼不仅自研芯片、还投资了数家可控核聚变公司,储备未来的关键资源——算力和能源。
小腾资讯君
2024/03/15
2010
加速分化:关于大模型走势的十个判断
ChatGPT的CEO共识:超级AI算力+大模型成为核心竞争力,生产力被重新定义
允中 发自 凹非寺 量子位 | 公众号 QbitAI ChatGPT正在加速将人工智能推入一个全新周期。 “AI的iPhone时刻”、“宛如互联网发明一样重要”……比尔·盖茨、黄仁勋等行业大佬已经用最为精简有力的语言,给这场技术风暴完成初步定义。 但具体呢?具体究竟会带来哪些机会和影响? 行业内外,迫切想要知道答案。 就在最近,一场齐聚了宋春雨、戴文渊、贾佳亚、周明、王在、唐文斌、范建平的panel上,发出了来自中国AI创新圈的声音: ChatGPT所代表的人工智能技术将重新定义生产力,超级AI算力+大模
量子位
2023/03/09
3.3K0
ChatGPT的CEO共识:超级AI算力+大模型成为核心竞争力,生产力被重新定义
大模型这把大火,烧到了手机领域
AI大模型从年初一直火到了年尾,但似乎离普通人还有些距离。不过,现在情况似乎有了一些变化,各大手机厂商们,正在争先恐后地把大模型装进手机里,让AI变得“触手可及”。
刘旷
2023/12/15
2200
世界人工智能大会:大模型开启"工业4.0 pro"时代
2023年可以称得上是大模型发展的元年,2月份,创新型公司OpenAI连同其发布的ChatGPT一夜爆火。之后,科技公司的大模型开始陆续亮相。
华尔街科技眼
2023/07/10
2560
天玑9300拿下生成式AI最强移动芯,端侧支持330亿大模型,1秒内AI画图,全新全大核架构做底座
它是业界首款搭载硬件生成式AI引擎,首‍次实现端侧L‍oRA融合,让大模型技能可在本地扩展,基于个人照片生成专属表情包。
量子位
2023/11/13
1.2K0
天玑9300拿下生成式AI最强移动芯,端侧支持330亿大模型,1秒内AI画图,全新全大核架构做底座
把大模型装进手机,小米、OPPO、vivo 卷起来了!
随着人工智能技术迅速发展,大模型这把“火”已经烧到了越来越多的领域,手机正是其中之一。有评论甚至认为,“大模型将重新定义手机”。可以预见未来五年,AI 对手机行业的影响,完全可以比肩当年智能手机替代功能机。那么,大模型加持的智能手机会长什么样?大模型如何颠覆手机影像、交互体验?对于程序员来讲,手机操作系统和开发相关技术栈大概会是怎样?
深度学习与Python
2024/03/26
2690
把大模型装进手机,小米、OPPO、vivo 卷起来了!
新火种AI|手机大模型开卷,但划时代的改变还没到来
1月18日,随着三星新一代旗舰S24系列的正式发布,喊出“开启移动AI新时代”的口号,在新机中引入视频AI处理、AI聊天机器人、影像画面处理、通话实时翻译等多项AI功能,AI手机正式成为国内外手机厂商共同的“进化趋势”。
新火种
2024/02/13
1200
新火种AI|手机大模型开卷,但划时代的改变还没到来
未来淘汰你的是 AI 还是懂 AI 的同事?InfoQ研究中心发布 2024 年中国技术发展十大趋势
2023 年,大模型与生成式 AI 的崛起无疑成为了技术领域的焦点。在这一年里,大模型和生成式 AI 的讨论持续“破圈”,各类商用大模型和开源大模型的发布和更新将技术创新推向了新的高峰,相关产品不断发布。
深度学习与Python
2024/02/17
2040
未来淘汰你的是 AI 还是懂 AI 的同事?InfoQ研究中心发布 2024 年中国技术发展十大趋势
洞见2025年科技潮流,技术大融合开启“智算时代”
随着2024年逐渐接近尾声,人们不禁开始展望即将到来的2025年。这一年,被众多科技界人士视为开启新纪元的关键节点。站在新的起点上,我们将亲眼目睹未来科技如何改变我们的世界。从人工智能到量子计算,从基因编辑到太空探索,每一项前沿技术都预示着一场深刻的变革。
科技云报道
2025/03/04
1000
洞见2025年科技潮流,技术大融合开启“智算时代”
发布「从容大模型」,云从扬起「数实融合」的帆
5月18日,作为国内人工智能企业第一梯队的云从科技,也发布了自身的行业大模型“从容大模型”。
AI掘金志
2023/08/26
3180
发布「从容大模型」,云从扬起「数实融合」的帆
没有App,也没有 App Store,未来的手机会干掉全部应用开发人员吗?
在上个月的 WMC2024 上,德国电信联合高通、Brain.ai 推出了一款突破性创新的概念 AI 手机 T phone。与传统智能手机不同,这款手机主打一个“无 App”,它清除了屏幕上的密密麻麻的 App 图标,只留有一个按钮用来激活手机里的 AI 助手,让用户通过类似 ChatGPT 的操作界面来交互。
深度学习与Python
2024/03/26
1100
没有App,也没有 App Store,未来的手机会干掉全部应用开发人员吗?
10年市场规模1.3万亿美元,「模力时代」已来
比如,OpenAI最新AI绘画模型DALL· E 3刚一登场,就跟ChatGPT强强联合,成为ChatGPT Plus里最令人期待的新生产力工具。
量子位
2023/10/25
1630
10年市场规模1.3万亿美元,「模力时代」已来
腾讯发布大模型时代的AI十大趋势:走进“机器外脑”时代
人工智能迅速发展,大模型技术成为赋能各行各业的关键。从算力底座、智力增强到人机协作,大模型正在重塑人类社会,成为可依赖的"外脑"。
小腾资讯君
2024/07/09
7410
AI 模型只能部署在云端?高通白皮书发布:混合 AI 是 AI 的未来
近日,高通技术公司正式发布白皮书《混合 AI 是 AI 的未来》。高通在白皮书中提到,随着生成式 AI 正以前所未有的速度发展以及计算需求的日益增长,AI 处理必须分布在云端和终端进行,才能实现 AI 的规模化扩展并发挥其最大潜能——正如传统计算从大型主机和瘦客户端演变为当前云端和边缘终端相结合的模式。与仅在云端进行处理不同,混合 AI 架构在云端和边缘终端之间分配并协调 AI 工作负载。 云端和边缘终端如智能手机、 汽车、个人电脑和物联网终端协同工作,能够实现更强大、更高效且高度优化的 AI。
深度学习与Python
2023/08/09
4640
AI 模型只能部署在云端?高通白皮书发布:混合 AI 是 AI 的未来
推荐阅读
大模型的现在进行时:走出对话框,走向产业端
1730
端侧大模型浪潮奔涌而至:态势、影响与建议
4380
以芯片、工具链和生态为引擎,MediaTek掀起智能体AI普及的第一波浪潮
1130
​大模型进化论:AI产业落地将卷向何方?
800
构建端侧生成式AI生态,联发科领先高通的一步好棋
1880
苹果放弃造车:AI布局已被中国手机甩开一年 | 深网
1890
加速分化:关于大模型走势的十个判断
2010
ChatGPT的CEO共识:超级AI算力+大模型成为核心竞争力,生产力被重新定义
3.3K0
大模型这把大火,烧到了手机领域
2200
世界人工智能大会:大模型开启"工业4.0 pro"时代
2560
天玑9300拿下生成式AI最强移动芯,端侧支持330亿大模型,1秒内AI画图,全新全大核架构做底座
1.2K0
把大模型装进手机,小米、OPPO、vivo 卷起来了!
2690
新火种AI|手机大模型开卷,但划时代的改变还没到来
1200
未来淘汰你的是 AI 还是懂 AI 的同事?InfoQ研究中心发布 2024 年中国技术发展十大趋势
2040
洞见2025年科技潮流,技术大融合开启“智算时代”
1000
发布「从容大模型」,云从扬起「数实融合」的帆
3180
没有App,也没有 App Store,未来的手机会干掉全部应用开发人员吗?
1100
10年市场规模1.3万亿美元,「模力时代」已来
1630
腾讯发布大模型时代的AI十大趋势:走进“机器外脑”时代
7410
AI 模型只能部署在云端?高通白皮书发布:混合 AI 是 AI 的未来
4640
相关推荐
大模型的现在进行时:走出对话框,走向产业端
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 一、我们讲什么?
  • 二、我们为什么要了解原理?
  • 三、先了解一个基础概念
  • 四、WebGL的工作流程
    • 4.1、WebGL API
    • 4.2、WebGL绘制流程
    • 4.3、WebGL的完整工作流程
  • 五、three.js究竟做了什么?
    • 5.1、three.js顶点处理流程
    • 5.2、片元着色器处理流程
    • 5.3、three.js完整的运行流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档