|
发表于 2006-7-9 20:40:00
|
显示全部楼层
Re:speed tree技术分析
to dreams:
1.dx8时的speedtree肯定没有用instancing,这点可能是肯定的,但事实上公告板和树木等instancing仿佛用dx8.1的shader1.1也足以实现了,而技术在进步,idv不可能也不会不去使用新的好的技术,同时呢,更正楼上一下,instancing也不是dx的专利,用OGL也能实现,请参见《gpu gems 2》中相关章节,现在的speedtree有没有用instancing,我觉得很大可能在草、远处的树木上用了,因为事实上speedtree中的树木和草块的公告板加起来应该超过1K了,按《GPU GEMS2 》中的说法,“现在的显卡一秒中大概只能调用4k次DP,其它什么事也都做不了”,如果没用instancing,那按这个计算,speedtree大概在最好的显卡上的frame count不会超过5fps。如果不用instancing,它又是怎么组装的render的呢?
2.更正一下dreams同志所说的instancing技术"主要用在比较复杂的model上来降低数据传输量.",事实上instancing不仅是降低传输数据数量,因为在《GPU编程向导》里nv的研究人员清楚地写道,从CPU到GPU之间的传输管道,早已经不成为现代显卡性能的主要障碍了。其中还给出了一个NGB/s的传输数据,这个数字具体是多少不记得了,可以查看相关paper.事实上cpu和gpu之间的同步问题才是现在图形卡最主要的性能障碍,因为cpu比gpu要慢上几个数量级。
3.曲面碰撞的那个问题,仿佛realtime rendering上指的是“紧凑的包围体”能使碰撞的速度加快,事实上任意曲面对vb之间的性能,可以毫无疑问的证明为vb比曲面要快,因为:一、3次以上的曲面,其方程求解过程非常复杂,5次以上的曲面,在数学上已经推导不出标准的求解公式(请参见 高等代数 的相关著作),这意味着以此为基点联立的得来的方程的求解过程只能用近似方法来模拟,而到目前为止,这些方法的复杂度都让人望而却步,大部分都只能靠计算机来做,少则数小时,多则数年数十年数百年的求解并不少见(请参考remmain猜想的求解,即为一复数域上的积分曲面的猜想,现在全世界已经有3000多台电脑参入,计算了10余年,仍在继续).二、曲面方程对精确求解碰撞也不会有太多的帮助,曲面生成多边形的方法现在主流是通过晶格拼装进行的,即把曲面近似的表现成矩形进行镶嵌,然后再进行三角化,事实上在进行拼装的时候,曲面本身已经被破坏,三角形已经建立,在曲面曲率较大的地方,因为拼装的精度问题,此时即便是对特定曲面有好的求解方案,但求解结果很可能将是悲哀的,这将出现A物体入了B物体表面却被判为未碰撞的情形;三是长久以来,为什么人们总在寻求简单的VB来代替表面本身呢?事实上像贝塞尔、B-spine等建模用的曲面曲线大都产生了50来年了,为什么到目前为止还没看到一个图形处理程序宣称用曲面曲线做碰撞? |
|