14年前做的一个NURBS Demo

最近整理文件,发现14年前的NURBS Demo居然在Win 7下还能很好运行,速度比当年快了很多。

当时研究在3D游戏中,采用NURBS建模的模型。根据相机与物体的位置,实时演算生成模型的三角形。 离相机远的部分,三角形就少,节省渲染时间,离相机近的就三角形多,细节更丰富些。说起来很理想,但实现起来有好几个难点:

  1. NURBS Trim的问题
    NURBS曲面中挖洞的方法是用NURBS曲线去描述这个洞,如何快速在游戏中实现是个难点。这是我当时主要攻关的问题。当时找出两个方法,一个是根据相机距离远近,及曲线不同段的曲率,不断调整切分Nurbs Trim曲线的不同段的粒度。一个是另辟蹊径,给3DS MAX开发了一个插件,能在编辑NURBS曲面时,同时生成一个合并了原有材质且带Alpha通道的高精度材质图片, 在Nurbs Trim 曲线以内的alpha通道都是透明的。
  2. NURBS编辑工具的问题
    当时公司用的NURBS编辑工具主要是3DS MAX,虽然是有较强的NURBS曲面编辑功能,但实际生成的NURBS曲面问题很多,远不如同期的Rhino,可Rhino当时对插件之类的二次开发支持又很不好。
  3. NURBS曲面在随着相机距离而调整模型的过程中,物体的边缘,会在屏幕上产生抖动感。
    这个问题相当难以克服,一直没能解决。

当时有宣传用NURBS的游戏,例如Quake3,其实它只是在建模中使用了NURBS,并没有做到实时的生成模型。当时整个游戏界对NURBS抱有很高的期望,有显卡公司想从硬件层面给予解决,但后来都没了消息,再后来也就没再关注这方面的进展,不知现在怎样。不过现在的显卡能力已经超强,不用NURBS技术,就靠堆三角形已经能实现近乎真实的画面效果了。

下面是Demo的两个截图,大家可以看到这个鸭子的三角形数量在两个图里是不同的。在同一个图中,鸭子不同部位切分的细节程度也是不同的, 整个鸭子上的三角形都是每帧都重新实时生成的。

当时为了搞这个,读了很多SIGRAPH,MSR,及各大学关于NURBS的论文,对自己提高帮助很大。

11-2

 

这个demo的下载链接是 http://www.nihuo.com/downloads/nv.zip

下载下来demo后解压,选择File ->Open, 打开NRB_DUCK.oo就能看到鸭子, 按下F键就能看到三角形的线框,按鼠标右键能旋转模型, 按<, >能调整模型切分的系数。更详细的可参看readme。屏幕左上角的tri是整个模型的三角形数量。因为主要是为了演示NURBS一些关键算法的效果,其他方面都很粗糙,还请见谅。

没有评论

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

  • :em48:
  • :em32:
  • :em34:
  • :em14:
  • :em72:
  • :em37:
  • :em53:
  • :em56:
  • :em25:
  • :em39:
  • :em04:
  • :em13:
  • :em38:
  • :em20:
  • :em41:
  • :em31:
  • :em16:
  • :em45:
  • :em21:
  • :em43:
  • :em12:
  • :em71:
  • :em11:
  • :em23:
  • :em46:
  • :em66:
  • :em47:
  • :em02:
  • :em49:
  • :em54:
  • :em27:
  • :em36:
  • :em35:
  • :em15:
  • :em05:
  • :em26:
  • :em44:
  • :em06:
  • :em64:
  • :em01:
  • :em55:
  • :em70:
  • :em28:
  • :em40:
  • :em67:
  • :em18:
  • :em63:
  • :em09:
  • :em10:
  • :em62:
  • :em69:
  • :em03:
  • :em08:
  • :em33:
  • :em42:
  • :em52:
  • :em51:
  • :em68:
  • :em30:
  • :em65:
  • :em59:
  • :em29:
  • :em07:
  • :em50:
  • :em17:
  • :em24:
  • :em57:
  • :em22:
  • :em19:
  • :em60:
  • :em61:
  • :em58: