I have additional information about a bug I reported and there doesn't seem to be anyway to add this to the bug report.
BSPR-35785 is my bug ID number. And I think it might have to do with the poles of a nurbs sphere. The spiking is at the pole.
Solved! Go to Solution.
Solved by mspeer. Go to Solution.
That was the problem. Normals at the poles of nurbs spheres causes proximity wrap to spike. Leaving a small opening solves the problem.
Hi!
I recommend to create a second bug report and add the old bug ID number as reference.
(I don't see any other option.)
I updated the ticket with your comments
Ya, it's interesting that to get to bug reports, it's a nearly hidden hyperlink. While all other topics are boldly displayed. Why isn't "BUG REPORT" another Maya category? That was a redundant question by the way.
This might due to your driver has transformation value.
if there is transform value on the driver, for example: TranslateX: 10,
ProximityWrap will consider your object is been wrapped at 0 transformation and then translate 10 at X after wrap.
This will pull your wrapped geometry towards X axis for 10 unit, which is why you are seeing some spikes.
The solution would be freeze transformation on both driver and wrapped geo before using ProximityWrap and increase 'falloff Scale'.
What you describe would definitely happen. And your solution would work for that case. That is not my scenario. Mine is definitely due to the poles. Once I opened up a very small hole at the poles, spikes went away.
Would you mind provide a simple example file? I can not re-produce this bug on my side. Thank you
Hi Jackie,
When I created a polyCube and smoothed it a couple of divisions and then applied a nurbsSphere as an influence for the proximityWrap, it was fine. I then recreated exactly what was in my scene that had the problem and it showed a strange deformation at the poles. This is what I did:
// CREATE MESH
string $pCube[] = `polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 0`;
polySmooth -mth 0 -sdt 2 -ovb 1 -ofb 3 -ofc 0 -ost 0 -ocr 0 -dv 4 -bnr 1 -c 1 -kb 1 -ksb 1 -khe 0 -kt 1 -kmb 1 -suv 1 -peh 0 -sl 1 -dpe 1 -ps 0.1 -ro 1 -ch 1 $pCube;
scale -r -p 0cm 0cm 0cm 2.6 2.6 2.6 $pCube[0];
makeIdentity -apply true -s 1 $pCube[0];
delete -ch $pCube[0];
// CREATE NURBS CIRCLES
string $circle[] = `circle -c 0 0 0 -nr 0 1 0 -sw 360 -r 1.2 -d 3 -ut 0 -tol 0.01 -s 8 -ch 0`;
string $dups[] = `duplicate -rr`;
move -r 0 1 0 ;
setAttr -type double3 ($dups[0]+".s") .67 .67 .67;
string $dups1[] = `duplicate -rr`;
setAttr -type double3 ($dups1[0]+".s") 0 0 0;
string $dups2[] = `duplicate -rr $circle[0]`;
move -r 0 -1 0 $dups2[0];
setAttr -type double3 ($dups2[0]+".s") .67 .67 .67;
string $dups3[] = `duplicate -rr $dups1[0]`;
setAttr ($dups3[0]+".ty") -1;
// CREATE NURBS SURFACE
string $sel[] = {$dups3[0], $dups2[0], $circle[0], $dups[0], $dups1[0]};
string $loftSurfs[];
clear $loftSurfs;
for($i=0;$i<size($sel)-1;$i++)
{
string $results[] = `loft -ch 1 -u 1 -c 0 -ar 0 -d 3 -ss 1 -rn 0 -po 0 -rsn true $sel[$i] $sel[$i+1]`;
$loftSurfs[size($loftSurfs)] = $results[0];
}
for($i=1;$i<size($loftSurfs);$i++)
attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $loftSurfs[0] $loftSurfs[$i];
for($i=1;$i<size($loftSurfs);$i++)
{
string $shape[] = `listRelatives -shapes -ni $loftSurfs[$i]`;
setAttr ($shape[0]+".io") 1;
delete $loftSurfs[$i];
}
string $surf = $loftSurfs[0];
Now create a proximityWrap for the pCube. And use $surf as the influence. You will see the mesh at the poles are a bit "tweaked". Only by resetting the nurbsCircles that have been scaled to "0" to something other than "0", like "0.01" will the mesh be correct. Now strangely enough, I ran another version of the code and didn't get the problem. Here is another version of the above code that works fine.
Just replace the "CREATE NURBS SURFACE" section of code with the following:
string $results[] = `loft -ch 1 $dups[0] $dups1[0]`;
string $results1[] = `loft -ch 1 $circle[0] $dups[0]`;
string $results2[] = `loft -ch 1 $dups2[0] $circle[0]`;
string $results3[] = `loft -ch 1 $dups3[0] $dups2[0]`;
string $attach[] = `attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $results[0] $results1[0]`;
string $shapes[] = `listRelatives -shapes $results1[0]`;
setAttr ($shapes[0]+".io") 1;
string $attach1[] = `attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $attach[0] $results2[0]`;
$shapes = `listRelatives -shapes $results2[0]`;
setAttr ($shapes[0]+".io") 1;
string $attach2[] = `attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $attach1[0] $results3[0]`;
$shapes = `listRelatives -shapes $results3[0]`;
setAttr ($shapes[0]+".io") 1;
delete $results1[0] $results2[0] $results3[0];
Now the proximity wrap has no issues with the zero scaled circles. Not sure why. I will investigate this further when I have time.
Thank you for the information,
Your example file is very helpful, I can re-pro with it.
A further ticket to invest it has been logged as MAYA-106818. we will look into the issue.
Hi Jackie,
I found that it's the "reverseSurfaceNormal" flag on my loft operation that is causing the problem. Leaving that at default setting of "off" has no issues. Turning on this flag, even though the resulting nurbsSurface looks identical, will cause a problem. This will teach me to be lazy and copy and paste from the scriptEditor window. Should have just kept it simple with all the settings at default. But it would be nice to know why the proximityWrap would have an issue.
My previous code that I posted won't create any deformation on the cube if you leave it with the factory connections. Here is code that will create exactly how I work. With a cube that will deform when the original circles are transformed. Most of the code is the same with the exception of the "rsn" flag. And I've added the creation of the proximityWrap node and all the proper connections based on how I like to work.
// CREATE MESH
string $pCube[] = `polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 0`;
polySmooth -mth 0 -sdt 2 -ovb 1 -ofb 3 -ofc 0 -ost 0 -ocr 0 -dv 4 -bnr 1 -c 1 -kb 1 -ksb 1 -khe 0 -kt 1 -kmb 1 -suv 1 -peh 0 -sl 1 -dpe 1 -ps 0.1 -ro 1 -ch 1 $pCube;
scale -r -p 0cm 0cm 0cm 2.6 2.6 2.6 $pCube[0];
makeIdentity -apply true -s 1 $pCube[0];
delete -ch $pCube[0];
// CREATE NURBS CIRCLES
string $circle[] = `circle -c 0 0 0 -nr 0 1 0 -sw 360 -r 1.2 -d 3 -ut 0 -tol 0.01 -s 8 -ch 0`;
string $dups[] = `duplicate -rr`;
move -r 0 1 0 ;
setAttr -type double3 ($dups[0]+".s") .67 .67 .67;
string $dups1[] = `duplicate -rr`;
setAttr -type double3 ($dups1[0]+".s") 0 0 0;
string $dups2[] = `duplicate -rr $circle[0]`;
move -r 0 -1 0 $dups2[0];
setAttr -type double3 ($dups2[0]+".s") .67 .67 .67;
string $dups3[] = `duplicate -rr $dups1[0]`;
setAttr ($dups3[0]+".ty") -1;
// CREATE NURBS SURFACE
string $results[] = `loft -ch 1 -u 1 -c 0 -ar 0 -d 3 -ss 1 -rn 0 -po 0 -rsn 0 $dups[0] $dups1[0]`;
string $results1[] = `loft -ch 1 -u 1 -c 0 -ar 0 -d 3 -ss 1 -rn 0 -po 0 -rsn 0 $circle[0] $dups[0]`;
string $results2[] = `loft -ch 1 -u 1 -c 0 -ar 0 -d 3 -ss 1 -rn 0 -po 0 -rsn 0 $dups2[0] $circle[0]`;
string $results3[] = `loft -ch 1 -u 1 -c 0 -ar 0 -d 3 -ss 1 -rn 0 -po 0 -rsn 0 $dups3[0] $dups2[0]`;
string $attach[] = `attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $results[0] $results1[0]`;
string $shapes[] = `listRelatives -shapes $results1[0]`;
setAttr ($shapes[0]+".io") 1;
string $attach1[] = `attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $attach[0] $results2[0]`;
$shapes = `listRelatives -shapes $results2[0]`;
setAttr ($shapes[0]+".io") 1;
string $attach2[] = `attachSurface -ch 1 -rpo 1 -kmk 1 -m 1 -bb 0.5 -bki 0 -p 0.1 $attach1[0] $results3[0]`;
$shapes = `listRelatives -shapes $results3[0]`;
setAttr ($shapes[0]+".io") 1;
delete $results1[0] $results2[0] $results3[0];
toggle -template $results[0];
// CREATE BASE GEO FOR PROXIMITY WRAP
string $base = stringArrayToString(`duplicate -rr $results[0]`, " ");
hide $base;
$base = stringArrayToString(listRelatives("-shapes", "-ni", `rename $base ($node+"Base")`), " ");
// CREATE PROXIMITY WRAP
string $pWrap[] = `deformer -type "proximityWrap" $pCube[0]`;
connectAttr -f ($base+".local") ($pWrap[0]+".drivers[0].driverBindGeometry");
connectAttr -f ($results[0]+".worldSpace") ($pWrap[0]+".drivers[0].driverGeometry");
I don't think I've ever looked under that menu! That's good to know. Thank you
Can't find what you're looking for? Ask the community or share your knowledge.