GeoInfo point vertices are not normally accessed in a Material except during
the vertex_shader() call, and then you're only dealing with the current vertex.
The Material fragment_shader() method use interpolated values that are assigned
during vertex_shader() and are accessible via the passed-in VertexContext
structure which is built by the renderer as it walks across the scanline.
IllumShader::surface_shader() is called from within
IllumShader::fragment_shader() and it precalculates P, V and N from the
VertexContext by dividing out w like so:
Vector3 P = vtx.PW() / vtx.w();
Vector3 V = vtx.scene()->cam_vectors.p - P; V.normalize();
Vector3 N = vtx.N() / vtx.w(); N.normalize();
surface_shader(P, V, N, vtx, surface);
It also handles the alpha blending logic in an attempt to make it easier to
write a simple surface shader.
The complication of Nuke shaders vs. Renderman surface shaders is that Nuke
shaders work more like Renderman co-shaders which require significantly more
management of the shading process than the traditional monolithic surface
shaders.
-jonathan
On Apr 9, 2011, at 9:15 AM, Josh Imbruglia wrote:
> I'm having problems calculating the world space coordinates of the
> primitives in the material's fragment_shader(const VertexContext &,
> Pixel &out) function.
>
> If I use the following code in an IllumShader I get the correct
> coordinates, but in the material it's incorrect. If anyone knows why
> this is the case and can shed some light on it, I would be greatly
> appreciated. Also, how does the IllumShader calculate the point P for
> the surface_shader function?
>
> int count = vtx.primitive()->vertices();
> for (int i = 0; i < count; ++i)
> vtx.geoinfo()->matrix *
> Vector4(vtx.geoinfo()->point_array()[vtx.primitive()->vertex(i)],
> 1.0)).truncate_w();
>
> Thanks!
> Josh
> _______________________________________________
> Nuke-dev mailing list
> [email protected]
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev
_______________________________________________
Nuke-dev mailing list
[email protected]
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev