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。
我们将每个网格分离开来,使用样条进行空间插值,构造样条面。这是所有网格统一沿着U方向线性插值得到的结果,生成2601个点。左边使用线性插值,右边使用Akima 样条插值。虽然说这里效果几乎相同,但是可以肯定的是,使用线性插值只在网格SP本来就较多的情况下适用。
下面讨论不规则面片。
我们需要将一个网格在UV空间内的绑定矩形以及凸壳计算出来。对于有些Patch因采样点不足以计算样条曲线时,我们将自适应的在整个参数化空间内拓展,并且在边界上保证切线连续。
这里是最终的渲染效果,可以看到结果是相当令人满意的,着色非常的平滑。
如果对程序感兴趣可以向我索取,因为代码没有重构,比较凌乱,这里就不放上来了。