PDA

View Full Version : PrMan warning


mjs1
03-31-2005, 03:56 AM
I'm rendering with a displacement shader and I'm getting the following warning:

R56005 Object <unnamed> (surface shader "phongShader"; displacement shader "sphereDisplace") was displaced by 0.0979817 (in eye space), but its displacement bound is 0. (WARNING)

Looking at the image, the displacement is getting clipped in areas (I'm assuming at the bucket boundaries?) Is the warning and what I'm seeing related? What do I need to do in order to increase the bucket size enough to see the problem go away?

Also, in Advanced Renderman, there's mention of an extremedisplacement command. When I type that in my .rib file, it says this command does not exist. Is this a shader command?

Thanks for any help!

pgregory
03-31-2005, 07:06 AM
It's not the bucket size you need to alter. When PRman (and many other Renderman renderers) displaces geometry, it needs to know in advance by how much the shader will alter the surface of the geometry. It needs this information in order to place the geometry in the correct buckets to be processed, otherwise it is placed in a bucket further along the pipeline, and when displaced, some of the geometry spills over into a previous bucket that has already been rendered, and is therefore missed.

The attribute that you need is called "displacementbound", and is described in the PRMan docs. Basically, something like...

Attribute "displacementbound" "sphere" [0.1]

...should do it.

Hope this helps.


Paul Gregory

phexitol
03-31-2005, 07:34 AM
This is something I've kind of wondered about for a while. Is there any real disadvantage to setting it to around twice whatever the maximum displacement will be? I usually do this just to avoid the ugly artifacting.

pgregory
03-31-2005, 08:24 AM
The disadvantage to doing that is, when calculating in which buckets to put geomtry, the renderer will 'over compensate' for displacement due to the nature of the hint. This could result in geometry being placed into buckets that it will not ever contribute to. The more extreme the extra bound, the more likely this is to happen, and the result will be that geomtry hangs around in memory for much longer than it needs to, increasing the overall memory use of the renderer, which depending on the complexity of your scene, may or may not be an issue.

If you are seeing artifacts when you have set the bound to the maximum that the shader can displace by, either your calculation of the maximum is incorrect, or the space in which you are specifying the bound adjustment is incorrect. For example, if the shader calculates the displacement in 'object' coordinates, but the displacementbound is in 'current' coordinates (as it is by default) it may not be correct. You can alter the space that the displacementbound is specified in using the "coordinatesystem" parameter, i.e.

Attribute "displacementbound" "sphere" [0.1] "coordinatesystem" ["object"]

Hope this helps.

Cheers

PaulG

mjs1
03-31-2005, 08:25 AM
Thanks! "displacementbound" worked nicely.

CGTalk Moderation
03-31-2005, 08:25 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.