需要掌握具体一点哪些数学?比如说高数,线代,概率论等等。


谢邀。

别的回答已经说得差不多了,稍微整理一下。

如果只是实现,不是搞演算法研究,基本上高中为止的数学(初等数学)+线代+能看懂微积分式子就差不多了。搞3D的话需要一些空间想像力,这个在高中的解析几何学习当中就应该要搞定了。

如果是搞理论研究,没有上限。


技能树见过不?对,就类似这种:

计算机图形学就类似这样的一颗技能树,最基础的可能是二维画点、画线、画面,较基础的是三维简单图形渲染,再进阶一点有动画、可编程管线、光照计算、自定义渲染管线,后面还有物理模拟等。点亮不同层次的图形学技能,要求的数学能力也不尽相同,越是高级的图形学技能,要求的数学知识越多。

「数学不是没有用,而是不够用!」。对数学的学习和应用将是「活到老,学到老」。重要的是,从以前看似枯燥的数学到看到它的实际应用的过程中,你会更容易享受数学的美妙。在你不断进行计算机图形学的研究的过程中,你会感觉到你的数学知识越来越不够用,从而真正理解其中的数学思想和数学方法。

另一方面,想成为一名计算机图形学的研究者也不必精通各门数学!在大学里,你所学的那些数学看起来都很抽象,枯燥无味,这是因为你并不知道它们的用处,甚至连讲课的老师也不知道,而你们的目的只是记住那些定理和公式,考个好分数。与大学学习数学不一样的是,你在计算机图形学的学习和研究过程中会感受到数学的用处和美妙,这时你学习数学的目的将更加明确,兴趣将更加浓厚,学习方法将更加有效。因为你是在使用数学的过程中在学习数学!想想看你是如何学会中文说话的?以上提到的常用的数学课程你不必都要熟悉,许多研究工作者从不需要考虑其中提到的某些数学知识,成功的研究者总是将某一方面的数学知识和数学工具用到极致!

总之,关于计算机图形学与数学的关系,归纳起来就是以下几个原则:

  • 计算机图形学的研究需要用到较多的数学知识,有较好数学功底的学生从事计算机图形学有一定优势;
  • 即使没有学太多的数学也不要紧。数学的知识不需要都学会了再去做问题,在解决问题的过程中去学习数学是最快的学习方法。即,研究过程中若遇到什么数学知识再去学相关的知识,学习起来会更有兴趣,掌握起来会更快更扎实;
  • 学习数学要结合图形,即「数形结合」,需要有图形的想像能力;数学公式不重要,是「纸老虎」,重要的是背后的思想及其所表达的概念,公式只是它们的一个抽象表达;
  • 活到老,学到老。要不断学习新的知识和技术,使自己不断进步和增长功力,才是王道。


大致学四门就足够应付90%以上的图形学内容了:

1,微积分,单变数微积分和多变数微积分

2,线性代数,至少得学习到空间变换

3,概率理论和蒙特卡洛模拟

4,信号处理和离散傅里叶变换

额外的再学习一些物理辐射度知识和球谐函数。只做工程不做科研差不多这些就够了。


谢邀,我就从学习 leranopengl 这个网站过程中简单谈谈用到部分数学知识吧。

如果要在屏幕上显示一个物体,要定义物体的位置、大小、形状和颜色。在 OpenGL 中,位置和形状是由构成目标物体的顶点坐标决定的(OpenGL 默认根据这些顶点坐标绘制三角形,构成形状),这些顶点坐标通常是由 3 维向量或 2 维向量构成的(取决于被渲染的物体的维度),每个维度(3 维情况下)由物体顶点坐标在空间坐标系中的 x,y,z 上的值构成。物体的大小,可以通过矩阵来实现缩放。物体的颜色则是通过由 RGBA 四个颜色通道的四维向量构成。如果想使用一些图片(OpenGL 中称为纹理)代替颜色作为物体表面的话,则需要通过纹理坐标,将图片贴在合适的位置上,这里的纹理坐标也是通过 2 维或 3 维向量表示的(3 维向量的纹理坐标通常应用在天空盒上)。如果想要显示一个 3d 物体,那么还需要使用将物体转换到世界空间,观察空间以及裁剪空间的矩阵,这里就不赘述了。回顾一下上面提到的数学知识,会发现,如果想要简单的显示一个物体,需要用到线性代数(向量,矩阵)和几何知识(坐标)。如果对向量以及矩阵的几何意义有疑惑的话,可以在哔哩哔哩中搜索 3B1B 的线性代数系列,那里讲的很生动。

一般的 3d 游戏中,人物是能够在场景中自由走动的,这个行为看起来与使用摄像机拍摄相似。在 LearnOpenGL 教程中,它被称作摄像机。摄像机由被摄像机观测的物体指向摄像机位置的 Front 向量(可看作是 z 轴),与 z 轴在水平方向垂直的 Right 向量(可看作 x 轴)以及与前两者都垂直的 Up 向量(可看作 y 轴)以及摄像机自身位置所构成的 LookAt 矩阵来实现。可以设置前后左右四个移动方向的键位,通过改变摄像机的位置,更改 LookAt 矩阵,用 LookAt 矩阵与被观测的物体位置向量相乘,得到相应的结果。这里也可以理解为将物体从原先的坐标轴中映射到当前摄像机的坐标轴中。3d 游戏中还有一个很关键的功能,就是通过移动滑鼠可以实现向左右(yaw),上下(pitch)方向观察。如果你游玩的游戏中包含驾驶飞机的场景,那么或许也会有以贯穿飞机头部和尾部作为旋转轴,进行旋转的动作(roll)。在 LearnOpenGL 教程中,作者使用滑鼠在某个方向移动的距离,作为起始位置和最终位置之间的角度,通过这个角度,用三角函数计算 LookAt 矩阵中 Front 向量(这里实际上更改的是被观测物体的位置。教程中没有计算 Roll)。教程在这里也提到了,几个动作(yaw,pitch 和 roll)被称为欧拉角,这里会出现被称作万向节死锁的问题,可以使用四元数解决。回顾一下上面提到的数学知识,除了之前提到过的矩阵和向量之外,也用到了三角函数的知识。三角函数的知识会在教程中的 Phone 光照部分被广泛应用,这里不赘述了。

教程中帧缓冲那一节中,有讲到后期处理(Post-Processing),这里使用卷积矩阵将渲染出的结果做了 Kernel effect,Blur 以及 edge detection 处理。这里用到的数学知识就是离散卷积了。

在 HDR 章节中,教程讲到 OpenGL 中默认的 RGB 像素值被线性限制到 0.0 和 1.0 之间,这使得若场景中的某个区域亮度很高,其他较暗的场景可能会很难被看清楚,或根本看不清楚。因此教程中使用了 gamma 曲线($y=x^{frac{1}{2.2}}$),(以下是个人理解,如有错误的话,欢迎指出,谢谢!)由于曲线是上拱的,在一定程度上它限制了场景中较亮区域占整体亮度的比率,提高了较暗区域占整体亮度的比率,因此较好的保留了细节。算是一个数学知识吧。

最后就是教程末尾的 PBR(physically based rendering)。这里用到了较难的数学知识以及物理知识。由于这一章我掌握的并不熟练,就列举几个用到的数学知识吧。教程中,用于计算场景在物体表面映射的反射方程

在实际计算中使用离散积分,这个积分的 n*ωidωi 则是根据球面立体角推导而来,公式中的 fr 方程又分为下面两个部分:

右边的方程 f_cook-torrance 的定义如下

D,F,G 分别为:

D:Normal distribution function 法向量分布方程,它估计了微表面的相对表面区域与 half 向量对齐的程度,这里用到的是概率论的知识。

F:Fresnel function 菲涅尔方程(Fresnel 的 r 不发音),模拟了光照中的菲涅尔效应

G:Geometry function 几何方程,估计了微表面的之间的阴影遮挡。

希望能给题主做个参考,如果上述描述有错误的地方,欢迎指正,谢谢!


图形学是一个大的领域,包含建模、动画和渲染。最基本的数学功底就是高数、线代、概率论和数值计算方法,但是往下深入时你会感觉这些不够,例如几何处理会涉及到微分几何,物理模拟会涉及到大量的偏微分等等。这个时候需要的数学完全取决于你想要涉足的领域分支,所以不是说一下子把图论、偏微分、信号与系统(常用的傅里叶变换)、李群、微分几何等等数学方面的书看完(干著看估计也看不下去),而是找准一个方向往下做,需要的时候补习相关方面的内容,这个时候学习数学你会发现有趣多了,因为这些枯燥的公式最终被融入了绚丽的计算机二维、三维世界。


推荐阅读:
相关文章