Jump to content
  • Advertisement

Maik Klein

  • Content Count

  • Joined

  • Last visited

Community Reputation

121 Neutral

About Maik Klein

  • Rank

Personal Information

  • Interests
  1. https://gist.github.com/MaikKlein/00a5d8e95fb162a7fe9856f805ee1c6f I have now read quite a lot of CVs and I am a bit confused because they are all so different. Is there a public CV that you consider to be very good? I wasn't sure which skills I should add, I have seen CVs that list things like 'Microsoft Office', which I found a bit odd. I only included the most essential skills that I could think of. I also only included my latest 3 projects. Also the studio where I want to apply to doesn't have any job listings yet, otherwise I could have listed all the relevant skills for a specific position. Should I drop the math blog post? I just wanted to show that I am at least interested in math. Should I add a section where I talk about why I want to apply for a job at company XXX? Also I just listed that I have 5 years open source experience and I linked my github. Should I include some PRs that I worked on like https://github.com/rust-lang/rust/pull/45525 ? I assume I should definitely submit it as a pdf and not as a formatted email?
  2. "We will use EL for irradiance perpendicular to `l`. What does this mean? How do I get `EL`? 
  3. I am probably overthinking it, there is no way to know what really works at this stage. You are right, I should just stick with it.
  4. There weren't really any questions there, so my only tip is to profile it. Profile before, during, and after any changes. make absolutely certain you are changing things that really matter, and verify you measurably changed them for the better. Have results from your profiling tools that say something that was cache inefficient is now cache efficient, or have a specific reduction in microseconds (or milliseconds if that's your problem). Always measure before and after, at the least. measure more if you can.   It is hard to do this because the design is so different. I would have to test multiple implementations which just would cost too much time. But I have some microbenchmarks like linear iteration vs linear iteration + a few jumps. It is just not very good indicator because I have no idea how the data will look in a real game.   https://docs.google.com/spreadsheets/d/1zbQmmVXj68ksymEoYaRdiJNoGxvy4JgGFEGuM1-CufE/pubchart?oid=386750997&format=interactive   The line with "jumps" jumps randomly forward somewhere inbetween [0,N) in memory and the horizontal graph is N = 0 to 100;   The bigger the jumps the bigger the difference. This is with a data structure of size 24bytes.   With 24bytes 1000000 iterations and random jumps inbetween [0,100), the linear iteration will be 2.25times faster.   What about situations where a routine needs access to two or more components? What about where the relationship between the two components aren't predictable -- e.g. each component of class A is linked to a random instance of class B (many to 1 and/or 1 to 1).   Accessing two or more components is basicially free. If the relationship isn't predictable there are two cases. If a system has the pointers you can still iterate cache efficient, but if the components contain the pointers then you would get random jumps in memory.   But I don't think that the latter case will happen that often.
  5. I recently wrote a small article about an entity component system https://maikklein.github.io/2016/01/14/Entity-Component-System/   The gist of it is that I layout components into groups which are completely contiguous in memory and then I filter those groups at compile time. That gives me close to perfect cache efficiency.   A problem with this approach was that the compile times went up quite a bit but I recently ported the ecs to D which compiles in under a second.   Another problem is that adding components is a bit expensive. If I want to add a component at runtime, I would copy all components of the entity to a new group. For example an entity is inside the component group<A,B,C> but if I want to add another component I would need to copy the components to "component group<A,B,C,D>".   This would make temporary components a bit expensive, I am not sure at this stage how big of a problem this would be.   Also I currently impelemented handles with "smart ptrs" which seemed like a nice idea at the time, it was super easy to implement and gives me great perfomance but I just relaized that this makes serialization a nightmare.   But switching to good old handles like struct Handle{   int id;   int counter; }; would be a problem because I move my components in memory to keep them contigous, which is not a big problem with my "smart ptrs" because they automatically update and null if the entity is deleted, but this doesn't really work with plain old handles like the handle struct that I have posted above.   Which makes me think if I should switch to a different design all together.   I think the most common ecs is something like this:   Systems already know which entities it needs to iterate over   For example:   PrintSystem: Required NameComponent and PrintComponent => EntityId1, EntityId30, EntityId44, EntityId64   Then the system is probably a lot more flexible and easier to implement. It even is contigous in memory but it doesn't necessarily iterate contiguously over the components.   For example the components of EntityId1 and EntityId30 could lie far away in memory from each other.   Any tips are greatly appreciated.
  6. Maik Klein

    Am I crazy for wanting to switch from Ue4 to Unity?

    Much of those costs are also the source of the strengths. I don't think it is "longer than they ought to be". Yes, it takes more time, but that is a cost paid for an actual benefit.   The performance killers are well documented. Opening up every #include is time consuming, and features like template expansion cause compilation time to grow rapidly. However, the benefits from those compilation costs can be amazing.   One of the strongest features of the language is that the compiler digs deeply into every function and searches for things to elide and eliminate, nested calls to inline, code to relocate and merge, and evaluate an enormous number of potential substitutions in order to save a few nanoseconds at runtime. Trying to do the same thing with more modern languages, the deeply-nested call trees that ultimately resolve to a single data read, the logic that in some builds vanishes completely, these are opposite of the modern language functionality.  It is possible to get some of that benefit with JIT compilation and hotspot analysis done at run time, but that moves the cost to a different time that is often unacceptable in games.  Sure it is fine if one of the load-balanced business servers in a server rack slows down for a moment for a hotspot optimization, not so much if the game stutters.   The compilation model used by C and C++ and several other older languages include features that are completely at odds with features in more modern languages.  You cannot perform the heavy optimizations, the heavy stripping of dead code, extracting logic from common classes or from deeply-inlined calls, the complete removal of unused logic and functions, while at the same pulling in features like complete reflection of classes.        So yes, the compilation times can be much faster in modern languages.  For fast iteration that is a good thing.  But since games are still pushing computers to their limits, there are many times when those extra compile times provide major benefits that cannot be recouped in modern languages.   It is a tradeoff. Use the right tools.     The same for switching from ue4 to unity. They are similar tools, but they have differences. If one is a better fit for the project at hand, use that one.   This might interest you http://blogs.unity3d.com/2014/05/20/the-future-of-scripting-in-unity/
  7. Maik Klein

    Am I crazy for wanting to switch from Ue4 to Unity?

    Well I am following Ue4 guidelines. I started with the ShooterGame example which already had around 70 header files.   They create a file called something like MyGameClasses.h which contains every header file from your project. Then they put this header file in MyGame.h and MyGame.h needs to be in every file that you create.   Note that MyGameClasses.h is auto generated from their build tools. Then they use something called a unity build where they put everything in one file and then hit compile.    I ripped everything apart and I am managing my headers now manually with proper forwarding etc and I turned the unity build off. Also they have a tool that parses every header file to generate the necessary reflection code which also needs some time to run. I have also put most header files in the .cpp files so that I can avoid an additional header parse.   Now I am pretty sure I can optimize the build times a bit more because it took me 3 hours to go over every file and fix the dependencies and I probably have done a few mistakes but I don't think that there are any low hanging fruits.   For the architecture I don't think I have too much freedom If I want to use unreals gameplay framework. But I still don't know why it has 27 dependencies, at least I can not find that much. I think it has something to do with their build tool and the way they generate the reflection code. I should investigate further.   I also do not want to use blueprint, I am not a big fan of visual scripting, also the blueprint system comes with its own problems.   I am thinking about integrating D or C# but I am not sure how much work that would require and I really have no experience with this kind of stuff.
  8. Maik Klein

    Am I crazy for wanting to switch from Ue4 to Unity?

      Honestly, 100 seconds is nothing to complain about. Actually 100 seconds for a build is blazing fast compared to the stuff I have to deal with daily. You can barely get up, walk to the kitchen and pour yourself a cup of coffee in that time!   If you want to get stuff done stick with the tech you're familiar with. Switching your entire technology base just because you don't like to wait two minutes for a build is just insane.   EDIT:   Fun fact, while typing this post originally I was actually waiting for a build to complete. I can guarantee you it took longer than 100 seconds ;)   Just to be clear, we are talking about incremental builds right? I usually program with some sort of REPL where I hit the compile button several times are minute. I probably have to lose that habit when I code in C++.   But it's jit'ed so you won't notice the "second" compile time. And if you do a release build I think Unity converts the the IL code to C++. I think they call it IL2CPP not sure if it is already live though.
  9. I am on the verge of finishing university and I haven't really made any projects even though I am programming almost every day.   3 moths ago I decided to start a project that I will actually finish. It will be a coop game. I started in Ue4 and I think it is a really great engine but my project is starting to get bigger and bigger and my iteration times are decreasing rapidly. I have around 140 files and my compile times are getting worse every day. A simple change in my Character.h will result in a 100 sec build time. I am already managing all my header files by myself and I decided not to use the unity build feature but it is still not great.   To be fair this is the worst scenario because my Character.h has 27 dependencies but it is also the file where I am currently spending the most time. All files are on an SSD. I really don't enjoy working on the project anymore.   I think I really want to move away from C++. I know that there is Mono for Ue4 but it doesn't seem to be a very active project. I think if I want something like C# or D in Ue4 I would have to maintain the bindings by myself and I am not sure if that is what I want to work on right now.   So I am thinking of switching to Unity. But Unity comes with its own problems. The built in networking seems to be very bad and Unity is actually working on a new networking implementation called "UNET" which is already available in the 5.1 beta. But the beta access is limited to pro users which cost $1500 or 12 month * $75 which is too heavy for a student just to get beta access. Then there is something called boltengine which seems pretty neat but it is maintained by one person and it is still in beta and costs $80. Overall Unity feels pretty bare bones compared to Ue4 but programming is actually pretty fun, everything compiles instantly and errors don't crash the editor (at least not yet).   I am not sure what I should do. Am I crazy for wanting to switch from Ue4 to Unity?
  10. I am studying computer graphics with opengl and d3d and I am looking for a game engine that allows low level tinkering. For example I should be able to implement my own lighting solution.   I tested many engines and I know that I can create my own shaders in unity and udk. I also know that unity offers a good amount of shader access, someone recently implemented voxel based global illumination.   Do you know if the same thing is possible in UDK? I am not sure how far I can go with the material editor.   Maybe there are other quality game engines like unity or udk that allow low level programming?
  11. Maik Klein

    What XNA really is

    i only want to develop on windows. i thought the core of XNA is c++,mhhh.. well i just read it in some forums. how big is the perfomance tradeoff ? edit: what alternatives do i have ? i made a quick google search and found this => http://www.sfml-dev.org/features.php its written in c++ but usable with c#, dunno how this works out for game dev. maybe u can give me a better alternative ?
  12. Maik Klein

    What XNA really is

    okay XNA looks pretty interesting i think i start with http://www.3dbuzz.co...uctid=79&ref=12 i would love to read some books / guides around 3d application , like lightning system physics etc. what would you recommend me to watch / read ? edit: http://www.amazon.co...32708061&sr=8-1 http://www.amazon.com/Microsoft-Studio-Creators-Second-Edition/dp/0071614060/ref=sr_1_3?ie=UTF8&qid=1332708061&sr=8-3 these books sound quite interesting
  13. Maik Klein

    What XNA really is

    i want to create a beautiful looking FPS shooter and i have plenty of time to create it. Would you say that if i invest lots of time i could get a really good looking game (engine?). I dont mean the graphic provied by the assets from the designers, more like realtime lightning , realtime GI , images based reflections etc. Will ms update XNA to provide dx11 features ? I just dont want to waste my time. i thought of starting with 3d buz XNA 101 and if they wont provide dx11 support i can easily swap to ANX http://anxframework.codeplex.com/wikipage?title=HowTo%2fConvertXna&referringTitle=Documentation because it provides openGL 4.2 and dx11 and the proejcts can be easily converted. well thats my plan atm
  14. Maik Klein

    What XNA really is

    hey, iam a proammer since ~ 2 years and i know c# java and lua and i want to create a game. I know there are plenty of "free" game engines out like unity ureal and cryengine3. But I have a very special game idea in my head and i have plenty of time to realize this idea. the problem is that i have to adjust my gameidea because some conecepts are not 100% implementable in the these 3 engines. What isnt a big problem. So... i just found XNA. so what is xna? i already know its a framework. but what does this mean ? what is in the framework ? ( drawing , lightning , physics, ai ). Are there limits , if yes what are these limits ? I also read that its very complicated to create a 3d games , they said XNA should be only used for 2d games , is this statement true ? what about the perfomance of this framework ? is XNA capable of directx 9 , 10 or 11 ? i know there are other frameworks like ... hmm ANX ( http://anxframework.codeplex.com/ ). what alternatives do i have ? And why should i use XNA i know that are a buch of questions, but i couldnt find an answer to them. thanks.
  15. Maik Klein

    Engine of choice

    i think i will choose udk
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!