前两周偷懒了,没写周报,很囧。实际上这期间发生了一些「大事」。
写了个很简单的 yt-dlp web UI,没什么技术含量,但是很有用。逻辑大概就是给每个下载请求开一个线程,然后坐等线程结束。稍微需要注意的地方是下载线程的维护,在传统 OOP 里这件事大概是这样的:下载请求是个类,每个请求创建一个对象,里面有个状态标记这个下载是不是已经开始了和是不是已经结束了,线程开始和结束的时候修改这个标记。这件事是比较不 Rust 的,因为 Rust 的多线程修改外部状态很麻烦,一般都会有生命周期的问题,所以我的方法是新的下载请求、正在进行的请求和已经完成的请求是三个不同的类型,下载这件事变成了这三个类型之间的 transformation,这样就很好地解决了这个问题。
另一件重要的事是终于买到 PS 5 了!!!!!!!老婆抽到的。等快递的过程中还发生了很多曲折,这里就不说了。玩了几天,感受是这个世代应该终于能真正沾到 photorealism 的边了。那个 Unreal 5 的 Matrix demo,一开始屏幕上只有基努的大脸时,已经与摄影不可分辨。我猜这个世代游戏图像会大规模地从「效果」向「物理正确」的方向进化,这不仅是因为现在的机能已经能做到,更是因为现在游戏的规模已经开始大到不允许像以前一样手工打假光画假材质。上个世代的游戏有些已经实践了物理正确渲染,而且大多效果不错,但是这个物理正确是零阶的⸺仅限于光打到材质上反射出正确的颜色。这个世代会带来一阶的正确渲染,也就是 GI。更高阶的多次反射我觉得大概用不着⋯⋯
Photorealism 的另一个方面是模型本身。我猜这个世代的 AAA 会抛弃传统的 LOD 设定,转向实时生成正确规模的模型。这个实时生成可能是两个方向的,游戏可以自带一个高精度的模型,然后根据距离生成低精度的,说实话我不知道为什么这件事在以前做不到,离线渲染软件早在上古时代就有一键生成低精度模型的功能了,而且并不慢(至少比渲染本身快好几个数量级);也可以自带一个精度不是那么高的模型,然后实时细分生成高精度的,这个也是离线渲染领域早就有的功能,用来实现亚像素三角形/四边形。
物理正确渲染和自动模型生成这两件事都可以极大解放游戏开发者的生产力。