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: softimage@listproc.autodesk.com
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: 
softimage-boun...@listproc.autodesk.com<mailto:softimage-boun...@listproc.autodesk.com>
 [mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Fabricio Chamon
Sent: Thursday, August 28, 2014 8:20 AM
To: softimage@listproc.autodesk.com<mailto:softimage@listproc.autodesk.com>
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