Problema con imágenes .gim

Lugar donde se intentarán resolver problemas específicos
Responder
Avatar de Usuario
Drawde
Mensajes: 8
Registrado: 12 Ene 2012, 12:27

Problema con imágenes .gim

Mensaje por Drawde » 17 Ene 2012, 22:13

¡Buenas gente!, soy nuevo en esto y no se me da nada bien esto de postear...(como ya veréis a continuación).
Resulta y acontece que un amigo (Lureas) y yo queremos traducir el Mana Khemia: Student Alliance de PSP, por ahora estamos organizando un poco el tema ya que queremos saber que podemos traducir el juego entero, imágenes, vídeos...etc.
Nos hemos encontrado unos archivos .gim que son las imagenes de "Now Loading..." y fondos del juego...No somos romhackers ni nada por el estilo pero queremos aprender un poco del tema, asi que a la hora de editarlas e insertarlas nos encontramos con este problema:

[img]http://i210.photobucket.com/albums/bb20 ... Khemia.jpg[/img]

Hemos hecho mucha paranoia para que a la hora de editarla ocupara lo menos posible...Al final seguimos esta ayuda ... Como todas las anteriores terminó en fracaso y aquí estamos, a ver si podéis ayudarnos con esto.

Aquí dejo el archivo que queremos modificar para comprobar que podemos hacerlos todos.

Por cierto este proyecto lo comenzó Largeroliker pero debido a "X" motivos abandonó el proyecto, entonces nosotros lo vimos y decidimos traducirlo xD somos solo dos personas pero espero que mientras vaya avanzando el proyecto más gente quiera unirse a nosotros, para así hacer una buena traducción.

Un saludo!

Avatar de Usuario
sergioparidas
Mensajes: 174
Registrado: 30 Ene 2011, 04:04

Mensaje por sergioparidas » 18 Ene 2012, 03:42

Espero que puedan ayudaros por aquí, he visto vuestro trabajo con el kh y es un gran trabajo

Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5519
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 18 Ene 2012, 07:04

El problema es que no codificáis correctamente la imagen. Sé que había algún conversor, no el Gimconv ni el Gim2bmp, que son una porquería, que permitía transformar las imágenes, pero como nunca me interesó mucho el tema gráfico de la PSP/PS2 pasé del tema. Preguntad a Sky por si tiene algo.

¿Los GIM llevaban compresión? Es que creo recordar que no, aunque puedo estar equivocado, así que el fichero modificado debería ocupar exactamente lo mismo que el original.

Avatar de Usuario
Drawde
Mensajes: 8
Registrado: 12 Ene 2012, 12:27

Mensaje por Drawde » 18 Ene 2012, 09:20

No, el archivo no está comprimido (o almenos eso creo yo)

el link que dejé en post es como esta el archivo en el juego...Ya hablamos con Sky pero nos ha dicho lo mismo que tú, algo de unos algoritmos y no sé que cosas más pero el problema es que él ahora cobra por sus servicios y la verdad es que no pienso pagar un solo céntimo por algo en lo que yo no voy a ganar nada...

Así que esperaba que aquí me pudieran ayudar un poco con el tema.

Avatar de Usuario
SkyBladeCloud
Mensajes: 41
Registrado: 26 Ene 2011, 13:14
Ubicación: Sky´s Romhacking Nest

Mensaje por SkyBladeCloud » 18 Ene 2012, 10:26

ESE GIM está entrelazado (swizzled/twiddled, a veces le llaman de diferentes formas, recuerdas CUE las texturas del dawn of mana? pues eso...).

El caso es que algunos juegos no leen las imágenes de forma lineal, sino "a trozos" (más rápido), por lo tanto, los píxeles vienen descolocados en el fichero.

Cuando extraéis el GIM con cualquier conversor, éste detectará si la imagen está o no entrelaza, en cuyo caso, la colocará correctamente. Pero a la hora de recodificar, tenéis que hacer el proceso opuesto.
Al parecer el Mana Khemia siempre desentrelaza las imágenes, y como vuestro GIM no está entrelazado, el juego lo muestra todo descolocado.

La otra, es que según Lureas me comentó, estáis metiendo imágenes de color directo, mientras que las originales eran indexadas. En teoría eso debería dar igual, pero ninguna herramienta de las que he visto os entrelazará una imagen a color directo (más adelante os diré como hacerlo)

No conozco ningún conversor de GIM´s que valga la pena, y suelo programar alguno cada vez que me haga falta (hay casi tantos tipos de GIM, como juegos de PSP). Para entrelazar y desentrelazar, uso este par de métodos:

Código: Seleccionar todo

public static void Swizzle(ref byte[] Buf, int Pointer, int Width, int Height)
        {
            byte[] UnSwizzled = new byte[Buf.Length - Pointer];
            Array.Copy(Buf, Pointer, UnSwizzled, 0, UnSwizzled.Length);

            int rowblocks = (Width / 16);

            for &#40;int y = 0; y < Height; y++&#41;
            &#123;
                for &#40;int x = 0; x < Width; x++&#41;
                &#123;
                    int blockx = x / 16;
                    int blocky = y / 8;

                    int block_index = blockx + &#40;&#40;blocky&#41; * rowblocks&#41;;
                    int block_address = block_index * 16 * 8;

                    Buf&#91;Pointer + block_address + &#40;x - blockx * 16&#41; + &#40;&#40;y - blocky * 8&#41; * 16&#41;&#93; = UnSwizzled&#91;x + &#40;y * Width&#41;&#93;;
                &#125;
            &#125;
        &#125;

Código: Seleccionar todo

public static void UnSwizzle&#40;ref byte&#91;&#93; Buf, int Pointer, int Width, int Height&#41;
        &#123;
            byte&#91;&#93; Swizzled = new byte&#91;Buf.Length - Pointer&#93;;
            Array.Copy&#40;Buf, Pointer, Swizzled, 0, Swizzled.Length&#41;;

            int rowblocks = &#40;Width / 16&#41;;

            for &#40;int y = 0; y < Height; y++&#41;
            &#123;
                for &#40;int x = 0; x < Width; x++&#41;
                &#123;
                    int blockx = x / 16;
                    int blocky = y / 8;

                    int block_index   = blockx + &#40;blocky * rowblocks&#41;;
                    int block_address = block_index * 16 * 8;

                    Buf&#91;Pointer + x + &#40;y * Width&#41;&#93; = Swizzled&#91;block_address + &#40;x - blockx * 16&#41; + &#40;&#40;y - blocky * 8&#41; * 16&#41;&#93;;
                &#125;
            &#125;
        &#125;
Eso servirá para cualquier imagen 8bpp:

-Buf Es el archivo GIM, completo, en un array de bytes
-Pointer es el comienzo de los píxeles, en los GIM del mana khemia siempre es el mismo, creo que 128.
-Width y Height hablan por si mismo: ancho y alto de la imagen, en píxeles

-Cuando finalice la función, en Buf quedará el GIM (des)entrelazado

Para entrelazar imágenes de color directo, bastará con multiplicar el ancho por la profundidad de color y dividirlo entre 8 ( Height *= bpp/8 ) antes de invocar el método correspondiente (si lo pensáis, tiene su lógica).

Por otra parte, si queréis usar imágenes de 8 bits por píxels (si... indexadas...) tendreís que quantizarlas antes de convertirlas a GIM. Es decir, con 8 bits sólo podéis "referenciar" 2^8 = 256 colores; sin embargo, una imagen editada puede tener tantos colores como necesitéis. Esta parte es fácil, con una herramienta llamada "PNGNQ" podéis reducir la cantidad de colores usados a 265, incluyendo el canal alpha; de ese modo, al convertir a GIM no os saldrían archivos 4 veces más grandes.

Sobre la compresión, el GIM que adjuntas usa una compresión de imágenes llamada DXT1, para esto no tengo nada, pero con lo aquí dicho, podrías tranquilamente incluír imágenes descomprimidas, que el juego debería reconocerlas (al menos en teoría).

Y ya está, no hay nada más que decir sobre los GIM usados en MK:SA, si contáis con algún programador que controle más o menos de imágenes, ya os podría dar una herramienta, claro que de este foro tal vez CUE sea el único que os puedo ayudar, en cuanto a mi, no quiero meterme en más berenjenales.

Un saludo:

~Sky

Avatar de Usuario
gadesx
Administrador
Administrador
Mensajes: 1984
Registrado: 24 Ene 2011, 16:43
Ubicación: El puche
Contactar:

Mensaje por gadesx » 18 Ene 2012, 10:50

Si las imagenes las habeis editado en bmp, colgad alguna de las originales y las modificadas, y miro a ver como está la paleta de colores en ambos casos.

Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5519
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 18 Ene 2012, 10:56

Sí hay un conversor de GIM que hace prácticamente todo, en perfecto japonés, pues GIM es un formato de almacenamiento, no un formato gráfico. El problema es que algunos de los formatos se usan muy poco, por lo que muchos programas no son capaces de tratarlos. No recuerdo el nombre del programa pero sí sé que lo bajé de una página japonesa y que no tenía GIM en el nombre.

Recuerdo que en varios sitios está la estructura de los GIM, para que quien pueda/quiera saque la información del fichero. Con eso debería bastar para poder hacer todo. A mí no me liéis con los gráficos de consolas que no uso, que tengo por terminar mi B2B, tras casi dos años, y no veo el día de hacerlo, y es lo único que tengo pensado hacer para dibujitos e imágenes en plan general.

Para comprender un poco mejor cómo funciona el coñazo de las texturas, por si se pone alguien:
http://wiki.ps2dev.org/psp:ge_faq

Avatar de Usuario
Drawde
Mensajes: 8
Registrado: 12 Ene 2012, 12:27

Mensaje por Drawde » 18 Ene 2012, 11:36

Gracias Sky y CUE, a ver si nos podemos aclarar un poco con esta ayudita y seguir para adelante con esto. ;)

Gadesx aquí tienes lo que querías ver:

-Editado

-Original

Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5519
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 18 Ene 2012, 11:40

No es buena idea trabajar con BMP en este caso porque los GIM pueden llevar canal alfa (transparencia) y los bemepé no trabajan con ello.

Avatar de Usuario
Drawde
Mensajes: 8
Registrado: 12 Ene 2012, 12:27

Mensaje por Drawde » 18 Ene 2012, 11:45

Pues mi amigo también me estaba comentando que por este lado ya lo habíamos intentado y no resultó viable...

Avatar de Usuario
SkyBladeCloud
Mensajes: 41
Registrado: 26 Ene 2011, 13:14
Ubicación: Sky´s Romhacking Nest

Mensaje por SkyBladeCloud » 18 Ene 2012, 12:17

Pues mira... la compresión DXT me ha interesado bastante, era una de esas cosas que tenía pendiente hacer, pero que nunca me entraron las ganas. No tengo con qué hacer pruebas, pero toma este GIM editado. Pruébalo en el juego a ver que tal se ve:

http://www.mediafire.com/?l3p8mhkzqcm7lxo

En teoría, si todo va bien, debería verse así:

[img]http://img72.imageshack.us/img72/5091/20826614.png[/img]

He cambiado un par de parámetros (de ahí mi curiosidad por saber si cunciona).
A quien le interese más el sistema de compresión, un par de links:

http://www.fsdeveloper.com/wiki/index.p ... _explained
http://www.glassechidna.com.au/2009/dev ... mpression/

Avatar de Usuario
CUE
Administrador
Administrador
Mensajes: 5519
Registrado: 24 Ene 2011, 16:52

Mensaje por CUE » 18 Ene 2012, 12:42

Yo soy de los que piensan que la DXT acabará siendo un retroceso pues no se puede pretender mejorar los juegos, como es el caso, con más gráficos, más lucecitas y más colorines por una parte, y después pretender reducir la información con una compresión con pérdida de datos para que la GPU lo muestre todo más rápidamente, tratando las imágenes directamente. Es como si los gráficos de un juego en vez de ser RAW fuesen JPG, y quienes manejen muchas imágenes, por ejemplo, fotos, saben perfectamente cual es la diferencia. Lo que deben hacer es mejorar las placas gráficas, no ponernos inventos.

Avatar de Usuario
Drawde
Mensajes: 8
Registrado: 12 Ene 2012, 12:27

Mensaje por Drawde » 18 Ene 2012, 12:44

CUE estoy mirando el link que pusiste y la verdad es que me entero de poca cosa pero ahora cuando llegue a casa lo mirare bien y veré que puedo solucionar con la ayuda de San Google, gracias.

Sky como acabo de decir no estoy en casa y no puedo comprobarlo pero Lureas si que lo puede hacer y creo que ahora mismo lo esta mirando así que el te dará una respuesta pronto y gracias a ti también. (Más tarde me voy a mirar tus links para ver lo del formato .DXT)

Lureas
Mensajes: 3
Registrado: 14 Ene 2012, 17:23

Mensaje por Lureas » 18 Ene 2012, 13:10

Sky, estos son los resultados de tu conversión.



[img]http://i210.photobucket.com/albums/bb20 ... IMConv.jpg[/img]

Avatar de Usuario
Drawde
Mensajes: 8
Registrado: 12 Ene 2012, 12:27

Mensaje por Drawde » 18 Ene 2012, 13:33

Pues no veas que sonrisa me acaba de sacar eso :D a ver si nos metemos a estudiar los links y continuar con lo siguiente... Los vídeos!! xD

Responder