专栏首页音视频技术学习笔记从零开始学图像渲染

从零开始学图像渲染

图形学是一门综合学科,涉及的基础学科内容繁多,多用于跨领域的工程应用,比如传统的图像处理、游戏引擎,现在比较热门的图像分割、人脸识别、无人驾驶、AR/VR、三维重建、医学影像等等,未来随着图形硬件、网络带宽的进步,前景更加广阔。

当然,学习有一定门槛,有不少前置的知识依赖,要学好,得耐得住寂寞。

工作方向调整,笔者今年6月份开始接触图形渲染相关工作,这里分享笔者从零开始学习图形渲染和对该领域的前景的思考。

一、图形学roadmap

根据自己的理解,画了一张简单的学习路线图,

上面是按照渲染功能来划分,也可以按照工程职能来划分细分领域

如果工作非常着急使用openGL,可以先单独学习openGL,熟悉openGL提供的API,也能勉强应付简单的渲染。如果时间充裕,建议按照笔者上面列举的顺序,从下至上依次学习,先练好内功,到后面的工程应用会轻松很多,而且理解更透彻。

二、学习资料推荐

网上的资料很多,笔者这里按照自己的喜好列出学习的参考资料

2.1 前置学科基础(非必须)

(1)一元微积分:微积分是计算机视觉的基础,涉及到偏导梯度、傅里叶变换等重要概念。推荐《普林斯顿微积分读本》,深入浅出。作者也很俏皮,千万不要再去读大学的那几本同济版了,有毒。这本书只介绍了一元微积分,还需要补充多元微积分的基础。

(2)多元微积分:参考这位博主的笔记来学习,很精简,适合快速复习https://www.cnblogs.com/bigmonkey/category/1142620.html

时间充裕的朋友,可以另外参考MIT的网易公开课:

网易公开课:MIT单变量微积分35讲

http://open.163.com/special/sp/singlevariablecalculus.html

网易公开课:MIT多变量微积分35讲

http://open.163.com/newview/movie/courseintro?newurl=%2Fspecial%2Fopencourse%2Fmultivariable.html

(3)线性代数

线性代数是图形处理之母,一定要学好,如果时间紧张,至少也要理解“矩阵转置”、“叉乘求法向量”、“求逆”、“投影矩阵”等重要的线代概念。

推荐两套教材

** Sheldon Axler写的《线性代数应该这样学》**,不算厚。换一种思路看线性代数的本质,同样劝退大学的那本教材吧!有毒+1!

image

另外,笔者20年趁疫情期间刷了一遍MIT Gilbert Strang 教授的的线性代数,讲的特别好,有大量工程实践的案例

http://open.163.com/newview/movie/courseintro?newurl=%2Fspecial%2Fopencourse%2Fdaishu.html

中国大学的线代不好学,主要侧重公式运用和计算,脱离实际工程,学生很难理解本质,融会贯通。

感谢这位风趣幽默的老头,贡献了这么好的教程。

再补充一个不错的数学博客,作者博士期间整理的学习笔记:https://zlearning.netlify.app/math/

(4)信号原理:

笔者参考的是北航 江志红老师的《深入浅出数字信号处理》,只看了前5章节,讲脉冲、信号滤波、傅里叶变换、离散傅里叶变换等非常基础的信号理论知识,目前还够用,后面需要再继续深入。

2.2 图形学基础(重要)

如果想深入理解openGL,最好是先学习一遍图形学基础,openGL可以理解是“图形学理论”的具体设计实现。否则直接上openGL涉及一些图形学概念,会很突兀。

笔者参考的是中译本《视觉计算基础》,内容安排的很好,详略得当,作为基础够用了。翻译者是四川大学的赵启军老师,学习过程中,有几处疑似错误,给出版社、四川大学都发了邮件,没有鸟我,伤心~~

2.3 接下来到了有趣的实践环节,openGL学习。

openGL的学习分两部分:

一要学习opengl基础图形API;二****要积累opengl shader的编写,包括常见的特效滤镜实现

同学们也可以选择iOS平台的metal、Android平台的vulkan作为图形渲染的开发接口,笔者这里选择openGL,一方面是工作需要,另一方面考虑openGL在工程领域应用时间较长,有丰富的资料可以查,作为学习入门是比较合适的

2.3.1 opengl基础学习

参考资料:

免费网络资料:https://learnopengl-cn.github.io/

这套资料很良心,一是免费,二是涉及的代码、图片资源都整理的很好,到了工程编码环节,有源码事半功倍,不懂的地方,直接看代码。

笔者参考这套学习资料,把每章节的demo也撸了一遍,受益良多。

有兴趣的朋友们,也可以参考:

opengl学习笔记:https://www.jianshu.com/p/fe01787b1de1

另外推荐一本openGL资料作为补充,《OpenGL ES 3.0编程指南》

注意:openGL ES 是针对移动端的API讲解,接口有点老,有些关键字接口和opengl不一样,学习时不用纠结,知道就好。

想学好openGL没有好办法,就是多练习,多总结。过一段时间,就能慢慢体会到openGL渲染管线的逻辑,体会“为什么说opengl 是一个状态机”,感受GPU编程的魅力。

关于opengl有两张很重要的图,理解好这两张图非常重要。

**1)坐标变换 **

2)渲染流程

2.3.2 shader技巧

1)shader教程:

https://thebookofshaders.com/

2)shader集合,这里面有各种各样的shader 算法实现

https://www.shadertoy.com/

后记:

经典图形学在工程应用上,面对复杂的问题,往往有很多bad case,结合机器学习能解决一部分问题,图形学也是机器学习的一大领域,同时对ML感兴趣的同学可以朝这个方向发展,笔者尚未涉猎该领域,暂不能提供合适的资料。

到此,关于渲染的理论基础和工程应用基础就告一段落了。再往后深入,要结合工作需要,选择一个具体的细分领域深入学习。笔者也是刚进入到图形处理领域,了解的不多,这里推荐一些讲图形渲染的资料。

  1. ** PBR(基于物理的渲染)**,光照是渲染里面比较难的一点,设计一个渲染效果逼真的算法,又能兼顾硬件性能并不容易。网上已经免费公开了该教程: http://www.pbr-book.org/3ed-2018/contents.html
  2. RTR (实时渲染),渲染领域的圣经。这本书第三版比较贵,最新的第四版便宜多了,有兴趣的同学可以在网上找找电子版的(白嫖)

image

以上,就是笔者关于图形学入门的心得,希望能对你有所帮助。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 16课-动词英语宇宙的中心

    这样的叙述方式,可以使得句子听上去更加具有客观性,因此这种情况一般在科研、学术著作中较为常见

    用户1068165
  • 图像处理基础-高斯模糊

    设置参数 r = 1, sigma= 1.0 得到 3 * 3的高斯模板,如下所示:

    用户1068165
  • 程序员的职业思考

    用户1068165
  • 数据结构 | 每日一练(46)

    1.已知不带头结点的线性链表 list,链表中结点构造为(data、link),其中 data 为数据域,link 为指

    C语言入门到精通
  • 测试思想-流程规范 SVN代码管理与版本控制

    [root@localhost svn]# svnadmin create --fs-type fsfs project1

    授客
  • 业界 | 深度定制:揭秘Graphcore深度学习芯片加速软件

    选自The Next Platform 作者:Nicole Hemsoth 机器之心编译 参与:侯韵楚、黄小天、李泽南 两年来,我们推出了一系列专为处理神经网络...

    机器之心
  • DeepMind爆出无监督表示学习模型BigBiGAN,GAN之父点赞!

    例如,被称为史上最强图像生成器的BigGAN——许多人看到BigGAN生成的图像都要感叹“太逼真了!DeepMind太秀了吧!”

    磐创AI
  • Vue路由懒加载

    对于SPA单页应用,当打包构建时,JavaScript包会变得非常大,影响页面加载速度,将不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应...

    WindrunnerMax
  • DeepMind爆出无监督表示学习模型BigBiGAN,GAN之父点赞!

    例如,被称为史上最强图像生成器的BigGAN——许多人看到BigGAN生成的图像都要感叹“太逼真了!DeepMind太秀了吧!”

    新智元
  • CocosCreator自封装列表组件ListComponent

    游戏中经常会做列表类型的功能,例如游戏记录、排行榜,涉及到的数据很多,如果使用自带的ScrollView,会需要创建很多列表项组件,效率会很低,也很...

    一枚小工

扫码关注云+社区

领取腾讯云代金券