Comenzamos con una escena sencilla con tres esferas, una camara y una luz. Las tres esferas estan situadas a distintas distancias de la camara siendo la roja la mas cercana, la verde a una distancia intermedia y la azul la mas lejana.

A la hora de crear la cámara, vamos a utilizar un distance dimension para fijar el punto donde queremos que este el foco de la cámara. En primer lugar creamos una camara que se situara por defecto en las coordenadas 0,0,0. La creamos y la dejamos donde está.

Ahora creamos un distance dimension (Create -> Measure Tools -> Distance Tool) y colocamos el primer locator en las coordenadas 0,0,0 ayudandonos del Snap to Grid (tecla x) para situar el locator.El segundo locator lo situamos de la misma manera justo delante de la cámara.

Ahora nos vamos al Outliner y hacemos que locator1 y locator2 sean hijos de la cámara. Para ello arrastramos en el Outliner locator1 y locator2 sobre la cámara pulsando el botón del central del ratón. Así creamos una jerarquia en la que la cámara es el padre y los dos locators del distance dimension son sus hijos.

Colocamos la cámara de modo que sea visible la escena con las tres esferas y nos vamos al Attribute Editor de la cámara. En la sección Mental Ray del mismo nos vamos a Lens Shader

y le conectamos un Physical_lens_dof de la seccion Lenses de los shaders de Mental Ray.

El physical_lens_DOF tiene dos parámetros. Uno es Plane, el cual define la distancia al punto de foco desde la cámara. Es la distancia en el eje Z de la cámara al punto de foco y es un valor negativo, es decir, si la distancia desde la cámara al objeto en foco tiene un valor de 10, entonces el valor de Plane seráa -10. El otro parámetro Radius define a grosso modo la cantidad de desenfoque. Para esta prueba vamos a ajustar el valor de Radius a 0.9 para que el efecto sea fácilmente visible. El valor de Plane lo dejamos tal y como está ya que vamos a conectarlo al valor del distance dimension con el fin de controlar el punto de foco con un locator del distance dimension.

Si el valor de Plane fuese un valor positivo entonces no tendriamos más que conectar el atributo Distance de nuestro DistanceDimension al valor Plane del Physical Lens DOF tal y como hariamos usando el Depth of Field de Maya, ya que este si es un valor positivo. En este caso debemos invertir el valor que nos da el DistanceDimension antes de conectarlo al parámetro Plane del Physical Lens DOF. Para ello abrimos el Hypershade, nos vamos al tab Cameras y desde allí arrastramos con el boton central del ratón nuestra camara al Work Area del Hypershade (1) y pulsamos el boton Input and Output Conections (2) para que podamos ver el physical_lens_dof conectado a la cámara.

Nos vamos al Outliner sin cerrar la ventana del hypershade y en el menu Display del Outliner activamos la opcion Shapes .Ahora abrimos el distanceDimension1 en el Outliner y arrastramos el distanceDimensionShape1 con el boton central al Work Area del Hypershade.

Para conectar el valor de Distance del distancedimensionshape al Physical Lens DOF primero tenemos que invertir este valor. Para ello arrastramos desde la seccion general utilities del Hypershade un nodo Multiply Divide al work Area. Con este nodo vamos a invertir el valor distance del Distancedimensionshape. Para ello conectamos la salida del distancedimensionshape a la entrada del multiplydivide y seleccionamos "Other…" para que se abra el Conection Editor

El parámetro de la lista del distancedimension shape Distance es el que queremos conectar a una de las entradas del multiplydivide. Para ello expandimos el Input1 del multiplydivide y conectamos el Distance a Input1 X

Cerramos el Connection Editor y repetimos la operacion pero esta vez conectamos la salida del multiplydivide a la entrada del physical lens DOF abriendo igual que antes el connection editor. Esta vez conectaremos el parámetro Output X (expandiendo "Output" en el multiplydivide) al parametro Plane del physical lens DOF.

cerramos de nuevo el connection editor y ya tenemos todas las conexiones hechas, solo queda modificar algunos parámetros del multiplydivide para que invierta el valor que le da el distance del distancedimensionshapey se lo pase invertido al Plane del physical lens DOF.

Sólo nos queda ajustar que ese valor de distance está invertido usando el multiplydivide. Para ello abrimos el attribute editor del Multiplydivide donde podemos observar en el parametro Input1 la conexion que hicimos anteriormente. Ahora seleccionamos el valor Multiply del parámetro Operation (es el que viene por defecto) y en el parámetro Input2 cambiamos el valor por defecto que es 1 por -1. Con esto hacemos que la entrada Input1 se multiplique por -1 y en la salida Output1 que tenemos conectada al Physical Lens DOF tengamos el valor Input1 (Distance) * Input2 (-1) = -Input1 (-Distance).

Cerramos el attribute editor y el hypershade y ahora solo nos resta definir el punto de foco. Para ello situamos el locator2, que emparentamos anteriormente a la cámara, en ese punto.Por ejemplo, en la esfera intermedia (verde).

Como el locator1 se queda en el punto en el que esta situada la camara y situamos el locator2 en el objeto en foco, esto nos mide la distancia desde la camara al objeto en foco. Al estar esta distancia conectada al nodo multiplydivide que se encarga de invertir el valor y pasarselo al Plane del physical lens DOF.Ya tenemos un método rápido y eficaz de situar el punto de foco en un objeto usando un locator.


Este tutorial está basado en un tutorial de Andrew Camenisch escrito para el Depth of Field de Maya. En ESTE link tienes un script MEL que he hecho para crear una cámara con el Lens Shader controlado por un distance Dimension. En el Readme_Spanish.txt adjunto están las instrucciones para usarlo.