Feral: Prototype Milestone


Our team’s Prototype presentation was a bit over week ago on 11/3. This milestone is one of the most difficult in Project classes because of the short amount of time from the previous milestone teams have to progress on their projects. The ideal goal for this milestone is to have thoroughly prototyped your game concept in an existing engine and have at least a very basic prototype of your game concept in your team’s custom C++ engine. With that in mind, we’re still a bit behind on the gameplay. The only gameplay currently in our custom engine is movement, so there’s still a lot to do. From this point forward, our goal will be to have a very simple version of our game in our custom engine by the end of the semester, which is in about a month.

Feral's Look and Feel Illustration by Team Artist Ian Davis

Feral’s Look and Feel Illustration by Team Artist Ian Davis

Simple Skinned Animation

Having worked mostly on skeletal animation during the previous milestone, my first goal for this milestone was to get skinned meshes animating. I started out with a very simple animation of a cylinder with only 4 bones rotating around. My first few compiles were ridiculously incorrect. Triangles were expanded out to seemingly random places, only a small subset of the triangles actually animated, and the animation they were doing was obviously incorrect. These initial issues were related to the animated vertex data struct and the inverse bind pose matrices. After fixing those problems, I was able to get the following still incorrect, but significantly less incorrect result.

Initial broken state of skinned animation, with bone indices being drawn with debug shader

Initial broken state of skinned animation, colored by debug shader drawing bone index information

I brought the project to my TA who suggested that it might be the result of my duplicating vertices along uv seams. This duplication happens in the converter, so I went into the converter to try and find the issue. I looked at the places where I was duplicating vertices along uv seams but it wasn’t immediately obvious what the error could be. So I identified some possible sources of error and refactored the parts of the converter that were associated with those possible errors. When the refactoring was done, the refactored systems were improved and the skinning error was gone.

Skinned cylinder mesh correctly animating

Skinned cylinder mesh correctly animating

 

Complex Skinned Animation

I had naively hoped at this point that my system would just be able to handle any single mesh animation, but I knew there were most likely edge cases or incorrect assumptions in my system somewhere. So the next thing I tried was the run animation for the chimera. Going from the cylinder’s 5 bones in essentially a linked list to the chimera’s 80 in a complex tree would be a pretty solid test of my animation systems. As expected, it did not work on the first try.

Broken Chimera run animation

Broken Chimera run animation

The rough movement of the chimera looked somewhat correct, it just seemed like the mesh was getting skinned to the wrong bones. So I started debugging the bone indices. The assumption I made that was breaking the animation was that every node in the skeleton tree would be used. Because certain joints in the animation were not skinned to any vertex, they did not show up in the mesh’s skin’s clusters in the converter. I got my bone indices from depth first searching the cluster. Bones are associated with indices by depth first searching the skeleton. Because the skeleton had nodes that the clusters didn’t, the indices did not line up. After fixing this issue, the chimera animated correctly.

Chimera correctly animating

Chimera correctly animating, model and animation by Team Artist Sean Gill

Split Screen

Split screen is going to be necessary for our multiplayer game, so I also worked on that this milestone. We’re most likely just going to support 1v1 with horizontal split screen. However, once I set up the system for split screen, it was pretty easy to set up and render to any amount of viewports, so I added some other configurations that might be useful for testing.

Four Panel Split Screen

Four Panel Split Screen

Conclusion

Our engine is in great shape, we have a month to make a very simple version of our game in it. Although our gameplay is a bit behind, I’m pretty content with our current progress. I’m confident we’ll have a solid project to turn in at the end of the semester and I’m excited for what the game could become by the end of next semester.