找回密码
 立即注册
查看: 891|回复: 19

零基础如何学习计算机图形学?

[复制链接]
发表于 2021-8-10 14:29 | 显示全部楼层 |阅读模式
零基础如何学习计算机图形学?
发表于 2021-8-10 14:31 | 显示全部楼层
我来做广告了!!!零基础想学计算机图形学不如直接听我的网课吧~北京时间周二周五上午 10 点准时开播,B 站还有录像~
http://games-cn.org/intro-graphics/,或者
https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html
正经回答是:图形学入门相当困难,包括理论和实践都是如此。新手上路以打好基础为主,理解图形学的基本原理,并掌握基本 C++ 编程能力。
图形学入门我只推荐一本书:Fundamentals of Computer Graphics,
C++ 编程我也只推荐一本书:C++ Primer,
版本自然都是越新越好。
另外强烈不推荐使用以下书籍入门:任何游戏编程类,OpenGL / DirectX / Vulkan 类,Shader 编程类,以及 Physically Based Rendering 这本书。
强调一下这里的理解,游戏编程类书籍涉及的内容太杂,不适合用作专门学习图形学的参考资料。OpenGL / Shader 确实是应该学习的内容,但是以我的理解来看,更适合先入门图形学基础之后再去进一步学习,这样会简单很多。这也是我个人的理念:我们要学的是图形学,而不是图形学 API,这两者应该完全分开看待。另外 OpenGL / Shader 这块学多了会容易让人产生理解偏差,觉得图形学就等于实时渲染(当然是错的,但是很多人真的这么认为!)。而 Physically Based Rendering 这本书我的理解是,这本书对新手来说难度太大。如果不做科研的话,读这本书基本等于劝退。而如果想要用它作为科研起步读物的话,这本书的编排又有点过于零碎,更像字典而不像教科书。
另外这是我在知乎的第一个正式回答,希望能帮到对图形学感兴趣的同学们~
发表于 2021-8-10 14:33 | 显示全部楼层
2020年对于国内的计算机图形学界是个好年,因为涌现了3份新的好的中文高质量入门资料,并且都是以视频授课的形式。从这个角度来看,疫情加速了网上授课的大规模普及,从而使录屏和传播知识变得更方便起来。
计算机图形学可以笼统的分为三个大方向,渲染rendering, 几何geometry和模拟simulation, 除掉三个大方向以外还有一些不那么主干的方向,比如3D打印3D printing,  数据可视化visualization,通用GPU编程(GPGPU)以及人机交互等等。
在2020年,三个大方向都有相当高质量的课程,并且都是大牛亲自上课。
首先有UCSB闫老师出品(SIGGRAPH最佳博士论文奖得主,主攻Rendering)的Games101(现代计算机图形学入门),虽然里面包含了Rendering、Geometry和Simulation的内容,但是主要是Rendering入门,着重讲了光栅化(Rasterization)和光线追踪(Raytracing)的内容,几何和模拟都是简单带过,很适合初学者,也很容易看到很酷炫的效果。
https://www.bilibili.com/video/BV1X7411F744?from=search&seid=16228307511649123560其次是由科大出品的数字几何处理-中国科学技术大学-傅孝明,主要是几何相关的内容,14个编程作业包你做到满意,刘利刚老师坐镇科大,也算是国内非常有名的图形学实验室了。
https://www.bilibili.com/video/BV1B54y1B7Uc?from=search&seid=13085399300730920132

最后是由胡渊鸣出品的GAMES201:高级物理引擎实战指南2020,主要介绍了Taichi编程语言和物理模拟编程,这个可能是最难的,并不是单纯的CS课程,就我个人的观课体验,要跟上这门课coding能力是其次的,力学知识和数值计算知识是最需要的,论坛里各种流体力学的大神炫技,着实让人羡慕。
https://www.bilibili.com/video/BV1ZK411H7Hc?from=search&seid=5195290021208890151

如果一个初学者将以上三块拼图拼齐,自诩为图形学入门应当是问题不大。
最后强调一点,计算机图形学是一门综合多学科的活跃的研究性学科,不是朴素的工程实践。把计算机图形学和OpenGL/DirectX/Unreal4/Unity等等开发实践画等号是完全的错误。企图通过学习某某引擎,某某API,某某游戏开发来学习计算机图形学只能是管中窥豹。
=======================分割线================================
答案热度很高啊,两天突破1000赞,大家对图形学的热情很高嘛。
这里再补充一些我读过的一些书面材料。
    入门必读: 虎书 Fundamentals of Computer Graphics. Shirley的力作,大学经典教材,基本覆盖了图形学里需要的所有基础知识(几何上感觉欠缺了点)。Shirley的三本小书,ray tracing in one weekend/one week/the rest of life. 指望着这三本书入门是不现实的,尤其是第三本,如果你没有看虎书的第14章(蒙特卡罗积分)和第20章(辐射度量学),基本上不太可能明白第三本书的原理。 PBRT,质量上佳。这本书是斯坦福CS348B的教材,开课老师是这本书的作者和Pat Hanrahan(19年图灵奖得主)。这本书适合于已经写过渲染器的人读,初学者翻开等于劝退。 OpenGL programming Guide. OpenGL红宝书。不如http://learnopengl.com和opengl官方文档。 smallpt(99行代码的光线追踪)。 放弃它把,shirley的三本小书里的渲染器完成度更高。基本上是对Path tracing的最直接翻译, 知道了理论来看它并不难。 scrachpixels 文章有点零碎,质量不错,适合有知识点不懂的时候来查阅。massively parallel processors。 配合Udacity的CS344(Intro to Parallel Programming). 很好的cuda入门材料。
发表于 2021-8-10 14:43 | 显示全部楼层
我来打广告了。
2021年底我会在GAMES上开设一门新课 GAMES 103:基于物理的计算机动画入门。这门课主要面向的对象是大三、大四、以及刚读研的同学。如果你对图形学特别感兴趣,特别想学习一下物理模拟动画,但又不知道从何入手,那你来上这门课就对了。
这门课的内容涵盖了物理模拟动画的几大基本方向,包括刚体模拟质点弹簧系统有限元弹性体模拟流体模拟碰撞处理等等。课程不是教你如何使用模拟引擎,而是教你这些技术背后的算法、现存的问题以及当前的发展方向等等。
上这门课不需要你有任何图形学基础。什么渲染啊,几何啊,建模啊,统统都不需要。但你需要懂微积分,线性代数,有基本的物理概念,具备C/C++/C#的编程能力。当然,如果你学过数值分析、数值线性系统、数值偏微分方程、非线性优化什么的就更好了。
会有四到五次作业。作业是用Unity脚本做的。Unity上手很容易。所以不会也不要紧。
如果感兴趣的同学多,我以后也可能开设高级的GAMES课程。敬请期待~~~
<hr/>和大多数同学一样,我因游戏而入坑,对图形学特别感兴趣,但完全摸不到入门的门道。二十年前的条件比现在要糟糕得多。大学里的图形学课还在教如何做圆、三角形光栅化这些脱节的东西。我花时间自学了OpenGL,然后又囫囵吞枣的读了很多论文,但总觉得自己没有真正入门。幸运的是,我后来有机会在斯坦福、佐治亚理工等名校系统性地学习了图形学,并还有机会得到Leo Guibas(几何)、Pat Hanrahan(渲染)、Ron Fedkiw(动画)、Greg Turk(几何、动画)等一系列老师的指导。
要问怎么学习图形学,我觉得最好的方式肯定是上课。如果条件允许,应该至少上三门课:一门几何处理,一门渲染,一门动画,分别对应图形学的三个主要方向。只有这样,才能够全面系统地了解图形学的方方面面,为将来打下基础。由于条件有限,很多学校开设的图形学课程可能只涵盖了渲染,这造成有些同学把渲染误解为图形学的全部。这是不正确的。如果在学校没有办法完整系统地学习图形学,那可以考虑上网课。比如GAMES的网课已经比较能够覆盖图形学的三个主要方向了。
关于GAMES 103:基于物理的计算机动画入门,我想说这并不是完整的动画入门课程。因为动画也有不基于物理模拟的技术,比如人体的运动捕捉和人体运动合成,procedural animation等等。如果你对这些特别感兴趣,需要额外补齐这方面的知识。
如果没有条件上课,或者有些知识需要补齐,我觉得次好的方式是读SIGGRAPH course notes。SIGGRAPH每年都会有各种课程详细介绍一些方向上的最新技术。对于入门而言,选读那些十几年前的SIGGRAPH课程讲义是比较合适的。比如,刚体模拟的概念,我推荐Baraff和Witkin的2001年的讲义:
Physically Based Modeling而流体入门,可以读读Bridson和Muller的2007的讲义:
https://www.cs.ubc.ca/~rbridson/fluidsimulation/fluids_notes.pdf这些课程讲义会比论文更加完整更加简单易懂。但因为这些课程通常只涵盖某几个方向,单纯靠读这些讲义还是不够系统化。
我没有什么特别可推荐的教科书。主要因为绝大多数的书只能覆盖图形学的一部分范围,不能单独作为入门级别的教科书。假设一本书一个方向,那按上课需要上三门算,起码得读三本书。这样的入门方式我觉得负担有点大,而且不像上课那样聚焦,有重点。
最后我想说,图形学和其他计算机学科一样,最重要的还是多写代码多思考。光是听听课看看论文,可能不觉得有什么问题。但问题永远都是躲在细节里。只有自己去实现,才能发现问题才能深刻地理解问题。反过头来,再去上课或者读论文的时候,就会发现之前忽略的东西。比如碰撞处理,可能学起来不复杂,可当自己实践的时候才会发现种种效率、效果上的问题。下面这个图,展示的是我们经过反复迭代,开发的高性能引擎,能在2080Ti上以60FPS的速度模拟11万个三角形。这可能也是当前世界最快的物理物理服装模拟引擎。
A Safe and Fast Repulsion Method for GPU-based Cloth Self Collisions (ohio-state.edu)希望大家不单单只是入门,而是能够对图形学的理解更进一步。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-8-10 14:52 | 显示全部楼层
Computer Graphics is Awesome!下面我来梳理一下适合图形学入门的课程或者资料。
入门

作为最基础的课程,这里强烈安利 @闫令琪 的老师的GAMES101课程,在B站累积播放量已经接近53万。这门课非常适合入门,我当年也是靠这门课发现了新世界(顺便拿了114.81/115的成绩,逃),本课对应有8次作业,只需要写核心部分的代码,非常友好,听说最近要重新开放作业提交的通道了~这里是课程主页和B站视频传送门。
此外,还有一本很出名的书挺适合入门,那就是大名鼎鼎的虎书:Fundamentals of Computer Graphics。
渲染

作为闫老师的十年老粉,闫老师又又又开课了!GAMES202系列来了,主要讲述实时渲染中的一些问题,最近已经阴影部分讲完了,这里是课程主页和B站视频传送门。
此外,书的话可以看这本Real Time Rendering,现在已经出到第四版了:
这里还推荐一下 @毛星云 大佬关于RTR第三版的知识提炼:
毛星云:【《Real-Time Rendering 3rd》 提炼总结】(一) 全书知识点总览此外除了实时渲染,在离线渲染方向,可以参考PBRT,并且配备了代码,话说不知道闫老师会不会再开一门离线渲染的课!
这里还推荐知乎上几位大佬 @MaxwellGeng @洛城 @文刀秋二
文刀秋二:DLSS 2.0 - 重新定义AI渲染洛城:游戏中的阴影(一):基础MaxwellGeng:Probe-Based Global Illumination物理仿真/动画

这里推荐 @胡渊鸣 老师的GAMES201课程:高级物理引擎实战指南2020,该课程主要介绍了Taichi编程语言和物理模拟等,但是一些数值计算、力学知识可能有点难,这里是课程主页和B站视频传送门。此外,知乎还有一些Animation/Simulation方面的大佬们,比如 @张心欣 @Raymond Fei 老师等,他们写的回答、文章都挺让人受益。最近, @白如冰 等前辈翻译的基于物理的建模与动画也出版了
白如冰:不只是翻译——记《基于物理的建模与动画》的出版2021.07.26更新:
@wanghmin 老师年底要开设一门关于动画的新课——GAMES 103:基于物理的计算机动画入门,非常期待!
零基础如何学习计算机图形学?建模

在几何建模方面,可以关注刘利刚老师的GAMES102课程,这是课程主页和B站视频传送门;以及傅孝明老师的数字几何处理课程,这是课程主页和B站视频传送门。此外,还有一些书籍,比如Polygon Mesh Processing
其他

其实还有很多比较好的资料,比如GPU精粹系列、Ray Tracing in One Weekend系列、让我入门OpenGL的LearnOpenGL中文版,知乎上还有很多热衷于分享自己知识的小伙伴们 @二圈妹 @鸡哥 @光影帽子 @ycz @启思 @默然 等~
One More Thing

此外,还安利一下我的专栏计算机图形学,这是我专栏的汇总文章(目录):计算机图形学专栏汇总,目前已经收录17篇文章,包括一些GAMES101、102、201、202的文章、以及其他的图形学文章(包括我的小伙伴 @Vitruvius写的Animation系列文章),希望早日写到100篇高质量的原创图形学文章。
计算机图形学计算机图形学专栏汇总相关回答:
@Blurry Light 的零基础如何学习计算机图形学?
@默然 的零基础如何学习计算机图形学?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-8-10 15:01 | 显示全部楼层
就像其他答主说的一样,我不建议上来就逮着一本Direct3D或OpenGL的书往死了看。这些API只是图形学的一部分。上来就看这种东西,把握不住细节的轻重。这些API中的设计,有些东西是工业上的取舍,有些是历史遗留问题,没有重点的看,就是浪费时间。
大多数关注这个问题的程序员,其实主要是关注渲染方向。(真去做simulation的研究生也不需要问这个问题。)
但还是要提一嘴,图形学一般包含这几个领域:几何(Geometry),渲染(Rendering),模拟(Simulation)等等。
不要自我设限。
以下讲的内容以渲染为主。
渲染按需求可以粗略分成实时渲染和离线渲染。实时渲染主要服务于游戏等实时交互应用,离线渲染服务于影视特效,3D动画。
实时渲染使用光栅化(Rasterization)方法,离线渲染使用光线追踪(Raytracing)和光子映射(Photon Mapping)方法。不过这两年在nVidia的努力下,实时渲染也开始用光线追踪了。
——————
入门

我建议刚开始不要关注图形API和GPU,只专注原理,只考虑用CPU渲染,GPU和API能干的事情,CPU都能干,只是速度慢。
1. @闫令琪 教授的图形学入门课程GAMES101。
GAMES101:现代计算机图形学入门录像在b站能搜到。
这个教程非常友好,中文,讲解清晰。包含8次小作业和1次大作业。
大作业有十几个选题,都有一定挑战性,如果有时间,建议全部完成。
2. Fundamentals of Computer Graphics, Fourth Edition
大名鼎鼎的虎书,可以作为作为GAMES101的补充。
在这两个教程的学习过程中,可以抱着两个目标来学习:
    用C/C++写一个软件光栅化渲染器,能正确渲染obj模型,Phong光照模型,有纹理,材质等功能,规模几百到几千行不等,具体取决于你想实现多少效果,能实现体渲染,环境光遮蔽等比较时髦的效果就更好了。用C/C++写一个软件光线追踪渲染器,能正确渲染obj模型,有纹理,材质等功能,有加速结构,能并行化。规模几百到几千行不等。
之所以要求C/C++是因为软件渲染本来就很慢了,你用其他更慢的语言是能渲染,但会很痛苦。
反正你都学图形学了,C/C++是绕不开的。
虽然说『不要随意造轮子』,但我实在是想不到比造轮子更快更透彻去学习一个学科的方法了,更何况,图形学的轮子,难度曲线较为平缓,可以先写个几百行的功能简陋的渲染器看看效果,再慢慢追加其他功能。
围绕上面两个目标,你就可以找资料了。
软件光栅化渲染器1:
tinyrenderer国外一个大佬写的几百行的软件光栅化渲染器,API模拟了OpenGL,主要目的在于理解OpenGL在后台干了什么。
看看渲染效果:
作者很喜欢魔兽世界。
软件光栅化渲染器2:
mini3d韦易笑大佬写的软件渲染,代码整洁,中文注释,适合自己拆着玩。
软件光线追踪渲染器:
Ray Tracing in One Weekend这个系列非常棒,几十页PDF,几百行C++就可以让你写一个光线追踪渲染器,用最快最直观的方式让你感受『基于物理』(Physically-based)带来的威力。
进阶-实时渲染方向

    Real-Time Rendering, Fourth Edition
实时渲染第四版,18年出版,包含时髦的实时光线追踪。
很多人说这本书只是图形学一个目录,因为这本一千页厚的书,引用了2000多文献。
这个说法没错,但是这个说法容易给新手造成误导,以为这本书全是“这个技术就不详细讲了,具体去看XX文献”的蜻蜓点水。
其实,这本书非常完备,刚开始看这本书,不要管那些引用文献,不看其引用,它依然是一本非常完备和清晰的实时渲染教程。
2. @闫令琪 教授的高质量实时渲染课程GAMES202(即将开课)
http://games-cn.org/games202/2021年3月13日开课。当然也可以看录播。
这门课结合上文rtr4一起学习是极好的。


这个阶段,如果有心想学习游戏引擎,或具体的渲染管线。可以自己结合一种API,或者引擎。
手工造一套渲染管线,并实现各种效果,各种阴影,PBR,SSAO,TAA,全局光照等等等等。
这里我依然不会推荐图形API的教程,因为这是可以自己搜索解决的。


进阶-离线渲染方向

    PBR3,也就是《基于物理的渲染(第三版)》
physically based rendering作者详细的讲解了pbr材质,pbr相机模型,光线追踪,双向路径追踪,光子映射方法等等,可以说是面面俱到,而且,本书配套一个C++编写的代码结构清晰的准工业级渲染器:
https://github.com/mmp/pbrt-v3规模大概在3万行,结构清晰,在对整个项目的结构梳理清晰后,就可以选择性的看了。
展示一下pbrt-v3的渲染图片:
对了,pbrt4今年要出版了,作者集成了对英伟达OptiX的支持,终于可以不用渲染一张图等一个小时了。
对于有学术研究目的的同学,pbrt是一个很好的起点。图形学的基础研究,不像AI有那么多成熟的框架。图形学研究需要自己搭建大量的脚手架,一片顶会论文,往往是几万行C++。pbrt可以作为一个基础渲染器,在其上实现自己需要的效果。
2. mitsuba2渲染器
http://www.mitsuba-renderer.org/非常强悍的开源渲染器,学术界常用。闫老师说它的正确性是可以放心的。我没用过,只推荐。
物理与模拟

不是我了解的方向,但是最近有几个非常不错的课程/书籍。我觉得应该推荐一下。
1. @胡渊鸣 大佬的物理引擎课程:
GAMES201:高级物理引擎实战指南2020胡渊鸣是太极(taichi)编程语言的作者,这课也是以taichi讲解的
这个课有编程作业,幸运的同学可以获得纪念品。
哈哈哈,用taichi写的raytracer,骗到的纪念品。
2. 基于物理的建模与动画
译者就是质量保证。
别看到“建模”就想到maya,3d max。这里是指物理模型。
想了解游戏物理引擎原理的同学,这本书非常友好。
3. box2d-lite
box2d是一个非常流行的物理引擎,愤怒的小鸟,蜡笔物理学,地狱边境等知名游戏都是box2d实现的,box2d-lite是作者写的一个简易版本,几百行C++,适合教学用。
准确的说,box2d-lite是作者与GDC 2006展示的版本,是box2d早期版本。
Build software better, together

对了,关于游戏用到的图形学,有一系列文章,叫精粹(gems)。
从上个世纪末开始,平均每年都会出一本。内容就是各个业界大牛写的文章,按主题编纂的到一起,内容比较强调实践,需要一定基础。
按时间顺序大概有:
    Graphic Gems 1-5ShaderX 1-7GPU Gems 1-3GPU Pro 1-7GPU ZenRaytracing Gems
建议按时间倒序看,最近的Raytracing Gems就很不错,详细讲了DXR的实践。
太早的Graphic gems都是上个世纪的了,参考价值下降了很多。
——————
数学

有些人喜欢把图形学妖魔化,动不动就说得好像不学个几年数学根本不能去碰图形学。
其实以大部分人学图形学的目的——以渲染为主,做工程做游戏做应用,这样数学的要求并不艰深。
即使是大多数做图形学研究的同学,在遇到数学短板时,也是随用随学。
基础的数学包含这四个:
    微积分。线性代数。概率论与统计。数值分析。
另外,学习渲染还需要结合很多其他领域的知识,仅仅拘泥于图形学本身,那就是自我设限。
比如渲染正确的毛发,就需要了解生物毛发的生理结构,才能搞清楚毛发对光产生怎么的散射。
闫令琪老师有一篇论文就是模拟毛发髓质对光产生的影响。这项成果被直接用于《猩球崛起3》的毛发渲染。
在渲染中,常用到以下几方面的其他领域知识。还是那句话,什么都会涉及一点,可能不深,但不要自我设限。
    几何光学。辐射度量学(Radiometry)。光照在场景中的传输以次为基础计算。物理量是客观,线性的。光度学(Photometry)。光辐射使人眼产生的总的目视刺激的度量,研究客观的光辐射与主管视觉感受和心理感受的关系。(你可能看到过“伽马校正“之类的名词,它属于这个领域)色度学(Colorimetry)。研究人的颜色规律、颜色测量理论与技术的科学。颜色是一种外界刺激产生的主观反应。色彩空间,色彩模型,都是这个领域的概念。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-8-10 15:04 | 显示全部楼层
=========================最新内容==============================
答主之前忙于毕业和找工作,疏于维护知乎,也很少回答同学们的问题,很抱歉。不过答主现在回归了,希望能更多地帮助有志向学习计算机图形学的朋友们。推荐一个非常好的图形学论坛:http://games-cn.org/  该论坛会定期组织各种报告,还有视频直播,由国内最牛的几个学校的大牛老师举办,参加报告的学者也都是世界范围内的图形学博士,专家和明星(学术明星)! 有意向在国内读硕或者博的同学请“骚扰”里面提到的GAMES指导委员会委员/执行委员会会员吧,都是国内高校和科研机构在图形学领域的领导者。有意向出国读博的同学们也可浏览往期报告,找出你最感兴趣的Topic,加强相应内容的学习,勇敢地跟你感兴趣的导师们聊一聊。
最后在新的一年里,祝大家都心想事成!
=========================主要内容==============================
谢邀, 我博士的研究方向正好是计算机图形学,希望我的解答能够帮到你,也欢迎大家指出错误。
计算机图形学分为很多个方向:图像处理,动画,渲染,几何建模,三维重建等等(计算机视觉现在和计算机图形学也有很多交叉)。
既然是零基础学计算机图形学,你可能需要阅读大量的书籍并写很多代码。前期需要学习的知识主要包括数学,编程基础和计算机图形学基础,后面根据你的职业规划还需要额外阅读其他细分的专业书籍或者写更多的代码 =。= 忘了说你要想跟上时代的脚步,还需要有良好的英文阅读能力。
先从基础书籍开始推荐(涉及到的英文教材可以去找中文教材的对应版本,根据经验一般由机械工业出版社翻译):
1. 数学类:微积分,线性代数(或矩阵论),向量微积分(Vector Calculus)或者多变量微积分(multivariable calculus)。其中请务必认真学习线性代数,因为图形学里大量应用矩阵和三维空间的知识。
2. 编程基础类:C语言/C++入门教材;C++ Primer;Hearn, Baker.Computer Graphics with OpenGL(这本书很厚适合当工具书);OpenGL(R) Programming Guide : The Official Guide to Learning OpenGL;DirectX 9.0 3D游戏开发编程基础(外号龙书)。图形学界讲究运行效率,所以大量程序使用C/C++开发,不论你是想进工业界还是搞科研,搞科研编程要求稍微低一些,有些方向只会matlab也可。OpenGL适合搞科研,而DirectX适合进工业界做游戏。
3. 计算机图形学基础:Shirley. Fundamentals of Computer Graphics(如果只看一本图形学的书,强烈推荐此书);3D Math Primer for Graphics and Game Development;Tomas Moeller, Eric Haines. Real-Time Rendering (2nd Edition)。这类基础书籍推荐英文版教材,它们写得都很详细,使用大量例子来解释各种概念和算法,当然你需要知道英文专业名词对应的中文翻译。第一本最为简单,第二本是图形学和游戏的一些数学基础,第三本是第一本的深入,涉及图形学的各个分支方向。
等你学习完基础并且没有丧失对计算机图形学的兴趣,那么恭喜你可以进阶了。你将面临两个选择:做游戏或者搞科研。
如果你非常喜欢做游戏或者动画特效,请参考该链接里的书籍:游戏程序员养成计划 (更新2013.3.19)。
如果你想读博士搞科研,请参考以下书籍(重要性不分先后,需要根据你的个人兴趣考虑选择):
1. CUDA by Example: An Introduction to General-Purpose GPU Programming。CUDA编程入门教材,现在的图形学领域越来越多的算法会使用GPU加速,如果你也需要用到可以通过这本书快速入门开始写GPU程序,但是GPU程序的优化是门很深的学问,需要在实际编程中慢慢学习。
2. Pharr and Humphreys. Physically-based Rendering。一本关于渲染的基础教材,尤其是ray-tracing。图形学中最难的部分就是渲染了,这本书写得非常好,既详细介绍了各种概念又通俗易懂,还附有大量的源代码,这种书籍不可多得。
3. Dutre, Bekaert, Bala. Advanced Global Illumination。上一本书的补充教材。
=========================分割线==============================
之前学校放春假,而后又去开了个IEEE VR会议,一直没有更新,现在来把实验室库存的几本书籍名字更新一下。
1. Rick Parent, Computer Animation algorithms& techniques, 2nd edition.
2. Erleben, Sporring, Henriksen and Dohlmann, Physics-based Animation.
3. GPU gems 1/2/3
4. 数学书:数学物理方法, Solid Mechanics(为什么要有固体力学?其实如果做图形学Physically based animation的研究需要这些基础知识的).
5. 其他大部分书都在第一部分介绍了
另外,你还需要关注你感兴趣的游戏公司或者科研单位,看看他们招人的要求是什么,然后有针对性的补充学习。
有其他感兴趣的问题,欢迎补充。
发表于 2021-8-10 15:06 | 显示全部楼层
看一本peter Shirley写的<计算机图形学>。里面对所需要的数学知识进行极简短的入门,估计初中生都能看懂。伪代码写的非常精简,基本上翻译成c/c++就能看到效果。
读完前几章会教你做个光线追踪,类似这种吧:


(这是99行代码实现的 http://www.kevinbeason.com/smallpt/)
很有趣很酷炫。做完之后基本就入门了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-8-10 15:07 | 显示全部楼层
作为一个刚刚入门一年的图形学萌新,我想从一个萌新的学习历程来回答这个问题。
这里先给出结论:学习图形学最重要不是考虑如何学习基础更牢,而是应该考虑如何学习才能坚持下去,不建议萌新从任何一本图形学相关书籍入手(看看这些书的厚度)。
图形学书籍
我的学习历程

图形学基础
我当初入门的时候听人说先去学习图形学基础从画线开始,然后我就开始在B站看浙大耿老师的计算机图形学课程,学习的时候也跟着一起敲代码,不过学了几周就觉得,这怎么跟我想的图形学差距有点大。
我心目中的图形学
我的图形学
然后越做越提不起劲,不是耿老师课讲的不好,只是最开始的时候做出东西还很有成就感,慢慢的就失去兴趣,于是就弃坑了。
接下来我又开始寻找学习图形学的路线,然后又看到有人说可以去实现一个光线追踪渲染器,会很有意思,于是我又开始了光线追踪的学习。
光线追踪
我看了很多教程都推荐从 Ray Tracing in a Weekend 以及其他两本书开始入手,于是我也信心满满的从这三本书开始学习。
不得不说这个比画三角形有意思多了,做出的东西虽然是只能渲染一张图片不过还是获得了很大的成就感。这三本书都很短估计一共就不到100页,我也很快跟着做(复制)了一遍。
看着几本书时候还是有懈怠的时候,不过每阶段都能渲染出比较漂亮的图片,而每次我都会发给很多人看,就在一声声大佬中,看完了这几本书~~~
看完之后就感觉到非常空虚,我了解了光线追踪的知识,然后呢?这跟我心目中的图形学还是有很大的差距,于是我又开始寻找接下来该学习什么。我又看到有人说可以从real time rendering 4学习,然后我也兴致勃勃的去搜了一下这本书,一看评论,好家伙!这就是图形学的圣书呀,于是我又开始信心满满的学习这本书。
Real time rendering 4
这本书一来就从管线开始讲解,感觉还不错~。不过看着看着就感觉不对劲了,每次讲一个技术,我正准备看看是什么黑科技,然后反手一个引用告诉我这篇论文讲了,然后就没有然后了。我慌张的往后翻,后面也基本上都是这个风格,我当时就慌了,这拿到一本论文目录了呀。我赶忙去找导师,导师说:书是好书,不过给你三年时间你也研究不完,别看了,去跟着师兄学吧。
当时人都傻了,感觉被骗了,就感觉是刚刚调直座椅靠背准备起飞,结果告诉我这是动车。
接着我也马上去找师兄,跟师兄分享了我的学习经历,师兄笑着反手给了我LearnOpenGL网站。于是我又开始了LearnOpenGL的学习。
LearnOpenGL
我打开这个网站,先大概浏览一遍,有点对劲了,有点接近我心目中的图形学了。于是我也快速的学习了一遍,代码也跟着敲(复制)了一遍。
这个网站每一课都有代码,讲的也刚刚好,就是需要你知道的,他一定讲了不需要你再去额外的查资料,因此LearnOpenGL的学习也很容易的坚持下来了~
不过学完之后还是感觉不对,就感觉还差了点什么。就感觉我明明已经写了这么多代码,他的功能我都跟着实现一遍了,我还是不自信,不敢说自己图形学入门了。
这种感觉一直陪伴我几个月~
学习完LearnOpenGL之后,师兄就叫我帮助他搞研究,接着我就开开心心研究论文了。
论文研究
师兄给我的第一篇文章是 Non interleaved Deferred Shading of Interleaved Sample Patterns 这篇文章是讲述在大量光源情况下如何减少每个着色点的计算压力的文章。我跌跌撞撞靠着有道翻译读完了文章,读完之后真的犹如醍醐灌顶,这就是我心目中的图形学——靠着各种算法Trick做出酷炫的效果欺骗人眼,就像一个魔术师。
于是我就开始专心读论文帮助师兄搞研究,然后慢慢的在老师和师兄的帮助下我也开始了自己的研究。
不过学完LearnOpenGL之后那种不爽的感觉依然存在。
结果
几个月之后我的研究结果出来了就开始写论文,写的过程中小伙伴问我有个地方应该用Irradiance还是用Radiance。我觉得差不多就让他随便写,他告诉我这两个完全不是一个概念。
我当时突然明白为什么学完LearnOpenGL之后那种不爽的感觉是什么了,我知其然不知其所以然。我知道代码这样写,但是我不知道理论基础是什么!!!!然后小伙伴马上给我闫老师的GAMES系列视频!于是我在写论文的间隙学习闫老师的课。
GAMES系列
不得不说闫老师的课极其精炼准确,帮助我把之前所学的东西全部串起来了,让我学的知识有了一块地可以着落而不是飘飞在空中总怕他们飞走。
而且这个系列的课,老师讲得非常生动,就跟追连续剧一样,不需要太强的自制力就能学完(虽然作业一个没做,逃~)。
以上就是我过去一年图形学入门跌跌撞撞的情况,幸得导师,师兄师姐和小伙伴们帮助才坚持到现在,接下来就是我的一些总结。
总结

过去一年我也尝试了各种学习路线,我认为最大的难题不是路线而是如何坚持下来。学习都有很多不顺心的事情,比如Bug一直找不到,算法一直看不懂,这些都极大的消耗学习热情。
入门
作为图形学入门我认为闫老师的GAMES系列视频和LearnOpenGL都是很好的教程,非常容易坚持下来!顺序没有关系甚至可以一个看累了再去看另外一个~,真不建议从图形学书籍入手,动辄几千页真的是太难啃了,上面两个教程就足够入门了。
同时图形学中还是涉及很多数学知识,我这也不建议大家先从数学开始学,还是那个问题——容易放弃。只需要在遇到一些数学知识点,你想了解的时候再去学这个知识点就好了,随着你学习的深入,这些点也会很快连成面~
而且我觉得大家应该找到自己学习图形学的成就感在哪里,是研究算法还是做出炫酷的效果,只有不断的刺激你的成就感,才能让你觉得学习有意思,才能自然而然的坚持下来。不是说一定要按照某种顺序走,适合自己的才是最好的~~~
进阶
在学习完上面两个教程之后,就没有太多同等水平的中文资料了,我只能建议在没有复现算法的能力之前不要看任何没有可执行代码的教程,语言都是不准确的,代码和公式才最准确。因此可以看一看GPU Gems系列书籍,因为这里面部分章节有代码(有的代码跑不起来),没有代码的章节就可以暂时跳过,此外就只能大家去看自己感兴趣的论文了。
第一个回答,希望可以帮助大家~
求关注~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Monica的小甜甜:《图形学论文解析与复现》目录

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-8-10 15:15 | 显示全部楼层
如果刚刚入门,建议先看Peter Shirley的 Minibook Series (Ray Tracing in One Weekend & Ray Tracing The Next Week)
首先是数学背景。线性代数和微积分都很重要。我推荐这本线性代数的书:Introduction to Linear Algebra, 5th Edition
一些我看过觉得很不错的书:
(基础)Shirley 的 Fundamentals of Computer Graphics 和 Foley 的 Computer Graphics: Principles and Practice 都行,两者挑一个看。
(PBR)PBRT真的是好书,基本上读完后对渲染系统就有了一个很好的理解。最近PBRT免费啦:
http://www.pbr-book.org/如果实在觉得PBRT啃不下来,就先看一下henrik的书
Realistic Image Synthesis Using Photon MappingVolume Rendering 还有一本书, Magnus Wrenninge 的 Production Volume Rendering,但如果能啃得动PBRT还是去啃PBRT吧。The conceptual framework for volumes is not great for more advanced work....

一些比较重要的论文:


    T. Whitted. An Improved Illumination Model for Shaded Display, 1980.Interactive Rendering with Coherent Ray Tracing, Wald et al., 2001.Large Ray Packets for Real-time Whitted Ray Tracing, Overbeck et al., 2008.Fast Agglomerative Clustering for Rendering, Walter et al., 2008.Heuristics for Ray Tracing using Space Subdivision, MacDonald & Booth, 1990.Distributed Ray Tracing, Cook et al., 1984.The Rendering Equation, Kajiya, 1986.Importance Sampling for Production Rendering, pages 5-38. Ray tracing on programmable graphics hardware. Purcell et al., 2002.Interactive k-d tree GPU raytracing. Horn et al., 2007.Understanding the Efficiency of Ray Tracing on GPUs. Aila & Laine, 2009.Getting Rid of Packets - Efficient SIMD Single-Ray Traversal using Multi-branching BVHs. Wald et al., 2008.Megakernels Considered Harmful: Wavefront Path Tracing on GPUs. Laine et al., 2013.Theory for Off-Specular Reflection from Roughened Surfaces. Torrance & Sparrow, 1967.
有段时间前我曾经email过大牛Prof. Jerry Tessendorf, 他是这么说的:
"Graphics is a mish-mash of many fields, physics, math, CS, multiple engineering disciplines, atmospheric science, chemistry, art, performing arts, and much more. This is a big part of what makes it so interesting and prolific."
"You want to build up your math oriented skills. Ideally this would include differential equations, multi variable calculus, linear algebra, abstract algebra, differential geometry, physics with calculus, classical mechanics, electricity and magnetism, fluid dynamics, and even a little quantum mechanics. C++, Python, glsl are important languages for coding. Also important: basic art skills like sketching and painting. Even if you are not very good at art, having those experiences and understanding will help you communicate with the art-focused CG people you might someday work with."
祝你好运!
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:37 , Processed in 0.096071 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表