Category Archives: Weekly Update
From past 7-8 weeks I have been mainly working on shadows along with some engine code refactoring, adding support for some new things to support shadows like Texture arrays, Geometry shaders, etc
Read the rest of this entry
So I am still working on some optimizations on my GuassBlur Compute Shader. I have also started writing some parts of ToneMapping also using Compute Shader, hoping to finish something worth a screenshot or something by weekend.
I am testing some different permutations of Guass mean, filter size, etc. Also I am looking in repeating / rolling box filter using Compute Shader even though I am not a big fan of blocky / boxy filter for blurring the images but Nvidia Direct3D 11 had a demo of Guass Blur using repeated box filter so I want to explore that also.
But I am not sure which one I will be doing first I have done little bit of work both on ToneMapping and Repeated Box – Guass Filter .
Update : Forgot to mention earlier I am re-writing my DMC review since previous one got lost in the HDD crash.
Gone are the days when I used to blindly trust Western Digital for HDD . Second HDD crash in 6 months taking away all projects whether personal or freelance work. But after spending whole week I recovered important ones. My engine is recovered I am happy. Funny thing is 10 days before that it just came to my mind and I was searching for some options to host my project on some free private svn or git repository online. So somehow my spider sense knew it was coming. But I preferred to spend that weekend playing Dota 2 than completing job of finding a good option and uploading the code DAMN VALVE – ” why u make so addictive games ? ” .
After I am done with the recovery hopefully by tomorrow Western Digital is going to get a very nice email from me with lots of love apart from usual RMA details.
I still have Seagate HDD 6 yrs old still working flawlessly giving me 70-80 MB/s transfer rate same as on the first day.
My previous HDD crash happened in November so WD sent me a HDD which wasn’t event being detected on the PC (yes I checked it in BIOS too) then took another couple weeks to send me this new one. After 6 months it crashed again WTF. I mean I still have Seagate HDD 6 yrs old still working flawlessly giving me 70-80 MB/s transfer rate same as on the first day.
I lost my trust in Western Digital I am not buying another WD HDD again.
I have been busy with my new contract which is on site & it was little involving in few initial days, so wasn’t getting a lot of free time to work on the engine. Also I whatever free time I was getting whether on weekend or couple of hours in weekdays I was trying to finish the mobile game about which I posted earlier.
But Initial crunch is kinda over and I have resumed the work on the engine again. So currently I am working on HDR renderer. I have implemented my first version using usual pixel shader pipeline and now I am working to implement it using Compute Shaders.
Apart from tech stuff I have been playing a lot of new DevilMayCry so I will be posting “My thoughts on DevilMayCry” article soon.
I mentioned a couple of weeks back that I took 2 days break from engine stuff and made a 2D mobile game in Unity3D .
Well things workout and we are working on the game since to make it ready to be released soon.
It’s another Tetris kind of game but with few twists of our own to make it a unique experience. It will be a free to play game on Android and hopefully on IOS too.
Approx 80% of the game has been done, things remaining including some artwork, some more testing & level balancing and social networking features ( e.g sharing scores over facebook, twitter etc).
Hopefully we would finish the game by next week.
Other people working with me are Ravi Hansda and Justin Sousa.
Here is a collection of some of the artwork done till now for the game created by Justin Sousa –
Note – Game is still in development so these images may or mayn’t represent the final artwork for the game.
If anyone interested in checking out beta build contact me directly via email, facebook, etc., we would really appreciate your feed back.
As I tweeted earlier this week I took a couple of days off from my engine work and made a game in unity3d for mobile. Well game is almost done mainly artwork is remaining which is WIP, hoping to get it done in next 10 days or so.
Right now I can only say it’s another Tetris inspired game with some gameplay derived from bejeweled type games and few twists of my own.
I will start posting some screenshot and may even release a beta release as I get some art done.
So I optimized the scene renderer next day of the last post only. My internet ( MTNL showing its true colors ) wasn’t working this whole week so couldn’t update the blog.
So I managed to get up to 1400 ( 3500 FPS taking advantage of fact its stationary ) fps in Low Poly version of Dust2.
But the real test was the map from HL2 trainstation2, that’s one huge map with approx. With around 550 – 600 different textures etc. But I managed to get 500-600 FPS in that too. Just to give an idea of how much impact textures changes have on the performance I can render the same map at 4000+ FPS on GTS 450 if I use single texture.
So far I have implemented only some low-level optimizations in the SceneRenderer Like batching, material sorting, careful pipeline management, etc. Scene level optimizations including frustum culling, spatial partitioning, etc. and some new ideas that I have will be done as engine grows.
But these results are taking advantage of fact that all objects are stationary. Also I am just using Unlit Textured material FPS will fall back rapidly as I start to implement some complex materials and bring in lights etc.
( and yes I implemented the stats GUI now using SpriteFont from DirectXTK )
To compare it with previous DX9 version I used to get around 400 FPS with Oct Tree and Hierarchical Frustum culling even with a Phong Shader with couple of Directional Lights.
I will try to maintain at least 100 FPS at least in all future tests / scenes and will implement more optimizations as needed.
As far as Spatial partitioning is concerned I am going to do it together with Collision/physics system as they are kind of related. Thinking to integrate PhysX SDK which will also save time on renderer as I can use collision code from PhysX rather than porting my Collision Code from previous version. Also having two separate AABB classes or two separate AABB collision test function implementations doesn’t make sense. So I will just make a wrapper of PhysX for these things which can be replaced by any other physics engine in future.
There’s been a lot of progress in last couple of weeks. Many resource managers are done, Scene graph is almost complete, some camera systems are there, also static model loading is there, etc. Couple of Camera controllers have been done too – CameraFREELOOK and CameraOrbit. Other types of camera will be implemented as needed but for now I need these two only. Also I am using open source asset import library for importing X files only for now as I have test scenes in X file from the artwork used in last version of the engine. Once I get things working I will mess around with other formats too. Also looks like it doesn’t support so might have to implement FBX loader myself using FBX SDK later.
I trying to make the engine component based this time and also there’s been significant architectural changes compared to old DX9 version of the engine. It’s going to take a while to make engine as capable as before in terms of features. But this time it will be much more programmer friendly, more optimized, more capable to support complex scene hierarchies, etc.
I am working on loading large scenes again in this new version. Today I tested the full map with all textures at 7-8 FPS, using simple textured shader for now. It’s still better than my first attempt using DX9 engine when I got 1-2 FPS 🙂 which later after optimizations went up to 1000 FPS approx. ( after spatial partitioning, frustum culling, batching etc. ) .
In this first attempt I just made things working and there’s a lot of things left in mesh grouping, scene render manager, batching, material management, etc. I am hoping to achieve at least same results ( at least 1000 FPS ) after some optimizations and finish some loose ends.
Here’s a quick screenshot –
Also I will be adding a dedicated page for new version of the engine which will have an update list of things and also a To-do list. But I want to finish this scene loading first which should be done by Friday.
ASSIMP ( An open source library to import many 3d file formats )
It’s kinda funny to call it Weekly update anymore considering last weekly update was approx two months back. But for lack of another title using Weekly Update only for now. (Also I will try to be regular now with weekly updates.)
It’s been long time since the last post and the reason being I took much more work then I can easily manage, was working on four projects all of them being big ones and related to games only.
One of them being the tech demo of Just Another Game Engine. So as I posted in december a lot of data and code related to it got lost during HDD crash. But I started the work on it again and most of the features and game scenes have been done. Only couple of game scenes and Video capturing / editing is remaining. I trying to push myself to complete it by this weekend.
There are few things that I was working on before HDD crash that I didn’t include now –
- Rigid Body physics for spherical / ellipsoid objects.
- Basic kinematic physics for AABB/OABB.
There are also some new things which I have now included in the demo now –
- AI (Steering, Path Finding, Flocking, other movement AI behaviours like collision avoidance etc,Crowd Simulation)
- IK for characters (I have worked on few IK demos as a freelancer long time ago so I thought it would be nice to have it in the demo)
- Increased the overall quality of demo by re-imagining some demo scenes to make them better and hopefully little entertaining.
The barebones of the current version of the engine are like 18 months old or so and that time I didn’t have multi threading architecture in mind neither very well-educated regarding the multi threaded game engines etc. Still I did tried to hack in some multi threading and tried to make update and rendering loop kinda separate threads. Code was messy since it was hacky way of doing things. Also there are many limitations in the engine and also I want to change the whole architecture as I am not happy with it now. That’s another reason for not including Graphics / Rendering in this demo, I have few fancy shaders and some more things in work but to fully include it in engine will require some work but don’t want to spend more time on this only to remove it and re implement later.
Regarding physics I made Rigid Body physics working for spherical and ellipsoidal objects again it mayn’t be proper way of doing things but code was clean enough. But results weren’t that impressive also I am planning to integrate some 3rd party physics engine (considering PhysX or maybe Havok) anyways so when I started again I thought it may not be worth it to spend so much time on something again only for one demo. Untill now I can used only my code in my engine and prevented myself to use any 3rd party library to learn as much as I can which is the primary purpose of this engine.
My focus now is also to get back to the Graphics again asap but at the same time don’t want the engine or games I am planning to make be limited because of that so Including 3rd party libraries for now.
I am planning to do a major revision of the engine and I may make it DirectX11 only engine but how I am going to proceed is not planned at this moment. But I will starting doing some changes in that direction after this demo. I will post an update on this later and also thinking to include details on how my current architecture is preventing me to do certain things,etc
So that’s it for now I will try to be regular now on these updates and First Tech Demo is coming very soon.