花了两个晚上,把 LibNoise 的 Perlin Noise / Spherical Map Builder 移植到了 Unity Fragment Shader 里面。
毕竟是在 Shader 里面写,修改了一些内容。LibNoise 原先自带的一组 Randoms[1024] 被一个 lookup table 替代了,否则直接嵌在 shader 里会溢出。然后 C++ 版本里面奇奇怪怪的位运算(比如 >>
,^=
,&=
)有的使用了数学等价的代码解决,有的就直接丢精度不管了(LibNoise 原库所有运算都是 double 为基准,这种精度在手机着色器上是达不到的,所以丢失精度也无所谓吧)。
基本功能实现后,速度提升是有的,相比 LibNoise.Net 版本在 iPhone 6S 上提速了至少 50 倍,虽然时间没有上篇文章提到的那样在几十毫秒内,但也基本满足我的要求了。现在要解决的问题就是如何把 LibNoise 的其余部分实现出来,同时保证 Shader 编译后的大小不会太大,速度不会太慢。以及如果可以的话我希望能在 Shader 里面顺便把 ColorMap 和 SplatMap 的生成工作给做了。
回校补考周五结束了。说不上有多好,但我本来也就没有抱多大希望。倒不如说,我盼望着大家都赶紧对我放弃希望,这样我就能去做我喜欢的事情了。
有一个非常有趣的现象是如果你说自己不想干了,大家的态度都是“你都上了两年学了 / 你都寒窗苦读十几年了就差这一两年么 / 你怎么这么急”。倒不论说话者究竟是什么意思,但这般说辞实在是乏味可陈。我实在想不出为何时间一长,任何事情就都成为了一件众人眼里道义上正确的东西。
按照这个逻辑。如果有两个人结婚后才发现不合适,那我应该说什么,
“你俩都结婚一两年了 还差后面几十年么 将就一下 一辈子不就过去了。”
或者说,
“现在不能离婚,等到你俩快死的时候爱怎么折腾怎么折腾。”