December 16, 2010

Christmas drawing near

I've been working on school projects and AGE for a quite a while now. School projects are nearing completion, where AGE isn't even near.

I will now succumb to Christmas sleep and will return next year.

- - -

December 2, 2010

Working on Boney Milestone

I've been very busy doing schoolwork and this. I've been working on primarily bones system, how to read them and how to implement them using IK and FK. I also have premature support for particles.

I will later on add shadow mapping and other fancy stuff.

I'm very sorry for the lack of updates. I will try to be more active and post more about the progress, but because of school and personal life I haven't made too much progress, even though AGE has most priority.

November 9, 2010

Milestone reached: now in HD(R)

Yes, I know it's a bad pun.

But seriously, I've been sick last week so I couldn't post stuff. I'm done with post processing and decided that I'll work good shaders before posting a shot.

I render to 16-bit floating point scene and then go through high pass, blur pass and tone mapping pass. To those who don't know what that means, it's the basic guideline of how you create HDR scenes. In reality, I'd need .hdr backdrops to make it stand out even more, but I did what I could with zero imagination and mediocore GLSL knowledge.

Currently implemented features:

  • Scenegraph GameObject/Component system
  • Configuration files (config.ini)
  • Meshes (all possible filetypes you can imagine, huge thanks to Assimp people)
  • Cameras
  • File management system
  • Materials
  • Textures
  • Scripting (LUA)
  • Shaders (GLSL)
  • Post-Processing
 API's used:
  • OpenGL®
  • GLEW
  • GLFW
  • Assimp
  • FreeImage
  • SWIG 
Picture time! (Yes, finally)
Bloomy dwarf. The exposure is a bit overkill on purpose. The FPS (ranging between 95 and 120) is low because I don't like optimizing code before it works, and then I forget to do so (also I work on my laptop, but it's reasonably powerful). It's a prototype engine anyways, so I don't put stress in optimizing.

I'm currently working on better way to make use of HDR rendering capabilities.

October 31, 2010

Miles T, One Reached.

Sorry for lack of updates, but I'm not sure if updating about "I'm having terrible time with LUA" is good advertisement. Statistical information is always fun though:

  • Cups o' coffee consumed: 26
  • Lines of code added: 812 (of which LUA script lines 76)
  • Days past deadline: 3
  • Nightmares: 0
  • Origamis done while thinking what's wrong: 14
  • Days spent learning the script language itself: 1

Anyways, scripting, done in LUA, is now fully implemented. All features (mostly) that any user should ever need to touch is enabled. Thanks to SWIG. Now I'll implement shader-based material pipeline and post processing.


Currently implemented features:
  • Scenegraph GameObject/Component system
  • Configuration files (config.ini)
  • Meshes (all possible filetypes you can imagine, huge thanks to Assimp people)
  • Cameras
  • File management system
  • Materials
  • Textures
  • Scripting (LUA)
 API's used:
  • OpenGL®
  • GLEW
  • GLFW
  • Assimp
  • FreeImage
  • SWIG
Sorry, no pictures, you have to wait until I finish shaders and post-processing.

I have never before written a single line of LUA until now.

October 21, 2010

Third Milestone

What!? Already!? Nothing much to tell here though.

Anyways, as I mentioned before, the materials are loaded directly when loading the mesh. As I do this engine with minimum amount general purpose stuff, I have set purpose for each texture loaded, I support following types of textures:
  • Diffuse
  • Specular
  • Ambient
  • Normal map
  • Lightmap
  • Heightmap
For now AGE renders through fixed function pipeline, but I will, however, use shaders later on.

Currently implemented features:

  • Scenegraph GameObject/Component system
  • Configuration files (config.ini)
  • Meshes (all possible filetypes you can imagine, huge thanks to Assimp people)
  • Cameras
  • File management system
  • Materials
  • Textures
  • (Cache, partially.)
 API's used:
  • OpenGL®
  • GLEW
  • GLFW
  • Assimp
  • FreeImage
Anyways! Screenshot tiem!

I add lighting later. (Models are courtesy of Assimp test models.)

I'm reporting also the fact that I added alpha blending as an extra. Honestly I didn't even remember such thing. 

October 20, 2010

Second milestone revisited

Alright, the bug is fixed. Everything is coming along smoothly. Next up is materials. Luckily they are so close in terms of integration to the meshes (they are loaded at the same time as I load up the mesh) that it shouldn't take too long. Which means it'll take me at least 3 weeks because of some stupid bug.

Kidding aside, currently implemented features:
  • Scenegraph GameObject/Component system
  • Configuration files (config.ini)
  • Meshes (all possible filetypes you can imagine, huge thanks to Assimp people)
  • Cameras
  • File management system
  • (Cache, partially.)
 API's used:
  • OpenGL®
  • GLEW
  • GLFW
  • Assimp
  • FreeImage (just some helper functions for now)
A Screenshot!? NO WAI

What's this Pokémon model!? (Models in this image are courtesy of Assimp test models)

I'm still awesome and I've used the same maths library almost unchanged for over a year.

October 19, 2010

Second milestone

It seems the gods of all sense has forsaken me.

Apparently, loading three 4mb models imported to the engine takes almost a gigabyte of memory. Hmm... I think there's a problem.

Anyways, I've been busy working on this thing, and I'll be sure to get you pictures this weekend. I'll try to concentrate all my willpower not to post anything with spheres.

'G' in AGE means both Game and Graphics. I use Graphics more often just for the sake of clarity.

October 14, 2010

First milestone reached.

Hey!

As stated before, I'll be updating weekly, if not more often. More exactly, when I get a milestone done. I have my milestones in order from very beginning to the end. Meaning I write the code from scratch, sort of.

Current milestone was to get the Object/Component base up and working, but it also contained filesystem, renderer stuff, modifications to maths library, a lot of new enums and so on. You get the idea. That's done now, and I can finally start adding additively additive additions. Called features.

I'm reporting here also the fact that I'm awesome.

October 9, 2010

Project AGE officially starting at 11.10.2010

(It's dd.mm.yyyy format, get used to it.)

Official project design and synopsis documents created and have been posted for verification. The AGE is getting huge jump in terms of dedication from now to winter. My aims are high, as I have lots of usable code to jump start it.  Unofficially I have stuff done already, but let's not tell that to everyone.

I will report here weekly, if not more often, about the progress, as from now on AGE will be my second to top priority project. The other one is two school projects, but their dedication is limited to my time in school. This one isn't.

As a little hint what the end result will include, here's some API's I'll be using:
  • OpenGL®
  • OpenAL
  • Bullet
  • AssImp
  • XInput (Windows-only)

September 23, 2010

News! AGE!

Hey,

AGE's rewrite (of a rewrite of a rewrite) is coming on nicely, I can't say sure when I get it working enough to get you screenshots, but fear not, it's going to be amazing. Or not.

I'm moving on fully on GameObject-Component architecture and I'll use scenegraph as rendering method. This allows me to develop and implement features on the go, without extending or modifying existing classes too much.

AGEngine can be considered multiplatform in all aspects except controllers as XInput is intefiering with it. Linux and Mac versions just don't support PSx/Xbox-type controllers (as GLFW's input system does not understand POV or triggers too well and well, XInput).

August 7, 2010

Back from Kilke

I've been away for two weeks, as I was attending the VI Finnjamboree Kilke. Because of it another delay arose.

Now I'm home again and I can work almost full time with my projects, with biggest priority put on AGE. I hope I can get you guys something in near days!

July 20, 2010

UPDATE! OMG.

Hai,

First things first: no screenshots yet nor big updates to engine, except the following:

File formats
----
I'm using .ini configurations file, .py scripting and will also include support to many formats, including Collada (.dae), 3DS Max (.3ds), Wavefront Object (.obj), LightWave (.lwo), TrueSpace (.cob/.scn) and (for 3dgs users) MDL 7 (.mdl) and Heightmaps (.hmp) plus many other ones. I will also support Blender format through custom exporting to models and PAKs (yes, the importer is working).

Graphics
----
I will use a semiprogrammable shader pipeline, which means you can either tap up shading features and materials or you can use custom .frag / .vert files. Please note that using custom files will cause loss of some features. The engine used shaders are named like "bloom.age.frag" "bloom.age.vert", so you can directly modify the native features, this isn't recommended though.

Other
---
I haven't thought about physics or audio yet, but will probably use Bullet and OpenAL for them. Also support for Linux/OS-X is still not quaranteed (you will lose at least support for XInput controllers, though I believe there's a workaround in other OS's.)

Anyways, I will update later with my progress on getting you a picture time.

June 27, 2010

Delayed, again.

Currently, there are two reasons for no updates lately.

First one is that I'm doing some other stuff (some that give me cash, others don't), which consume my time and dedication away from AGE.

The other one is that I noticed most of the bugs in my engine are caused by old protocode, that is everywhere. I have no other choice than to rewrite most of the code. This gives me also an opportunity to remodel my object and data handling pipeline to fit my todo-needs. On the other hand, it takes time.

Also, irc channel, BAM. #agengine @ irc.FreeNode.net

June 23, 2010

GRAAH

PAK importer is almost done, just one or two bugs left to solve. Also as midsummer coming around, I probably won't update this weekend.

Damn sorry that I can't post anything cool as of yet.

June 6, 2010

Out of town

I'll be out of town (read: in military) without access to the internets. I will update as soon as I a) get back b) solve the bugs out of the importer.

Sorry for the delays.

June 3, 2010

Update

I'm working hard on the PAK importer (AGE), but it's having some bugs at the moment, so the picture tiem has to wait. I promise to get you all something by the end of the week. Also I'm tired at the moment. I need sleep. |:

June 1, 2010

deviantART related II

NEW layout in dA. Again.

Anyways, feature tiem.

Featured artists:
=NTDevont
~Cushart
=Lorelai82
*GENZOMAN

Random faves:
Fragrance-Hatsune Miku by *lunaticjoker
Dragon Flight by *Hideyoshi
Air elemental by ~javi-ure

Massivety

So... here it is. The Massive Post I've been talking about. It's not a showcase or anything, but put simply, an overview of current status (with featureset), future status (this week, next month, three months) and a demo information (which I will start to work when I finish this week's features).

Current status
---

Project build version 0.0.57

Features
  • PAK, including following features:
    • Unique asset export from Blender
      • Cameras
      • Entities
      • Lights
      • ...
    • Shared asset export from Blender
      • Scripts (Py only)
      • Textures
      • Images
      • Materials
      • Meshes
      • Shaders
      • ...
    • Scene binding (uniques only)
    • PAK externalization (meaning asset exists in an other PAK)
    • File externalization (meaning asset exists as a file somewhere outside PAK)
  • Python scripting
  • Multiple materials per mesh
  • Event system (experiemental)
  • Shaders (wip)
  • Gamepad/Joystick support (Xinput for Xbox controllers, autodetect)
  • Input system

TODO this week:
  • PAK import to AGE
  • Post-Process pipeline
  • Material system refine (shadows)
TODO this month
  • Animations
  • More to Post-Processing
  • Scenegraph (if needed)
  • Finalize event system
  • Dynamics
  • Sound (SFX/BGM)
TODO next months
  • Particles
  • Dynamic LOD
  • GUI system
  • PAK update -> Cache and preload
  • OpenMP
  • Memory pool
  • Terrain
  • Dynamic scene switching
COULDHAS list at the moment:
  • Engine plugin system
  • Editor (scripts, scenes, shaders...)
  • Video streaming
  • Asset streaming
  • Networking
Following two are COULDHAS because they aren't yet planned to any TODO list:
  • Bone animations
  • HDR native integration

Demo information
---

AGE showcase demo
--
Small demo showcasing the abilities, flexibility and compatibility of AGEs SHARD

It has few scenes each representing capabilites of how different scenes one can create with correct use of assets. Currently I have only thought it so far as I have themes:

1) Open grass scene
Type: Fly-Through
Length: 1-2 minutes

2) Horror house
Type: In-Control?
Length: 3-10 minutes

3) Street View
Type: Fly-Through
Length: 1-4 minutes

I will not guarantee I will create all of them in one pack, but I try at some point create at least the fly throughs.


MEH. Not so massive after all. Now. I will return to you wednesday or thursday with images. Stay tuned.

May 28, 2010

Loading... Please wait...

I just got back home, and I'll start to work on the massive post / update and so on tommorow. I try to get you guys something REAL about this engine. Probabilites are high that I get you something around sunday-monday vector. Sorry for the delay.

While waiting for it, please check BlendELF for something awesome. It's a new, but fairly powerful and nice engine.

EDIT: For today I will keep rollin' Aion while you keep hatin'. ... If anyone is even reading any of this. -> which comes to a question:

Q: How many of you are even slightly interested in this engine project? The more answers the more dedication I will put to this engine.

May 16, 2010

Update rarity?

I haven't been updating here since I haven't really done much for it. I'm pretty stumped with military. For the next two weeks I will be away, which means no way going to get you updates.

What I've done up 'til now:

PAK usage pipeline:
importPAK(...) // Imports index of PAK
loadSingleAsset(...) // Loads single asset from PAK
loadMultipleAssets(...) // Loads multiple assets from PAK

and multiple (20+) other functions for it. Those three are the most used ones though.

ART:
http://inestical.deviantart.com/art/Marie-Eve-Nadeau-164022381
Trying out new style.

I'm going to post few test cases which show how the asset system is used.

TODO list updates:
+ memory pool system
+ OpenMP integration + other multithreading crap

COULDHAS list updates:
+ Game engine plugin system

Please be patient. I will make a monster update when I get back after two weeks.

April 22, 2010

Engine status [22042010]

As I don't have anything else to rant about, I will give quickish update about the status of the engine as of now.

Engine supports fully Python, and there aren't (atm) any found bugs. I'm in the middle of writing PAK file format for AGE, that, in all simplicity, works as a package, both crypted and packed, if so wanted. Currently it is designed to hold data for camera, entity, mesh, image, material, worldnode, light and shader. I also plan on adding the support for scripts later.

My COULDHAS is also been expanded with possible editor. It'd work as better management for engine data, and easier "export" of PAKs, as it's pretty hard to do directly from blender. Not impossible, but hard and complicated.

EDIT: I'm currently working on the Blender exporter. It's more easier than I thought.

Compatibility settings are still on the shelf, with only parts of it in use. I found it more important to program major features before making sure it's completely bug free and compatible with other machines. I will probably add the system before initial beta release to the wild, which should, by current plans, happen in three, four weeks. Before the release, I will try to upload a few videos and give complete list of features implemented and a little tutorial for fly through level.

April 11, 2010

Scripting AGE

AGE supports currently Python scripts. This means it gives you more rapid development cycles when you don't need to rebuild your c/#/++ project all over again.

Currently the system is as follows:

You make main.py that includes, at minimum, following lines:
# Import age library
import age

# Initialize AGE, give it title "AGE" and set
# window size to 768x480
age.Driver.initEngine("AGE", 768, 480)

# Loop driver update cycles as long as the engine
# is not "done" with the rendering
while not age.Driver.isDone()
age.Driver.update()


That's it.

Then, if you want to add items, like camera, you add following lines after age.Driver.initEngine:
# Create new scene, set it active and get it
curScene = age.Driver.getScene(age.Driver.addScene('Scene001', 1))

# Add a camera to our scene and make it active
cam = curScene.getCamera(curScene.addCamera('Cam001', 1))
cam.set( age.Vec3f(0.0, 0.0, 0.0), # Position
age.Eul(0.0, 0.0, 0.0), # Rotation
age.Vec2s(0.0, 0.0), # Viewport offset
age.Vec2s(768, 480), # Viewport size
age.Vec2f(1.0, 1000.0), # Clip distances
45.0) # FOV

# Set the script file camera uses, without the extension (.py)
cam.setPyScript("camera")


Then you need to create a new file, called camera.py that includes following lines to enable fly through:
import age

# Get the camera as global variable
me = age.Driver.getCamera("Scene001", "Cam001")

# Camera action
def on_update():
# Check if WASD or gamepad's Point Of View (Directional btns)
# are pressed and move accordingly
if age.Input.getKey(age.KEY_W) == 1 \
or age.Input.getPadBtn(0, age.BTN_POV_UP) == 1:
me.moveOriented(age.Vec3f(0.0, 0.0, -10*age.Driver.getStep()))
if age.Input.getKey(age.KEY_S) == 1 \
or age.Input.getPadBtn(0, age.BTN_POV_DOWN) == 1:
me.moveOriented(age.Vec3f(0.0, 0.0, 10*age.Driver.getStep()))
if age.Input.getKey(age.KEY_A) == 1 \
or age.Input.getPadBtn(0, age.BTN_POV_LEFT) == 1:
me.moveOriented(age.Vec3f(-10*age.Driver.getStep(), 0.0, 0.0))
if age.Input.getKey(age.KEY_D) == 1 \
or age.Input.getPadBtn(0, age.BTN_POV_RIGHT) == 1:
me.moveOriented(age.Vec3f(10*age.Driver.getStep(), 0.0, 0.0))

# Rotate camera 150 degrees per second in X and 120 degrees
# per second in Z
curRot = age.Eul()
curRot.x -= age.Input.getMouseForce().x*150*age.Driver.getStep()
curRot.z -= age.Input.getMouseForce().y*120*age.Driver.getStep()

me.rotate(curRot) # Apply rotation to camera


Not so hard, but alot code to take in at once.

The "def on_update()" is a function that is called automagically inside the engine. You can also create your own, but you have to call them inside one of the predefined, automatically called functions.
  • on_[event]() : when an event; collision, deletion, scan and so on happens. how will the entity react to it
Also on a related note, you would normally call the camera, etc. creation code inside the scene on_init() function, that is called when the entity/object is created.

NOTE: This is the current method, which I most likely will change later for more dynamic script usage.

April 5, 2010

Thoughts about games and engines

While working on this engine, I've been reading and watching numerous GDC (Game Developer's Conference) stuff and I have learned alot of simple and advanced tricks, like multithread tasking, shadow mapping tricks, animation layering and reusing code in numerous ways, just to name few. Also a huge point that I've heard on many sources and witnessed myself, is that an AAA engine, like Unreal, CryEngine or Source have, at some point been a generic container of features and techniques, that then is mold into a game specific engine, with dropping and adding features, modifying some parts and just leaving the game specific stuff. The result can be something entirely different than what it used to be. This is also a huge point on getting the source code of an engine and why industrial AAA companies make a huge scene of it. It's true that Quake IV and Doom III used the same id Tech 4 engine, but the featureset is still so different.

This is also the case with AGE. I try to develop it so that I can later extend it to a game specific engine. Of course engines all have the core features remain the same, but some more high level, like shaders and action system might be altered.

Keeping in mind, that a game engine is the motor under the hood and the game is the nice seats, wheel, pedals and so on with the player being the driver, getting the experience of moving fast and waiting for the light turning green while burning the tires and listening to heavy rock. The game engine is the core to build a world for the player to experience.

A hint I've gotten from a industry veteran is, that don't make the game become experience, let the player experience the world the game creates.

April 3, 2010

Imaging AGE

As I promised earlier today, I will update some screens to you. I keep my promises.

But before them, I would like to give a small(ish) list that includes features in my current TODO-list and features on my COULDHAS-list.

TODO (in possible order of completion)
  • Shadows with spotlights, point lights and global (sun) lighting, in that order
  • Dynamics
  • Scene exporter to blender
  • Material files
  • Animations (keyframe)
  • Particles
  • Multithreaded system
  • LUA scripting
COULDHAS (in no order)
  • Scene graph: thanks to Samuel Anjam for reminding me of this thing. I was first a bit against it when he thought adding it to his engine, BlendELF, but then I also begun some investigations and thought why not. I will explain later what scene graph is and why it's useful.
  • Cache and asset system: Or in direct terms; a more sophisticated file system.
  • Bones animation: Something every GE nowdays needs. I just need to look up to this to implement it, when I get there.

That's the short "public" version of my little list. I will explain how I implement things as I push on. I will also probably add tutorials when I see fit that this engine can be shared.

Now something random called screenshots:


Sphere. I know I said I wouldn't post a sphere. Couldn't resist.


Sled that uses two materials. Thanks to blendercookie.com.


Sled closeup. Thanks to blendercookie.com.

AGE is still alive, folks.

I haven't been updating this blog for a while, so I'll bump it.

The AGE is still alive and I've finished great portion of it already, making it versatile engine to use in your game creation. I'm working on things like Python bindings, multithreading (and choosing which technique is the best to implement) and shader generator.

Currently AGE has the capability to the following:
  • Python scripting
  • Multiple materials per mesh
  • Multiple meshbuffers per mesh (LOD-system, experiemental)
  • Support to all image types you can name
I will be adding following in next few weeks:
  • LUA scripting
  • Shadows with spotlights, point lights and global (sun) lighting, in that order
  • Dynamics
  • Scene exporter to blender
  • Material files
I will update this blog with some nasty screenshots when I find something else than spheres in my computer. On that same post I will also hype about all the features I currently have in my TODO-list.

Work work,
Inestical