Unity 中的渲染 学习笔记(一)

CatLikeCoding 上的诸多 Unity 系列教程中,关于 Unity 的渲染相关实现的教程的学习笔记,原教程用 20 节讲述了 Unity 自己的渲染相关的一些具体细节。本文是其中 1~5 节的学习笔记,此 5 节的标题依次为:

  • 1 - Transform
  • 2 - Shader
  • 3 - Combining Textures
  • 4 - The First Light
  • 5 - Multiple Lights

原教程及其他参考:

阅读全文

用 Unity 学习 PBR(六)环境光照

本文描述了环境光照中的漫反射项与镜面反射项的计算方法,然后给出了在 Unity ShaderLab 中使用 Unity 提供的全局光照工具得到环境光照结果的代码,最后给出了一路下来实现的各个部分结合起来后的效果并与 Unity 自己的 PBR 结果做了一个大致的对比。

参考

阅读全文

用 Unity 学习 PBR(五)漫反射项

本文大致描述了直接光照中的漫反射项中的光滑表面模型与粗糙表面模型。在光滑表面模型中,描述了如何把菲涅尔现象加入 Lambert 公式之中;在粗糙表面模型中,简要介绍了 Disney 漫反射模型、Oren-Nayar 漫反射模型与 Hammon 满反射模型。最后给出了代码实现与在 Unity 中的结果。

参考

阅读全文

用 Unity 学习 PBR(三)几何项

本文先简单介绍了几何阴影函数(Geometry Shadowing Function,GSF)的基本性质,之后大致介绍了 Smith GSF,包括 Smith 遮蔽函数与四种联合遮蔽阴影函数,描述了两个 GGX Smith 高度相关遮蔽阴影函数的近似,最后给出了代码实现与在 Unity 中 GSF 的可视化结果。

参考

阅读全文

用 Unity 学习 PBR(二)法线分布项

本文先简单介绍了法线分布函数(Normal Distribution Function,NDF)的基本性质,之后描述了 Blinn-Phong、Beckmann、GGX / TR、GTR 等分布函数,简单介绍了 NDF 的形状不变性与各向异性的 NDF,最后给出了在 Unity 中各个 NDF 的可视化结果。

参考

阅读全文

用 Unity 学习 PBR(一)基础和准备

想着学一下 Unity 的 ShaderLab,一是提升引擎的使用能力,二是通过使用实际的引擎来反思自己的玩具渲染器应该怎样改进或重构。找到了用 Unity 搞 PBR 的教程,正好能巩固和深入学习一下以前只在 Learn OpenGL 学过一次的 PBR 的那套东西。

参考

阅读全文

DirectX 12 学习笔记(一)

因为觉着 DirectX 12 和 Vulkan(还有 Metal)作为所谓现代的图形 API,有必要依次学一学,因为之前学的是 OpenGL 3.3。

总之先从 DirectX 12 开始,用的教程是 Frank Luna 的书《Introduction to 3D Game Programming with DirectX12》,没有中文的样子,搞到的电子版有 1200 页。。。有三部分,第一部分(前三章)是数学,跳过了;第二部分(4~14 章)是 DirectX 12 基础,也就是本笔记时看过去的部分;第三部分(15~23 章)算是专题,比如法线贴图、第一人称摄像机、AO 等,之后会继续看下去。

书有一个配套的代码仓库:d3dcoder/d3d12book

我也是跟着书和这个仓库每章也写了,大部分是一样的,但也改了一些部分,比如 DDS 材质的加载使用 DirectXTK12 库,而书中是作者自己魔改的 DirectXTK11。另一点,处于个人喜好,没有用 Visual Studio 的项目,还是用的 VS Code + CMake。代码仓库是:PepcyCh/learn-directx12

此外,在知乎上看到了一个 ID 为「卡卡」的人也在跟这本书,并且会用心做每一个练习(相比之下我就太囫囵了。。。),安利一下。

(这可能并不是一篇看能就能够入门的笔记,只是我来列出原书第二部分的学习后,对整个部分一个总结概括性质的个人笔记)

阅读全文

强化学习 - Policy Iteration & Value Iteration

近日处于兴趣,在看 UCL 的 强化学习,目前看完了前三节。第一节是绪论,第二节介绍各种概念,第三届讲 Policy Iteration 和 Value Iteration。看完第三节后觉得应该写一下,所以对课件中提到的借车问题,用 C++ 分别实现了一下。笔记和代码会放在 GitHub 上:RL-UCL-notes

部分有参考这个 repo:ShangtongZhang/reinforcement-learning-an-introduction

借车问题

有两处停车场,每个停车场的容量是 20 辆。每次你可以把至多 5 辆车从其中一个停车场移至另一个,移动一辆车的代价是 2 点。同时,每次会有若干人在停车场租车与还车,租出一辆车的收益是 10 点。每次租车与还车的数目服从泊松分布,停车场一的租车与还车的 λ\lambda 值均为 3,停车场二租车的 λ\lambda 值为 4、还车为 2。你要制定策略最大化收益。

阅读全文

CMU 15-213 A1 实现笔记

之前的图形学的 15-462 在 1 月 9 日的时候跟完了,不过 A2 和 A4 没有写实现笔记(A4 可能考虑补写一下,也可能会鸽掉)。

15-213 是 CS:APP 对应的课程,是我刚入大学时不久后就想跟的课程,一直拖到了现在,不过意外地发现可以和 CMU 同步。课程网站:Introduction to Computer System - CMU 15-213

这课还有一个 A0,不过比较基础就不记录了(但还是花了比预想多 10~15min 的时间吧。。。)

A1 的 pdf 没有挂在课程网站上,在 GitHub 上发现每年的题好像都略有不同,不过都挺有意思的。我用的是 tinylcy/cmu-15213 的版本(其实是因为 clone 后才发现每年不一样。。。)。

A1 是在一个比较严苛的约束下实现一些常见的操作,是若干道迷题的形式,感觉很好玩,而且有些并不容易。。。

阅读全文