Bueno, pues la pregunta esta clara. Aunque he buscado por el foro y aún a riesgo de recibir una monumental pitada ¿podéis explicarme con palabras entendibles para un novato que es un Shader y el proceso por encima para crearlo? Gracias mil.
Bueno, pues la pregunta esta clara. Aunque he buscado por el foro y aún a riesgo de recibir una monumental pitada ¿podéis explicarme con palabras entendibles para un novato que es un Shader y el proceso por encima para crearlo? Gracias mil.
"¿3D Studio Max?. No deja de ser una calculadora gorda" Por DarkHate
Muy básicamente, un Shader es un programa que define la apariencia de la superficie de un objeto. Por ejemplo, textura, interacción con la luz, reflexión, refracción, displacement, etc.¿Podéis explicarme con palabras entendibles para un novato que es un shader.Para crear un Shader tienes que programarlo o crearlo a través de algún sistema visual como, por ejemplo, el sistema de nodos de Houdini, XSI, Autodesk Maya o también el módulo Slim de las RenderMan artista tools de Pixar (disponible para Maya).El proceso por encima para crearlo?
Por ejemplo, en 3dsmax creo que no hay más remedio que programarlo en C++ ya que no dispone de un sistema visual para trabajar a ese nivel tan bajo, tal y como hacen las aplicaciones que he mencionado.
Siguiendo por el camino de la programación, los Shaders se pueden programar en cualquier lenguaje, que dependerá de cada renderer. Por ejemplo, como he dicho, en 3dsmax se programan en C++. En los renderers basados en la especificación RenderMan, con un lenguaje de Shaders propio. Para desarrollar Shaders para su ejecución en tiempo real a través de las GPU, existen varios lenguajes. Los más conocidos son el hlsl de Microsoft, GLSL de OpenGL, CG de Nvidia.
Posdata: evidentemente, con el sistema de nodos te tienes que ceñir a las operación que te ofrezca el programa. Con programación te lo puedes crear tú todo, por lo que no tendrías esa limitación. Aunque normalmente se da la posibilidad de crear nuevos nodos en forma de plugins (programando, claro). Saludos.
Última edición por HalfVector; 19-06-2006 a las 06:09
Muy buena explicación half Vector, más claro echarle agua. Sólo quería agregar que en motores como Mental Ray el concepto tradicional de Shader (como interactúa la luz con la superficie del objeto y sus propiedades) se extiende virtualmente para hacer a todos los aspectos del renderizado personalizable y programable. En Mental Ray, un Shader es una función que calcula los efectos de la luz, estos pueden ser Shaders para focos, cámaras (lente), materiales, sombras, etc. Saludos.
Exacto. Se me olvidó decir que en Mental Ray los Shaders se suelen programar en c y que tanto en éste como en RenderMan, existen diferentes tipos de Shaders (yo sólo he mencionado los surface & displacement Shaders). Pero como has dicho hay más. Por ejemplo:Muy buena explicación half Vector, más claro echarle agua. Sólo quería agregar que en motores como Mental Ray el concepto tradicional de Shader (como interactúa la luz con la superficie del objeto y sus propiedades) se extiende virtualmente para hacer a todos los aspectos del renderizado personalizable y programable. En Mental Ray, un Shader es una función que calcula los efectos de la luz, estos pueden ser Shaders para focos, cámaras (lente), materiales, sombras, etc. Saludos.
Saludos.
- surface Shaders.
- displacement Shaders.
- light Shaders.
- Atmosphere Shaders.
- interior Shaders.
- exterior Shaders.
- transformation Shaders.
- imager Shaders.
Agradezco las explicaciones. Partiendo de ellas voy a seguir buscando información sobre cómo usarlos, ya que he leído algunos hilos en los que se menciona: descarga este Shader y úsalo para.
"¿3D Studio Max?. No deja de ser una calculadora gorda" Por DarkHate
En palabras sencillas Shader se le suele llamar a los materiales que le aplicas a un objeto, un shader, por ejemplo, seria el aluminio ya que este tiene propiedades especificas, por ejemplo, la reflexión de su entorno. (eso es lo que entiendo yo sobre el concepto).
En realidad, yo el material lo veo como algo distinto al shader. Para mí el material abastece al Shader de los datos que necesita para realizar sus cálculos. Algo, así como si el Shader fuera una plantilla (aunque lo correcto es decir que es un programa con una serie de parámetros de entrada) y el material una instancia de dicha plantilla.
Por ejemplo, en 3dsmax, si creas un material de tipo standard, puedes indicar para cada uno una textura Diffuse diferente, pero el Shader es el mismo para todos ellos.
Pero bueno, esto ya cada uno que lo interprete como quiera. Saludos.
Vaya Halfvector, esta última aclaración tuya si que me ha puesto las cosas en su sitio. Muy buena. Gracias de nuevo. Sigo investigando.
"¿3D Studio Max?. No deja de ser una calculadora gorda" Por DarkHate
Hola, muy interesante este hilo, la verdad es que he empezado a buscar un poco, pero todo lo que encuentro de programación de Shaders solo encuentro para XSI. ¿Alguien sabe de algún sitio que expliquen como programar un Shader en 3dsmax. Habéis dicho que era en C++, pero que clases se utilizan cómo se debe utilizar, compliar, ¿cómo puedo tener más o menos intuición de que me ara lo que estoy programando.
Muchas gracias.
Realmente cada vez más me gusta este foro.
Sois unos genios.
La clase base de la que debes derivar para implementar un material (y un shader, ya que en 3dsmax el Shader se programa dentro del material) es mtl (aunque puedes derivar de clases más funcionales que, a su vez derivan de mtl, por ejemplo, la clase stdmat). En esa clase tienes un método que es shade al que se le pasa un parámetro de tipo shadecontext que te ofrece toda la información necesaria para llevar a cabo el Shading (posición, normal, luces, etc). Al mismo tiempo, shadecontext tiene un miembro de tipo shadeoutput que tendrás que rellenar con la información de Shading (color, transparencia) para que max renderice correctamente la superficie.Alguien sabe de algún sitio que expliquen como programar un Shader en 3dsmax. Habéis dicho que era en C++, pero que clases se utilizan.Mírate el SDK de 3ds Max. Ahí tienes el código de todos los materiales de 3ds Max. Concretamente el standard (archivo stdmtl, cpp) implementa Phong, Blinn y metal.Cómo se debe utilizar.Mírate la ayuda del SDK de 3ds Max para una explicación sobre cómo crear y compilar un proyecto para cualquier tipo de plugin. Aunque siempre puedes utilizar los proyectos (para visual Studio. Net 2003) ya creados de los ejemplos que vienen con el SDK y modificarlos a tu antojo.Compliar.En max es bastante engorroso el tema de probar lo que programas ya que tienes que estar a cada momento abriendo y cerrando el 3ds Max. Lo importante es que tengas claro lo que quieras hacer y que sepas lo que estás haciendo. Es decir, que seas capaz de predecir lo que hace tu código. Es algo complicado y que se alcanza con experiencia.Como puedo tener más o menos intuición de que me ara lo que estoy programando.
En ese sentido yo prefiero con diferencia el sistema de RenderMan. El procedimiento para desarrollar un Shader para RenderMan es extremadamente sencillo (otra cosa es lo complicado que pueda llegar a ser el código de propio shader). Tan sólo necesitas un editor de texto y luego compilar desde la línea de comandos. Te olvidas de jerarquías de clases y demás parafernalia que complican el desarrollo. Sobre todo, para el que empieza. Si te metes a programar plugins para 3ds Max ya entenderás por que te lo digo. Saludos.
Chapo. Half Vector.
Por cierto dai-x, si tu intención es la de aprender sobre desarrollo de Shaders sin importarte la aplicación, te aconsejo que cojas cualquier renderer gratuito basado en RenderMan (por ejemplo, Pixie) y te pongas a ello. Como he dicho en mí anterior mensaje te ahorras muchas cosas y vas directo al grano. Además, los resultados los veras más rápidamente que con max.
Ahora, si quieres un feedbak instantáneo, te aconsejo que desarrolles Shaders orientados a tiempo real. Para ello nada mejor que coger editores especializados como rendermonkey de Ati o FX Composer de Nvidia. Evidentemente aquí entra en juego la potencia de tu tarjeta gráfica. Yo te aconsejo una que soporte Shaders 2.0x o 3.0 ya que te permiten escribir Shaders más complejos. Y si no pues con Shaders 2.0.
Tal vez ésta última sea la mejor opción para empezar a aprender sobre el desarrollo de Shaders. Además, hay que tener en cuenta que los lenguajes de Shaders como hlsl, GLSL o CG son muy parecidos a los de RenderMan. Evidentemente en RenderMan no tienes las limitaciones de los Shaders pensados para ser ejecutados en tiempo real. Saludos.
Última edición por HalfVector; 20-06-2006 a las 15:16
Chapó half. Con explicaciones así da gusto leer los hilos.