Essential UV On Subdivide Surface

随着CCSS Catmull-Clark Subdivide Surface(以下简称CCSS)越来越多的运用,由此产生的问题也层出不穷。不过总的来说,使用CCSS要比纯粹使用Polyhedron或者是NURBS要好,首先不存在NURBS的拼合、变形、骨骼绑定、贴图绘制的问题,毕竟我一个人的生产力再放卫星也抵不上Bluesky的整个R&D团队,那里有的是常青藤毕业的Ph.D。Polyhedron的优势也很明显,造型容易,简便易学,没有任何的数学要求,不够最恶心的问题莫过于表现高精度模型的效率低下,恐怖的内存占用,只符合mental ray这样怪异的胃口。CCSS的优势就是在于一切都在On-Fly中完成,RenderMan 12.0改进了CCSS的算法,一下子使得CCSS的运用普及开来。

目前ZBrush和Mudbox的广泛应用,使得大部分工作室内部都开始利用传统的建模工具如3dsmax、Maya生成低精度的控制多边形,而后直接进入ZBrush或者Mudbox丰富模型细节,计算生成Displacement贴图。但是这个过程牵涉到诸多计算几何的基本问题,也就是如何保证映射的正确性。从数学上说,从2D的UV空间到3D的XYZ空间表现为这样的一个关系,

  • How To Draw Texture_html_m752effb6
  • How To Draw Texture_html_m3fa8e203
  • How To Draw Texture_html_1ec0adb9How To Draw Texture_html_553e9bb3

具体用大白话来解释,就是,

  • Surface是R^3空间中的函数

  • UV是R^2空间中的函数

  • 从UV到Surface存在一一映射关系,且反向映射成立,即都是函数且互为反函数

    第三条是一切有关模型问题的起源与表现。伟大的Gauß老早就说过,“A general surface can not be parameterized without distortion.”,也就是说不是所有的表面都可以不需要变形的就可以参数化。在实际CG生产过程中,建模人员创造的可以说都不是“General Surface”,于是也都选择尽量将模型参数化成自己喜欢的方式,比如对于人头模型来说,裂缝问题一直比较频繁的出现。因为我们总不能要求美工运用拓朴学里的基本知识将人头看作一个气球吹成的,分UV的时候想象为扯开但不撕破这个气球,将那张网格均匀的铺在UV区域内。太难,不直观,不好画贴图。他们更喜欢面对一个,脸是脸,脖子是脖子,耳朵是耳朵的UV分布,而不是一个均匀覆盖整个平面的扭曲鬼脸。Hugues Hoppe的《Spherical Parametrization and Remeshing》这篇论文中提出的方法很值得赞叹,但是对于实际CG生产却不怎么可能推广开来。让我想起了PBR(MC)大部分用于研究性渲染,可VFX工业还没有多少人会采用。

    美工与建模人员无论如何需要知道这样的一个概念,UV空间与模型空间信号频率的匹配问题,过滤永远不是最佳的解决方案。在使用CCSS时有个致命的问题,那就是What You See Is Not What You Get(Was du hast gesehen ist nicht was du willst erhalten),渲染前自信的很,渲染后大惊失色,UV不匹配,不连续,有裂缝,真要命,请电线杆上的祖传老军医也没用,插值可以改进一些不过只能搪塞一下而已。同时,我们经常会看到这样的情况,模型是完整的,UV贴图是撕裂的,比如头部,最复杂的莫过于手。这样的模型无论如何都有一条缝,再怎么如何调整贴图或者是插值都只是治标不治本,那条缝还是在那里,只不过不是那么的明显罢了。因为模型的边界不一定是UV空间的边界。也许通过自适应的边界采样处理可以解决,可是仿佛对于目前广泛应用的商业软件却都没有这种高级功能。根据我与Caltech的Peter Schröder教授的探讨,无法直接运用细分算法处理UV的局限就在这里,因为UV空间和模型空间不是一一对应的,UV数目一般总是多于顶点的数目。

    但事实上,Maya内部对CCSS的支持很全面,但是却没有被人们发掘出来使用,当然,类似于3dsmax、Maya这样的传统建模工具来说,新工具的诱惑力是无可阻挡的,但是如何与现有的制作流程整合,妥善的解决问题,这恐怕不是一两个Ph.D能够搞定的。

    本人将提供一个试验性的命令行程序,实现类似于Maya中的UVSnap功能,但是我的更加全面,直接生成CCSS的UV范围与原始控制多边形UV范围的对比图,提供给美工进行参考,这样绘制出来的贴图将更加的贴合使用RenderMan生成的CCSS表面,减小误差。此程序需要在支持OpenGL 2.0的GPU上执行,因为我直接使用的GPU进行光栅化与勾边。用户可以选择生成的图象大小与细分等级。这是一张样图。此工具已经稳定的在我们的流程中运用。补充一句,命令行程序有啥不好的?没看过RenderMan都是一个个命令行程序?哼……这是样图。蓝色的是Subdivide UV,红色的是MAYA内原始控制多边形的UV分布。

    Cube请不要有任何联想~

    AA 用于我们Studio内部的模型,提供给艺术家参考~

  • 原文地址:https://www.cnblogs.com/Jedimaster/p/1264475.html