Jump to content
  • Advertisement
  • entries
  • comments
  • views


Sign in to follow this  


A couple entries ago, I talked briefly about my new method of doing props for AE2. Given the fundamental 3D nature of the new engine, I have a few more choices than simple texture-mapped billboards for representing objects and level props. Bog-standard billboards have a tendency to behave strangely in a 3D environment, especially if the prop object they represent is large or complicated. Lighting is odd, intersections (usually inadvertent and sometimes unavoidable) with other objects betray the fundamental 'plane-ness' of the object, etc... For this new iteration of the engine, I opted to continue with props pre-rendered to image files, rather than fully 3D rendered objects, in order to preserve the potential for very high levels of detail, and to maintain the 'feel' of the game being a more traditional style.

To get around the weirdness of billboards, I elected to go with a system of what I call 'fakes' or 'impostors' for some reason. I've heard the term 'impostor' used before in regards to graphics programming, but I scarcely remember the context. It may have been an alternate term for billboards. At any rate, in AE2 an impostor is simply a very low detailed 3D model upon which is mapped the pre-rendered image of the object it represents. The model is constructed to roughly conform to the geometry of the object, and is textured so that when it is rendered in-game using AE2's orthographic projection, it appears identical to what it would have appeared had it been done with a standard billboard, but with the advantages of slightly more realistic overlap/intersection with other objects, and more elaborate lighting. As a very crude example, here is a stairway. (VERY crude; I still haven't gotten around to unpacking crap from the old Golem data archives, so I'm still using 5-minute slapped-together artwork).

The stair was modelled and rendered to a TGA in Blender:

(The screenshots are scaled down from 1024x768, hence the difference in size between this render and the screenshots.)

I then subsequently mapped it onto a simple 3 sided impostor like this:

The texturing was done so that when viewed from the angle of the game's camera, there would be no distortion or stretching of any portion of the texture, regardless of the underlying impostor geometry. The impostor was laid out on a representation of the level grid to align the vertices with level grid points, since these props extract their lighting information directly from the level grid. Thus, the lighting I can achieve is potentially more flexible than a simple billboard, with only a minor increase in complexity of the system. This is a simple example only; the advantages are better illustrated when larger prop objects are represented.

And, since the fundamental idea of impostors is fully based in 3D concepts, it would be just as simple to implement fully 3D props as well as these 'faked' ones--though I do not plan to make much use of such. The system is founded in my vertex-animated morphing mesh code, so animated props are simple to do. However, for the most part, animated props will likely be implemented using texture and/or UV animation, rather than vertex animation.

Attended another meeting of the IGDA last night. Good fun. I need to get off my ass and attend those more regularly. There are some good people that attend those meetings, lots of creative types and smart folks. We had a motivational pep-talk by one of the guys from Flashbang Studios that might as well have been aimed directly at me, being the lazy and unmotivated slacker that I am.
Sign in to follow this  


Recommended Comments

I think you must be an imposter! Who is this well organized new VertexNormal? [grin]

Looks great!

Share this comment

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!