Unity3D/UE4

Being professionals in 3D rendering and performance-intensive software development we find tools like Unity3D and Unreal Engine natural targets on which to apply our experience. We provide the following services for companies that use Unity or UE4:

Shader programming

We have solid experience with shader languages like GLSL and Cg as well as with Unity’s ShaderLab and Unreal’s Material Editor. Using a custom shader program it is possible to create unique materials and post-processing effects.

Plugins

One of the remarkable features of Unity3D and Unreal engines is extensibility. Custom plugins allow the addition of new features to the game developer’s toolbox. While it is mandatory to use C++ when developing for UE4, that’s not the case with Unity3D where one can write plugins using C#, Java or native code (C/C++ and even assembly languages). For performance-critical subsystems like AI and math it is better to use unmanaged languages as they outperform C# in most cases. Also any possible graphics- or gamedev-related library will have already been written in C or C++, so why not just wrap it into a plugin? Not every Unity3D based gamedev studio is capable of writing  complex C++ plugins or porting low-level code to C# or JavaScript, which is bound to be time-consuming and comes with a performance penalty.

Architecture revision

Most tech startups have only one goal in the early stages – to ship the software. The deadlines are so tough that neat software architecture is the least important factor in the process. That’s especially the case when remote teams are hired without strong technical supervision during the development process. Once the application is shipped to the end user, a new marathon begins where the focus on the addition of new features and existing code-base maintenance. During this process, if the foundation is fragile it is going to be very hard to scale and maintain such software. It is going to be similar to a snowball rolling downhill accumulating more and more issues until the whole maintenance of the product becomes a major problem for the business. Standard software design practices exist to make sure the software is flexible to modification. In other words, if adding a new feature can easily break, or significant parts of it require rewriting, that means the architecture of such an app has serious design flaws. We provide an Architecture revision service. In a nutshell, we read and analyse all of the source code of the app and write a complete summary of the problems found and the possible ways to solve them.

The goal of the technical review is to reveal existing and potential problems in the following areas:

  • Software architecture and design. Again, good architecture and software design guarantee ease of scalability, issue tracking and long-term maintenance of the product. We review the source code in order to get the whole picture of the current state of the overall architecture and code design. The report will include the list of flaws and possible solutions.
  • Performance. Performance checks come in two flavours: 1) memory usage and 2) Frame time budget(both CPU and GPU side). These two are interdependent, especially in the domain of embedded (mobile phone) hardware which has limited resources. The app is checked for memory consumption, especially assets (textures, 3D models, algorithms), size and run-time memory usage practices. We compose a detailed report based on the findings and measures to be taken to fix the problems.
  • Documentation. Even at the early stage of software development, commenting on code is considered an essential practice. It saves time (which is money) for new programmers to study well-documented code and helps the experienced ones refresh their memory about the code parts which haven’t been touched for a long time. Software documentation usually consists of two parts. 1) Code comments (inside the software) and 2) an application manual. It should include an architecture overview, code design, execution flow, UML and a user guide.