zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    SQL 大数据查询如何进行优化?
    事件和委托的区别
    虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别
    高并发的秒杀
    C#算法
    口试C#概念
    口试Linq题
    口试大数据及大并发问题
    Windows下MongoDB安装
    MongoDB简单介绍
  • 原文地址:https://www.cnblogs.com/Jedimaster/p/1201589.html
Copyright © 2011-2022 走看看