Term "Graphical Engine" left me a bit confused. Would appreciate some clearance.

Started by
9 comments, last by Norman Barrows 7 years, 3 months ago

Hello there,

Today i was reading a post on MMO forum, there was a lot of smart phrases circling around, like "Upgraded graphical engine" (Context is Heroes of the Storm and Starcraft 2, in case someone is familiar with those games).

One person claimed that Game A uses Game B graphical engine, only a bit updated, and that Game C uses heavily modified Game D engine.

What the heck does that even mean?

I mean yes, you have code to upload textures, models, bind them, then you have a code to call draw functions, switch shaders.

When need comes, you copy that code into your "UNIVERSAL_CODE_LIBRARY.DLL" and start using it in all of your projects.
Sort of "Core functionality" and "Utility features".

I have my own custom library that draws screens in views, has custom UI objects and their event catching, functions to draw Sprite or Arithmetical calculated models with animations, model caches, texture loading and etc. Is that considered and engine?
I still have a "render()" pipeline, which has to be filled with code. I guess not?

Am i missing something? Or is it just 25 dollar term for 5 cent concept?

I am frustrated and confused about this :S

Advertisement

From my experience, what is usually ment by "graphics engine" is not the low/mid-level concepts like resource creation, draw-call execution etc... but more the high-level render-effects systems like lighting, shadows, global illumination, post-processing-pipeline,etc...

That makes sense, especially if people talk about it online outside of game programming forums. The average gamer doesn't give a crap about how you draw your sprites or load your textures. If your Call of Duty MW2 looks almost the same as MW1, then thats where people get to discuss what technology is being used for rendering, and if its the same "graphics engine" as before.

Hope that clarifies it :)

I would consider something like Ogre3D to be just a graphics engine. If you were to make a game with it you would need something to deal with your windows (actually I think Orge3D does create a window for you), input, physics, network and so on but the graphics part would be taken care of by Ogre3D (which itself then uses DirectX, OpenGl etc). You'd still have a lot of plumbing to do to get everything working together which you wouldn't have with a more general game engine (Unity, Unreal, CryEngine etc).

Interested in Fractals? Check out my App, Fractal Scout, free on the Google Play store.

Yeah outside of "Game Engine", the term "engine" gets used a lot for any library that does a lot of heavy lifting and is core to an application. In other fields, you might see statistical engines, physics engines, simulation engines...

To me a graphics engine doesn't just do the low level D3D/GL stuff of managing resources and submitting draw calls, but also does a lot of API-agnostic work like scene traversal, occlusion culling, and implementing high level concepts like lighting and shading pipelines.

i.e. all the stuff that an application will need to render a 3D scene.

Often in a game you'll have a fairly mature high level API between the gameplay programmers and the graphics programmers, so it is possible to completely swap out the graphics engine without the gameplay guys even knowing/caring.

but also does a lot of API-agnostic work like scene traversal, occlusion culling, and implementing high level concepts like lighting and shading pipelines. i.e. all the stuff that an application will need to render a 3D scene.

yeah, that's my definition too.

its more or less all the code required to do the graphics, from creating a device, to loading assets, to Present().

combined with a physics engine, and audio engine, and some editors, and perhaps some other engines such as weather, clouds, water, and scripting, you get a "game engine".

a graphics engine is basically the entire graphics subsystem of a game.

graphics engines come in many flavors and a wide range of capabilites from simple 2d affairs right up to stuff like the graphics subsystem in frostbite.

https://en.wikipedia.org/wiki/Frostbite_(game_engine)

and as Hodgman says, its typicaily laymen that use the term a lot. and usually as a shorthand way to refer to the high-end and special effects capabilities of the graphics system used by a given game.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

Hmmm, still a bit confused.

Maybe its because i've stayed in 2D way to long.

I've used LWJGL, LibGDX and OpenTK for 3D before. You place vertices into memory, get the handle, draw the model, change lightning when needed, load vertice and fragment shaders. LibGDX even allows programatical mesh adjustment, building and moving mesh parts around.

Issues usually come with stuff like "3d picking".

Thanks guys! I will look into your examples and those terms like "post-processing-pipeline", maybe everything will become clear.
Maybe there are some 2D "graphical engines" you know of?

I will let it sink into me for a while.

I've used LWJGL, LibGDX and OpenTK for 3D before. You place vertices into memory, get the handle, draw the model, change lightning when needed, load vertice and fragment shaders. LibGDX even allows programatical mesh adjustment, building and moving mesh parts around.


Modern 3D renderers are so very, very complex compared to that.

Rendering a modern AAA game scene is _hard_. There are billions of triangles in a scene, multiple lighting passes, heavy post-processing, etc. If you were to just toss everything into vertex buffers and make draw calls the naive way you're describing, a 4x SLI GTX 1080 rig couldn't handle half the newer games on their lowest settings. Getting things to look as good as they do and still actually run on mere mortals' machines is an intensely complicated process and requires a number of special tricks, passes, techniques, and content pipeline alterations.

To get a bit better of an idea, just consider this small handful of techniques a modern game might use: procedural skinning, tiled deferred rendering, atmospheric lighting, global illumination, physically-based materials, dense foliage rendering, parallax mapping, temporal reprojection, fluid rendering, physics-enabled particles, HDR tone mapping, etc. A new graphics engine might have added any number of those (or other) techniques, or completely rewritten how many of the techniques work for more efficiency/scalability or better content iteration.

And then do all that (and tons more!) in an open-world environment where the core game data for the entire world can't even fit into main memory. And make it run at 30+hz on a PS4/XBone's hardware (somewhat equivalent to a 2012-era laptop). :)

Maybe there are some 2D "graphical engines" you know of?


Nothing comes to mind. There are a lot of interesting stylized 2D games out there that certainly require some neat tricks, but they still don't really rival what a modern 3D renderer has to do. :)

2D still deals with a significantly smaller number of objects and a much more constrained view frustrum than 3D. In 2D, a player view on a mountain top requires just as many tiles/whatever to be drawn to fill up the screen as is required when standing in the corner of a basement. In 3D, standing on a mountain top requires rendering miles upon miles worth of scenery with atmospheric effects and dense forests or seas or the like.

The number of objects/effects in more complex 2D games just doesn't scale up the same way that they do in more complex 3D scenes.

Sean Middleditch – Game Systems Engineer – Join my team!

In general, a term is not used consistently, it's just a name that to the author seemed fitting to describe whatever thing he was describing.

This holds in particular for umbrella terms like "engine", which can mean almost anything.

Basically, this means that (very likely) his idea of "graphics engine" is not the same as your idea of "graphics engine". This is normal, we have a limited number of words for each concept, and too many detailed notions that we like to express in that word.

Obviously, that also holds for anyone else that you ask. We all have slightly different ideas what a graphics engine is, exactly. This thread illustrates that, I think.

If you want a precise as possible description, read the definition of it by the author, then map that definition onto your world. If you're lucky it may end up in what you call "engine", but it may also become "framework", or "library", or "general game code", or something else.

Thanks guys!

It became a bit more clear.

Although most has largely been said, here is my input.

It’s “graphics” engine, and its job is to create a list of objects and effects to be rendered and then oversee how they are rendered. An upgrade to this implies any upgrade to any system that facilitates this end.
If version 1 tries to draw all objects in the scene and version 2 culls objects so that only visible objects are drawn, then version 2 is an upgrade, as it drastically increases performance.

If version 1 uses old Blinn-Phong shading and version 2 uses physically based Blinn-Phong, then version 2 is an upgrade because it has improved upon the realism of the graphics.

Upgrades also extend to the tool-chains related to graphics. At Square Enix we released Final Fantasy XV: Episode Duscae and got back reports that the textures looked blurry. I saw these reports and took it upon myself to upgrade the tools so that mipmaps would be sharper and so that we could start using BC7 instead of stretched BC1. These changes were visible in the next demo we released, and so the graphics engine had been “upgraded” from one demo to the next.

So there are many ways to change a graphics engine so that it is updated, upgraded, and heavily modified. Any change to how it approaches graphics-related tasks constitutes one or more of these qualifiers.


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

This topic is closed to new replies.

Advertisement