{singhi}
🏷 tech
在 SPH 流体模拟中挣扎的两个月:一位 Web3D 开发者的心路
🌙

不知不觉,我已经深陷在 SPH 流体模拟的实践中两个多月了。CPU 版本的实现基本完成,但 Shader 版本进展并不顺利,始终伴随着各种小问题,尤其是在引入 Grid Lookup 之后,系统几乎完全紊乱了。我开始有些力不从心,也开始怀疑:自己还能不能在 Web3D 这个领域里继续走下去,开启下一段职业旅程。

说真的,这段过程很痛苦。

SPH 模型在原理上其实不算复杂,但当真正落地到 Shader 编程时,我却常常感到迷茫。问题常常是“看不见”的,只能通过最终的效果判断哪里出了错。而网上关于 SPH 的大篇幅文章虽然看似详细,但读完却仍让我摸不着头脑——也许是我数学不够好吧。

我向 ChatGPT 求助,它确实帮了不少忙。大量的概念解释和大部分代码,都是它提供的。我再逐行审阅、理解、修改,但这些代码并不能直接应用于我的项目,需要根据实际情况进行调整和重构,这过程也并不轻松。

在 SPH 模型中,流体被离散为粒子。粒子是一种抽象,它代表在空间中某个位置上的物质密度、压强、压力和粘性力等属性。我们通过计算这些物理量,并结合运动方程,再施加外力,就能模拟出流动的水、气体甚至岩浆的动态效果。这非常有趣,但同时也极大考验开发者的数学基础与编程能力。

邻近粒子的查找是 SPH 模型中的关键,也是性能瓶颈。我们需要在一定半径范围内找出其他粒子,并据此计算它们对当前粒子的影响。这在 CPU 上非常耗时,粒子数量若超过 1200 就难以承受。而迁移到 GPU 后,粒子数可大幅提升至五千、一万甚至几万。我一直期待能看到这种大规模效果,但引入 Grid Lookup 后系统就开始紊乱,我连续研究了很多天,却迟迟找不到原因。

所以,我决定暂时停下脚步。

心情很复杂。我也不清楚自己为何如此执着于这件事,它严重打击了我的自信。目前我处于无业状态,急需一份收入稳定的工作。最好是与 Web3D 有关的职位,我想自己应该将方向收窄一些,深入一些,也许这样才有机会。若总是听从他人说要“视野广”“格局大”,那我可能永远无法真正做成一件事。其实,我所谓“成一事”,并不是要成就什么大事业,而是完成一件能让自己内心平静的小事。别人是否看得见、认可与否,我已不在乎,只要自己问心无愧就足够。

当然,如果我做的事情能为一个团队、企业,乃至社会带去哪怕一丁点价值,我相信终有一天,市场会回应这份努力。我不愿随波逐流。人生短暂,若仅为了“符合市场”而活,反而容易迷失。

我仍然热爱 Web3D 开发,并愿意投入更多时间去产出作品。我希望你能看到我的努力和热情,并愿意将这份热情带入一家企业。我也考虑把自己研究的过程与心得慢慢记录、整理成册,将来出版或发布在公开平台上,让大家看到一个真实开发者的成长历程与心路历程。

我相信:人的心要好,周围的环境才会慢慢变好,生活才有可能变得更好。

我选择相信希望,而不是因为当前就业环境的艰难,就轻易放弃或退缩。