SOIL IS MY POWER!
I recently began watching Final Fantasy Unlimited again, I had to use Demonoid since iTunes doesn't yet sell it, and I refuse to buy dvds, they just pile up and when you move, most of the baggage is just moving them with you, we're in the age of Terabyte hard drives, Gigabyte Micro-SD cards, and we're using DVDs for storing video media, waste of space in my opinion.
Blu-ray isn't so bad, but why bother with spinning media at all anymore, just stick more ram in the machine and buffer the data if you can't read that fast, you have to wait a few seconds just for booting up a dvd, part of which is just loading them damn piracy warnings. Why the hell do they stick them on the actual dvd, you were honest enough to buy the DVD, and they're still telling you off.
No wonder the RIAA go after people for downloading music, they don't lose money from people not buying cds, they lose money on the campaigns and advertisements they put out to the people they do, and need to sue the pirateers to fund it.
Anyways, my point was, I love Final Fantasy Unlimited, I don't usually say this, but the dubbed version is so much better than the japanese version. The voices just don't match the characters in the original Japanese.
Escape from LA
As you know I only update my blog once a month, and then backtrack the month, but the time inbetween I do find out some really weird stats that people seem to find my site by googling. One of them was Lincoln somehow?! Picture related.
Apparently there is suppose to be an economic crisis at the moment, but personally I don't see it. Maybe that is why it doesn't really effect me, I don't have a mortgage or anything, but like with most things of no real value, money is just a belief system, if you believe it has value in a majority, then it does.
Maybe this suppose'd economic crisis is a plan by some devious banker to make more money. Or maybe th government needs more money to fund the international space station. Why are we even bothering with that thing, personally I'd prefer a mothership, of all things you want to build in space, that is what you want. If your planet goes nuclear, or alien invaders, or just good old asteroid, a mothership will save the day. Plus it could be used as a generation ship and go seek out other habitable planets to colonize.
Damn religous folks holding us back, if it wasn't for the Dark Ages we could have at least a Moon Base by now, hell, they're holding back genetic and stem cell research. Give it another 100 years and they'll find a way for it to be okay, but thats 100 years of advancement lost. My main annoyance about this is I want to be able to see space battles within my life time, or human cloning.
Maya: Totus Village
With my work on getting even better frame rates in my engine, I've began instancing objects, z-ordering, scenegraphing, etc. And to make the most of this, I've begun to learn to use Maya with some helpful tips from the artists and work. So I've started to improve the quality of my original Totus Village model I made using Milkshape3D.
As you can see I've added doorways now, and well as roofs (although some are still not quite complete roofs yet). There is a new terrain being work on, that will hopefully be better for area Totus village is in (between two mountain ranges, with a forest to the south and plains to the north).
I'm currently decided what to do with the walls, its hard to tell from the original SNES graphics what they were trying to do with the walls. On the one hand they appear to be supported by beams, on the other those shadows on the beams could just the be the wall on the upper half. I've began working on a tool that takes the COLLADA file and converts it to my geometry format, as well as some geometry optimisations through Tootle.
Grandia II
I got a little nostalgic the other day and decided to install and play Grandia II. Part way through the game, I noticed Millenia was a member of /b/. I love the way they integrated videos for magic spells rather than particle effects.
Though they're testing can't have been good, since most of the spells have a huge delay at the end that makes casting the most powerful ones almost not worth it. Sometimes Ryudo with Warp Shoes + the Granisabre and a +2 combo item is much better (apart from if you have enough SP for Sky Dragon Slash).
I do love the graphics though, even though the HUD is very basic.
AMD Tootle
Recently when trying to improve geometry, I got told about a tool from AMD that optimizes a triangle mesh. The tool is called Tootle, and it helps reduce pixel overdraw and vertex caching. Unfortunately it only works on Windows and Linux, no MacOSX support yet :'(.
Athena: Textures
Another side project I've been working on to go with Athena is a image convertor for storing my textures in a binary format. Originally I was just using FreeImage to load up an image like bitmap, jpeg or png.
Since all my images were to be in the RGBA format in the end, this obviously had it's drawbacks for being slightly slow and using up extra ram when converting an image that were not layed out like this. So I rewrote my texture class to support different image formats, but apparently I didn't understand glTexImage2D() as much as I thought I did.
Coming from a DirectX background, I thought the data you pass to glTexImage2D() would be the data going to the VRAM, but instead the data being passed gets converted to whatever you specify as the internalformat.
Type
So first of all the type parameter, this tells the glTexImage2D() what the type of variable each component in your data is using. So if you specify GL_FLOAT, it will treat each component like it is a floating point colour (0.0 to 1.0), and if you specify GL_UNSIGNED_BYTE, each component will be treated like an unsigned byte colour (0 to 255).
Format
The the format parameter, this tells the glTexImage2D() how many components are in the data as well as how to treat that data. It'll probably be easy to explain for each. I'll ignore GL_COLOR_INDEX since I haven't used it yet.
GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA
These are all made up of one component, so if you have a 10x10 image, it will only have 10x10 components. When specifying an internalformat of RGBA, it will only copy the data to the colour component being specified.
GL_RED( x ) = RGBA( x, 0, 0, 1 )
GL_GREEN( x ) = RGBA( 0, x, 0, 1 )
GL_BLUE( x ) = RGBA( 0, 0, x, 1 )
GL_ALPHA( x ) = RGBA( 0, 0, 0, x )
There is an internalformat for GL_ALPHA that will do the formatting automatically whenever the texture is used, so there is no need to specify an GL_RGB/GL_RGBA for the internalformat.
Fairly simple, now for the other colours.
GL_RGB, GL_RGBA
These are fairly straight forward, they are three and four components respectively, and when converting to an internalformat of GL_RGBA they copy component for component. If an alpha component isn't a part of the original data and is required by the internalformat, it is automatically set to fully opaque.
GL_RGB( x, y, z ) = RGBA( x, y, z, 1 )
GL_RGBA( x, y, z, w ) = RGBA( x, y, z, w )
Luminance works slightly differently.
GL_LUMINANCE
Luminance is a single component, and can be used for all internal formats as far as I know. It is treated like its single component represents the red, green and blue channels, so when used with an internalformat of GL_RGBA, you get luminance of the three colour components and an opaque alpha. There is no need for this however, since there is an internalformat of GL_LUMINANCE which will do exactly the same when the texture is being used.
GL_LUMINANCE( x ) = RGBA( x, x, x, 1 )
If the internalformat is GL_INTENSITY is used however, the data is a one for one copy, only when the texture is used, it is treated like the data is copied to all four components.
GL_INTENSITY( x ) = RGBA( x, x, x, x )
And finally Luminance Alpha.
GL_LUMINANCE_ALPHA
Luminance Alpha is similar to GL_LUMINANCE, only when the internalformat is GL_RGBA, it copies the luminance to the three colour components, and the alpha to the alpha component.
GL_LUMINANCE_ALPHA( x, y ) = RGBA( x, x, x, y )
Again, there is already an internalformat of GL_LUMINANCE_ALPHA, so there is no need to use GL_RGBA.
InternalFormat
The internalformat parameter just defines how you would like the data you are passing to be stored in VRAM. It does not have to match the format being passed in, just be compatible from I can tell.
So if you pass in a luminance of GL_UNSIGNED_BYTE, and request an internalformat of GL_LUMINANCE4, it will scale your luminance down by half and pack them into 4 bits per component.
Reducing the data size in VRAM increases speed and space usage, but has the drawback of causing banding since there is less possible colour combinations.
Another thing about the internalformat is, like I said, it is a request, they driver does not have to match it, but the data will be treated the same as the request.

