我的计算机图形学学习日记(持续更新)_图形程序学习路径-程序员宅基地

技术标签: 学习  c++  游戏引擎  图形渲染  

目录

个人背景

目标技术栈

学习记录

本科阶段

保研后 ~ 23年6月

23年7月~23年8月

23年9月~24年1月 研一上学期

三维CAD建模

应用几何造型

GPU计算与工程应用

计算机图形学

24年2月~24年3月

24年4月

杂谈区


个人背景

本科:西南某985·软件工程(2019-2023)

硕士:华东某985·软件工程(2023-2026)

方向:计算机图形学

目标技术栈

想到的都先列上……实际上可能一个都精通不了(

  • C++

  • 计算机图形学知识

  • 图形API(OpenGL / Vulkan)

  • 游戏引擎(Unity / Unreal)

  • shader语言

  • 机器学习

  • GPU

学习记录

本科阶段

  • 使用过C++

  • 使用Unity开发过简单的2D游戏

  • 了解了图形学与游戏行业的基本情况

知识积累非常之少,最大的成果是探索到图形学领域+顺利进入心仪的图形学实验室读研。

保研后 ~ 23年6月

  • 适应读研生活
  • 粗略学习GAMES101
  • 完成毕业设计,学会开发blender插件
  • 了解了几何方向与工业软件行业

粗略地学习了GAMES101(没写代码),算是图形学知识初步扫盲了。进组跟着未来导师做了毕设,内容是封装师兄写的工业软件算法做个Blender插件。前端Python+后端C++,做的时候觉得还是蛮有意思的。毕设做完后因为感觉导师方向和个人计划不匹配,于是换到同实验室另一渲染方向导师门下。这段时间了解了计算几何与工业软件行业,把工业软件行业纳入就业考虑。并结识了一些师兄师姐,对图形学领域的宏观认识增加了。

23年7月~23年8月

  • 与新导师沟通,进组
  • 学习图形API(OpenGL)

导师没有布置任务,于是我自由安排了学习内容。暑期主要在学习图形学基础知识与图形API,中途跑了一个OpenCV相机标定的程序。用OpenGL实现一些图形学算法能很好地帮助理解图形学知识,个人感觉《LearnOpenGL》真的写得非常好,是入门的保姆级教材。美中不足的是OpenGL封装了大量的功能,如果在学习过程中对原理不求甚解,很容易变成只学API,这是需要注意的。这段时间还开始整理学习笔记发CSDN,还是挺有成就感的。能学习自己喜欢的东西真的很开心。

23年9月~24年1月 研一上学期

  • 研一上学期,上课写作业

本学期共学习了四门图形学方向的专业课,课程涉及图形学算法、几何、建模、GPU加速等领域,完成了课程作业。

三维CAD建模

相关领域:计算机辅助设计、几何建模、几何引擎、实体建模

  1. 实体模型及其表示方法(B-rep、CSG等)
  2. 三维CAD建模方法(扫掠、布尔等)
  3. 三维CAD建模系统设计、ACIS几何引擎介绍

<考核>

闭卷考试+大作业

大作业:实现基于半边结构的欧拉操作和扫掠建模系统

  1. 定义半边数据结构
  2. 基于半边数据结构,实现五个基本欧拉操作
  3. 基于欧拉操作,实现扫略建模
  4. 对扫略所建的模型进行真实感图形显示

<感想>

大概一年前,我才知道工业软件也是图形学的应用领域,而直到学习了这门课,我终于对工业软件的高精尖有了自己的认知——学这个!真的!太难了!不是学Blender、Maya等等建模软件的使用方法,也不是学怎么在现有软件上二次开发,而是学如何用代码构建一个简易的建模软件,学这个就好像是在学图形学中的机器语言。好在这门课侧重于对于数据结构和算法思想的介绍,是较为偏向导论而非实践类的课程,但它呈现出的复杂还是好几次让我头皮发麻。这个领域网络资料基本没有,如果不是在这里,大概真的很少有老师能开课向硕士生介绍这个领域吧。可惜我学得不好,大作业基本靠往届作业东拼西凑,相比于“写”代码,说是“读”+“缝”代码可能更准确……而且还没读懂(。最后闭卷考试虽然考前复习得很辛苦,但确实让我的脑子留住了不少知识,总算是没完全浪费老师的辛苦教导。

按目前我的研究方向看,未来对于实体建模领域应该不会有太多的涉足了。寒假计划对项目再做个整理,也算给这个领域的学习留下点小小的产出吧。

应用几何造型

相关领域:计算几何、几何建模、NURBS(非均匀有理B样条)、GAMES102

教材:《The NURBS Book 2nd》

  1. 曲线、曲面表示方法
  2. 贝塞尔曲线、B样条曲线曲面
  3. NURBS(非均匀有理B样条)曲线曲面
  4. 几何算法

<考核>

读书报告+大作业

读书报告题目自选,我写的是用贝塞尔曲线对四元数插值,计算机动画相关的

大作业:实现NURBS曲线曲面的基本算法(如求值、求导、求法向等)和蒙皮曲面生成算法

这个大作业我写得超级认真,并写了篇介绍文章:NURBS蒙皮/放样曲面生成算法_nurbs曲线蒙皮-程序员宅基地 (点点关注和收藏谢谢喵

<感想>

顶级好课,不能更推荐。老师还在读书的时候就是研究这个的,对该领域的历史都能如数家珍。老师备课是我近年来见过最严谨细致的,每年都会调整课程大纲和大作业题目,课件还配有辅助阅读资料。课程内容也非常实用,NURBS这种表达方式在图形学的很多领域中都有应用,可以说是几何领域非常基础的入门级知识了。

大作业我前后写了近两周,完整地经历了 搞懂需求-构思算法框架-代码实现 的过程,其中也伴随着许多次的破防,比如找不到参考资料的时候、读不懂数学语言的时候、发现实现A算法需要先实现BCDEF算法的时候……当然最终的成就感也是无与伦比的,觉得自己还不错嘛嘿嘿。

GPU计算与工程应用

相关领域:GPU、CUDA、并行加速

教材:《CUDA By Example》

  1. GPU功能及评估指标介绍
  2. CUDA并行加速理论及实践

<考核>

四次小作业+大作业

大作业:对老师给的mesh求交程序用CUDA进行并行加速

两个相交的三角网格模型,每个模型有69964个三角面片,求出它们的交线。原程序for循环了69964x69964次,求交时间2800s,要求加速到几十毫秒(。

<感想>

唉唉唉说到这个大作业我真的会叹气,因为我最后只是交了个半成品,求交时间大概为900ms。而我没写出来也不是因为不会用CUDA,是我不知道怎么用GPU并行加速构建BVH和基于BVH的检测,总的来说是我对图形学算法不够熟悉,这让我很有点挫败。这个项目可以参考的资料其实挺多的,但是期末赶ddl没啥时间了,我也没认真细看,唉。寒假再多学学,加油加油。

这门课还是挺好的,让我完全地意识到了GPU并行加速对于大型的图形学项目有多重要,也让我这个一直学软工的人了解了点硬件知识。还让我决心自己装一台稍微好一点的台式机,总算不是装机白痴了哈哈哈哈哈哈。

计算机图形学

两个大作业,一个是实现层次Z-Buffer,ddl是一月中旬,刚交;另一个是实现蒙特卡洛路径追踪,ddl三月,还没开始写,写完再统一总结。

把所有作业都交了,来总结一下。

其实、我之前总结不出来的主要原因是、我没怎么听这门课。一方面是每周的课程时间和其他安排冲突,另一方面也或多或少有学过GAMES101的自负,结果就是被大作业教做人了,乐。总的来说这门课比GAMES101的讲解更为细致,在101较少涉及的几何领域也有了更多的介绍。不得不说图形学才是我以后的核心技术啊,怎么能不好好学呢。

24年2月~24年3月

  • 装好了自己的第一台台式机!(硬件茶谈好好好!
  • 过年放假!好好休息了半个月
  • 写计算机图形学课程大作业——蒙特卡洛路径追踪
  • 找日常实习:破防、被拷打、自我怀疑

关于大作业的介绍文章已经发布啦:基于OpenGL的蒙特卡洛路径追踪-程序员宅基地,这个大作业因为缝了相当大佬的作品,所以技术力还真的是有点小高(。其实二月间已经基本写好了一个CPU并行加速的光追版本了,结果某天在github上随意乱翻,看到了同校前辈的课程作业竟然是用shader实现的,渲染结果和渲染效率都完爆我的作品了啊喂!于是我果断决定——  借鉴前辈的作品!经过半个月的阅读、分析、模仿,现在大概也算化为己有了?

在写作业的过程中,复习了GAMES101、学习了GAMES202、阅读了一部分《RTR4》。学渲染好幸福,好想一直学渲染呜呜呜。

交完图形学的大作业,我硕士阶段的专业课程也就结束了。被安排好日程的生活宣告结束,随之而来的是不知该去向何方的迷茫。24年4月~7月也许是我仅剩的可以自由支配的时间,为了面向就业地提高自己的竞争力,我要认真安排这段时间。

于是三月中旬,我也投身到春招洪流里,试图在人山人海中找到一份日常实习。无忧无虑的人生一去不返,一旦开始看面经、找机会,就发现自己的水平是那么的烂。算法题写不出来,八股文不会背,图形学知之甚少,项目说不清楚……我到底会干啥啊?我到底能干啥啊?我到底要干啥啊?

24年4月~24年5月

  • 找实习:在失败中麻木,在失败中思考
  • 失败后的思考:正在为您重新规划学习路线

完全意识到了自己的水平和目标之间的差距有多大。一共获得了几次面试机会,先临三维-几何算法实习生、字节-图形图像工程师-日常实习、网易-游戏客户端引擎-暑期实习、叠纸-渲染程序员-暑期实习,全都寄了。尤其是网易,完全让我体会到了正式招聘的面试难度之大,水平的差距绝不是能靠几天的突击挽回的。唉,要努力啊。

我发现自己之前的学习有几个误区。一是重视图形学,忽视计算机基础;二是重视理论,忽视实践。我写算法题和背C++八股都不行,这导致我连考核基础的一面都过不了;而我对图形学的了解也非常的局限,基本只学过前向渲染和光线追踪,外加一点点几何知识,这和游戏行业的延迟渲染是比较脱节的。造成这些问题,一方面是因为我学艺不精,本身知识储备就少;另一方面则是没有面向就业进行过学习和训练,这是认知的问题。作为学生,很容易在某一个小领域深入,实际上研究生阶段也确实就是这个要求,但是求职面试似乎更考察知识的全面性。求职能否成功不在于你会什么,在于你得会面试官希望你会的。那么我面试游戏引擎岗,面试官自然希望我了解游戏引擎及其渲染管线及每个阶段的工作原理,这是很自然的事吧。

4月底还被网易的TA岗捞了一面,面完觉得以后还是专心卷引擎岗吧(乐。今年不准备再投实习,已经明白自己的弱点、接下来就要努力弥补了,之后的重心也要逐渐转移到科研上来。虽然最终没有找到实习,但是这个四月我也没有虚度。回望一个月前的自己,我真的又进步了很多。既然知道了努力的方向,就勇敢地向前吧!


杂谈区

打工?沉淀!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Lindy_pass/article/details/132517016

智能推荐

C++ 函数类型(虚函数...)_虚函数 c++ 分类-程序员宅基地

文章浏览阅读538次。http://blog.csdn.net/acorld/article/details/8860397_虚函数 c++ 分类

Ubuntu 16.04 插拔USB网卡后1分钟或2分钟后网络断开问题_modemmanager[7773]: <info> couldn't check support -程序员宅基地

文章浏览阅读658次。USB Tethering keeps disconnectingUSB Tethering keeps disconnectingAsk QuestionAsked4 years, 8 months agoActive1 year agoViewed17k times147I'm trying to connect via USB tethering from my LG G4. I have Ubuntu 16.04The tethering ..._modemmanager[7773]: couldn't check support for device at '/sys/device

新手初识安信可ESP8266 12f机智云开发板微信直连云-程序员宅基地

文章浏览阅读3.3w次,点赞21次,收藏67次。第一次接触esp8266开发板,也是一脸懵逼,一方面网络上的资料还不全面,一方面,资料散乱或者资料讲的不明不白。新手入门让我抓狂了两天。我使用的是安信可esp8266 12f开发板。先不建sdk的开发。首先先让我们来认识一下这一块板子,然后烧烧固件玩玩。下面是官方的简介_新手初识安信可esp8266 12f机智云开发板微信直连云

标准STUN判断NAT类型的过程及改进_primary: independent mapping, port dependent filte-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏4次。这里基于stund的实现,来研究标准STUN协议,判断NatType的过程。stund用于判断NatType的接口的用法首先来看stund中用于判断NatType的接口的用法。这里主要来看stund中的STUN客户端client.cxx的实现。client.cxx是一个常规的C/C++ app,这个app的主要code如下:void usage() { cerr << "Usage:_primary: independent mapping, port dependent filter, preserves ports, will h

音频基础知识(一) 音频基础概念 | 采样 | 量化 | 编码 | 常见音频格式-程序员宅基地

文章浏览阅读1.3k次,点赞48次,收藏48次。现在的RealAudio文件格式主要有RA(RealAudio)、RM(RealMedia,RealAudio G2)、RMX(RealAudio Secured)等三种,这些文件的共同性在于随着网络带宽的不同而改变声音的质量,在保证大多数人听到流畅声音的前提下,令带宽较宽敞的听众获得较好的音质。量化深度的大小影响声音的质量,位数越多,量化后的波形越接近原始波形,声音的质量就越高,需要的存储空间就越多。波形就是声音的音色,童谣的频率和振幅下,声音听起来不同就是因为他们的音色不同。

MacOS MySQL 无法连接,无法启动_mac 重启电脑之后mysql连接不上了为什么-程序员宅基地

文章浏览阅读876次。真正是什么问题也不清楚,反正就是解决了。如果手动使用管理员权限启动就能解决,那么在系统设置里启动应该也可以,但是不起作用,不明白。什么情况下才会导致 linux 的socket文件损坏呢?_mac 重启电脑之后mysql连接不上了为什么

随便推点

ValueError: Unrecognized configuration class <class transformers_modules.Qwen-7B-Chat...解决方案_valueerror: unrecognized configuration class <clas-程序员宅基地

文章浏览阅读5.6w次,点赞14次,收藏12次。本文主要介绍了ValueError: Unrecognized configuration class _valueerror: unrecognized configuration class

java 访问修饰符的访问权限_java中修饰符的访问权限,由大到小依次为___-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。 java的访问权限设置使用的访问修饰符主要包括:private、default、protected、public权限又大到小排序为:public&gt;protcted&gt;default&gt;priavte_java中修饰符的访问权限,由大到小依次为___

(LLVM)中间语言(IR)基本语法简介_llvm 中间语言-程序员宅基地

文章浏览阅读1.9w次,点赞6次,收藏33次。(LLVM)中间语言(IR)基本语法简介转自:http://blog.sina.com.cn/s/blog_49b6b6d001011gik.html根据编译原理知识,编译器不是直接将源语言翻译为目标语言,而是翻译为一种“中间语言”,我们编译器从业人员称之为“IR”--指令集,之后再由中间语言,利用后端程序和设备翻译为目标平台的汇编语言;无疑,不同编译器的中间语言IR是不一样的,而IR可以说是集中_llvm 中间语言

计算机组成原理 符号扩展-程序员宅基地

文章浏览阅读1.9k次。时刻谨记:扩展是为了方便机器对齐进行相加计算,所以填充不会改变本身的数值。当8位的整数与32位的整数相加时,就要将8位的整数扩展成32位。对于补码表示的小数(原码也同理),在进行扩展时,用0在后面填充。正数的扩展无论是什么编码表示通通符号位不变,用0填充进行扩展。原码0101扩展4位后为00000101,数值还是5。负数的扩展则根据不同的编码表示各不相同。例子:0,101 → 0,000101。补码=原码:1.0110000。原码:1,0000011。反码:1,1111011。补码:1,1111011。_符号扩展

IBM小型机厉害的高级功能_ibm小型机 主要是为数据库设计-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏3次。官方安装文档解读SAP S4 HANA架构SAP HANA原生备份与恢复自己攒一台SAP S4 HANA服务器硬件配置参考BASIS模块管理为什么SAP ECC的系统,数据库总是和SAP的应用安装在一起SAP PI服务器,版本731 SYBASE数据库运维故障解决2粒ERP-SAP服务器集群架构技术沿革IBM小型机厉害的高级功能AIX下 SYBASE 数据库无法启动..._ibm小型机 主要是为数据库设计

行星减速机构造工作原理_行星齿轮减速机拆解-程序员宅基地

文章浏览阅读455次。当输入侧的动力驱动太阳齿轮时,行星齿轮可以沿着内齿环的轨迹绕中心旋转,行星旋转连接到托盘上的输出轴上。96﹪以上的高传动效率,免保养、寿命长,模块化的设计应用及安装容易,正反转均可适用,导热性佳,不易温升,故为数控机床最佳之选用组件。驱动源以直线或连接的形式启动太阳齿轮,太阳齿轮与行星载体上的行星齿轮相结合,以驱动运动。乘以级齿轮组和行星齿轮组的数量,积累更高的减速比。行星齿轮减速机又叫行星减速机,当我们在使用行星减速机时,圆柱齿轮均匀地分布在内齿轮和外齿轮之间,圆柱齿轮在内齿轮和外齿轮之间绕同心圆运动。_行星齿轮减速机拆解