Realistic graphics -- how can it be achieved?

Let me start off by saying that I respect AAA game titles for how they push computer graphics further and further. GTA 5 bears an uncanny resemblance to real life – uncanny, because it’s a computer game. A game with that kind of graphics…wow. I want to do that!

But these games are normally made using modern game engines, of which the three most popular are Unreal Engine, Unity3D and CryEngine. All three of these games are insanely powerful tools – but I don’t want to use these engines. Firstly, somehow a large part of the credit ends up going to them. Secondly, I feel like they’re not for me, because I just don’t like doing things without understanding how the rendering is done behind the scenes. Which is why I learnt OpenGL.

But from what I understand, these engines were made using OpenGL, because of its availability on most platforms, unlike Direct3D. That’s what I got off of the Internet. So how do I go about achieving those really breathtaking graphics in LWJGL (I’m referring to the realistic lighting, the soft shadows and basically the realistic physics)? Most importantly, is it possible for one person to do it within one year?

EDIT: my focus is on the lighting and shadows.

It is not possible for one person with OpenGL-only to do that even in twenty years.
That’s not at last because the realism in such games comes to a very big extent from the use of extremely well done artwork. 3D models, textures and of course pleasing level design.
(which is why I want to learn how to do that instead of delving ever deeper into OpenGL)
Also add to that non-visual qualities like music and sound effects.
You can implement the most fancy realistic shading and camera effects in your game/engine. But if you shoot for real-life realism, you need real-life looking artwork. Look at games such as Ubisoft’s “Grow Home” with its low-poly/flat-shaded style, which uses a good engine, I’m sure, but its artstyle is simply not realistic. So they did not need any textures or high-fidelity 3D models. It was surely easier for them, because they did not want to invest in a squadron of graphics designers. (the game only costs 8 bucks) :slight_smile:
I am also pretty sure that those realism-style AAA games employ by a very large number more graphics and level designers than programmers. And most programmers probably write tools to cater to those designers to do their jobs more efficiently by streamlining the workflow processes and integrating better with existing tools/engines.

The graphics in those games were not done by using any specific game engine… They were achieved by employing large teams of talented artists. The game engines are built to support the workflow of the artists and other content makers.

Case in point, you can see lots of games pop up in steam, developed by small teams, using engines with all the bells and whistles graphics-wise… And they still feel unrealistic.

Thing is, our mind is pretty good at spotting fakery (uncanny valley effect and such), so anything that is out of place will bring the feeling of realism crashing down.

I’d say, though, that if your game achieves a good degree of immersion, the players will have an easier time suspending disbelief and feeling it as “realistic”, despite the graphics not being that “photorealistic”. But I don’t think that’s what you’re asking about.

If you just want to understand and learn then start with unreal engine. There are lot’s of documentation, presentations, videos and all code is available at github. You don’t need to start from scratch and build AAA engine to know how it’s done. You just need basic knowledge to learn from various sources. Roquen posted nice link collection. Just read everything from there.(I already have) https://gist.github.com/AbstractAlgorithm/d0194f477adf829822ff

That’s a really sweet link, pitbuller. Thanks for sharing :smiley: And kudos to Riven for digging that up :stuck_out_tongue:

Had nuthin’ to do with that one :persecutioncomplex:

@Riven

Well, thanks for sharing it then :smiley:

Roquen != Riven :persecutioncomplex:

Just a tangent on photorealism, have any of you guys seen the ToddyHancer mods?

More here http://martinbergman.imgur.com/

He did the same thing to GTA, and it looks like all he’s doing is post-processing effects. I just wanted to make a point, sometimes that’s all you need to make it photo-realistic.
But on the topic of “Realistic” in itself… Immersion comes from detail… Remember that!

Also, OP. If you want to make a AAA looking game and not have the inevitable heat-death of the universe get in your way you should probably get into unity/unreal. Unity lets you see sort-of behind the scenes in terms of graphics and game engine. Nobody’s going to discredit you if you have a fun game that’s made in unity. Also, unity is in C#… So you won’t be posting many topics around here I hope :wink:

If you want to stick with Java, LibGDX has a lot of articles on how to do stuff in it, and there is plenty of example resources out there to play around with. All while you don’t have to give any credit! (While they’d like it if you did). You might not get AAA graphics unless you’re really good at it. It’s in java too! So you can bug the forum if you need help.

Yes, I remember @basil_ experimenting with some cool “lens dirt?” post effects.
Those also make things look more cinematic.
But like you said, one needs to have detail and also realistic artwork to start with.
On top of that, adding post-processing effects can make those scenes look more like being captured by a film camera as opposed to be seen by human eye, and I’d say they help in hiding/concealing mistakes/unrealism in the original render, because we know “yeah, a camera with film grain and everything cannot capture reality as realistic” and we tend to forgive a camera shot more because of this.

just picked up my nick …

[icode]screen-pixel += blur(bright-pixel) * [/icode]dirt-texture[icode];[/icode]

o/

I think that the means by which we’re going to be able to see ‘photo-realism’ come to game graphics is still a long way off in terms of processing power:


It’s incredibly intensive but the examples in that article have some fantastic results - still, these renders still take incredibly large amounts of time, and that’s far more than can be pushed out at sixty or 144 frames per second by even the most powerful hardware available.

I think that what we perceive is largely dictated by the light we see and don’t see - it’s what helps us distinguish between objects, establish depth and distance through shadow, and reflect and refract through different materials. Because of this I see the means by which we simulate light in a graphics context as the way forward in terms of increasing photo-realism. Once we can achieve suitable performance I think that techniques like ray tracing will be able to replace most shaders.

I’ve always wondered how ray-traced objects are stored in a file. Are they just very high polygon models or is there a special format that allows the curves, lines and edges to be defined as functions. I know that spheres, ellipsoids and other primitive objects can be defined mathematically for ray-tracers but more intricate things like a teapot cannot as far as I know.

Raytracing is a red-herring for realtime for the foreseeable future. In fact raytracing alone doesn’t produce very good results. WRT to complex objects…you can define arbitrarily complex object implicitly in the same way you can simple objects.

I should have said this in the previous. Go to shadertoy. All things rendered are implicitly defined and many are way more complex than a teapot. As a single example: https://www.shadertoy.com/view/ld3Gz2

Thanks for all the interesting answers :smiley:

I feel like this is a great thread for posts about advancements towards truly realistic graphics.

Depending on how much effort you put in you can do it within two months. I built my whole engine from scratch within two months. It has all the features listed above and many more. Some of the people saying it would take 20 years or more for one person are just undedicated. Of course you still need good graphics designers and animators/riggers to bring your games to life. But it’s not far from the scope of reality to do such games in a one man studio. Sure it might take longer eventually but it’s very possible.

This is wrong on so many levels, that I don’t even know where to start…let’s try with what you said about your own work. Even if we assume that the statement “it has all the features listed above” is true (albeit I can’t find such a feature list anywhere above…), you haven’t build it in two month. A quote from yourself from your own thread about your engine (which is great work, don’t get me wrong…I really appreciate it): “The base engine took me 2 months to build, But with time I started adding more features, So the total time now is a full year.”…not two months, but a full year to add the features that you’ve listed in that thread. And those features, while it is impressive to see what you achieved in just one year, are nowhere near the feature set of AAA engines…the Unreal engine hasn’t been done by a dedicated guy in his basement over the period of 2 months.

But let’s move on: “You can do “such games” (which ones exactly, btw…?) in a one man studio. But you still need good artists and animators to do it”…which somehow doesn’t fit my idea of a one man studio, but anyway. If that’s true, why don’t we see dozens of “such games” from indie development studios (which usually consist of more than one guy anyway…)? I guess it’s all lack of dedication…or maybe not?

Let’s see some numbers: GTA V had a development team of 1000 people and costed 137 million dollars to make (just the game, marketing and such excluded). The Witcher 3 had a team of 200 people and costed approx. 30-40 million dollar (again, excluding marketing). 10 different game studios were involved in the making of Assassins Creed Unity, approx. 400-500 people (budget unknown). Good old Morrowind (http://www.elderscrolls.com/morrowind/) from 2002 took 100 man years to build.

Good luck on trying to build even 10% of the Witcher 3 on your own. It will take you years, even decades, no matter how dedicated you are. There a physical limits on what one guy can do…time passes regardless of dedication and tasks take their time, even if (which is highly unlikely) you are able to do eveything on your own (and can live for 20 years without additional income…).

Also interesting in this context: https://en.wikipedia.org/wiki/Dunning–Kruger_effect

@ABOODYFJ, also add to those two months the likely many many years it took you to build up the knowledge to implement said features in your engine and coming up with an architecture/design of the system that supports this.
You cannot simply come here and say “people, it is possible to develop a game engine like this in two months.” This is just eyewash, and will end up in people less experienced than you to be frustrated about why their development usually took years and not two months.
Doing something like this always involves building countless demo programs, reading countless tutorials/articles/specifications, writing countless little games and “engines” and throwing them away afterwards and learning from that experience. And you likely built up on existing work/code/frameworks which you or others have built in the past. So when reading posts like this, people really should not take that “from scratch” literally. And I think most developers here are jaded enough to know that.

I am also just thinking about that it took two dedicated people one full year to even develop a linear algebra library that has now become a little bit above “barely useful” for game development and finally found its way into different game projects.
Adding on what @EgonOlsen said, I’d like to see how much time and effort you are going to invest in the future into your game engine so that it becomes usable and used by game projects.

You just cannot imagine with how many use cases and requirements you are going to be bombarded with, once someone decides to actually use your engine/framework. :slight_smile:
THAT is when you should start measuring time and effort.