hey Matt, thanks a lot for the detailed explanation and examples! that's
exactly what I neeed.
much appreciated.


2014-08-28 18:48 GMT-03:00 Matt Lind <[email protected]>:

> Updated version:
>
>
>
> Vector_state à vector-Vector à Vector_Coordinate_Converter à
> Vector-Scalar         à Gradient            à Surface
>
> (normal)       (negate)         (Vector, to Camera)            (Dot
> against -1,0,0)    (scalar input,[-1…1])
>
>
>
>
>
> This works in similar fashion to the method I submitted previously.  The
> main difference being  the normal vector is dotted against the camera’s –X
> axis to provide the directional information.
>
>
>
> If the viewed normal aligns with the camera’s –X axis, the dot product
> will return -1 (red).
>
> If the viewed normal vector aligns with the camera (points to the camera),
> the dot product will return 0 (cyan).
>
> If the viewed normal vector aligns with the camera’s local X axis, the dot
> product will return 1 (yellow).
>
>
>
> The output of the dot product drives the gradient.  Just make sure to use
> Processing > Mixers > Gradient and not Texture > Gradient.  If you want to
> make the output more accurate, zero out the Y component of the normal
> vector after it’s converted to camera space, but before doing the dot
> product.  Then normalize.  That will eliminate the vertical component.
>
>
>
>
>
> You want to avoid using expressions in render trees as it can slow down
> performance and cause other unwanted side effects.  Mental ray does all
> computations in ‘internal space’ which is largely undefined.  Softimage did
> it’s best to ensure that for lights and cameras, internal space is
> equivalent to world space.  So when the ‘vector_coordinate_converter’ node
> is used above to convert the normal to camera space, what it’s doing is
> converting the normal from world space to the local coordinate space of the
> camera.  However, it should not be assumed that internal space always maps
> to world space, because it doesn’t.
>
>
>
>
>
> Matt
>
>
>
>
>
>
>
>
>
>
>
> *From:* Matt Lind
> *Sent:* Thursday, August 28, 2014 11:35 AM
> *To:* [email protected]
> *Subject:* RE: Dot Product on Rendertree?
>
>
>
> You cannot get your desired result with only a dot product because in
> order to differentiate between facing left and facing right, you need
> directional information.  A dot product only gives the cosine of the angle
> between the vectors, not direction.
>
>
>
> Based on your description, I’m assuming you want to drive color based on
> the surface normal relative to the camera.  To do that is fairly simple.
>
>
>
> 1) Get a vector_state node and set it to ‘normal_vector’.  This is the
> surface normal at the intersection point.
>
>
>
> 2) Get a vector_vector node and plug the previous node into
> vector_input1.  Set the operation to ‘negate’.  This will flip the normal
> to point away from the camera (assuming it’s a front facing surface).
>
>
>
> 3) plug the result into a vector_coordinate_converter node, and set ‘type’
> to ‘vector’, then set ‘transform’ to ‘to Camera’.  This will treat the
> normal as an orientation vector and re-describe it in the camera’s
> coordinate space.  We do this to isolate the normal vector’s X-axis to make
> it easy to determine if it’s facing left or right relative to the frame.
>
>
>
> 4) Plug the output of the vector_coordinate_conversion node into a
> ‘vector_to_scalars’ node.  This will give us access to the normal vector’s
> X, Y, and Z components.
>
>
>
> 5) Plug the ‘X’ output of the vector_to_scalars node into the ‘input’ port
> of a gradient node.  In the gradient shader, go to the ‘input’ tab and set
> active range to [-1…1] and set input type to ‘scalar input’.  Finally,
> adjust the color gradient markers so the left end is yellow, the middle is
> cyan, and the right side is red – the opposite of the default arrangement.
> If you do not want to futz with the color markers, then invert the ‘active
> range’ on the input to be [1…-1].  I don’t recommend inverting as it’s
> non-standard math and while it’s perfectly fine for this simple prototype,
> it’ll cause headaches in a production pipeline as it’ll be a source of hard
> to find bugs from stupid logic.
>
>
>
>
>
>
>
> Matt
>
>
>
>
>
>
>
>
>
> *From:* [email protected] [
> mailto:[email protected]
> <[email protected]>] *On Behalf Of *Fabricio Chamon
> *Sent:* Thursday, August 28, 2014 8:20 AM
> *To:* [email protected]
> *Subject:* Dot Product on Rendertree?
>
>
>
> Hello fellow survivors!
>
>
>
> I'm trying to gradient shade a simple grid, using the dot product of
> surface normal vs. camera position:
>
>
>
>
>
> basic idea is:
>
> grid facing camera > cyan
>
> grid facing left > red
>
> grid facing right > yellow
>
>
>
> the above setup is not working... any suggestions ?
>
>
>
> thanks
>

Reply via email to