Thanks again, Jonathan. That is very helpful. However, I seem to be stuck at a very basic stage. How do I pass my own function to the renderer. Using one of the lens functions you sent as an example, I'm trying to get that returned So, taking this as an example:
/*! Simple perspective projection lens function. */ static void myLensFunc(Scene* scene, CameraOp* cam, MatrixArray* transforms, const VArray& in, Vector4& out, void* data) { out = transforms->matrix(LOCAL_TO_SCREEN).transform(in.PL <http://in.pl/>(), 1.0f); } I want lens_function() to return the above for any "mode". Which I'm naively trying to do like this: CameraOp::LensFunc* CamTest::lens_function(int mode) const { return &myLensFunc; } <file:///home/ibusquets/Nuke6.3v1b20/Documentation/NDK/Plugins/classDD_1_1Image_1_1CameraOp.html#a0e50ad7bf1e85b4bc7efb5c37aece0b> However, I'm not getting the result I want. Changing the "projection mode" knob in my CamTest Op still behaves as usual, and seems to use the right LensFunc for each projection mode, instead of myLensFunc. Am I interpreting this wrong? How should I be returning a pointer to my custom function in lens_function()? Thanks, Ivan On Mon, Jun 27, 2011 at 1:20 PM, Jonathan Egstad <jegs...@earthlink.net>wrote: > btw, don't worry about clipping the distorted vertices to the screen bbox, > the renderer only worries about clipping to the near-Z plane. The only time > you need to worry about the screen edges is if you're wrapping around like > the spherical projection does. > > > > On Jun 27, 2011, at 11:15 AM, Ivan Busquets wrote: > > Wow, thanks for the info, Jonathan. I looked at CameraOp::LensNFunc, but > didn't know what to make of it, or where to start, really. So that's exactly > the kind of info I was hoping for. > > At DD there was a custom 'HypeCamera' that supported the 'Hype' distortion >> file format so you could load a Hype file directly into the camera and it >> applied the forward distortion via this method. There was also a >> 'HypeDistort' geometry modifier that warped a card with the reverse >> distortion so you could do a undistort/redistort in a single render/filter >> pass. >> > > And that's exactly the kind of application I wanted it for. :) > > Thanks, > Ivan > > > On Mon, Jun 27, 2011 at 11:03 AM, Jonathan Egstad > <jegs...@earthlink.net>wrote: > >> So the current scanline renderer does handle general camera distortions - >> with poly subdivision memory limitations. >> >> The CameraOp class supports several built-in linear projection and >> non-linear distortions using its LensFunc/LensNFunc methods that are passed >> back to the renderer via the CameraOp::lens_function()/lensNfunction() >> virtual methods, then on to the Primitives in the Scene structure for use >> during tessellation. >> >> You can implement your own LensFunc routines and return them via the >> virtual method. The idea is that a primitive can subdivide itself using the >> output of a LensFunc by passing in vertex info which gets modified. The >> 'void *' parameter at the end is a way to get add'l info from the Primitive >> into the lens function. >> >> >> /*! Simple perspective projection lens function. */ >> static void perspLensFunc(Scene* scene, CameraOp* cam, MatrixArray* >> transforms, >> const VArray& in, Vector4& out, >> void* data) { >> out = transforms->matrix(LOCAL_TO_SCREEN).transform(in.PL(), 1.0f); >> } >> >> /*! Simple UV projection lens function. */ >> static void perspLensFunc(Scene* scene, CameraOp* cam, MatrixArray* >> transforms, >> const VArray& in, Vector4& out, >> void* data) { >> out = transforms->matrix(CLIP_TO_SCREEN).transform(in.UV()*2.0f - >> Vector4(1,1,1,1)); >> } >> >> The LensNFunc method does the same thing, but operates on arrays of vert >> info. >> >> At DD there was a custom 'HypeCamera' that supported the 'Hype' distortion >> file format so you could load a Hype file directly into the camera and it >> applied the forward distortion via this method. There was also a >> 'HypeDistort' geometry modifier that warped a card with the reverse >> distortion so you could do a undistort/redistort in a single render/filter >> pass. >> >> >> Have fun, >> >> -jonathan >> >> >> On Jun 26, 2011, at 2:12 PM, Ivan Busquets wrote: >> >> > Hi, >> > >> > I've been looking at the lens_distortion parameters in CameraOp, and was >> wondering if there's any way to implement a different lens >> distortion/correction model within a CameraOp, or if one would need to write >> a specific renderer to handle that. >> > >> > Specifically, I'm looking for a way to handle off-center and asymmetric >> distortions. Assuming I can get a function that maps destination to source >> vectors(uvs), would this be possible within a CameraOp? >> > >> > Many thanks, >> > Ivan >> > >> > >> > >> > >> > >> > _______________________________________________ >> > Nuke-dev mailing list >> > Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ >> > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev >> >> _______________________________________________ >> Nuke-dev mailing list >> Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ >> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev >> > > _______________________________________________ > Nuke-dev mailing list > Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev > > > > _______________________________________________ > Nuke-dev mailing list > Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev > >
_______________________________________________ Nuke-dev mailing list Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev