距离上一个博客已经潜水4个月了,期间似乎没干什么,整个学期新冠疫情肆虐,大家都被关在学校里根本出不去。回忆了一下,值得写两笔的东西大概只有写了编译原理的Lab,大致内容是使用一些工具写一个SysC到RISC-V的编译器,还是蛮有意思的。
放暑假后帮学长跑实验,有时服务器跑渲染图自己啥都干不了,于是开始学blender(3D美术博大精深)。然后MIAW也有一些进展,首先是写了一套VSM和PCF相结合的高质量阴影,然后终于实现了基于
Sparse Octal Voxel Tree Cone Tracing
的GI!配置细节基本和那篇2011的论文一致
,没有实现各向异性的体素(
Anisotropy Voxel Representation
),同时在实现的过程中踩了一吨坑(包括一开始想用TextureArray存储体素,但发现Vulkan会告诉你硬件根本不支持那么长的Array),以及Upstream的时候由于混淆了透明度和色彩产生了一堆问题,不过总算是写完了。
看起来还是非常不错滴~
但这个性能是极其的垃圾啊(虽然这肯定和我的实现烂有绝大关系),Build要小几百毫秒,Radiance Injection又要个几十毫秒,800x600分辨率大概跑个10帧不得了了(RTX 2060 外置GPU)。见识了它的性能之后直接觉得这玩意没前景...毕竟要命的一点是在动态场景下这玩意是无法优化地慢。最后决定把MIAW的全局光照明方案换成Light Probe Based算法,相对于Voxel Octree而言它支持的操作Probe Based方法基本都支持,而且有一个很大的好处:异步(GI不会阻塞FrameBuffer渲染)且可以利用RT Core来达成更好的渲染品质。坏处是GI有延迟,不过如果不仔细计较的话应该不成问题。