About A Crappy Website

 • 

Project Crap 其实第一开始并不叫这个名字,原本这个基于 three.js 的页面是一个更正经的项目的实验品,我打算用 three.js 写一个 WebGL 版的简历来着 —— 至于为什么是简历,没有什么特殊原因,主要是因为能用三维渲染作为载体的文字内容实在是太少了,没人会用这套技术做什么博客的,当然我见过一个做过程生成的图形学菊苣这么干过,但我并不觉得刚入门网页开发(宽泛的,前后端兼有的)的我能这么干。我个人感觉这套技术比较适合做 PPT 或者个人项目展示这类逻辑简单,需要即时加载,可以在手机端运行的交互内容,相比而言,Unity WebGL 更适合做严肃意义上的网页三维游戏,即使什么都不写打包也要几兆,又太过重了。
写偏题了,为什么半路上放弃写成简历,因为写着写着到周一早上了,想起来还有课,然后缓过神来再看自己在写的东西,突然觉得: WTF am I writing !?
总是会有这种半夜充满激情要做一个东西,白天再看就觉得没有意义的状态。于是就草草了事,把原本的 Audio Loader 也注释掉,后面介绍的内容也删了,加一个装作 Chrome 崩溃的图片吧!于是就有了一个代码一团糟的半成品:http://crap.justzht.com/
顺带简单谈下 three.js 的使用体验:

  • 和大多数即时渲染的东西使用起来差不多,相机,光,几何体,全屏后期处理,等等。
  • threejs 仓库自带了很多全屏相机效果,使用时和 unity 把后期效果的 compoment 挂到相机差不多,就是建一个 composer,然后按顺序一个个把 shaderPass 放进去,每一帧调用下 render 方法就行
  • 正确的写法应该是和 Unity 一样,subclass Object3D 或者 Mesh,然后在这个 class 里面写一个 function 调用 requestAnimationFrame(); 作为每帧调用的方法,后面就和 Unity 在 FixedUpdate 或者 Update 写法差不多了,我把所有的玩意都写到了一个 <script></script> 里面实在是作死。
  • unity 的 DOTween 实在是好用,然后我发现 js 里面竟然也有类似的东西:tweenjs,语法类似,写起位移动画不用操心。
  • 建立一个 LoadingManager 放在最前面,然后每个图片,贴图,音频或模型的 Loader 就可以在建立的时候传参 LoadingManager 进去,这样可以通过 Manager 知道所有素材的加载情况,等待加载完成后再进入主界面。
  • threejs 优点在于运行在浏览器上,任何设备都可以运行,可以读取设备陀螺仪,可以在网页上模拟 VR 的镜头畸变,至于性能就不要过于纠结了,虽然我没有详细去研究优化就这么说有些不负责任,但是我觉得与其在网页应用上纠结帧速,不如好好研究下怎么在 Unity 原生应用里面降低 drawcall ,成效更快。