暑期开发招募
从 2021 年分立的三个实验,到 2022 年引进的 CMU 15/462 与 Scotty3D,再到 2023 年自己搭建的 Dandelion 和上百页的实验手册,不知不觉间图形学的课程改革已经持续了三年之久。我还记得三年前自己尚未加入时看到知乎上对课改的负面争议,也记得两年前辛苦翻译 15/462 文档、分析 Scotty3D 代码的日子,当然更难忘一年前 Dandelion 发布第一个正式版本的巨大成就感。
如今我们已经有了自己的代码框架、实验手册和开发者文档,教学方案日趋完善。然而无需避讳的是,我们的实验体系中仍然缺失现代图形技术领域的某些核心概念,实验手册行文详略仍欠推敲,代码框架自身仍有冗余、低效、不够可靠的问题。我们并不自认为是天才或英雄,因而深知仅靠三两人的努力绝难造就一门完善的课程。所幸图形学课程已经度过了最茫然的阶段,我们相信它已经走到了可以接纳更多同道者的程度。
自本公告发出开始,我们招募愿意参与图形学课程建设的同学与我们一起改进实验框架、外围工具,完善实验手册和开发者文档,欢迎所有感兴趣的同学加入。很多条目并不要求丰富的经验或突出的技术,相信只要愿意参与,必将带来改变。
暑期开发内容概要
本次开放的任务包括三类:
- Dandelion 改进计划:重构、扩充实验框架代码,或增加部署和测试代码
- 外围工具:开发、增强用于收取或评测的工具等
- 实验手册与开发者文档:增补、修订、审阅文档
以下是各类任务的详细说明。温馨提示:内容较长,建议利用本站的目录功能快速定位。
Dandelion 改进计划
渲染:模拟现代硬件机制的光栅化渲染管线
当前版本的软光栅渲染基本是 GAMES 101 的移植。从教学角度,它与现代图形硬件的管线结构差别很大;从效率角度,它完全没有为流水线和并行化预留足够的优化空间。在光栅化管线仍是主流的情况下,实现一个更接近硬件实现、更高效的光栅化管线势在必行。
该任务旨在实现一个流水线化的软光栅渲染器和它的并行版本,要求:
- 了解经典光栅化渲染管线(101 水平),能够快速学习一些图形硬件知识(边学边用)
- 熟悉 C++ 面向对象语法,至少听过说 C++ 模板编程
- 愿意一起学习 profiling 工具
工作量:涉及 5 到 6 个文件,修改/编写约 500 行代码,较多的调试和 profiling,有实验室成员合作。
渲染:路径追踪
路径追踪已近乎离线全局光照的事实标准,为什么不来一个呢?这是通往照片级真实感 (Photo-Realistic) 的第一步。
该任务旨在实现一个最简单的路径追踪渲染器,要求:
- 至少了解路径追踪的基本流程(101 水平),最好有编写 Path Tracing 代码的经验
- 还能记得起一些微积分工具,愿意调试一些可能出现的数值计算问题
- 根据大致接口规划,能基本独立完成实现
工作量:涉及 5 到 6 个文件,编写约 300 至 500 行代码,较多的调试,基本独立完成。
几何:拉普拉斯平滑
Laplacian 算子是离散微分几何中最为经典的工具之一,借助它设计的曲面平滑算法也是最经典的 Mesh 处理工具之一。
该任务旨在实现拉普拉斯平滑算法,对封闭的 2-manifold mesh 进行平滑处理。要求:
- 了解曲面参数化、离散微分几何的概念(102 水平)
- 较好的测试构造/问题追踪能力,愿意调试几何处理代码
工作量:单个文件,编写约 100 至 200 行代码,可能进行大量调试,基本独立完成。
几何:完善 Loop 细分
当前 Dandelion 中的 Loop 细分实现不支持细分非封闭 Mesh,事实上 Loop 细分算法是考虑了不封闭情况的,只要对细分规则稍作拓展就可以解决这个问题。
该任务旨在解决现有 Loop 细分实现不完整的问题,向其中补充 Mesh 边界的处理规则。要求:
- 了解 Loop 细分算法(101 水平),最好曾经做过该实验
- 了解半边网格
工作量:单个文件,修改/编写约 100 行代码,可能进行较多调试,基本独立完成。
几何:探索 Quad Mesh
四边形 Mesh 是美术建模的主流形式,比三角形 Mesh 更适合人工编辑。Dandelion 要增强建模能力,就要支持对纯四边形 Mesh、三角形/四边形混合 Mesh 的编辑和渲染。
该任务旨在支持四边形 Mesh 的渲染、编辑。考虑到其中涉及复杂的 GUI 状态问题,这只是一次尝试。要求:
- 比较全面的图形学基础(至少 101 光栅化渲染 + 几何部分)
- 愿意较大范围阅读代码
- 最好对某种 UI 框架的实现有了解或自行实现过 UI 库
工作量:涉及项目中 60% 以上的文件,修改/编写约 2000 行代码,可能进行大量调试,有实验室成员合作。
CI/CD:多平台自动构建
Dandelion 支持多种桌面平台,因此需要经常在多个平台上进行编译、执行自动测试等。这些工作也会占用不少人力,因此能自动化最好不过。
该任务旨在利用 Docker、GitHub Actions 等工具,自动在 Windows/macOS/Linux distro 上构建、测试 Dandelion。要求:
- 愿意学习 Docker 和 GitHub Actions,最好有使用经验
工作量:修改/编写若干 Dockerfile 和 Shell/Python 脚本,进行少量测试,有同学合作。
测试:渲染图像正确性测试
虽然实验者给出的渲染图未必与参考答案完全一样,但利用 PSNR/SSIM 等指标,还是可以通过衡量它们的相似程度判断其是否正确。如果能够自动测试渲染结果是否正确,那么参与实验的同学就能提前验证自己的结果是否正确。
该任务旨在为渲染器编写单元测试,测试用例为若干指定场景的渲染图。Dandelion 已经支持在无 GUI 的情况下创建、渲染场景,因此工作主要在于实现图像相似度评估指标。要求:
- 了解 C++ 面向对象语法,愿意学习基础的多线程并行计算和 Catch2 单元测试框架
工作量:编写约 100 行单元测试代码,进行少量调试,基本独立完成。
测试:细分算法正确性测试
Loop 细分算法是完全确定的算法,可以通过逐个验证顶点和边来确定一个细分结果是否正确。
该任务旨在为 Loop 细分编写单元测试,测试用例为若干基本模型。要求:
- 了解 C++ 面向对象语法
- 愿意学习半边网格数据结构,最好做过实验
测试:简化算法正确性测试
基于 QEM 的简化几乎也是确定的,但迭代次数足够多时确实有可能因数值误差积累而得到略有不同的结果。
该任务旨在为曲面简化编写单元测试,测试用例为若干基本模型。要求同上。
外围工具
课程主页:GitHub Pages 主页建设
ehall 的课程主页系统可用性很差,我们也希望有自己的课程主页,用来展示一些课程内容、时间安排之类的信息。要求:
- 会用框架和模板搭建静态主页(需要从 markdown 生成,不能直接编辑 HTML)
评测工具:单机下载、多机编译/执行自动测试的评测服务
去年同学们集中提交实验期间,评测机出现了严重的过载现象。今年我们会增加评测机算力,但由于没钱买不起大型服务器,只能用手中的闲置设备组一个称不上集群的集群。
该任务旨在为若干台局域网内设备编写一组脚本,其中一台设备负责从邮箱下载任务,其他设备负责编译、测试提交并返回结果。要求:
- 熟悉 Python 语法,最好了解 request/IMAPClient/SMTP 等库和任意一种 Python web server 库
工作量:修改/编写约 200 至 300 行 Python 代码/脚本,进行一定的测试,基本独立完成。
教学工具:使用 RAG 增强的本地 LLM 创建回答文档问题的 bot
我们一直因实验手册的详实而自豪,但详实也意味着篇幅很长,这导致有些同学经常找不到自己应该看的部分。而当前商用 LLM 的文档解析(RAG 或超长上下文)往往会规定:
您确认并同意,通过本产品及相关配套服务上传、生成、发布或传播的所有信息内容,您特此赋予我们和/或关联公司一项全球范围、永久有效、免费的许可权,允许我们在优化模型和服务的过程中使用您的信息内容。
——摘自通义千问《通义产品用户协议》
而我们的实验手册均以 CC BY-NC-SA 4.0 协议公开,禁止用于商业行为。这既是我们自己的选择,也是因为手册中引用了不可商用资源。因此,一个私有化的 LLM 会是一个比较好的选择。而由于我们并不是很富裕,RAG 配合轻量化 LLM 的方案比部署支持超长上下文的大模型更现实。
该任务旨在使用 Ollama 等工具部署一个私有 LLM(如 Qwen-2),并使用 RAG 构建知识库来为同学们回答问题。要求:
- 有 Docker/Python 基础,最好使用过 Ollama 等工具
- 最好有 RAG 或 prompt 经验,玩过也算
工作量:部署、调试一个私有 LLM,基本独立完成。
实验手册与开发者文档
实验手册:尝试新的实验和实验手册,提供反馈
欢迎所有曾经选课的同学来试做实验、试看实验手册,并向我们反馈问题。要求:
- 曾经上过图形学课程,或已经毕业
开发者文档:检查类和函数的 Doxygen 注释完整性,反馈开发者文档的错漏
对开发者文档的完善也许是永无止境的,也欢迎愿意帮忙的同学来检查我们的开发者文档(存在于源代码的 Doxygen 注释块中)。无论多少,只要发现了缺少文档注释或注释与代码不一致的部分,都可以联系我们或对 XJTU-Graphics 提出 issue/PR。要求:
- 如果希望提出 PR,请学习 Doxygen 基础语法
参与途径
通过我们的邮箱 xjtugraphics@outlook.com 来联系我们,记得附上自己想要加入的项目。当然如果你有我的其他联系方式,也可以直接来找我。本站私信的回复速度可能较慢,延迟可能达到 12 至 24 小时。
注意事项
上述对工作量的描述中,
- “基本独立完成”指你需要自己来开发,但不意味着需要自己单干,你可以随时和我们讨论。
- “有人合作”指这个任务目前已经有人在做(或已经有人计划做),你需要与他人合作完成。
保密要求:
- 部分涉及 Dandelion 改进的任务需要访问 dev channel 的源码,参与者必须保密这部分源码,不允许向任何其他平台上传,不允许直接将代码粘贴到商用 LLM 中提问。
- 搭建 LLM bot 时可以访问不带水印的 PDF 版实验手册(或是 LaTeX/markdown 源码),这部分资料禁止通过互联网传播。
- 提前参与实验测试的同学禁止对外发布答案,在下学期课程开始前不允许对外透露实验内容。
对于违反保密要求的同学,我们保留以“扰乱正常教学秩序“的理由向学校申请处分的权利。