Intel sponsors gamedev.net search:   
Journal of YsaneyaBy Ysaneya      
Main project:

Infinity, a space-based MMOG

Forums
Page:   1 2 »»

Tuesday, August 30, 2005
I've taken a building from the Minas Tirith project (the library), and ran my LOD algorithm on it.

I've composited the results in a single image where:
- LOD 0 is 100% polys,
- LOD 1 is 75% polys,
- LOD 2 is 50% polys,
- LOD 3 is 25% polys



It's pretty slow at calculating the LODs, around 5 minutes right now. I'll optimize the algorithm a bit later. I also have to fine tune the parameters, but i'm pretty happy with the rendering quality now.

Since LOD is part of the Infinity engine, all the work i'm doing now will also benefit my space game.


Comments: 0 - Leave a Comment

Link



Sunday, August 28, 2005
This week end, i've been mostly working on a website for Infinity. I'm planning to open it sometime during the next week. I have upgraded my web host account to support a higher bandwidth (i now have a 2 Gb disk + 60 Gb traffic account). I designed it myself with my small programmer's hands, and i'm pretty happy with the result. Here is an early prototype:





Comments: 2 - Leave a Comment

Link



Friday, August 26, 2005
A quick update: i'm probably going to be busy for the next days working on level-of-detail, as the deadline for the next Minas Tirith viewer is coming. I am implementing LOD for static meshes. I had already implemented that algorithm some years ago, so i think it will mostly be a matter of getting the code and the parameters right. Hopefully this shouldn't be too hard, but it might take some time. I probably won't have nice pictures to post for a while :)

Comments: 6 - Leave a Comment

Link



Thursday, August 25, 2005
A new video is available, which shows:
1. Me landed on an Earth-like planet
2. Going to the space station in low atmosphere
3. Landing on one of the secondary, Earth-like, blue moon.
4. Looking back at the Earth planet.

Disclaimer: the planet's terrain is still not in, so it's completely flat in the video - don't worry. Many other things are experimental.

Link to the video (31.3 Mb, 512x384 Divx 5)




Comments: 2 - Leave a Comment

Link



Wednesday, August 24, 2005
One of my friend, Nicolas, has been kind enough to make a small test model of a fighter cockpit. Do not mind the quality: lighting is basic and there's no textures. It's just to give an idea of a 3D cockpit. I specifically asked him to make something very lightweight that doesn't take a lot of screen space, since i feel the immersion of the player shouldn't be disturbed by the user interface. The HUD and interface will later (in months, when i'll implement the actual gameplay) be displayed on a layer over it. I've also readded the previous DS9 space station and improved the lighting a bit. The planet textures are on a "medium" resolution of 1024, so a few details (especially in the clouds) are lost at this low orbit altitude.





Comments: 7 - Leave a Comment

Link



Sunday, August 21, 2005
I have a feeling many people will like that update :) Mostly screenshots. I've implemented planets as seen through the atmosphere of another planet. It works by combining the extinction and in-scattering equations separately with the color buffer. In other words, it correctly blends the atmosphere seen through an atmosphere seen through a third atmosphere. It's still not perfect though; i still have to work seriously on the atmosphere at night time (it's still "opaque" right now, so it appears as a kind of black fog).










Comments: 10 - Leave a Comment

Link



Friday, August 19, 2005
I just realized that i never described the pipelining system of my engine.. one of the designs i'm the most proud of. So this time you won't get any eye candy :)

My graphics engine is designed around the concept of pipes. Each pipe is an object responsible of rendering a subset of the scene graph with the same type of "processing". You can think of a pipe as a pass, although it's a bit more subtle than that.

Pipes are linked together as a tree. Each pipe has one parent (except for the root pipe), and can have many children. Each pipe has two main functions: setup and render.

The setup function is responsible of two things: preparing the rendering by calculating on the CPU the set of objects that will have to be rendered (and with which shaders); and potentially, rendering something to a texture. In that last case, the setup function is allowed to call the render function of its child pipes. The setup function is taking in argument a camera.

The render function is responsible of rendering the objects calculated in the previous setup phase.

In addition to this, each pipe has a name. The names are propagated in the child pipes (appended together), and then propagated to the shader system once rendering takes place. A shader can use conditionals to apply itself, based on the type of pipes that are being used.

The objects in the scene graph have many shaders applied to them. When rendering objects of a pipe, i use the shader whose name matches with the pipe's name.

Now, an example, and all will become clear:



The Scene Pipe is a pipe that, in its setup phase, performs culling with the given camera and stores all the visible objects in an internal array. It does not perform any rendering.

The Standard Pipe does not perform any setup operation, but when rendering, it uses the objects calculated in the scene pipe. It renders these objects with their "Standard" shader, and if an object doesn't have any "Standard" shader, it is skipped.

Let's imagine for a second that the Standard shader is only applied to opaque objects, and that a shader called "Transparency" is applied to transparent objects, at scene initialization time.

The pipes system can easily be expanded to this:



And as you see, the culling performed by the scene pipe can be reused by the transparency pipe, in a matter of seconds. The transparency pipe will only render objects with their "Transparency" shader. Note that, as i said in the beginning, an object can have many shaders - so theorically, you could have one object which has both "Standard" and "Transparency" shaders (even if in that scenario it'd be a bit incoherent).

But the best is coming. Now, imagine that you want to render reflections in the water. To do that, you need a pipe that will render the reflected scene into a water texture. That's quite simple. In the setup phase:
- call the setup phase of the children, but with the reflected camera
- enable render to reflected texture, and call the render phase of the children.
And ignore the render phase of the reflected scene.



The reflected texture can then be assigned to objects of the scene graph (like the ocean mesh), and rendered normally by the second standard pipe.

Implementing HDRI ? This is how i did it:



The HDRI pipe enables render-to-texture (with a floating point format) in the setup phase. The rest of the pipeline is rendered into the HDRI texture, but with a tweak: the sub-pipeline shaders have the name "HDRI" appended to them. So, in the Standard pipe, the shader called "Standard_HDRI" will be applied, while in the Transparency pipe, the shader called "Transparency_HDRI" will be applied.

In the render phase of the HDRI pipe, a bloom filter and a tone-mapping operator can be used on the HDRI texture, and applied to a full-screen quad.

Another advantage of my pipeline system in addition to its flexibility, is that it can be built at run-time (or even dynamically updated). Which means, if your video card does not support HDRI, the previous pipeline will be used instead.. and so on.

Long and technical article, but i hope you enjoyed reading it :)

Comments: 5 - Leave a Comment

Link



Wednesday, August 17, 2005
I've added an array to hold a variable amount of planets. I also reorganized the code to give to each planet different parameters. I still have a lot to do in that area. For example, even if it's not that visible, the two planets on the following screenshot have the same set of textures/clouds, but because of the atmosphere they look different. The rendering is not correctly done in order (i have to fix quite a few things in the 3D engine for that), so when a part of the atmosphere covers another planet you get strange results.




Comments: 15 - Leave a Comment

Link



Tuesday, August 16, 2005
I've implemented cyclones and the Corriolis effect on clouds. In both cases it's basically a matter of rotating the noise vector around an axis before getting the noise values. As usual, getting good parameters is tricky.. i've also fixed the opacity of the atmosphere at low altitudes (but still seen from space), it's now less thick/more realistic.

Tomorrow, if all goes well, i will try to get multiple planets in the same scene. The effects of the atmosphere color of a planet, as seen from the atmosphere of another one, will be.. challenging.






Comments: 5 - Leave a Comment

Link



Monday, August 15, 2005
A new serie of screenshots.

I've mostly been working on memory optimizations. Last time i tried running the planet with 2048x2048 textures, i got a crash at 2 Gb. What ? Two Gigabytes for high-resolution textures ? Something had to be wrong. But at the time i didn't investigate. Turns up i had forgotten to clean up "a few" buffers. In addition, i was calculating the 6 faces of the planet and only then uploading them to textures. Now i interleave this process, so that i only have to keep in memory a single planet face at a given time. I reach 200 Mb (vs 2 Gb) during the generation process.

I also implemented texture compression, and it seems to run well.

I zoomed a bit over the planet at a few hundred kilometers altitude:





Comments: 0 - Leave a Comment

Link



Saturday, August 13, 2005
Here is an idea for a title screen/logo - i know it sucks, but when time will come, it will be redone properly.




Comments: 1 - Leave a Comment

Link



Friday, August 12, 2005
I think i can safely say that now, everything is close to what i envisionned. In disorder, i fixed the sun color at right angles, the contrasts of the starfield, the quality of the cloud textures and adjusted some parameters. The first screen is an Earth-like planet with an atmosphere thickness of 250 kilometers (gives an "artistic" feeling to it), the second one has a thickness of 100 kilometers, which is more realistic, but looks less nice in my opinion.





Reducing the images to fit in this journal makes them a bit blurry. For fun, i upped the resolution to 1600x1200 with antialiasing x6, planet textures 1024x1024 and took a screenshot (maybe if some of you need a new wallpaper). It still rendered at more than 60 fps on my machine.

Link to wallpaper-ed image (500 Kb)

I can finally move on to other tasks. I need to work on my 4E4 entry, too..

Comments: 17 - Leave a Comment

Link



Thursday, August 11, 2005
I have fixed my shaders and improved some effects. There is still an artifact in the atmosphere extinction in the sunset area, that i'm not happy with.. but it's starting to look cool:







Comments: 9 - Leave a Comment

Link


I'm still working on the atmosphere, and i'd have to say a lot, but i have no time now.. so here's a quick summary.

I tried to implement the algorithm by putting everything in two lookup tables textures, and multiplying them together in a pixel shader. It worked, but i had some artifacts and could not see how to fix them.

The main problem was color banding in the gradiants. I tracked it down to the multiplication of the two textures. Since they're both 8 bits, the result is loosing precision.. to increase the brightness, i also had to scale the result by a constant. It cannot be done before the lookups, because they only store results in a limited range (0-1) and at a low precision (8 bits per component). Honnestly, the result looked like it was displayed on a 16-bits total color buffer.

Although i was calculating the angles (input of the lookup textures) per-pixel, it was still somewhat dependant on the tesselation. Better than vertex shading, but definately not perfect.

So, i tried an hybrid solution, by storing only one lookup texture, and calculating half of the scattering equation in a vertex shader, at a high precision. It worked, and the quality was definately better, but it was still not as smooth as i was expecting from a 32 bits color buffer. I could still see some banding in the sky colors.. and the tesselation artifacts remained.

Now, i'm trying to implement the whole equation in the vertex shader. It will be slower, but the artifacts and the banding will disappear. I'm not happy with the performance, since the vertex shader has to compute a lot of terms and to do an expensive ray/sphere intersection test, but i have no choice.

The following screenshot shows a buggy atmosphere, but it looked somewhat cool, so i thought i'd post it while waiting for a correct one.




Comments: 1 - Leave a Comment

Link



Tuesday, August 9, 2005
In the past days i've been working on atmosphere and scattering effects. I'm using the algorithm described by Lutz Justen in this thread. It normally involves a lot of calculations in a vertex shader, including two costly sphere/ray intersection tests. So i'm now trying to offset this work into lookup tables, and a few operations only in a pixel shader. I haven't succeeded yet, but i hope on the right tracks. Here's a test (on the CPU) with a very thick atmosphere:




Comments: 6 - Leave a Comment

Link

Page:   1 2 »»

All times are ET (US)

 
S
M
T
W
T
F
S
3
4
5
6
7
8
10
14
18
20
22
23
27
29

OPTIONS
Track this Journal

 RSS 

ARCHIVES
October, 2009
August, 2009
July, 2009
May, 2009
April, 2009
March, 2009
February, 2009
January, 2009
November, 2008
October, 2008
July, 2008
June, 2008
May, 2008
April, 2008
March, 2008
January, 2008
December, 2007
November, 2007
October, 2007
September, 2007
August, 2007
July, 2007
June, 2007
May, 2007
April, 2007
March, 2007
February, 2007
January, 2007
December, 2006
November, 2006
October, 2006
September, 2006
August, 2006
July, 2006
June, 2006
May, 2006
April, 2006
March, 2006
February, 2006
January, 2006
December, 2005
November, 2005
October, 2005
September, 2005
August, 2005
July, 2005
June, 2005
May, 2005
April, 2005
March, 2005
February, 2005
January, 2005
December, 2004
October, 2004
September, 2004
August, 2004