知乎原贴:zhuanlan.zhihu.com/p/191920215…
省流版
本文献给所有数学没基础,却在游戏开发中不得不面对数学的朋友。
不绕弯子,这里只提供一条接地气、不纠结严谨性的系统学习数学路线。
有些人喜欢严谨推导,有些人喜欢直觉和应用。 不要走极端,我们仅需要在严谨推导,和直觉和应用 取折中,找到最适合自己的平衡点才是最重要的
核心思想
- 工程数学以应用为主,理论推导的严谨性不是必要
- 速成不了,系统学习很有必要性
- 多视角学习会带来很大收益
- 从历史角度,从历史上实际问题的出现,到一步步引入数学工具去解决问题。了解这个过程会让你理解的很自然
- 证明和推导只是理解和应用其中一条路径,但是他却是国内教材的唯一路径,让你误入歧途
- 理解深度只要理解到能说服自己,敢于大胆使用即可
- 不要一次性学完,目的是做好玩的,时间用在刀刃上
个人最佳实践:
做游戏数学什么地方需要数学?
例如学过素描的同学,老师一定强调过多点透视,近大远小近大远小,要有明暗。但是近要多大?远要多小?有多明有多暗?这大概是老师无法回答你的 这时候我意识到,当你需要定量的刻画问题的时候,就需要用数学语言去无歧义且严谨的描述他 当你需要模拟现实世界的时候,就需要这种严谨性
做游戏数学并不是必需品
当他没卡到你的时候他就不是一个必要解决的问题。因为你要理解他需要耗费大量的时间,当你还用不上的时候请把你的时间放在更重要的地方。
工程数学学习和理科数学学习的区别
工程中用到数学和理科的数学并不完全相同。 理科的数学会让你非常强调正确性,所以通篇都证明,告诉你why right。 工程上更追求结果,how work才是核心。游戏工程的各种为性能的骚操作而牺牲严谨性,造成的误差远比使用不严谨的数学造成的误差大。(只要他不出问题,我们就不需要那么严谨)
突然冒出来的数学看不懂怎么办
就像你看代码一样,关看几句你不理解他在干什么。你会学习他的语法,理解他在说什么。然后去看看他之前干了啥,之后干了啥,这里有什么用。慢慢的理一理就清楚了。
数学也一样,是层层递进的,你这里看不懂,那就有可能是你之前肯定有地方没学好,需要你一点点溯源回去弄懂他,或者他的符号你看不懂,那就学下怎么直观理解这些数学语言。(笔者开始学的时候 刚好有高人带,带着我从高中开始看的。。) 总之, 速成不了就还得系统的学一学
嘛蛋,推荐的教材,并且还是众多好评。死都看不懂怎么办
一个宏伟的楼阁,在建造过程会有很多试错修改,脚手架,使用临时的辅助系统。 试问,你要怎么去理解这栋大厦他的每一部分是如何建成。
大部分教材都在做着坑逼事。当你百思不得其解好几天,但是突然懂了,恍然大悟。你大悟出来的东西是他喵教材从没讲,但是在历史进程上建大厦的过程中本应存在的东西,这些东西能将起源和结果联通了。 有些人运气不好,悟不出来那就直接完蛋。 看过国内教材的人大概有这种感觉, 教材习惯结论一摆,不妨猜测有这个结论,然后开始和你扒拉扒拉去证明他是为何的正确,他可以由什么得来。接着大部分没灵感的人就一脸懵逼在那了。
所以应该更多的去寻求一些通用的方法论去指导我们理解他。
个人总结了几种解决方案:
- 【多个角度理解】一个公式的解释可以有多个角度,教材上给出的角度看不懂。果断的换个角度,不要吊死,换本书,换个文章,看看别人是怎么理解的,总有一种适合你的。
- 【结合历史和实际背景】从游戏的角度你用得上的公式,基本都会源于现实问题,并且有极强的应用场景。可以挑几个自己熟悉的感兴趣的领域,弄清楚问背景,历史发展,就像你看gitlog一样。你看别人写的代码会很痛苦,但是你看自己的并不会。两者的区别就是,你完全知道你现在的代码是怎么一步步演化过来。过程中面临了什么样的问题。
- 【不要迷信证明,也不要摒弃证明】教材多喜欢证明,证明只是揭露他本质的一种方式,有些人合适有些人不合适。不需要迷信,但当你用其他方式弄懂后回头看看证明也会有所收益。
- 【写了再说,调一调改一改】 如果看不下证明或者推导或者思考,那就动起手来敲代码吧。把里面的数学应用起来,再去调试,思考他是怎么工作的,实在的多。大部分数学教育有违事物客观规律,一般来说,人都是遇见问题,尝试解决问题,引入方法或工具,尝试定量刻画问题,最终总结出来公式。 大部分数学教材教育反而是从抽象开始,这对工科不友好。
- 【面向工程,我们只是做应用,并不是搞学术】嘛 对大分部游戏开发,不需要非常深刻的弄懂数学背后的本质。 大概 我觉得我们只是在寻求对他的理解,理解程度到了能说服自己,毫无顾忌的使用他。
不要过于迷信数学
对于游戏,数学比起各种计算机的底层,能更好的让你把游戏变的有趣的多。
但是也别想一次性把所有都给学了,这样子很耗时间。
学习资料获取途径
开始推资料了
大部分书都可以在zlib上找到,贴个地址。失效了就去找其他镜像吧
zh.z-lib.fm/ (2025.06.19 依旧有效) (有条件的话,极力支持去用正版)
辅助网站
超级无敌的求解器 不想推导,手算就丢进来让他算吧。他都算不出来 你大概率也算不出来 www.wolframalpha.com/
函数图像绘制工具 graphtoy.com/
zh.numberempire.com/graphingcal…
微积分(基础理论)
用得上的内容
【第一梯队】导数,积分,微分方程,泰勒展开 (比较简单,用的也比较多的)
【第二梯队】极限,级数,多元微积分,偏微分方程,矢量微积分,傅里叶变换。(深入做某个领域才用的上的,物理模拟,高级的渲染)
《微积分力量》(科普向,历史与直观兼顾,很适合入门)
我的启蒙书,里面印象中很深的一句话, 微积分是上帝的语言,这一句话让我开始对数学感兴趣的一路a下去。(这么厉害 那我不学一学岂不是亏了 2333)
介绍了各种应用,和微积分的历史,以及附带一点点直觉上,和可视化去揭露微积分的原理。 微积分怎么从古典的芝诺悖论,发展到微积分雏形,开始登上舞台解决各种问题 再到牛顿时代非严谨的微积分依旧带着人类嘎嘎乱杀,迎来了两次工业革命。 再在到现代在计算机的加持下许多不可解析微分方程可以用数值解析,再次带着人类嘎嘎乱杀迎来了第三次工业革命。
《鸢尾花书-数学要素》(开发视角,可视化)
伟大的可视化,作者是开发,从开发视角写出来的数学书。无需多言。
《普林斯顿微积分读本》(零基础系统学习)
挺好的一本书,高中没学好也能从这里开始看。
《高等数学-同济大学 上 下》 (传统教材,不是很推荐)
也还行吧。中规中矩,虽然应用例子有一些,但是依旧比较是难懂,喜欢各种跳步 看不懂就试试别的教材吧。
唯一的好处可能是是国内很多人用这两本学,课也多,不懂的可以问他们。 开篇就引入了ε-δ语言,感觉凭这点我就很不喜欢他。
现代为了严谨,引入了ε-δ语言来描述极限,用极限来描述微积分。 微积分在牛顿时代就已经能很好的工作,并且解决了大量的问题,嘎嘎杀到了19世纪。 如下,用了ε-δ语言重新定义了函数极限,看一眼都会觉得巨抽象
看你需要不要这种严谨了。各有所好
这里两本书起手就是介绍这个,介绍ε-δ,在用ε-δ语言定义极限,定义导数微分,积分。
从历史发展进程上,我觉得从这学起是反直觉的。
从离散开始讨论起微积分,个人感觉比较符合游戏这个应用场景的。
毕竟,游戏一般不会出现那么病态的函数,视觉上差不多就行了。不连续的函数都当你是连续的用
线性代数 (基础理论)
用得上的内容
【第一梯队】解方程组,坐标变换,矩阵和行列式 (比较简单但是能直接带来很大收益的)
【第二梯队】线性空间,矩阵分解(QR SVD等),特征向量, 迭代方程,矢量微积分,矩阵微积分 (深入做某个领域才用的上的)
《同济大学线性代数》 (是垃圾,你会变得不幸)
上链接,开喷。
看着本看破防了,在被国内微积分喂了屎之后,再被这本喂了一坨更大的 开始觉醒,去找各种教材来对比。 导致线性代数是我学的最舒服的一门了。
《3blue1brown线性代数的本质》(几何直观,入门必备)
只适合建立几何直观,辅助理解,短小精悍。 深入学习,系统学习还是跑不掉的。
《线性代数 mit18.06》(最佳深度教材,覆盖知识面广)
顶级,多看多写写代码会有很好的理解。 冲着这一句话就够了 老爷子牛逼
会介绍很多应用背景来再引入线性代数的工具如何使用,证明出现的很少。并且介绍的思想直击本质,并且还很符合直觉。
b站有带字幕的课
也有翻译版的书,翻译的有点怪但是也还是能看的。
《鸢尾花书-矩阵力量》 (可视化,覆盖知识面广)
伟大的可视化,适合开发看的书。无需多言 内容覆盖的很广。 甚至 矢量微积分,矩阵分解,主成分分析都有覆盖到。
《矩阵理论》(高阶应用)
矢量微积分,矩阵微积分,目前用不上就搁置了 还没找看到非常好教材,有的话推我一下!!! 应该是属于是很高阶的内容,至少我几乎还没遇见过。
内容覆盖了 矩阵分解 矩阵微积分,对矩阵的迹求导,行列式的求导,分析稳定性之类的。物理仿真才需要这些
离散数学(基础理论)
据说是计算机必修的课,看了一部分,感觉没什么用。没看完。 = =|| 当然我只是从游戏开发的角度,应用的角度来看待这个学科。 关系代数,布尔代数这些东西太理论和底层了,比较的锦上添花,图啊,树啊这些介绍的太浅了。
数值分析(理论到计算机实现的桥梁 必学)
之前的学科,几乎都是符号计算,推公式,证明,那些是属于数学家用的东西。 但是这里教你怎么用计算机去把公式转化成代码去问题。 实打实告诉你公式和代码并不是一样对应,有很多种技术手段可以实现公式。并且都有优劣 应该说,之前的几门学科都应该以此为目的去学习。 毕竟最终是得写代码的嘛
包含内容
插值问题,最小二乘拟合,数值积分,数值导数,数值解方程组,数值求特征向量,数值求解非线性方程,数值解微分方程(牛顿迭代 不动点迭代)。
大概看完你写个三体问题的模拟解完全就是没任何问题的。 也没找到很合适的课,还是照着国内的课本看了一部分。 国内依旧是拿吊样,完全是为了做题而讲。都在讲证明。 对于这部分,更推荐直接找开源库或特定算法(如牛顿迭代、龙格-库塔法)的Wiki/博客教程来学习如何实现和应用。理解算法思路和适用场景比会证明其收敛性更重要。
课的意义不大,基本都在讲证明。看了一半就没看下去了,直接上手去实现。但是从这里你确实能觉得泰勒展开是真牛逼 哪里都能用得上。教材用的是这本
信号处理相关(应用)
用得上的部分
【第一梯队】采样 卷积 插值 (比较简单但是能直接带来很大收益的)
【第二梯队】傅里叶变换,快速傅里叶变化,图像压缩,小波变换等
《数字图像处理》(游戏开发应用很多,给出深刻的理论解释)
讲解带很多图,不是就在那里他喵的推公式,感动啊。 并且还是以工程的思维去讲的 先应用,让你做出东西来,后理论。 游戏和他只是有交集,取需要的就行。 并且图片排版是我见过的很好的一本了
颜色理论,颜色空间,图片压缩,傅里叶变换,小波变换,卷积滤波,边缘提取等 如何抵抗混叠,从原理性都有很好的解释。
《信号与系统-奥本海默》(游戏开发应用的少,理论性很强)
很理论的一门课。可以多做点实验调调音频之类的。 都是以一维信号为分析重点,在线性时不变的因果系统,引入了时域卷积,并且讲了他的各种应用和理论推导。 游戏更多的应用场景在二维信号(图片),并且他不需要因果性,做的是空域卷积。个人觉得不如直接去学图像处理。
祖师爷的课,纯看他的推荐程度一般 (太老了,如果能有更多的可视化或者ppt展示,理解起来会方便的乧),但是遇见不懂的结合者其他博主分享的理解视频看还是挺不错的
图形学系列【应用】
嘛,太多了。渲染,物理模拟,几何。都用的上。
《3D数学基础》
很应用。但是对于没什么数学基础,太偏应用可能依旧学不太懂。 可以和上面的理论结合着来
《games系列》
大概以上看了,games系列涉及的数学过程都能看的明白。 games101 很深入浅出,只需要 一点点线性代数和微积分的知识就能理解。 game202 已经和物理相关的就需要较多的数学基础了。