0

我正在尝试学习如何处理项目的 NURBS 曲面。基本上我不想用 NURBS 在一些 3D 程序中构建几何,然后导出几何,并用它运行一些模拟。我已经弄清楚了 NURBS 曲线,并且我认为我主要了解曲面是如何工作的,但我不知道控制点是如何连接的。显然你不需要像多边形那样的拓扑矩阵?当我从 Maya 导出 NURBS 曲面时,以 .ma 文件格式(纯文本文件),我可以看到节点向量,然后只是一个点列表。无拓扑信息。这是如何运作的?在不知道点如何相互连接的情况下如何重建 NURBS 曲面?导出的文件如下所示:

//Maya ASCII 2013 scene
//Name: test4.ma
//Last modified: Sat, Jan 26, 2013 07:21:36 PM
//Codeset: UTF-8
requires maya "2013";
requires "stereoCamera" "10.0";
currentUnit -l centimeter -a degree -t film;
fileInfo "application" "maya";
fileInfo "product" "Maya 2013";
fileInfo "version" "2013 x64";
fileInfo "cutIdentifier" "201207040330-835994";
fileInfo "osv" "Mac OS X 10.8.2";
fileInfo "license" "student";
createNode transform -n "loftedSurface1";
    setAttr ".t" -type "double3" -0.68884794895562784 0 -3.8172687581953233 ;
createNode nurbsSurface -n "loftedSurfaceShape1" -p "loftedSurface1";
    setAttr -k off ".v";
    setAttr ".vir" yes;
    setAttr ".vif" yes;
    setAttr ".covm[0]"  0 1 1;
    setAttr ".cdvm[0]"  0 1 1;
    setAttr ".dvu" 0;
    setAttr ".dvv" 0;
    setAttr ".cpr" 4;
    setAttr ".cps" 4;
    setAttr ".cc" -type "nurbsSurface" 
        3 3 0 0 no 
        8 0 0 0 1 2 3 3 3
        11 0 0 0 1 2 3 4 5 6 6 6

    54
    0.032814107781307778 -0.01084889661073064 -2.5450696958149557
    0.032814107781308312 -0.010848896610730773 -1.6967131305433036
    0.032824475105651972 -0.010848896610730714 -0.0016892641735144487
    0.032777822146102309 -0.01084889661073018 2.5509821204222565
    0.032948882997777158 -0.010848896610730326 5.3256822304677218
    0.032311292550627417 -0.010848896610730283 7.5033561343333179
    0.034690593487551526 -0.010848896610730296 11.39484483093603
    0.014785648001686571 -0.010848896610730293 11.972583607988943
    -0.00012526283089935193 -0.010848896610730293 12.513351622510489
    0.87607723187763198 -0.023973071493875439 -2.5450696958149557
    0.87607723187766595 -0.023973071493876091 -1.6967131305433036
    0.87636198619878247 -0.023973071493875821 0.00026157734839016289
    0.87508059175355446 -0.023973071493873142 2.5441541750955903
    0.87977903805225144 -0.023973071493873861 5.3510431702524812
    0.86226664730269065 -0.02397307149387367 7.4087403205209448
    0.9276177640022375 -0.023973071493873725 11.747947146400762
    0.39164345444212556 -0.023973071493873704 12.72679599298271
    -0.003344290659457324 -0.023973071493873708 13.356608602511475
    2.7585407036097025 0.080696275184513055 -2.5450696958149557
    2.7979735813230628 0.036005680442686323 -1.6988092981025378
    2.7828331201271896 0.05438167150027777 0.0049374879309111996
    2.6143679292284574 0.23983328019207673 2.5309327393956176
    2.67593270347135 0.19013709747074492 5.3992530024698517
    2.5981387973985108 0.20347021966427298 7.2291224273514345
    2.8477496474469728 0.19983391361149261 12.418208886861429
    1.1034136098865515 0.20064198162322153 14.474560637904968
    -0.010126299867110311 0.20064198162322155 15.133224682698101
    4.5214126649737496 0.45953483463333544 -2.5450696958149557
    4.6561826938778452 0.23941045408996731 -1.7369291398229287
    4.6267725925384751 0.29043329565744253 0.025561242784985394
    3.9504978751410711 1.3815767918640129 2.5159293599869446
    4.1596851721552888 1.0891788615080038 5.438642765250469
    3.9992107014958198 1.1676270867254697 7.0865667556376426
    4.4319212871194775 1.1462321162116154 12.949041810935984
    1.6384310220676352 1.1509865541035829 15.927795222282771
    -0.015643773215464073 1.1509865541035829 16.578582772395933
    5.2193823159440154 3.0233786192453191 -2.5450696958149557
    5.2193823159440162 3.0233786192453196 -1.6967131305433036
    5.2218229691816047 3.0233786192453191 0.0091618497226043649
    5.2108400296124504 3.0233786192453196 2.5130032217858407
    5.251110808032692 3.0233786192453191 5.4667467111172652
    5.1010106339208772 3.0233786192453191 6.9770771103715621
    5.6611405519478906 3.0233786192453205 13.358896446133507
    2.0430537629341199 3.0233786192453183 17.059047057656215
    -0.019924192630756767 3.0233786192453191 17.6998820408444
    5.1365144716134976 5.4897102753589557 -2.5450696958149557
    5.1365144716134994 5.4897102753589566 -1.6967131305433036
    5.1389093836131625 5.4897102753589566 0.0089946049919694682
    5.1281322796146718 5.4897102753589566 2.5135885783430627
    5.1676483276091361 5.4897102753589548 5.4645725296190131
    5.0203612396297714 5.4897102753589566 6.9851884798073476
    5.5699935435527692 5.4897102753589566 13.328625149888618
    2.0133428487217855 5.4897102753589557 16.975388787391935
    -0.01960785732642523 5.4897102753589557 17.617014800296868

    ;
select -ne :time1;
    setAttr ".o" 1;
    setAttr ".unw" 1;
select -ne :renderPartition;
    setAttr -s 2 ".st";
select -ne :initialShadingGroup;
    setAttr ".ro" yes;
select -ne :initialParticleSE;
    setAttr ".ro" yes;
select -ne :defaultShaderList1;
    setAttr -s 2 ".s";
select -ne :postProcessList1;
    setAttr -s 2 ".p";
select -ne :defaultRenderingList1;
select -ne :renderGlobalsList1;
select -ne :hardwareRenderGlobals;
    setAttr ".ctrs" 256;
    setAttr ".btrs" 512;
select -ne :defaultHardwareRenderGlobals;
    setAttr ".fn" -type "string" "im";
    setAttr ".res" -type "string" "ntsc_4d 646 485 1.333";
select -ne :ikSystem;
    setAttr -s 4 ".sol";
connectAttr "loftedSurfaceShape1.iog" ":initialShadingGroup.dsm" -na;
// End of test4.ma
4

2 回答 2

0

NURBS 曲面的 CV 始终布置在网格中。可以使用曲面的度数和每个方向上的结数来计算 nurbs 曲面中的 CV 数量。然后,简历只是以某种特定的顺序呈现,通常是行优先的。

让我们看看你的例子。我主要是在猜测格式,所以你要检查我的假设。

3 3 0 0 no

看起来你有一个双三次表面。它在任何一个方向上都不是周期性的(也就是说,你有一个薄片而不是一个圆柱体或圆环)。您的 CV 是非理性的,这意味着它们是 [x,y,z] 而不是 [xw,yw,zw,w]。

换句话说,第一行的格式似乎是:

[degree in s] [degree in t] [periodic in s] [periodic in t] [rational]

接下来,一个节点向量有 8 个节点值,另一个节点有 11 个节点。对于 3 阶非周期性 nurbs,CV 的数量是 num_knots - 2。所以,这个表面上有 6 x 9 个 CV。

前 6 个 CV 位于第一行。接下来的 6 个在下一行,依此类推。

如果您正在寻找有关 NURBS 的更多信息,我建议您使用此文本作为理论依据。对于 Maya 特定的东西,他们在 maya API 中有一些不错的文档。

于 2013-04-01T11:39:23.830 回答
0

NURBS 曲面在 u 方向上是度数+跨度点和 v 方向上 (degree-1)+spans+1* 点的拓扑正方形。(单个 NURBS 曲面就像多边形的一个面,只是更复杂)

“.cc”中的前 2 个属性是方向的度数,接下来的两行定义了每个单独的值代表一个跨度的节点。重复只是权重,因此该点重复 x 次,因此:

8 0 0 0 1 2 3 3 3

表示有 8 个结(在本例中为 U 方向),跨度为 0 1 2 3,共 6 个点,因此它是 U 方向的三度单跨曲线。该示例在 V 方向上有 9 个点,因此 7*9 = 总共 54 个点

然而,这还不够,NURBS 甚至可以远程使用。您必须实现修剪曲线,这些曲线是位于曲面的 UV 参数化上的曲线,它们可以将单个 NURBS 裁剪为不同的形状。

然而,在实践中,maya 用户依赖于手动绗缝。被子** 是网格的高阶 NURBS 等效项,大多数 nurbs 建模者将其用作概念。要处理这些,通常连修剪曲线都不够。因为修剪曲线不能在应用程序之间可靠传输,无需缝合。因此,许多应用程序依赖于实际告知所述表面到表面被子集合地形连接的空间历史。因此,准备好为任何有意义的 NURBS 兼容性制作自己的交集算法等。

有关数学基础信息的更多信息,请参阅 Wikipedia、wolfram 等。

* 如果我没记错的话。

** 由于在几个不同的语言领域同时发现,被子在不同的应用程序中具有不同的名称。

于 2013-01-28T19:04:10.820 回答