基本形式
浏览器的可视化形式及性能比较:
| 形式 | 传统dom绘制 | canvas | svg | webgl |
|---|---|---|---|---|
| 影响因素 | 绘制图形数量和大小 | 绘制图形数量和大小 | 1. 渲染次数 draw call很多图形可以批量渲染,以及其它优化手段可以降低dc 2. 着色器执行的次数, 3. 着色器运算的复杂度 |
|
| 结果 | r10只要不超过 500 个都可以达到 60fps,1000 个左右其实也能达到 50fps,就算要绘制大约 3000 个图形,也能够保持在可以接受的 24fps 以上3000左右元素是一般电脑极限 |
r10,30000个合批渲染帧率仍能达到60r200,3000个左右仍能保持30fps以上,相比于canvas还是有5x+的性能提升 |
||
| 比较 | 说实话不怎么样 | 比canvas要慢一些 元素数量的影响更大 |
最快 | |
| 浏览器自然优化 | ||||
| 硬件特性 | 利用了gpu的并行性 |
该例子是每帧在画布上随机位置渲染随机颜色、特定大小、若干数量小球,看帧率情况。
ref:
说实话,相比于游戏引擎等级的渲染,浏览器端环境依然是弟弟。
游戏引擎和电影工业等级的渲染技术,在浏览器确实是降维打击。
浏览器端的渲染api还是在操作系统的层级之上,相比原生还有更大的层次损失。
svg
path
svg的绘画路径取决于svg元素的d属性:
基础
颜色
颜色的表示方式包括但不限于:
- rgb
实际上rgb对用户并不是很友好,尤其是涉及到渐变和补间的时候。
调整有很多,比如gamma修正 - hsv
通过色相、饱和度、亮度三个维度来表示颜色,通过转换算法可以和rgb一一对应3D
Three.js
基本使用需要nodejs加载web服务器,不然很多资源加载模块都不能正常工作。文字渲染
首先读取字体.typeface.json文件
然后通过fontLoader.load('font.typeface.json', function ( font ) {fontRes = font;});
THREE.TextGeometry("Learning Three.js", options)新建text对象,然后加入进去
将文字保存为图片格式,再将其当作一张蒙皮材质,贴到某个物体上3D基础知识
欧拉角与四元数
欧拉角也可以用于表示三维空间物体的旋转。
但是会出现万象死锁的现象。
点击查看【bilibili】
3B1B的视频以一种投影的方式讲了四元数是怎样的。
如果将二维的单位圆投影到一维直线,渲染管线
点击查看【bilibili】shader
点击查看【bilibili】法线贴图
点击查看【bilibili】
是一种通过RGB贴图,给一个平面材质,在不加顶点的情况下,附加凹凸感的功能:
贴图的RGB值映射到像素点法向的xyz分量,0~255映射到-1~1。
自己看一张图,法向的正方向:x正方向是图右侧,y正方向是图上侧,z正方向是指向你的方向
详情见文章:
免费法线贴图转换:https://cpetry.github.io/NormalMap-Online/
