I suppose there is a bug in the rib exporter:
make a polygonal grid, leave all by default (10x10), then delete it's central primitive (40) and set geometry to “polygons as subdivision surfaces”.
then, render it twice - once in mantra and in prman. You'll find that in prman result looks like primitives near all the edges were removed.
BUG: PRMan subdivs
6568 7 2- hoknamahn
- Member
- 398 posts
- Joined: July 2005
- Offline
- mark
- Staff
- 2592 posts
- Joined: July 2005
- Offline
hoknamahn
I suppose there is a bug in the rib exporter:
make a polygonal grid, leave all by default (10x10), then delete it's central primitive (40) and set geometry to “polygons as subdivision surfaces”.
then, render it twice - once in mantra and in prman. You'll find that in prman result looks like primitives near all the edges were removed.
You probably want to add the “INTEGER” attribute named “interpolateboundary” to your primitives and set the value to 1.
This is probably a guess though.
You can do this with an Attribute Create SOP.
Name: interpolateboundary
Class: Primitive (detail might work)
Type: Integer (NOT FLOAT)
Size: 1
Default: 1
Value: 1
- hoknamahn
- Member
- 398 posts
- Joined: July 2005
- Offline
- thekenny
- Member
- 212 posts
- Joined: July 2005
- Offline
what you have found is not so much as a bug, rather it is how the geometry is being defined as it is being sent to formated in RIB.
Just be aware that crease weights will do the same thing as the interoplate boundary, however the two attributes will not play well together if declared on the same mesh. Also, if you have mulitple primitive shading groups on one mesh and the entire mesh has the interpolateboundary attribute on it to lock down the open edges you will get an undesired shading result on the seams of the shading groups, that bound in the interior of the mesh. That's a tought one to describe. Basically each primitive group you define is being sent to renderman as its own piece of geometry so with the interpolateboundary being declared everywhere will result in the edges not to be created with any consideration of the boundary primitives.
so, a different way to do the same thing (thanks Mark) is to append a groupSOP, turn on enable for Edges, turn the geometry to be points, turn on unsharded edges. This will give you a point group for all the open edges in the model. Append a attriCreateSOP, assign a point attribute called creaseweight, and set it to something high (100), then append a attribPromoteSOP, now promote the pointAttrib you just made to the proper vertex class.
Now, the “real” boundary edges of your model will be locked down and any internal grouping boudnaries will be rendered “smooth”.
Just be warned that depending on how you modeled around that “edge pt group” the result on the subD edges from the creaseweight style and the interpolateboundary method could result in differently from each other. Not always.. just depends on how lazy you were
neat huh,
Really this would be a lot easier if the viewport allowed you to visualize the subD surface before you start rendering.
Just be aware that crease weights will do the same thing as the interoplate boundary, however the two attributes will not play well together if declared on the same mesh. Also, if you have mulitple primitive shading groups on one mesh and the entire mesh has the interpolateboundary attribute on it to lock down the open edges you will get an undesired shading result on the seams of the shading groups, that bound in the interior of the mesh. That's a tought one to describe. Basically each primitive group you define is being sent to renderman as its own piece of geometry so with the interpolateboundary being declared everywhere will result in the edges not to be created with any consideration of the boundary primitives.
so, a different way to do the same thing (thanks Mark) is to append a groupSOP, turn on enable for Edges, turn the geometry to be points, turn on unsharded edges. This will give you a point group for all the open edges in the model. Append a attriCreateSOP, assign a point attribute called creaseweight, and set it to something high (100), then append a attribPromoteSOP, now promote the pointAttrib you just made to the proper vertex class.
Now, the “real” boundary edges of your model will be locked down and any internal grouping boudnaries will be rendered “smooth”.
Just be warned that depending on how you modeled around that “edge pt group” the result on the subD edges from the creaseweight style and the interpolateboundary method could result in differently from each other. Not always.. just depends on how lazy you were
neat huh,
Really this would be a lot easier if the viewport allowed you to visualize the subD surface before you start rendering.
- arzo
- Member
- 99 posts
- Joined: Sept. 2006
- Offline
- wolfwood
- Member
- 4262 posts
- Joined: July 2005
- Offline
- arzo
- Member
- 99 posts
- Joined: Sept. 2006
- Offline
- wolfwood
- Member
- 4262 posts
- Joined: July 2005
- Offline
-
- Quick Links