En OpenGL con shadow mapping, texturas, etc... . Es decir. La herramienta la tengo pero quiero saber q materiales , texturas, etc ... aplicar asi como si tengo q usar Fresnel, etc
que me haspen si no falta un verbo en esa frase
Cita de: tamatque me haspen si no falta un verbo en esa frase
(http://crazy-jokes.com/pictures/beaver2.gif)
yo creo que se le entiende muy bien, pregunta que efectos hay que aplicar para que quede bien bonito un modelo de un coche (goraud, shaders, estas cosicas...)
Cita de: tamatque me haspen si no falta un verbo en esa frase
Pues le falta una coma o punto a gusto del consumidor, es cierto. Problemas de escribir rápido. Igual que a tu aspar le sobra una h.
Yo creo que un cube environment mapping mezclado con un color (el de la pintura del coche) o blanco/gris para las partes metálicas es necesario para que parezca real, se puede prescindir de iluminación especular si se incluyen los brillos en la propia textura del mapa, y queda mejor incluso con pocos polígonos.
Opino lo mismo que marcode, con ambient, difusse (por pixel) y luego un poco de env map con una textura con reflejos puede quedar muy chulo. Tb puedes meterle unos glow, fake-fresnel en el env y AO. Aunque ahí ya te puedes complicar todo lo que quieras, meterle sombras, detalles en cada una de las partes, reflejos de los cristales y espejos, etc, etc.
La siguiente imagen la hice en 5 minutos y no quedó mal del todo:
(http://farm1.static.flickr.com/62/222296882_159c040bd6.jpg)
Otra con lo mismo:
(http://farm1.static.flickr.com/57/178006979_cc6dd1e612.jpg)
Tiene AO por vértice (no son LM), Envmap simple (no cubemap) con una textura perlin noise con pocas octavas.
Ya nos pondrás tus avances :)
Joer. Me lo explique. :)))). A ver. Como has hecho esas capturas. Es exactamente lo q necesito. Q texturas has usado???. Qué es esto???
"glow, fake-fresnel en el env y AO"
Como haces el glow con OpenGl??? y como haces un fake del efecto Fresnel? Qué quieres decir con AO???
Cita de: marcodeYo creo que un cube environment mapping mezclado con un color (el de la pintura del coche) o blanco/gris para las partes metálicas es necesario para que parezca real, se puede prescindir de iluminación especular si se incluyen los brillos en la propia textura del mapa, y queda mejor incluso con pocos polígonos.
Esto ya lo he usado pero no me termina de convencer. Me falta el efecto de las capturas de pantalla de arriba.
Cita de: FranCita de: marcodeYo creo que un cube environment mapping mezclado con un color (el de la pintura del coche) o blanco/gris para las partes metálicas es necesario para que parezca real, se puede prescindir de iluminación especular si se incluyen los brillos en la propia textura del mapa, y queda mejor incluso con pocos polígonos.
Esto ya lo he usado pero no me termina de convencer. Me falta el efecto de las capturas de pantalla de arriba.
¿a qué efecto te refieres?.
Cita de: marcodeCita de: FranCita de: marcodeYo creo que un cube environment mapping mezclado con un color (el de la pintura del coche) o blanco/gris para las partes metálicas es necesario para que parezca real, se puede prescindir de iluminación especular si se incluyen los brillos en la propia textura del mapa, y queda mejor incluso con pocos polígonos.
Esto ya lo he usado pero no me termina de convencer. Me falta el efecto de las capturas de pantalla de arriba.
¿a qué efecto te refieres?.
A esa apariencia de metal mica tan que me encanta. Yo de efectos y diseño->cero patatero. Por ejemplo en los cubos de colores ese efecto. En el color crema el efecto ese mezclado con que la parte de arriba esté tan metalizada y los laterales no. No sé. No sé conseguir eso con OpenGL. Sé q es a base de iluminación y texturas, pero no sé. Lo q es reflejos del entorno y todo eso pues está conseguido. Pero eso, ese efecto exactamente no sé como sacarl. Por ejemplo. ¿En qué se aplica el Perlin Noise ahi? En los cubos?? No sé me hubiera ocurrido nunca, pero es q además ni siquiera sé donde está usado en los cubos ni como
Imagino que te referirás a algo así, aunque aquí parece que está demasiado exagerado el efecto:
(http://www.ixbt.com/video2/images/r9700-6/car-2.jpg)
El propio entorno capturado en la textura esta mezclado de algún modo con el color del coche, practicamente no tiene nada más, porque la iluminación que recibe está ya determinada en la propia textura. Pero yo no sé exactamente el tipo de mezcla que lleva, porque si sumas a un color los de la textura queda muy claro, y si lo modulas queda muy oscuro.
Yo por lo que he probado lo mejor es mezclar previamente en la propia textura el color.
Entonces, sería de este modo.
1. En el backbuffer renderizas los 6 planos del entorno desde el centro del coche, con el fov de la camara a 45º (esto no sé si lo haces así).
2. Dibujas un quad encima de cada render, de un color donde está determinado el color del coche y la cantidad de alfa, mezclado con la combinación habitual SRC_ALPHA - ONE_MINUS_SRC_ALPHA.
3. capturas el render en la textura correspondiente.
Si ya tienes precalculada la textura, puedes ahorrarte todo eso y mezclarla con el color del coche desde alguna aplicación.
4. dibujas el coche activando la textura cúbica y usando mapeado GL_REFLECTION_MAP. Le puedes añadir también iluminación sin ningún problema con un material de color blanco o gris.
Prueba a ver cómo queda así y nos lo enseñas.
No se ve el gráfico. Pero algo similar a lo que describes ya lo hago. Puedes enlazarlo para poder verlo ???. Ya lo he visto. Ese es un ejemplo de ATI hecho con shaders. De todos modos, lo que dices lo he probado excepto que no uso cube map. Los reflejos como bien dices, a base de mezclar colores y el entorno se consiguen. Pero lo q no me sale es ese efecto de pintura mica que ese coche tiene y los cubos de Ethernet (q a ver si me dice con que lo hace) tienen. De todos modos mañana colgaré una demo de lo q llevo
vertex shader
varying vec3 Normal;
varying vec3 EyeDir;
varying vec4 vcolor;
varying float LightIntensity;
uniform vec3 LightPos;
attribute float ao;
void main(void)
{
gl_Position = ftransform();
Normal = normalize(gl_NormalMatrix * gl_Normal);
vec4 pos = gl_ModelViewMatrix * gl_Vertex;
EyeDir = pos.xyz;
vcolor = ao*gl_Color;
LightIntensity = max(dot(normalize(gl_LightSource[0].position.xyz - EyeDir), Normal), 0.0);
}
pixel shader
float schlickapprox(in float cosphi,in float kr)
{
float o = (kr - 1.0)/(kr+1.0);
o *= o;
return o + (1.0-o)*pow(1.0-cosphi, 2.0);
}
const vec3 Xunitvec = vec3 (1.0, 0.0, 0.0);
const vec3 Yunitvec = vec3 (0.0, 1.0, 0.0);
/*const vec3 BaseColor = vec3 (228.0/255.0,208.0/255.0,158.0/255.0);*/
/*const vec3 BaseColor = vec3 (0.4,0.4,0.4);*/
const float MixRatio = 0.7;
uniform sampler2D tex1;
varying vec4 vcolor;
varying vec3 Normal;
varying vec3 EyeDir;
varying float LightIntensity;
void main (void)
{
float fres;
vec3 ed,n;
vec3 BaseColor;
vec3 reflectDir = reflect(EyeDir, Normal);
vec2 index;
BaseColor[0] = vcolor[0];
BaseColor[1] = vcolor[1];
BaseColor[2] = vcolor[2];
index.y = dot(normalize(reflectDir), Yunitvec);
reflectDir.y = 0.0;
index.x = dot(normalize(reflectDir), Xunitvec) * 0.5;
if (reflectDir.z >= 0.0)
index = (index + 1.0) * 0.5;
else
{
index.t = (index.t + 1.0) * 0.5;
index.s = (-index.s) * 0.5 + 1.0;
}
vec3 envColor = vec3 (texture2D(tex1, index));
ed = normalize(EyeDir);
n = Normal; /*normalize(Normal);*/
fres = schlickapprox(dot(-ed,n),1.0);
/*envColor = mix(envColor, BaseColor, MixRatio);*/
/*envColor = mix(BaseColor*LightIntensity, fres*envColor, MixRatio);*/
envColor = BaseColor*LightIntensity + fres*envColor;
gl_FragColor = vec4 (envColor, 1.0);
}
La textura de envmap está generada proceduralemnte así:
Esto por cada pixel (xx,yy) coordenadas y c[] es el color de salida.
float mult = 7;
float xx = mult*float(s)/256.0;
float yy = mult*float(t)/256.0;
float n3 = TilePerlinNoise2D(xx,yy,2,mult,2);
//n3 = n3*n3;
n3 = smoothstep(-0.2,0.7,n3);
c = RGBA(255,255,255)*n3;
c[3] = n3*255;
Genera lo siguiente:
(http://lh4.google.es/qualopec/Rp_jJTrbi6I/AAAAAAAAAJM/hyr7BRNV5TQ/s400/Test7.jpg)
Vale. El vertex shader lo entiendo. Cuando no usaba OpenGL ese truco o usaba en el
render soft q tenia pero el efecto no era el q deseo. Es multiplicar escalarmente
la normal en cada punto por el vector formado entre el viewer y ese punto. Por cierto
No entiendo de donde sacas ao, aunque tb será xq no he visto nunca shaders.
El de pixel es lo de Fresnel.
La lástima de esto es que si la tarjeta no tiene shaders, no se puede hacer.
Lo q me tiene sorprendido es q esta textura consiga ese resultado. Lo probaré.
Gracias.
ao es el factor de ambient oclusion por vértice que en pocas palabras es un valor de 0.0 a 1.0 que indica cuanta luz no le llega por "culpa" de los demás objetos de la pantalla. Ese parámetro lo precalculo anteriormente.
Luego lo de la textura no tiene nada, hubiera funciona bien con cualquier otra con blancos y negros.