Jump to content

Du And Dv In Vops


Recommended Posts

Two questions, it's ages since I looked at this

Renderman has Du(x),Dv(x) and du,dv and Mantra has Du(x),Dv(x) and DPds, DPdt

I can't remember how you get the mantra equilvalent of du,dv is it just Du(s) and Dv(t) or is it something to do with dPds and dPdt?

And finally why no du and dv in mantra, wouldn't it make life easier when converting shaders?

And finally finally why no Du and Dv VOPs? Or have I missed them somewhere?

Is that more than 2 questions?

Link to comment
Share on other sites

Hey Simon,

I can't remember how you get the mantra equilvalent of du,dv is it just Du(s) and Dv(t) or is it something to do with dPds and dPdt?

23913[/snapback]

As I understand it,

  MANTRA             PRMAN
===================================
dPds        =  dPdu*du
dPds/Du(s)  =  dPdu
Du(P)       =  dPdu*du or Du(P)*du
Du(P)/Du(s) =  dPdu or Du(P)
Du(s)       =  du
dPdt        =  dPdv*dv
dPdt/Dv(t)  =  dPdv
Dv(P)       =  dPdv*dv or Dv(P)*dv
Dv(P)/Dv(t) =  dPdv or Dv(P)
Dv(t)       =  dv
n/a         =  Deriv(a,b)

However, I find that Du(P) or Dv(P) (and equivalent, with or without the division) gives smoother/better results than dPds or dPdt. Maybe it's because Du(x,...) defaults to "smooth" derivs and dPd[s|t] maybe doesn't (?) ... dunno.

And finally why no du and dv in mantra, wouldn't it make life easier when converting shaders?

And finally finally why no Du and Dv VOPs? Or have I missed them somewhere?

Is that more than 2 questions?

I guess we don't need them in VEX because they already exist as Du(s) and Dv(t)...

And there are quite a few things missing in VOPs, so given that this stuff is a little more esoteric than the other functions, I'm not surprised it's missing from VOPS (haven't checked) -- but yeah, they should be there...

Cheers!

Link to comment
Share on other sites

You're most welcome, but I have to warn you that I've never been absolutely, categorically, 100% certain about these equivalences. Mainly because it's almost impossible to do direct comparisons between the two renderers -- shading rates, dicing, and other things being slightly different and all.

About all I can say is that I'm about 95% sure about them...

But, I know there are some people lurking around here who know, beyond the shadow of a doubt, whether they are correct or not. I would like to invite said people to either correct or confirm them (hint, hint, nudge, nudge) so we can maybe put them up on the wiki (along with some other mantra<->prman mappings)

e.g: the (small) difference between Du(P) and dPds in Mantra is a little puzzling to me...

Link to comment
Share on other sites

Hi guys.

My question is about the use of Du and Dv.

I think that Du and Dv are the derivates in both parametric directions u and v.

In practice is a representation of the rate of changing/variation of the surface shape, i think.

Ok, they are very important because is the way the render uses to get the normal surfaces, using cross product.

Well, i am curious about other uses of this data in shading, what effects can you achieve using them, for what tasks are useful, etc ...

Thanks

Link to comment
Share on other sites

Well the reason I've used them before and in this case is for createing lines. In the current case I spotted an outline shader in the renderman book that I hadn't tried before. This was motivated by another thread on this forum. Anyway it uses the derivatives to scale an edge rolloff function so that the line is a uniform thickness.

In the past I used them in a similar way as a scale factor either to prevent aliasing in striped and spotty procedural textures or to actually reduce the number of stripes as the surface "tightens" see the woodcut example in the advanced renderman book.

Other than that I haven't touched them which is why I can never remember the conversions. I expect Mario has some fancy uses for them which I'd love to hear about too they are no doubt extremely useful.

Link to comment
Share on other sites

About all I can say is that I'm about 95% sure about them...

But, I know there are some people lurking around here who know, beyond the shadow of a doubt, whether they are correct or not. I would like to invite said people to either correct or confirm them (hint, hint, nudge, nudge) so we can maybe put them up on the wiki (along with some other mantra<->prman mappings)

e.g: the (small) difference between Du(P) and dPds in Mantra is a little puzzling to me...

23936[/snapback]

Here's something that I found puzzling.

In the VEX Layered shader the filterwidth function is defined as

float
filterwidth(float x)
{
    return max(abs(Du(x))+abs(Dv(x)), VOP_MIN_FILTER_SIZE);
}

However in renderman it is defined as

filterwidth(x) max(abs(Du(x)*du)+abs(Dv(x)*dv), MINFILTERWIDTH)

This suggests that it should translate as

filterwidth(x) max(abs(Du(x)*Du(s))+abs(Dv(x)*Du(t)), MINFILTERWIDTH)

Any thoughts?????

Really would be nice to get something from Sesi on this I think I'll email support about it and try and clear it up.

Link to comment
Share on other sites

Here's something that I found puzzling.

In the VEX Layered shader the filterwidth function is defined as

float
filterwidth(float x)
{
    return max(abs(Du(x))+abs(Dv(x)), VOP_MIN_FILTER_SIZE);
}

However in renderman it is defined as

filterwidth(x) max(abs(Du(x)*du)+abs(Dv(x)*dv), MINFILTERWIDTH)

23947[/snapback]

Hmmm... that looks OK to me (and jibes with the table above, assuming it's accurate).

Mantra's Du(x) is a differential (it's already multiplied by du), whereas PRMan's Du(x) is a derivative (hasn't been scaled by du).

So the VEX expression abs(Du(x)) maps to the RSL expression abs(Du(x)*du), and similarly for v. So I'd say that's correct as written.

I've put the table up on the wiki so it can be easily corrected by people who know better than me B)

As far as applications of this stuff.... there are lots and lots of things they can be used for -- one typical application (besides the NPR ones that Simon mentioned) is for all things relating to measuring surface curvature (min,max.mean,gaussian,etc), which in turn is useful for a bunch'o'things... derivatives are your friends! :)

Cheers!

Link to comment
Share on other sites

Hmmm... that looks OK to me (and jibes with the table above, assuming it's accurate).

Mantra's Du(x) is a differential (it's already multiplied by du), whereas PRMan's Du(x) is a derivative (hasn't been scaled by du).

23949[/snapback]

Doh, yes I just translated the du and dv to Du(s) and Du(t) and didn't notice that mantra's Du(x) isn't the same as Renderman Du(x), it's too confusing to have two things named the same but working completely differently! That's was the gotcha that I was desperatley trying to remember :rolleyes:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...