Development Blog - 11/13/2020

Work In Progress / 13 November 2020

Brief Update

Hello all,thank you for tuning in to my third development blog post. This post comes about a month after my last one which, I find, is a really good time period between updates. It gives me plenty of time to make progress as well as giving me miniature deadlines to keep. I’ll start as I did the last time with a brief update about my progress and then go into more detail later. In summary, since the last post I have fixed the visual issue where the player appeared to be squished, switched map editors and blocked out a rough level, added new features such as bullet impact decals and sound effects, and created a brand new weapon. That’s about as brief as it gets, so now i’ll just dive into it.

Early Progress

Immediately after my last post, I went back to work. The very first thing I did was fix the issue with the first person view model appearing “squished”. The configuration I am using to achieve the first person view uses one “main” camera and a “first person” camera. The main camera sees everything except for the models used in first person; the first person camera sees only those first person models. This includes the weapon models and is done to allow the field of view to be changed without warping and scaling the first person weapons and HUD. The view layers were configured incorrectly in such a way where the first person camera was not actually seeing the models which caused them to clip and warp. To my mild irritation, I fixed this the very next day after publishing the blog post. Regardless, you are able to see the changes now.

Next, I worked on adding sound and visual effects for the Mannlicher gun. I quickly composited some foley and found some gunshot sound effects online. I then decided that I needed some functionality for the gun past simply running animations. So, I programmed a bullet firing effect and a bullet impact effect. These were simple enough but required implementing quaternion rotations which I lacked prior experience with. The bullets work by spawning at the end of the barrel when the gun fires and are impelled in the direction matching the (quaternion) rotation of the barrel. When encountering a collision object, the bullet runs a simple script and decides what to do (such as deal damage or create a bullet hole on a wall) then destroys itself. When the bullet impacts a wall or other surface, it instantiates a decal projector that projects a simple bullet impact decal. I now need to add a timer that destroys the bullets and decals once they have existed for a set amount of time in order to ensure consistent performance or, find some other solution to prevent an infinite buildup of game objects. This was completed by the 20th of October as I began to turn my attention to level design.

Level Design

As I mentioned at the end of my last post, one of my immediate goals was to prototype a level. At that time I was using the Yumponics map editor which, while quality software, did not meet my needs. Shopping around for other options, I was suggested the software called ProBuilder. As it turns out, ProBuilder used to be a Unity Asset store asset until it was integrated into the Unity Packages, thus why I did not find it initially. Regardless, on the 29th of October I decided to switch my level editor to ProBuilder. I believe this to be one of the best decisions I have made during this project.

The advantage of ProBuilder is that it allows for the creation of custom level assets by giving the user tools to manipulate the geometry of models in-engine that can then be placed in a scene. Given my 3D modeling experience, this workflow is extremely intuitive and precisely what I was looking for. I desperately tried to avoid the potential process of creating a model in Blender, exporting it to Unity, only to then find out that the scale was wrong, or that it didn’t fit how I wanted and then being forced to repeat the entire process over again. What I needed was the ability and tools to crudely sketch out the level in-engine, allowing me to then refine that rough sketch with external tools.

Enthused with my new workflow, I dove right into planning out the rough design for the level which is broken into 3 parts titled sub-levels A, B and, C. By November 3rd, I had completed a rough blockout for sub-level A. 

I made sure to encapsulate all of the models made with ProBuilder into Unity Prefabs. Prefabs are essentially groups of objects that are meant to be instanced (copied) within a scene, meaning that all instances of a Prefab are identical copies of the original. For example, say I am using a pillar asset several times in a scene. Without using a Prefab, editing all of the pillar instances would require manually editing each copy with ProBuilder every time I wanted to update the same pillar. Instead, by placing the pillar model into a Prefab, each copy of the pillar will mirror the changes made to the original Prefab. As a whole, utilizing Prefabs and ProBuilder this way allows for far simpler asset management and is, so far, resulting in a very smooth production.

After much trial and error, I have been able to find a good approach to level design. I attempted to create a modular kit which did not work all that well. I tried the block approach with YuMe which was also unsuccessful. Now, I create the blocked out assets in-engine then export those to Blender and Substance Painter which makes for a very comfortable workflow. From a technical standpoint, this is great, simply because I found a tool that works. On a higher level, I now know the methods and techniques I will be using to bring this project to completion.

Winchester 1883 Prototype

After working for several days to create the level blockout, I was satisfied with my progress and wanted to turn my attention back to asset creation. I had actually begun work on a new weapon, the Winchester 1883 Prototype revolver, on the 22nd of October however, I only finished a simple blockout before switching my attention to level development. By the time that was done, I was rearing to jump back into modeling.

The whole process took about a week, starting on the 7th of November and rendering the final shots on the 12th (Cycles is rendering as I write this). This week included high and low poly creation, texturing and a small amount of animation work. I used RetopoFlow for the low poly models which might not have been the most efficient solution for this particular project but, I think the end result is perfectly adequate. After retopologizing, I imported the model into Substance Painter for texturing. I realized that my UV unwrapping was causing aliasing artifacts when I was baking mesh maps (due to misaligned UV islands and low quality Painter bake settings), so I edited my UV unwraps and increased the bake quality in Painter in order to make the best out of non-optimal circumstances. Properly fixing the issue would have required re-doing the bulk of the project however, the situation was ultimately salvageable without the need for a total redo. In the future, I will be focusing much more heavily on planning UV unwrapping from the beginning of the project in order to mitigate issues like these down the production line. 

As far as design goals go the reference used is a real gun, and was a prototype of a revolver produced by Winchester before their “gentleman’s agreement” with rival Colt. The real prototype’s frame is an unfinished steel material with many manufacturing marks still present, lending it a distinct look. The wood grip is of a very high quality finish contrasting the appearance of the metal. I sought to replicate both of these looks with the highest fidelity possible, as I found this contrasting effect to be the most appealing part of the design. 

Reference Image, courtesy revivaler.com/

However, a few changes had to be made from the original, such as the bracket holding the ejector rod. That aspect was, truthfully, a necessity born of poor planning. Early on, the underbarrel section was accidentally misaligned with the cylinder chambers so, later in the modeling process, the ejector could not line up with the chamber. To solve this, I decided to add a simple bracket to the barrel to hold the rod and ensure its proper alignment. I found this option superior to completely re-working the model, as it adds character and unique detail while still being faithful to the reference. I think the design holds up, but I found this detail worth noting.

Overall, I am quite pleased with this piece, even though it has its visible flaws. I was able to create this asset much faster than my prior gun and with a much higher level of quality. More images can be found on my portfolio page. I really enjoyed making it and I look forward to my next asset.

Direction

Now I would like to have a more meta-discussion. I was not exaggerating when I said that using the ProBuilder tools has been the best decision I’ve made so far. Being able to create a rough concept so quickly was a huge boon that allowed me to really start seeing what the final product will look like. It has given me immense motivation and confidence about the future of this project, and I hope that this blog post illustrates that motivation. I’ve been absolutely thrilled that I get to share this experience with everyone and I hope that in the next post you will see the continuation of this momentum.

Next Time On…

My goal for the next post is to have some basic textured props and level geometry that can be reused for the rest of the level. I will also ideally have at least sub-level B blocked out, and have implemented the inventory system (considering how I have two usable weapons in the game). I will also probably go into detail about the currently incomplete animation for the Winchester 1883 that I have big plans for. I also intend to utilize the taser model that I presented in my first post in order to have a third playable weapon (as it’s not currently in a playable state), with the fourth soon after, as my next gun is currently in the works. I think that should keep me busy for another month.

With that, I thank you from the bottom of my heart for taking the time to read this post. So much time and energy has been spent on this project and the support that everyone has shown means the world to me. I could not do this without all of you. Thank you, and I will see you in the next one.

Report

Development Blog - 10/10/2020

Work In Progress / 11 October 2020

Brief Update

Hello all, I'd like to start this dev blog off with a brief update on my last month or so of progress. If you're in a hurry, this first section will cover the basics of what I've been doing.

The most significant thing I've done is to model and animate a first person weapon model, the Mannlicher 1901, and integrate that into the game. The modeling process was smooth, but when it came time to rig and animate, I ran into a bit of trouble. It took a solid week of effort, but the rigging and animating finally got to a state where I deemed them acceptable for an alpha version of the game. I'll go into more details on my process for that later. I also spent a few days writing the code that controls the weapons and player inputs, so at the moment, it is possible to move, shoot and reload, however the functionality for actually firing, playing sounds and VFX are not implemented, only the animations currently play. The final area I've been working on is the level design. I continued to flesh out the interior wood kit that I presented in the last blog, it now contains several more parts that are fully textured. I have also started using the Yuponic Map Editor for Unity to block out the level. The intent is to prototype the level to facilitate the development of level kits. 


Mannlicher 1901

The past month's single largest accomplishment for has been the creation of the Mannlicher 1901 gun for use in the game. After working so much on the level kit, I needed to take a break from that and work on something else. I decided to make a fully realized weapon that could be implemented in the game. This meant it needed to be fully rigged and animated, something I was not at the time experienced or familiar with. It was also around this time that I committed to an exclusively first person model as opposed to a merged first and third person model. What this means is that the player will not technically have a body, only arms and a weapons. This decision simplifies the project greatly, at the cost of some immersion. It also means that I could create a weapon that could be used and animated in a first person perspective without worrying about creating full body animations.

Once I had decided to make a gun, I began searching for a design to use. The only other weapon made for the game so far was the taser (as seen in my last blog post), which has a rather fantastical and creative design, I decided to go for something more grounded and create a gun that already exists. I found the Mannlicher 1901 while flipping through the pages of my copy of "Guns of the World", and I simply adored the design. It has a very unique shape but it is still quite stylish. I wanted to avoid modeling gun that are commonly seen in other games (the 1911, the Luger, the Mauser C96 for instance) primarily to set this project apart. And so I began the modeling process.

My modeling process (for game asset applications) consists of gathering reference material, blocking out the model, creating a high poly model, retopologizing to low poly, baking detail maps, then finally moving onto texturing and animation. After deciding on the design, I gathered as many reference images as I thought I needed (from different angles) to fully capture the weapon in 3D space. I then managed to bang out a rough blockout in a few hours. 

I inserted an extra step between the blockout and high poly steps to create a version using a subdivision surface for each piece to give the model a nice smoothing pass. I took this model and added detail such as edge wear, scratching, protrusions, tool marks and engravings to create the high poly model. 

Since the high poly model was not dramatically different from the subsurface division model, I took a shortcut and used the subsurface model (after deleting the supporting edge loops) with a shrinkwrap modifier to create my low poly retopologized model, the one that would end up in the game. This low poly model ended up having 5,614 tris and 2,976 verts. It took a bit of fiddling around with the shrinkwrap modifier and the blender smoothing groups to get a good normal map bake. The result, I think, was very good. After UV unwrapping I imported the model into Substance Painter, spent a few hours texturing and adding further detailing, then created a combined material that can be used with Unity's HDRP Metallic Standard workflow. Having the modeling and texturing done, it was time for animating.

Animating this model was difficult. I did not have nearly any experience animating, so by the time I was finished I had rigged the model from scratch twice, and animated it from scratch three times. My first attempt at viewmodel animation saw me animating the pieces of the viewmodel directly, with no attached armatures except for the arms and one for the frame which all the separate meshes were parented to. It was a mess and would not import correctly into Unity. 


After doing some more research I decided that I needed to start from scratch and completely re-do the rig. I also decided that I needed only one rig that was connected to each part of viewmodel. One (retrospectively) amusing challenge that took far too long to solve was how to parent individual bones to mesh vertex groups. As it turns out, the bones and the vertex groups simply needed to be named the same thing. Easy, if you've done it before. At any rate, once I got a well functioning rig, I then proceeded to lose all my animations because if an animation action in blender is not bound to any object, it is considered an "orphaned data block" and it purged when the file closes. I ended up solving this by giving the actions fake users to preserve them, but the damage was done and a third round of animation was in order.


Finally, I finished up the animations and exported them to Unity. This was rather straightforward, and now that I had a complete animation set for an object, I was able to start to learn Unity's animation system. Creating an animation graph in Unity went surprisingly smoothly and I managed to create a functional graph with only a few hours work. 

The next two days were spent programming the functionality for the weapon responses to user input which went smoothly as well. I had anticipated it taking at least two more days, so this blog post is getting out earlier than I actually intended. I designed the weapon handling system with architecture that supports the rest of the weapons the that will be implemented by the end of development.


With that, I was able to add my first functional weapon with animations to the game! It still has issues, no sound or VFX, culling issues with the first person camera, along with looking weird and squished. However, I am satisfied with my progress so far and am confident that these issues will be resolved. I downloaded the first reference image on the 20th of September and with today being the 10th of October, it took about 3 weeks of work (I was working on other things as well during this time). I estimate that I could get another asset to this same level of completion in half the time; given that I won't need to learn many animation concepts for the first time. Overall, I learned a huge amount working on this asset and I derived a lot of satisfaction when it was finally finished.

Level Design and Environment

Following my last post, I continued work on the wood paneled interior kit. I expanded the kit to around 18 assets including more wall types, floors, a ceiling tile and an arched wall section. The primary issue that I face developing this part of the game is my lack of experience with level design and environment art. On one hand, I need to have architectural kit pieces that I can play with in the editor to make a level, on the other, I need to build out a level in order to know what pieces I need. This has made getting into production a difficult task. Therefore, I have decided to start using a level editor to create a rough blockout of the level. The specific editor I've been using is the Yumponic Map Editor, or YuME for short. It has been invaluable so far for prototyping and I hope to showcase this in a future blog post. 

Goalposts

Within my last blog post, I didn't specify when the next blog post would come out. I didn't have an idea of what I would be accomplishing or where a cutoff point would be, so I chose not to specify an exact date. As I am now properly tracking my progress using this blog, I can say what I would like to include in the next post, but I won't say when. Ideally, I would like to to post again in a month or so; that seems like a reasonable goal, but I prefer to track progress by tasks accomplished rather than by time elapsed. My immediate plans include prototyping a map, debugging some major issues regarding visuals, and programming the basic functionality for the inventory system. I may also create another weapon soon as I have a few designs in mind and would like to see how much faster I can build a game ready asset. I'm not currently releasing a build of the game because its still very low quality and there is nothing to look at but, if you are interesting in playing the current build, please reach out to me and I will provide a download link. 

I intended to share more information regarding design goals and plans in this entry, but it became rather lengthy so perhaps that will be included in the next post. Regardless, I am very, very grateful to you for reading this post. I've been working hard on this project and the support that everyone has shown means the world. Thank you, and I will see you in the next one.

Report

Development Blog - 9/15/2020

Work In Progress / 15 September 2020


Introduction

I've been working on a project (with a working title of 'Intelligencer') for a while now, and I have decided that the time is right to begin a development blog articulating the process for creating this project. Intelligencer is a FPS game currently under development on the Unity engine and will feature common FPS elements with an emphasis on variety of gameplay options. Since this project is being developed by myself only, I intend to maximize efficiency during development. The game will consist only of a single level and I will release it as a free demo, since the true purpose of this project is to gain experience and build out my portfolio. My thinking is that having the game playable for free will better facilitate the exposure that I get from making it.

The original concept for this game was developed during April of 2020, but other responsibilities prevented work from starting until September. It is likely in the future that I will attach a link to the design documents originally written for the game, but they are currently outdated and inaccurate.

Early Decisions

One of the first choices I made was on the game engine to use for the project. I researched and weighed my options but finally decided on Unity over other engines such an Unreal 4. The reasoning for this decision was that, despite its reputation, Unity can produce very high quality games and is straightforward enough to use. Plus I already had some experience in using C# and the Unity editor. So far I have not found the engine to be any sort of limitation. I also chose to implement Unity's High Definition Render Pipeline. Building custom shaders is currently a bit beyond me, but I was not satisfied with the look that the forward-rendering in the Universal Render Pipeline produced. This decision has been satisfactory as well so far.

Early Work

Once I began working on the game, I added a stand in model for the player character along with a weapon I called a "taser" due to the stun effect that is associated with it. It was inspired by early bipolar electric motors with two large copper coils which generate charge, the idea being that if you were to touch these to someone they would be shocked and "tased". Attached is my original very quick sketch of the idea.


I then quickly modeled this in order to get a feel for the Blender to Unity asset workflow. I added a simple animation as well to "dip my toes" into the Unity animation system. Below is a render of the model.

Concept and Design

The original design of the game was to create only a single map, though in theory more could be made due to the modular workflow that I have been following; a vertical slice, essentially. Originally the player would be given the choice to start at one of three locations, 'safehouses' and would be tasked with reaching one of the other two safehouses in order to retrieve some object. Currently, I am working on only having one starting location and one destination to simplify the level designing process, though I don't reject the possibility of fulfilling the original design sometime later in development.

A few major sources of inspiration for this game come from games such as Deus Ex, Dishonored, E.Y.E Divine Cybermancy, and Bloodborne. I have always enjoyed the way in which immersive sim games give the player freedom to accomplish their goals, and I believe that having multiple methods for beating the level will grant (what is already only a single level) some amount of replayability. Another major design goal is the movement system. Personally, nothing is less pleasant to play than a game with a poor, clunky movement system. I intend on designating time to ensuring a good feeling of movement.

Aesthetically, my design goals are for the architecture to be symbolic of the themes of the game. Deep storytelling or worldbuilding are not among my design goals, but an environment ought to have some kind of internal logic to them, even if that is never expressed to the player directly. The location the player starts in will be an 19th century building, likely a kind of gothic church, and they will pick their starting gear. As the player progresses through the level, they will encounter enemies and navigate through the streets of a city which grows progressively more modern, until they reach a final confrontation in a towering office building. This is symbolic of a transition from old Aristocracy to modern Industrialists, and the design of the environment reflects this. In the future I will be likely to include reference and inspiration images with my posts.

Current Work

Currently, I have a working design for a part of the level which I have begun to partition off into kit pieces. I am currently working on the interior office kit pieces, and then I will progress to exterior pieces. The first post that I made on my Artstation account was the trim sheet material used to construct the interior kit. Below is a render of the current progress on the first kit. It currently includes wall, door, floor edge, and floor center pieces.


Roadmap

My current plan is to complete at least the kits required for the internal and external office building. Once these are complete (or at least 80% done, alpha quality), I will move onto blocking out the level, adding a low grade of detail. Once I have (at least part) of a level to work with, I can start to build out the development aspects of the game such as weapons, inventory, AI, etc.. After sufficient progress has been made there, I will then be at a stage where more assets can be built and integrated. I intend on following with updates to this blog as well, as I believe having a record of this process will be valuable for reflection when the project is complete. 

Thank you for reading, and I appreciate any feedback regarding this project or blog post. Cheers!

Thomas Vanek

Report