Pues estas útimas semanas he estado desarrollando un proyectito que tenía detenido por cuestiones de desempeño del software que estaba utilizando, pero parece que al fin ya me encontré con una versión estable que se comporta tan bien como una version anterior ( en la que inicié el desarrollo ) pero con las ventajas que ofrece esta nueva versión. Al parecer según como lo leí y pude corroborar, la versión de Blender 2.44 es tan estable con el motor de gráficos como la antígua 2.25 :) .

Una de las cosas que estoy haciendo, es un “port” de la antígua versión a la 2.44, cosa que no me ha resultado del todo fácil ya que no hay mucha compatibilidad y hay muchos cuelgues, se tienen que reprogramar algunas cosas y otras de plano hacerlas desde el inicio, y aunque aun suena algo ironico esto ultimo es una ventaja pues en otras versiones simplemente no funcionaba por generarse tantos errores.

Por ahora tengo resueltos los problemas que tenia con el personaje principal, ya no traspasa, no sale volando de la nada, no baja el framerate de repente.. ya no hace cosas raras como antes, ahora lo que me esta costando estas ultimas semanas es analizar los scripts para incorporar el uso de mapas de iluminacion (gi maps o light maps) y por el momento parece que ya va quedando, por aquí algo del fragment shader:

FragmentShader = “”"
varying vec4 vcol;
varying vec3 lvec,vvec,hvec;

uniform sampler2D color;
uniform sampler2D bump;
uniform sampler2D gi;

uniform sampler2D h;

void main() {

vec2 texUV, srcUV = gl_TexCoord[1].xy;
vec2 texUV2=gl_TexCoord[2].xy;
float height = texture2D(h, srcUV).r;
float v = height * .04 – 0.01;
vec3 vv = normalize(vvec);
texUV = srcUV + (vv.xy * v);

vec4 diffuse_color = vcol*gl_LightSource[0].diffuse;
vec4 specular_color = gl_FrontMaterial.specular;
vec4 colormap = texture2D(color, texUV);
vec4 gimap = texture2D(gi,texUV2);
vec3 lv = normalize(lvec);
vec3 nv = normalize(2.0*texture2D(bump, texUV).xyz-1.0);

float diff = max(dot(lv, nv), 0.0);
float spec = pow(max(dot(reflect(-vv, nv), lv),0.0), gl_FrontMaterial.shininess);

vec4 diff_pass = colormap*(diff*diffuse_color);
vec4 spec_pass = spec*specular_color*colormap.a*colormap.rgba;
vec4 gi_pass = colormap*specular_color*gimap;
gl_FragColor = (vec4(0.1,0.1,0.1,1.0) + diff_pass + spec_pass + gi_pass);
}

“”"

def MainLoop ():

for obj in ShaderObjects:

mesh_index = 0
mesh = obj.getMesh(mesh_index)

while mesh != None:

for mat in mesh.materials:

# regular TexFace materials do NOT have this function
if not hasattr(mat, “getMaterialIndex”):
return

mat_index = mat.getMaterialIndex()

# find an index
found = 0
for i in range(len(MaterialIndexList)):
if mat_index == MaterialIndexList[i]:
found=1
break
if not found: continue

shader = mat.getShader()
if shader != None:
if not shader.isValid():
shader.setSource(VertexShader, FragmentShader,1)

shader.setAttrib(g.SHD_TANGENT)
shader.setUniformDef(‘mvi’, g.MODELVIEWMATRIX_INVERSE)
shader.setSampler(‘color’, 0)
shader.setSampler(‘bump’, 1)
shader.setSampler(‘gi’,2)
shader.setSampler(‘h’, 0)
mesh_index += 1
mesh = obj.getMesh(mesh_index)

Aclaro que de GLSL se muy poco, cási nada diría yo pero leyendo algunos tutoriales y viendo otros scripts, y tratando de encontrarle algo de lógica al asunto he tenido algo de suerte y algunas cosas han resultado después de varias horas de estar sentado averiguando pero hasta el momento no tengo exactamente lo que necesito y espero poder tenerlo listo para poder continuar con otras cosas, porque aun falta mucho :P
Regresando al script anterior, el problema con este es que al parecer no me respeta la asignacion de UVs que tengo para el mapa de iluminacion..

Samplers:
uniform sampler2D color;
uniform sampler2D bump;
uniform sampler2D gi;

vec2 texUV, srcUV = gl_TexCoord[1].xy;
vec2 texUV2=gl_TexCoord[2].xy;

texUV y texUV2 son los diferentes canales de textura segun he visto cuando compila, el primero para el mapa de color y para el normal map, el segundo solamente para el light map.

vec4 colormap = texture2D(color, texUV);
vec4 gimap = texture2D(gi,texUV2);

Se asigna a la variable de punto flotante con sus respectivos canales de UVs y samplers…

vec4 gi_pass = colormap*gimap;

Y multiplico el mapa de color por el mapa de iluminación pero por alguna razon no esta funcionando bien un canal UVs y la carga de la imagen 0 (colormap, aunque si se ve cuando compilo :S) , espero esta noche corregirlo y terminarlo y despues de un rato más de desarrollo espero poner algunas capturas de pantalla por aqui ;)

Hora de trabajar..

Rafa, aguántame con la música! :P

Related Posts:

  • No Related Posts
 

6 Responses to Desarrollando, encontrando fallas, modificando shaders y estirando el tiempo…

  1. Rafeo says:

    No llego a neófito de GLSL :O. Me alegra que sea estable esta versión de Blender en los videojuegos :D .
    Hot cakes, take your time… ya te tocará esperarme :p .

    ReplyReply
  2. mataii says:

    Jaja…. por eso no me quiero tardar demasiado, porque la fecha de entrega se viene encima :S, espero no demorar mas :P

    Salutes ;)

    ReplyReply
  3. mataii says:

    ?? jeje :P

    ReplyReply
  4. ozipi says:

    }:D ese omar un gears o q miedo jajajja

    ReplyReply
  5. Omar says:

    Jajaja ese ozipi on tabas! nomas te desapareciste(s) ya tienes micro?,,, por el momento ando sin xbox, pero espero en un par de meses ya este de regreso :)

    ReplyReply

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



Get Adobe Flash player