344 karma · joined August 3, 2011
I have looked into SRP and i do still consider that as an option, and also replacing the shaders. But i have doubts regarding the SRP, for example i have looked at the code that sorts lights in Forward+. The individual light calculations are not much, but its still done trough the job system. I imagine if there are hundreds of lights, then that would make sense, but for 2-5 lights, it seems like a waste. So it might be optimised to scale, but not for my case.
Is the effort of replacing the SRP worth it, and is the performance comparable to putting together/reusing an engine in C++? It is also a bigger commitment, as it needs to be coded on a different level and in a way very specific to the engine. Better than having to reverse asset file formats, but still very specific to the engine.
I would say its the exact opposite to that. For that genre, its best to roll your own engine, or pick something open-source. The list of problems that i firsthand experienced:
There are lots of features and options in the engines, but they are not all usable at the same time. One feature disables the other. You look at the list of all the nice things the engine can do, but then at some point you figure it can't do (or can't efficiently do) what you absolutely need. All those awesome looking graphics are not practically usable, simply not performant or not compatible to be usable.
There are features that only work in "baked" mode. You "bake" it in the engine editor, and there is no way of changing that at game run time. Unreal is the most limited in this, but Unity is not much better. Some game developers reverse-engineer Unity internal asset formats with a hex-editor, so that they can change feature behavior at runtime. At that point, rolling your own engine makes more sense. One example i saw was a developer reverse engineering the light probe group asset file, so that he could add a new light probe group at runtime.
Engine API's change drastically from version to version. All the code and scripts need refactoring, all the time. You run into a breaking bug, and the only solution is upgrading, but upgrading means breaking your whole codebase.
You need to go trough the engine's abstractions, and bad luck if that can't be done efficiently. An example of this: Unity HDRP applies screen-space ambient occlusion (among other effects). It applies the effect over the whole screen. If there is a third-person view of the character from close or first-person hands/weapons rendered, then even over that. That results in a white halo around the first-person hands/weapon, looks bad. In a custom engine, the solution is simple, apply the full-screen effect before the first-person hands are rendered, then render the hands without the effect. Its a matter of switching the order of a couple of lines of code.
The solution is github and the BSD/MIT/Apache licensed game engines and libraries.
The goal, IMO, would be to force the app not to try (or not to try once it failed) something that is bound to fail.
This applies to graphics programming very well, its not a question that you wouldn't be making your own pixel rasterizer instead of using DX, OpenGL or Vulkan, for example.
The big recognition is that when doing business apps, SQL database functionality is the underlying API, and you should prefer using that.
Causality is not a product of the universe, but the other way around.
Specifically this recipe: https://twitter.com/ocornut/status/890210588600565762
I am already using ImGUI, and its a bonus if i don't have to include another font engine.
For example there is a single header library HTML renderer and its fast, but does not run JavaScript.
And there is for example Chromium, which is the complete browser experience, but its 10GB source code, no sense in trying simplifying any of that.
It presents a primitive material reality, but also the culture and supernatural beliefs.
It doesn't have to be without monsters, it just have to portray them according to beliefs of people of that time, and not according to our modern interpretation, or modern appeal. It could be an opportunity to also document ancient societies, culture, mythical beliefs too.
An addition. Also make a survival mode, where you are not just sightseeing safely, but also have to survive whatever is happening.
Think of MS Flight Simulator or Google Street View as documenting the current world. Then take the same approach to thoroughly document the past. The locations, the events, all in 3D VR with realistic graphics, and simulated actors that react to events and react to the players.
Take the current knowledge and physical/archaeological remains of the past, and digitise them, digitally renovate them. Do this rigorously and professionally. Not Hollywood-style approximation, but the work of real historians and archaeologists. Let historians use it and debate the details how it should really look, or how the events really unfolded and adjust it accordingly. Organise the database of content and simulations. AI is possibly already there to automate processing and conversion to 3D of old videos, photos and paintings, even perhaps writings to animation scripts. If not yet, some AI researcher is surely working on that.
Make a VR meta world, where players can travel to certain locations and certain time and interactively take part in the events.
I would pay a monthly subscription for such a thing, to see the past getting recreated digitally. It would be the next best thing we actually could do, compared to real time travel.
Dear ImGUI also does this, and while font baking is not trivial, integrating ImGUI is almost.
But there is a study that showed, that talent for languages matters more for programming skills than talent for mathematics.
I would add an anti-pattern in contrary to that: engine duct-taping.
There might be a specific solution in the engine for a problem, or in the underlying library/graphics API, which a developer could make use of/could unlock. But the level/game designers chose to build solutions on top of high-level engine features, which leads to poor performance, bugs, glitches and unwanted side effects.