Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Shader FX
Primera etapa:
Reconocimiento de la Interfaz y de las limitaciones de la versión educativa
En la parte superior se encuentra la zona de menús, en ella podrá encontrar las opciones
de guardar, reset, exportar, abrir, herramientas de asignación, agrupar, desagrupar,
configuraciones, ayudas entre otros.
a - La ventana de vista esquemática, en esta zona podrá crear y unir los nodos. Además de poder navegar
con el uso del mouse con las opciones de acercamiento / alejamiento, desplazamiento izquierda / derecha /
arriba / abajo, para ello se emplea el scroll del mouse, al pulsar botón izquierdo del mouse se puede
seleccionar cada nodo, además de poder seleccionar con recuadros de selección al presionar sin soltar y
trazar un cuadro, con el botón derecho sobre esta zona puede agregar elementos en todo momento.
b - El panel de configuración es el área en donde se ingresan parámetros a los nodos, como por ejemplo en el
nodo de textura puede cargar un mapa de bits o en el nodo de constante definir el valor de la misma en
números de punto flotante.
c - En esta zona se puede elegir por categoría los 5 tipos de nodos, dentro de los tipos existen diferentes
subtipos que se podrán agregar con la técnica de drag and drop, se selecciona un nodo y se arrastra hasta la
vista esquemática, se procede de igual forma con cualquier nodo que desee incorporar.
d - La barra de mensajes despliega información importante acerca cualquiera de los nodos y de las
actividades que realicemos, también despliega posibles errores como referencia para su corrección.
‐ Solo permite 8 nodos
‐ No se puede salvar
‐ La licencia es personal de aprendizaje
‐ No es de uso comercial
Aplicaciones que emplean el formato fx y su relación con direct x, Cg, cgsl,
hlsl
Render monkey – el problema del uso de render monkey es que no permite la exportación
en formato HLSL (*.fx), aunque es un buen recurso para desarrollo de shaders para
tiempo real basados en Open GL (GLSL)
Mental Mill – es una buena opción pero dificulta su uso el hecho de que no tenga un
exportador definido para virtools, permite exportar en formato HLSL (*.fx), aunque se le
deben hacer modificaciones en el código para su incorporación en Virtools. Permite la
exportación en formatos, CG, HLSL y GLSL.
Shader FX – Posee una definición de HLSL específica para Virtools, también contiene la
exportación para Quest 3d, XNA, Fx Composer y 3D Studio Max, soporta varios tipos de
materiales y se puede aplicar un material por canal, maneja independientemente las
coordenadas de textura UV. La creación de shaders puede ser supervisada íntegramente
en 3D Studio Max al permitir un despliegue en tiempo real del shader y pueden ser
fácilmente transportados a virtools.
En las pruebas realizadas, la compatibilidad entre Shader FX y Virtools era la más óptima,
puesto que a diferencia de las demás aplicaciones Shader FX posee una definición de
Crea
ación del primer shad
der básico
En estta configurac
ción de shad
der se ha em
mpleado un material está ándar, los ca
anales que
contiene permite una
u configurración generral del materrial que será
á visualizado
o en tiempo
real.
El prim
mer paso es la configura
ación del ma
aterial:
Al sele
eccionar el material
m aparrecen las
opciones de Shade er Model, FXX, Sub
Materiaal ID, el núm
mero de lucees y
algunaas otras caraacterísticas del
d
materiaal.
Por compatibilidad
d es preferiblle usar
Shader Model 2.0, pero es possible usar
el Shadder Model 3.0 si es que la tarjeta
gráfica
a de su máquuina lo sopo
orta.
Se elig
ge aquí, la diirección del archivo
FX y el Sub Materiial, además del
número o de luces del
d shader.
1
Shader (Wikimedia
a Foundation, 2009)
2
Norm
males (Wikime
edia Foundatio
on, 2009)
4 Victor Hu
ugo Franco Serrano / DGSCA
D UNA
AM
Método de uso de la aplicación Shader FX y su implementación en Virtools Sombreado
Uso de texturas:
Difusión Normales
Alfa Especularidad
En casos especiales
como el normal map o
el alfa map se deberá
de seleccionar
opciones diferentes.
Casos especiales:
Una vez cargada la textura del Una vez cargada la textura del alfa map se
mapa de normales, tenemos que deberá conectar al material con el nodo que se
oprimir el check box de Normal encuentra en la parte inferior de la textura con la
Map para indicarle al programa que leyenda A, además de que se debe oprimir el
esta textura es del tipo normal check box Display alpha para poder ver la
map. textura del alfa map.
Mane
ejo de coorrdenadas de
d textura:
En la
l imagen de e la izquierda
podemos obserrvar un valorr de
repeetición de cooordenada UVU de 1,
en cambio
c a imagen de la
en la
dereecha observvamos un va alor de
repeetición de la coordenada a UV de
3, lo
os valores dee las coordeenadas
de textura
t no affectan directtamente
al shader, pero afectan al cómo
c
seráá visualizadoo.
Al finaliizar la
configuuración del
shader debemos
de salvvar en el
formatoo nativo
SFX y exportarlo
e
para quue sea
compattible con
virtools.
7 Victor Hu
ugo Franco Serrano / DGSCA
D UNA
AM
Método de uso de la aplicación Shader FX y su implementación en Virtools Sombreado
Para ello en el menú File seleccionamos la opción save as, tecleamos un nombre y le
damos ubicación al archivo.
Posteriormente exportaremos a el
formato FX, dentro del menú File
seleccionamos la opción Export FX…,
en la ventana emergente aparece la
opción Fx Format debemos
seleccionar Virtools y en la opción Up
Axiz debemos seleccionar Y - Up
(Direct X).
float ValorUV1
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D difusion_mapa;
texture2D mapa_especular;
float ValorUV2
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D Alfa;
texture2D mapa_normales;
MipFilter = LINEAR;
};
//----------------------------------
//----------------------------------
};
};
return Out;
}
{
pass light1
{
VertexShader = compile vs_1_1 v(lightPos[0]);
ZEnable = true;
CullMode = ccw;
AlphaBlendEnable = true;
ZWriteEnable = true;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;
PixelShader = compile ps_2_0 f(lightCol[0]);
}
shader vidrio.fx
Una vez generado esto dentro de la aplicación virtools se carga el shader para ello
debemos:
-Una vez cargado el shader se debe compilar y revisar que la compatibilidad esta validada
Una vez cargado y validado el shader procederemos a integrarlo al material que el objeto
tiene aplicado.
Se cargan las texturas del mapa de normales, mapa de difusión, mapa de transparencia y
mapa de especularidad al proyecto.
Cargas el modelo con el material que vas a usar y dentro del material editor:
Dentro de los
parámetros que
modificaremos se
encuentran los
canales de textura,
por medio del menú
descendente
seleccionaremos la
textura adecuada
para cada canal.
Se asignan las
texturas para cada
canal y
posteriormente se
dan valores de
repetición UV.
El mod
delo podrá ser
s visualizado con el sh
hader aplica
ado
dentro
o de virtools..
Identtificación de
d posibles
s errores
A la mitad
m sfera es possible visualizzar el error en donde la misma
de la es m superficie posee 2
variantes de ilumin ado izquierdo se muestrra brillante y del lado derecho se
nación del la
encueentra opaco.
- De manejo
m de la luz dentro de
d virtools
La luzz en virtools
s posee unaa definición
n específicaa que resultta en la neccesidad de
modifficación direecta del cód
digo, los errores de ilu m comunes tienden a
uminación más
ser la falta de luz
z en la zona
a de umbra a pues care ece totalmente de luz perdiendo
p e
el
volummen del obje eto:
Shade
er con corre
ección de lu
uz
En la
a visualizaciión del shader
podemos observvar la zona de umbra
bien definida
d y la
a superficie
e en donde
incide
e la luz possee un refle
ejo
mode erado.
13
3 Victor Hu
ugo Franco Serrano / DGSCA
D UNA
AM
Método
o de uso de la aplicación
a Shad
der FX y su implementación en
e Virtools Som
mbreado
S
Shader direccto sin corre
ección de luz
A dife
erencia de la visualizacción del
shade er corregido
o, este shadder presentta
una zona de gran obscurida ad en la
zona de umbra, lo que dificculta el
reconocimiento ded las formas
integrrantes del modelo
m 3d, además de e
tener un brillo de
emasiado in ntenso en la
a
zona en donde in ncide la luzz.
La po
osible solución es que dentro de la modificacción del códdigo se deb
be tomar en
n
cuenta la luz am
mbiental que
e recibe el objeto
o de fu
uentes no directas
d de luz, ademá
ás
de tom
mar en cuenta la inten
nsidad y collor de la em
misión del objeto.
o
Corre
ección de los
l errores
s encontrad
dos
- De manejo
m de la luz dentro de
d virtools
Segunda etapa:
14
4 Victor Hu
ugo Franco Serrano / DGSCA
D UNA
AM
Método de uso de la aplicación Shader FX y su implementación en Virtools Sombreado
Es la parte más importante del Los nodos de textura le dan al Los nodos de entrada son los
shader, le da estructura y shader información de texturas, que dan información desde el
conecta todos los demás nodos. color y constantes, difieren con engine o software 3d que se esté
los de entrada en que estos ocupando, llámese 3D Studio
últimos no brindan información Max o Virtools, son nodos a los
grafica al shader que no se les puede conectar
nada pues ellos son las partes
ultimas de la jerarquía del
shader.
- Aprendizaje del uso de los nodos de entrada, de los tipos operaciones matemáticas, de
tiempo, de vectores y coordenadas de textura
Una vez investigados los elementos que conforman al shader debemos integrarlos con
Shader FX.
Cube map
textureCUBE UICubeMap_860;
float UIConst_5178
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 0.2;
float UIConst_5063
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D TextureMap_293;
texture2D TextureMap_5635;
float UIConst_7974
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 0.5;
//----------------------------------
//----------------------------------
};
};
return Out;
}
return Out;
}
float3 HalfAngle = L + V;
float3 NormalizedHalfAngle = normalize(HalfAngle); //Normalize
float NdotH_specular = saturate(dot(NormalizedHalfAngle,TextureMap_5635.rgb));
//clamped dot product
float NdotH_pow_Glossiness = pow(NdotH_specular,UIConst_7974); //x to the power of y
float3 SpecularLight = SpecularColor * NdotH_pow_Glossiness;
float3 input3 = SpecularLight;
{
pass ambient
{
VertexShader = compile vs_1_1 av(lightPos[0]);
ZEnable = true;
ZWriteEnable = true;
CullMode = ccw;
AlphaBlendEnable = false;
PixelShader = compile ps_2_0 af(lightCol[0]);
}
pass light1
{
VertexShader = compile vs_1_1 v(lightPos[0]);
ZEnable = true;
CullMode = ccw;
ZWriteEnable = true;
DestBlend = One;
SrcBlend = One;
ZFunc = LessEqual;
AlphaBlendEnable = true;
PixelShader = compile ps_2_0 f(lightCol[0]);
}
pass light2
{
VertexShader = compile vs_1_1 v(lightPos[1]);
ZEnable = true;
ZWriteEnable = false;
ZFunc = LessEqual;
CullMode = ccw;
AlphaBlendEnable = true;
SrcBlend = One;
DestBlend = One;
PixelShader = compile ps_2_0 f(lightCol[1]);
}
pass light3
{
VertexShader = compile vs_1_1 v(lightPos[2]);
ZEnable = true;
ZWriteEnable = false;
ZFunc = LessEqual;
CullMode = ccw;
AlphaBlendEnable = true;
SrcBlend = One;
DestBlend = One;
PixelShader = compile ps_2_0 f(lightCol[2]);
}
pass light4
{
VertexShader = compile vs_1_1 v(lightPos[3]);
ZEnable = true;
ZWriteEnable = false;
ZFunc = LessEqual;
CullMode = ccw;
AlphaBlendEnable = true;
SrcBlend = One;
DestBlend = One;
PixelShader = compile ps_2_0 f(lightCol[3]);
}
Una vez generado esto dentro de la aplicación virtools se carga el shader para ello
debemos:
-Una vez cargado el shader se debe compilar y revisar que la compatibilidad esta validada
Una vez cargado y validado el shader procederemos a integrarlo al material que el objeto
tiene aplicado.
Se cargan las texturas del mapa de normales, mapa de difusión, mapa de transparencia y
mapa de especularidad al proyecto.
Cargas el modelo con el material que vas a usar y dentro del material editor:
Dentro de los
parámetros que
modificaremos se
encuentran los
canales de textura,
por medio del menú
descendente
seleccionaremos la
textura adecuada
para cada canal.
Se asignan las
texturas para cada
canal y
posteriormente se
dan valores de
repetición UV.
El shader resultante en
virtools
En este caso el método deberá incluir a un programador para poder resolver errores en la
línea de código.
Tercera etapa:
Necesitamos texturas:
Cube map
float valor_UV_yeso
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D yeso_difusion;
texture2D TextureMap_8636;
//----------------------------------
//----------------------------------
};
};
return Out;
}
{
pass light1
{
VertexShader = compile vs_1_1 v(lightPos[0]);
ZEnable = true;
CullMode = ccw;
ZWriteEnable = true;
DestBlend = One;
AlphaBlendEnable = false;
PixelShader = compile ps_2_0 f(lightCol[0]);
}
}
Las técnicas permiten albergar a más de un tipo de shader y aplicarlo a necesidad, por
ejemplo si tenemos un shader con 4 posibles técnicas podríamos designar cada una de
las técnicas individualmente, respetando los valores de coordenada UV de cada uno de
los elementos.
Técnica Vidrio Técnica Pintura Técnica Metal Técnica Yeso
/*============================================================================
============= vidrio TECHNIQUE =============
============================================================================*/
textureCUBE reflejo_ambiente;
Texture = <reflejo_ambiente>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
float valor_reflejo_ambiente
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 0.2;
float valor_UV_vidrio
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D vidrio_difusion;
sampler2D vidrio_difusionSampler = sampler_state
{
Texture = <vidrio_difusion>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
texture2D vidrio_normalmap;
//----------------------------------
//----------------------------------
};
};
return Out;
}
return Out;
}
pass light1
{
VertexShader = compile vs_1_1 vT1(lightPos[0]);
ZEnable = true;
CullMode = ccw;
AlphaBlendEnable = true;
ZWriteEnable = true;
SrcBlend = SrcAlpha;
DestBlend = One;
ZFunc = LessEqual;
PixelShader = compile ps_2_0 fT1(lightCol[0]);
}
/*============================================================================
============= pinturacorroida TECHNIQUE =============
============================================================================*/
texture2D pintura_difusion;
float valor_UV_pintura
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D pintura_normalmap;
};
};
return Out;
}
ZEnable = true;
CullMode = ccw;
ZWriteEnable = true;
DestBlend = One;
AlphaBlendEnable = false;
PixelShader = compile ps_2_0 fT2(lightCol[0]);
}
/*============================================================================
============= metal TECHNIQUE =============
============================================================================*/
float valor_UV_metal
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D metal_difusion;
texture2D metal_normalmap;
};
};
return Out;
}
/*============================================================================
============= yeso TECHNIQUE =============
============================================================================*/
float valor_UV_yeso
<
float UIMin = 0.0;
float UIMax = 10.0;
float UIStep = 0.1;
> = 1.0;
texture2D yeso_difusion;
texture2D TextureMap_8636;
MipFilter = LINEAR;
};
};
};
return Out;
}
{
pass light1
{
VertexShader = compile vs_1_1 vT4(lightPos[0]);
ZEnable = true;
CullMode = ccw;
ZWriteEnable = true;
DestBlend = One;
AlphaBlendEnable = false;
PixelShader = compile ps_2_0 fT4(lightCol[0]);
}
Dentro del shader podemos ver cada una de las técnicas resaltadas, estas pueden ser
intercambiadas dentro de virtools según la necesidad por medio de la lista de active technique.
Indice:
Shader FX.............................................................................................................................1
Método de uso de la aplicación Shader FX ..........................................................................2
y su implementación en Virtools ...........................................................................................2
Primera etapa: ......................................................................................................................2
Reconocimiento de la Interfaz y de las limitaciones de la versión educativa ....................2
Aplicaciones que emplean el formato fx y su relación con direct x, Cg, cgsl, hlsl ............3
Creación del primer shader básico ...................................................................................4
Uso de texturas: ................................................................................................................5
Manejo de coordenadas de textura:..................................................................................7
Revisión de compatibilidad entre los shaders generados y la aplicación Virtools. ........10
-Texturas de cada canal ..............................................................................................10
-Shader con formato fx ................................................................................................11
-Geometría de prueba dentro de virtools.....................................................................11
Refrencias: