Oregon State University|blogs.oregonstate.edu

Let’s Launch a Game and How It’s Going So Far

  March 5th, 2025

Why did you choose your project, and has it met your expectations thus far?

I chose this project because I knew it would allow me to gain practical coding experience alongside 3D modeling practice. Learning software engineering practices for game design is important for my future career prospects. Learning 3D modeling is important for my development as a 3D artist. This project seemed like the perfect blending of these two worlds for me.

Keeping up with project deliverables alongside the bureaucracy of a project like this has been a slog. That being said, my skills in 3D modeling have grown exponentially, particularly within the scope of game asset creation. Working with my experienced teammates has also grown my coding skills. We have been learning a framework that is improving my understanding of clean, scalable coding practices. This is to say, this continues to be a very challenging project, but I am glad I selected the project and the team that I did.

What was the most difficult challenge, and how did you solve it?

The most difficult challenge I have run into so far is animation. Blender’s built in animation tools are poorly optimized and it feels like navigating even more of a maze of UI than the already bad 3D modeling pipeline. Now that I’ve wrapped my head around it, however, I am able to create smooth animations that export properly to Unity without a hitch almost every time. Almost. Earlier stages of the animation pipeline have also proven difficult and I have learned new skills including retopology to ensure less jank in my animations.

How have you handled getting ‘stuck’ on the project?

Multiple blockers have set me back during development. Most of them have been related to gaining knowledge or skills that I do not yet possess. One hurdle was animation. To resolve my lack of understanding, I went down rabbit holes of tutorials. There is a wealth of knowledge on Blender and Unity and how they interact. After vehemently searching for the right tutorial, I always inevitably found it and was able to add that skillset to my repertoire. For topics like retopology, I took on a more structured and project based approach to learning. I actually got a book on character design in Blender and used the included exercises to improve my skills using the more formal format than simply YouTube tutorials. While these blockers were frustrating at times, I think the deadlines of this project have accelerated my learning on these tough subjects and I am glad I pursued foundational solutions to these problems rather than just quick fixes.

What have you learned about working in teams?

I have taken business classes for my minor where I have had to do 90% of the work for everyone in a project group. These horror stories of negligence haunt me every time I start with a new project group. This team is not like that! Each one of my teammates has there own specific set of talents and has pulled through week after week through adversity to meet our deliverables. Now that I am seeing the different aspects of our project coming together, there is a true sense of achievement and comradery for what we have built. Working in a group that functions so well, I have learned to let each expert do what they do best and prevent myself from trying to learn every aspect of the project. I have also learned that it is a good idea to communicate general knowledge and keep up to date on a surface level with all aspects of the project. This helps prevent wasted time and redundant work.

If you’ve made it to the end, thanks for reading! Hopefully you can relate to some of my insights here.



Technologies

  February 4th, 2025

My favorite technology so far during development is Blender, with Affinity Photo as a last-minute runner-up. My least favorite software would have to be Adobe Photoshop.

Blender

I have extensive experience working in Blender for manifold 3D modeling. However, game design has honed my skills in creating efficient topology along with new methods of texturing 3d objects. Further, creating a full game scene has given me ample practice in creating assets rapidly during our fast-paced development cycle.

Affinity Photo

This software takes everything that is good about Photoshop and packs it into a more intuitive, aesthetically pleasing user interface. And not to mention, for a one time price less than three months of Adobe’s “competing” subscription. I don’t think I will ever be going back to the Adobe suite after discovering Affinity’s products.

Unity

I had difficulty learning certain aspects of the Unity Editor as it is a large application with many different modules. Particularly, it was hard for me to learn how to use materials created in Blender and imported into unity. Now that I understand how to extract materials and associate them with textures, it is intuitive and quite useful to be able to manipulate those materials within Unity.

If I could start over, I would consider using Godot as the game engine. We are only really using Unity for its grid system at the moment, so I think Godot would have allowed easier flexibility in how we integrated the code base. That being said, I believe we will be using more of Unity’s modules in the next sprint including the grid system and animation.



Best Practices (Functions)

  January 17th, 2025

As we begin the development cycle of our Let’s Launch a Game project, now is a good time to review general guidelines for writing clean code. While we have been working to maintain uniform formatting, informative naming schemes, and explanatory comments, there are other development philosophies that we can focus on to improve our code. Personally I found my research into common code smells the most useful. One design pattern that I think I often fall victim to is having Middle Men functions.

A Middle Man is a function that relies mostly as an intermediary between other functions. Removing Middle Men improves readability and can prevent potential downstream issues in future development cycles. Where I run into this issue most often is when I am contributing to an established codebase and don’t fully grasp the scope of an established function. I will often add additional functions within this function to do the bulk of the work. Paired programming and code reviews are one way to avoid this misunderstanding.

The figure below is an example of a middle man function. Within “Minion”, the main functionality is referencing is_frontline, this could be updated to a single call within action.

Figure 1 via: https://luzkan.github.io/smells/middle-man

Going forward I intend to avoid using Middle Man functions.

Something I would like to start doing more of is writing shorter functions. This may seem to be an opposing issue to writing fewer Middle Man functions, but I think writing shorter functions can actually facilitate a clearer hierarchy. When a function isn’t bloated and sticks to its intended utility, the code becomes much more readable and reusable. In terms of design principles this might often be referred to as using SRP or the Single Responsibility Principle.

References:

https://www.opsera.io/blog/what-is-code-smell

https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29



Keyframes and Scripts

  December 2nd, 2024

My teammate Jon’s one request this week was a walk cycle. Having never animated a walk cycle in 3D before, I was unsure how big of an undertaking this would be. About four hours and three YouTube videos later, the character was rigged and walking! Blender makes it surprisingly easy to animate a humanoid character.

While the animation is a bit exaggerated in some areas and robotic in other areas, I think it is a good base for future walk cycles. Recently, I worked with Jon to integrate this and an idle animation into our player movement script. The result is much more natural gameplay. It’s starting to feel like a real game!

The animation comes alongside a proof of concept of multiple systems within the game. I modeled a basic initial scene for the game after much back and forth during the design process. Jon and Matthew have been busy developing a robust player movement system, while Bran has developed an initial shader.

Reflecting on where I was beginning this term, I have learned many new systems within Blender. This enables me to develop assets of a quality I wasn’t sure I’d be able to produce for our game in this short timeframe. Of course, the assets we have currently are a bit janky, but I am confident that if we are able to narrow the scope of assets and revisions that the team will need to produce, I will be able to build some pretty polished characters and scenes.

I’ve familiarized myself with our current code base and hope to contribute more to our C# scripts. I will likely handle scripts for object interactions and the animations I create. This will streamline the process of uploading and integrating assets.

Over break, I will be working with Bran to develop a texturing pipeline that will work with the shaders we are developing. I will also build a block-out of our entire Bunker scene so that we can get started on a rudimentary game loop. Exciting updates to come!



3D Workflow for Game Development

  November 11th, 2024

My journey with the senior capstone project so far has taken the direction of honing my skills in using Blender 3D for game design. The “isometric” perspective lends itself well to our proposed farming game. While we could build a 2.5D title like Stardew Valley, we have decided that our specific game will benefit from a few different advantages of 3D. We are building a farming game centered within a post-apocalyptic world. Thousands of years after the collapse of humanity, the player is tasked with restoring the environment via agriculture. Two key levels of this game will be underground bunkers and the surface world. By building these levels in 3D, the meticulous process of managing transitions and depth within a large and varied environment is avoided. Another deciding factor for 3D development is that multiple teammates have experience with 3D asset creation and processes. Our experience will allow rapid development of a unique aesthetic that will help differentiate this title from other farming titles out there.

The above image is the most recent blockout I made of our v0.0.1 bunker level. While it still needs to be fully textured, shaded, and populated with assets, this provides a great starting point for the development process.

Something I am learning, working with my teammates, is that an initial concept may not convey the final vision very well. We are all eager to rush to the stage of development where concept becomes polished design, and ideas are fully visualized on the screen. It can be hard to meter expectations during early stages of design, so I have opted to finish one asset (the hallway) in order to show what something close to the final product may look like.

After a few stages of back-and-forth, I sought notes on the hallway asset. I found that my teammates are looking for a toon shader aesthetic with hard outlines. Notes also brought out that my teammates prefer contrast between bright and dark tones. This process of design and review is likely a good simulation of being a 3D artist. It is similar to the process of requirements gathering, except the clients are my teammates. Knowing this information moving forward, I have a concrete idea of what is needed for each asset. For hard outlines, sharp corners are favored over beveled geometry. Toon shaders simplify the interaction of materials and put the focus more on color value rather than material properties. I am glad we were able to describe these aspects so early on in development.

My prior experience with 3D modeling in Blender largely involves creating designs for my 3D printing business. 3D printing has a unique set of requirements, such as keeping models manifold, and notably, there is no major cap on polygon count. Game design, on the other hand, heavily relies on efficient topology with low poly counts. Because of this, I have held myself to a higher standard of efficiency when building concept models. Initially, this YouTube series on game asset creation in Blender by LMHPOLY was extremely helpful. It outlines modeling, texturing, and exporting a 3D asset from Blender to Unity while maintaining best practices. Adapting my previous workflow to this new set of standards, I now feel I am experienced enough to create any asset we might need for the game, given enough time.

My next focus will be modeling and rigging 3D characters. In our post-apocalyptic setting, there will be organic life, robots, and cyborgs. Each type of character represents a different combination of modeling techniques. For organic life, I will use subdivision modeling and rigs with weight painting. For mechanical AI, I will use hard surface modeling and rigid rigs via vertex groups. Cyborgs will use a combination of these methods. Below is a block-out of a cyborg Llamma trader that would likely pull carts of goods to be traded with the player.

When creating more detailed 3D art, a concept sketch is invaluable for referencing proportions, etc. Ideally, you can use sketches from multiple perspectives to facilitate the creation of 3D shapes against the reference. (As a side note, I have been working to further my 2D art skills. Inspired by my teammates, I think a more general understanding of art will improve my 3D work)

As with earlier stages of the project, I predict that further creation of concept art will be a great boon to development. With each new design, I learn new methods of simplifying the modeling process or improving the quality of assets for our game. Feedback from my teammates helps us hone the game’s aesthetic and design philosophies. In conjunction, these realizations will ensure smooth development.



About Myself

  September 27th, 2024

Hello all! My name is Brandon, and I’m a student based in Washington State (PDT) taking Ecampus courses at OSU. I actually started out on campus in Corvallis for my first two years of classes but transitioned to Ecampus due to the flexibility it afforded in running my business.

I run a 3D printing business full-time outside of school. This mainly involves designing 3D models and creating CG renders on the promotional end. Blender is my main 3D software of choice, but I also use Nomad Sculpt on my iPad and Fusion 360 for CAD projects. I am also learning OpenGL for code-based 3D projects! Below is an example of some of my work:

Outside of school and work, I enjoy doing anything outside with my friends! This summer, I went on a good number of backpacking trips and got really into mountain biking. Below are some photos of the highlights:

This term, I am taking CS 461, the first in the Senior Design Project series. I am most interested in projects involving 3D game development because I have been wanting to learn a program like Unreal Engine or Unity for quite some time and game development is the avenue within my major that aligns most with my interests. The project I am most excited about is Let’s Launch a Game because I am a fan of sidescrollers and working with this team would provide a unique opportunity in real-world indie game development. The Escape Room Challenge would offer the opportunity to build interactive 3D environments within a game engine and is likely the project that I am most qualified for. I am also interested in the AR Arcade Classics project after talking with Hannalore, a fellow dev, about utilizing VR Headsets and building this project in Unity.

I am also taking CS 450 Intro to Computer Graphics this term, along with my business minor-related coursework. I am excited for all the learning to come!