RenderMan REYES Grid Reparameterization

注意:本文仅供个人学习与参考,欢迎有相关图形学期刊刊登。文中图片、代码、算法版权属于作者所有,没有作者本人允许任何网站不得转载。音乐是自己贴着玩的^_^


  文中所使用的简写如下:

Term Vereinfachte Form Übersetzen
RenderMan RM “渲染人”
Shading Point SP 着色点
Convex Hull CH 凸壳
Shading Rate SR 着色率
Grid ID GID 网格编号
Catmull-Clark Subdivide CCSUBD 卡特默克拉克细分表面

  一切输入RM的REYES管线中的几何体(多边形、NURBS、CCSUBD)都会被打散为承载微多边形顶点的网格。Shading在微多边形的四个顶点上进行,然后光栅化整个网格,微多边形内部线性插值四个顶点的颜色,尔后进行乱续采样,最后经过过滤生成结果。由于在REYES内部所有的几何体都成为了参数化的,所以倘若重新构造出网格这个Quadric Patch,就可以对REYES管线所处理的模型进行重建与恢复。

  本质上一切点云模型重组都是多维数据插值问题。由于RM点云的素质可控,所以我们可以避免碰到使用激光扫描的方法得到的点云素质不稳定(即存在noise)这个弊端,直接应用简单高效的方法进行网格重组,而不需要使用诸如Implicit Surface、MLS之类的方法。

  对于重组极其复杂Displacement表面我提出了一些算法的修改意见。

  算法如下:

  • 使用DSO获取GID与SP的UV
  • 将UV映射到一个足够大的参数化空间上
  • 检查现有UV覆盖的区域是否规则,如果不规则则计算参数化空间内的CH
  • 沿着U(或者V)方向,用样条穿过拥有同一组(或者近似在一条直线上)V(或者U)的点,函数值为顶点的高度域数值
  • 采样样条曲线镶嵌整个参数化空间
  • 则位于凸壳内部的三角形就是原始网格的近似

  例如这是一个由RM渲染的三次NURBS面片,与其输出的点云。SR为了快速求解设为500,获得了1450个SP。RM输出的Ci是其UV值,GL里PointSize设置为4.0,启用了GL_POINT_SMOOTH。

RMGrids
    我们将每个网格分离开来,使用样条进行空间插值,构造样条面。这是所有网格统一沿着U方向线性插值得到的结果,生成2601个点。左边使用线性插值,右边使用Akima 样条插值。虽然说这里效果几乎相同,但是可以肯定的是,使用线性插值只在网格SP本来就较多的情况下适用。

 

AkimaLinear 

 

  下面讨论不规则面片。

UVRemapping

 

  我们需要将一个网格在UV空间内的绑定矩形以及凸壳计算出来。对于有些Patch因采样点不足以计算样条曲线时,我们将自适应的在整个参数化空间内拓展,并且在边界上保证切线连续。

  这里是最终的渲染效果,可以看到结果是相当令人满意的,着色非常的平滑。

GLWire GLColor

 

  如果对程序感兴趣可以向我索取,因为代码没有重构,比较凌乱,这里就不放上来了。

posted on 2008-05-17 22:09  Bo Schwarzstein  阅读(1590)  评论(5编辑  收藏  举报