Home › Forums › Development discussions › Future development
- This topic has 156 replies, 6 voices, and was last updated 9 years, 4 months ago by Sponk.
-
AuthorPosts
-
October 4, 2014 at 19:38 #415Akira_SanParticipant
That would be a cool feature. 🙂
October 10, 2014 at 08:30 #421SponkKeymasterI’m planning to release 0.4 soon. Please do some final testing and tell me about all issues you experience. This release will be the biggest yet!
October 15, 2014 at 17:44 #442Akira_SanParticipantWhat i would like to see in 0.5 is some render statistics, like draw calls, number of meshes, number of triangles, fps in the game window. Some more behaviors like “Object pool manager” Object Pool link info: Improve performance and memory use by reusing objects from a fixed pool instead of allocating and freeing them individually.
October 15, 2014 at 23:21 #443SponkKeymasterWell, writing a custom memory allocator that is more efficient than the default one is very difficult. Object data is not frequently created or destroyed in the engine itself and Lua would not use the pool anyway, rendering the new allocator nearly useless. In addition has to be said that this memory allocator would not be cross platform, meaning that there would be one for Mac/Linux, Windows, Android, Emscripten etc. which is unmaintainable for me.
Do you really have your bottleneck at allocating memory?
The biggest performance improvement is probably found in the multi threading mechanism. There has to be much more happening parallel which currently is blocked by the absence of a working IPC mechanism like messaging. Another thing is moving all visibility testing to the GPU using OpenCL on platforms supporting it. Here again: How much is there to gain? Is it worth the time to develop and test it?
Before making any assumptions about optimizations we need real data which show the bottle necks. To do something simply because it sounds cool or because someone else did it does not mean it’s of any use in our case.
Because of that we need more profiling options. I already have some thoughts on how to integrate them into the work flow from an UI stand point and how to integrate them into the engine to show accurate data.
I think the biggest challenge (at least for 1.0) will be bringing the Android (and future Emscripten) port on par with the PC version.
I want to remove the old Maratis editor completely with all dependencies we don’t need any more from the repository. That would include the MGui library which is not used by Neo anymore. What do you think about that?
October 16, 2014 at 01:40 #451Akira_SanParticipantBecause of that we need more profiling options. I already have some thoughts on how to integrate them into the work flow from an UI stand point and how to integrate them into the engine to show accurate data.
I like this.
Another thing is moving all visibility testing to the GPU using OpenCL on platforms supporting it. Here again: How much is there to gain? Is it worth the time to develop and test it?
I know from the blender perspective, that blender got upgraded, thx to the open movies, that brought many new features faster. Those features were based on the production artists requirement. So best is if there is a game or a project, that its features are on its list ( i know that there is. 🙂 ) So is it worth, it depends.
Object data is not frequently created or destroyed in the engine itself and Lua would not use the pool anyway
From a game perspective, firing multiple of bullets by creating and destroying can be consuming. But a pool manager is mostly used in an android platforms as an optimization. Anyway that can be coded in lua, but u`ll need to interact with it in lua.
I think its reasonable to removed the old Maratis dependencies.
October 17, 2014 at 09:03 #452SponkKeymaster0.4 is out now.
I will clean up the repository and source code to be easier to understand by eliminating some unneeded dependencies.October 18, 2014 at 20:55 #459Akira_SanParticipantSome more good info from the net! I dont know if you know about this links, but its good for everyone to take a look.
“Wolfire Games has an excellent blog post about “fast object instancing“. What they do is render the model a bunch of times, but send a different matrix for each object to a uniform slot.
This is a pretty efficient way to instance a whole bunch of objects, because you only have to send the data once (the biggest bottleneck when rendering a batch of objects will always be bandwidth) and then transform the model in a shader.
”
Links:
Fast object instancing link
GLSL pseudo-instancing pdf linkAnd some nice vid about WebGL Techniques and Performance https://www.youtube.com/watch?v=rfQ8rKGTVlg
Whats your opinion about Fast-object-instancing?
October 18, 2014 at 23:11 #460SponkKeymasterThanks for those links, the technique looks very interesting 😀
The problem with pseudo-instancing in Neo is the dependency on GL immediate mode render functions which are not available in GL>=3.0 core profiles and GLES. Yes, there are drivers that implement GL<3.0 in their driver (compatibility profile) but I don't think that this should be our target. Our target is using the most current technology to the extend in which it is compatible enough with most hardware. Currently that is OpenGL 3.x-4.x and GLES2 in many (if not all) cases.I think the idea of using immediate mode functionality to use modern techniques is very interesting even if we will not use it like they described. Our goal currently is the default approach using hardware instancing. There are still enough problems to solve before this can happen 😀
There are some questions to be answered like "When should instancing be used?" or "How can we apply visibility tests?", "How many instances should be in one batch?" etc.
October 19, 2014 at 16:30 #461Akira_SanParticipantI see. 🙂 Ok ill look for information around the net.
October 20, 2014 at 20:29 #473Akira_SanParticipantOK. I searched almost a day around the net. 🙂 Im gonna ask the questions on the gamedev forum, but what does that mean “How can we apply visibility tests?”
While i searched, i found this ->
http://www.gamedev.net/page/resources/_/technical/opengl/opengl-instancing-demystified-r3226
http://www.geeks3d.com/20141017/opengl-geometry-instancing-test-radeon-vs-geforce/
http://www.geeks3d.com/glslhacker/cs/ – looks very nice, like eye candy images!
http://www.g-truc.net/doc/Candidate%20features%20for%20OpenGL%205.pdf
http://blog.tojicode.com/2013/07/webgl-instancing-with.html
http://rastergrid.com/blog/ – Looks like very nice site. It have some nice stuff, like GPU based dynamic geometry LOD, Hierarchical-Z map based occlusion culling…
Hope those links are useful.October 21, 2014 at 21:33 #477SponkKeymasterThank you for those links 😀
Please don’t ask any questions in any external forum for me. If I want to know I will ask myself.October 22, 2014 at 00:16 #478Akira_SanParticipantOk. 🙂 Forgot about this link NVIDIA GameWorks OpenGL Graphics and Compute Samples
It too have an Instancing Sample, Instanced Tessellation Sample, Multi-Draw Indirect Sample.October 23, 2014 at 21:39 #479SponkKeymasterThanks, I will look into all those resources as soon as I have some time 😀
November 7, 2014 at 00:04 #517Akira_SanParticipantFound a bug: when selecting 2 objects and moving them, then select one of them and try to move it, its not working. The 2 objects are still selected.
The view camera can be annoying at times. When you try to go too much forward into the object, it got stuck inside and cull some from the screen. Can something be done about it? For example in Blender the camera dont do that.
I also think, that there is a need for a “global settings”. like for example being able to turn on/off things like, particles, change the shading, etc…November 7, 2014 at 10:17 #518SponkKeymasterIf you select multiple objects you can drag them directly through the scene using your mouse. This makes it difficult if not impossible to guess if you want to deselect them or if you just want to move them. Any suggestions?
Global settings for shading would be easily done (given that you have some sort of setting to change?). The bigger problem is controlling particle systems. They are organized as a behavior and are not integrated into the engine itself. I guess we could make some sort of global “settings center” where behaviors and native plugins can put some sort of key value pair for easy config, similar to the Windows registry. That would also allow simple saving of game data like window resolution and other settings you might want to save.
Btw: I’m currently working on the new in-game GUI system so that will take up most of my development time for now. I’ll write a blog post with some screenshots later 😉
-
AuthorPosts
- You must be logged in to reply to this topic.