问一下3d部分webgl引擎开发的情况。

最近在学习webgl,发现有个Three.js,3d引擎,不知道Three.js用来开发3d功能如何?或者麻烦点用Oak3D这个用来计算的函数库?creator的webgl 3d部分打算用现成的这些库呢还是自己重新开法一套呢?目前进展如何?

Three.js 是一个比较标准的 3D 图形学库。所谓 “标准” 也就是说他并不是为了游戏而设计。仅仅是为一般的 3D 显示所服务,这其中包括了游戏引擎所不需要的 Canvas 渲染 和 CSS 渲染等内容。其 Canvas 的 Fallback 渲染能力也非常有限,ZBuffer 和 Shader 缺失导致显示上有 Bug, 也没有做 Texture Mapping。并不能实现真正意义上的 Software 渲染。

基于这些情况, Creator 还是会自己使用 WebGL 实现 3D 部分。目前进度暂时不公开。

那Oak3D这个有关计算的函数库可以用吧?或者其他类似Oak3D的东西。

Oak3D 是什么?:sweat: 有参考链接么?

我刚查了查,好像也是类似Three.js的东西。

关键是我找不到啊… 给个 github 地址呗

我也只查到了些用法的文章。具体源码没找到,只能找到混淆过发布的js文件。

我也想求3D模型和3D动画的使用,需要简单使用一些3D的人物和动作而已

两个3d模型设置不同的globalzorder, 但是还是互相穿透的问题 有什么好的解决方案吗?

那可能是某个比较小众的引擎吧,对于我而言,我感觉目前市面上的 WebGL 3D 引擎都写的不算太优秀,所以 Creator 团队还是会优先考虑自行制作解决方案吧。

如果空间距离没问题的前提下,互相穿透那肯定是 z-buffer 没有绘制正确,还有就是 z-buffer 的精度设置不够导致无法判断两个物体距离较近的情况。

WebGL 的 3D 绘制教程还是很多的,建议可以从 github 上的 stack-gl 这个组织开始学起。

学会webgl后,都可以用来做什么啊?感觉做游戏的话引擎已经封装好了不需要自己再写了。有什么需求是必须要用webgl啊?不限于做游戏也可以做其他东西。

WebGL 只是一个图形 API 接口,如果需要在网页上做 GPU 加速的硬件绘制,需要通过 WebGL 来调用。我个人学习这些接口仅仅是为了调用 GPU 渲染图形程序,所以一般花 2-3 天时间看一下规范就可以熟悉了。

学会 WebGL 能做什么我真的不太清楚,但我觉得如果是初学者,通过 WebGL 理解 GPU 的运作原理,以及了解计算机图形学在实时渲染领域的基本内容还是非常有好处的。他比起其他的图形 API 例如 OpenGL 和 Directx3D 更容易搭建编程环境,这样可以比较快速的上手,这是我认为学习 WebGL 唯一能带来的好处。

至于有什么需求必须要用 WebGL 我也不是很清楚,一般来说,我对这种级别的学习都是目标/利益驱动的,比如我需要在哪个平台搞定哪件事情,这个平台需要用这个 API 我就翻翻手册把他搞定就是了。

真正在我职业生涯中我认为学了之后收益终身的只有:计算机算法和数据结构,数学以及物理。

再问个问题,比如要用webgl做个效果,有些逻辑我可以用js写也可以用glsl写在着色器里边,是不是写在着色器里边的代码在gpu中执行能,尽量写在着色器里边能最大限度利用好硬件资源并且性能更好?

还有,我基本一直在做前端了,服务器也做过一点。现在既想学好图形方面的东西也想学好服务器的东西,怎么选择呢?就我个人兴趣来说更喜欢做图形方面的东西,但感觉精通服务器更有用。

再问个问题,比如要用webgl做个效果,有些逻辑我可以用js写也可以用glsl写在着色器里边,是不是写在着色器里边的代码在gpu中执行能,尽量写在着色器里边能最大限度利用好硬件资源并且性能更好?

并不是什么效果代码都用 glsl 写就会有更好的性能。这里关系到你如何平衡你的 cpu 和 gpu 的计算负担,以及你如何最大限度的减少 gpu 的状态位设置。这里牵扯的问题很多,但主旨是你需要不断的做 performance profile 去尝试不同的组合方案来看最终性能优化结果。

还有,我基本一直在做前端了,服务器也做过一点。现在既想学好图形方面的东西也想学好服务器的东西,怎么选择呢?就我个人兴趣来说更喜欢做图形方面的东西,但感觉精通服务器更有用。

鸡汤文什么的会告诉你,什么都学一些将来肯定有好处,或者只要努力坚持不管哪个领域都能成功之类的。这种励志观点我不会给你的。我给你一个最实际的回答:

  1. 如果单纯为了赚钱,请选择服务器开发
  2. 对图形编程如果没有一种发自内心的热爱,请选择服务器开发
  3. 没有数学天赋,请选择服务器开发
  4. 不打算做 10 年以上单个领域的研究工作,请选择服务器开发
  5. 如果你现在已经工作才开始对图形学有兴趣的,请选择服务器开发
  6. 没有在大学阶段写过渲染器的,请选择服务器开发

图形开发很残酷,早年没有介入的,就不要幻想了。

6个条件中只有5和6不满足,前四个基本都符合我,我的数学从小学到大学一直都学的很好,一直也觉得数学很有用,只是找不到用的地方。刚工作开始用cocos的时候发现图形方面的东西就非常感兴趣,这几年项目一直也都比较忙,很少有时间看这些,只偶尔看过几次,也不是很明白。最近闲了点就看了点webgl,不少东西很快就明白。矩阵向量切线法线等等这些数学上的东西,还有漫反射,平行光,点光源,环境光,这些也都很快明白了不少。我觉得多花点时间应该可以学好图形开发。

如果这么感兴趣 3D 方面的学习和工作,可以考虑看完 Real Time Rendering 3rd 后发个简历给我 :smiley:

给个联系方式。