Friday, April 22, 2016

Ludum Dare 35 (Shapeshift) - Shapetrak

Ludum Dare 35 just passed and this time I'd decided to participate with my friend Brian Thuringer (designer). Check him out he's got great work.

First of all here's our game: http://ludumdare.com/compo/ludum-dare-35/?action=preview&uid=55791





After spending a night trying to hash out an idea, the theme, "Shapeshift," proved to be harder than we'd first thought. Having have been on more than a few overscoped projects, I'd really wanted to get a solid game out more than anything. I've been researching "game feel" recently, having had read through the book with that title (available here) and taking notes on the many available talks. After the first night, we were in a bad place, we had nothin'. We'd gone through at least 3 ideas, followed the trail to the end and realized it was a stinker. Demoralized, we packed it in. The next morning, after some back and forth, Brian threw out a rehashed version of a previous idea, far simplified this time. Shift a shape to fit through the walls; an infinite runner crossed with a rhythm game. This would be the basis for the current design. I said, "Y'know what, it's day 2, lets go for it."


At first we'd considered going 2D but given how simple the shapes were I'd suggested it'd be quite easy to do in 3D. We settled on it and he pumped out a few models. I got the mechanics together as well as the cool chromatic tile system you see in the game. About mid-day we had the basis for gameplay established. At this point I threw together a custom shader to hue cycle the background to be the opposite of the ground tile in the center of the camera. This was looking good.


The next day I went to work on some polish and game feel items like screen shake, screen flash, particles, and tweaking difficulty and gameplay values. I got a few sfx from Brian, a music track I whipped up and some UI elements in. A few custom and boxed screen shaders later (desaturation shifting, screen bending, noise, bloom, contrast, ect) and it was getting ever nearer to the final vision.

Monday arrived and after work I thought I had until midnight to polish off the changes. I'd planned to use FMOD to increase the tempo of the music (but not the pitch) and to have the spawning of walls to line up with the beat. Well that was the day I'd learned that 6pm MST was the cutoff and man was that intense. As fast as humanly possible I nuked FMOD to get the game to compile correctly and polished some final values, barely (if at all?) eeking by the deadline. At that point I saw it, "Submission Hour! Get them in!". Relief and are-you-serious washed over me all at once. I checked chat to see Brian's words of encouragement and inquiries of "did you make it?". In this last hour I wrapped polished off some values and fixed a bug or two and got the build off.

Overall, I feel like this game is quite fun and although there are many games that are similar in their own way, I would say ours feels the best. Game jam games usually feel sort of stiff and unpolished but I feel like this game managed to shake that. Feedback has been awesome so far (thanks everyone!) and I hopefully await the final judgement of best games. I'd reviewed quite a few other great games and through this our game has received over the number of reviews required to be in the running for its various categories. A few streamers even played our game live at my request which was a great feeling.


I learned a fair bit, had a lot of fun and made a game I'm proud of. Check it out and let me know what you think. Can't wait for the next one!

Saturday, April 18, 2015

So much to do, so much to see

I have gotten an occlusion culling system implemented into Unity Free! It uses a combination of realtime and baked modes for optimal results. Check out the video for more details. Download the source + an example scene via the link below. It is worth noting that Unity 5, which came out this previous week, includes occlusion culling, LOD and all of the other previously restricted-to-pro engine features. I've additionally done some low level research and done an occlusion culling presentation at work! (Slideshow here)

I've also done some further testing with markerless motion capture tech. iPi Motion Record / Capture yields some satisfying results for simple animations. More complex animations require an additional Kinect to be placed perpendicular to the current camera. Any frames where an arm or leg is occluded (which is rather often) requires manual placement of the limb for each frame. The best option would seem to be using 6 PS Eyes.

The behavior tree has gotten some work as well. I've put in the back end to start setting up the logic and am working toward getting a character moving around with it. I've been dividing time between this and playing with tasty new Unity 5 features, though I've also had my eye on Unreal Engine's freeness too! I've gotten a Google Cardboard VR headest I've been playing with. I'm intrigued by the possibility of using HRTFs for accurate 3D audio response with VR. I've gotten a test scene working with some custom assets I'd made (learning my way around blender a bit too!) to further work with the VR tech.

In the immortal words of Smashmouth's Steven Scott Harwell, "So much to do, so much to see." -MB


Progress
  • Polished occlusion culling script
  • Added baked version that creates cells with mesh information
    • Can be used with realtime scanning or on its own
  • Generates bounding volume of mesh renderers
    • Can define unit size for grid in each dimension. This is the maximum size a given grid cell will be before an additional cell is added in that dimension.
  • Buttons to disable LOD, culling, baked, realtime, or both
  • Created example scene and uploaded with source, avail above.
  • Behavior Tree logic progress
  • Structure of tree logic using event based system
  • Starting creating action logic
  • Primitive data passing through tree
  • Further motion capture research
  • Got a solid walking animation, took a bit of work
  • Tried for some other animations with poorer results
  • Created a test scene for Google Cardboard VR


Goals

  • (Behavior Tree) Make AI character execute GotoGameobject behavior
    • Add arguments to BT nodes
    • Add inspector panel to VBT
    • Write action
    • Make VBT connect to and implement BT logic
      • Write composite and decorator logic into VBT
  • Dig in to Unreal Engine with startup tutorials, using C++

Wednesday, February 4, 2015

Occlusion Culling + LOD Progress (Video)

I've been working on getting an effective occlusion culling solution implemented and have come up with a raycasting based one after a few iterations, in addition to an integrated LOD solution. I'm going to optimize further and then move on to finish the VBT editor.



Progress
  • Occlusion culling script functioning
  • LOD script complete
  • Added new house models, improved model importing workflow
  • New leather armor created
  • Redid character armor equipping method, which will result in far less clipping and easier animations
  • Gameplay flow outlined more thoroughly in GDD
  • Overhauled test town level
  • Added new guard tower model
  • Added new trader post model
  • Added new tavern model
  • Added new town hall model
  • Further research into optimal behavior tree implementation (Node/Task)

Goals
  • Fix time slowdown on framerate drop
  • Further optimize occlusion culling via precalculation (baking)
  • Publish Occlusion Culling + LOD solution to Asset Store
  • Improve lightmapping + lighting
  • Make AI character execute GotoGameobject behavior
    • Add arguments to BT nodes
    • Add inspector panel to VBT
    • Write action
    • Make VBT connect to and implement BT logic
      • Use node / task structure to avoid redundant allocation
      • Write composite and decorator logic into VBT?
  • Improve motion capture importing. Try to not apply root motion on export.
    • Make test capture to debug skeleton mapping

Tuesday, January 27, 2015

Abomination with ragdoll throwing action!

In this and future posts I'll be giving a short description of the work in progress and then list the changes from the previous post, future goals for the next and maybe some screenshots and/or videos at the bottom.


Progress
  • Added Abomination character with a few animations 
  • Added animation to human of being picked up and thrown by abomination 
  • Correlated human and abomination throwing animations, so that they work together and the human is ragdolled and thrown away 
  • Added camera tracking so that camera will now automatically track the player model when it goes ragdoll 
  • Added new version of wealthy town house 
  • Improved model importing workflow 
  • Reorganized repository

Goals
  • Fix time slowdown on framerate drop
  • Look into writing rudimentary occlusion culling for optimization
  • Improve lightmapping + lighting
  • Make AI character execute GotoGameobject behavior
    • Add arguments to BT nodes
    • Add inspector panel to VBT
    • Write action
    • Make VBT connect to and implement BT logic
      • Write composite and decorator logic into VBT?
  • Improve motion capture importing. Try to not apply root motion on export.
    • Make test capture to debug skeleton mapping








Tuesday, January 20, 2015

Mo'cappin, VBT Updates

In the past few days, we've gotten some new motion capture tech working! We're working out a solid workflow currently, but this should do well for the quality of animations.

Amongst the havoc of motion capture, I've made some pretty updates to the Visual Behavior Tree (VBT) Editor. New icons, as well as some additional functionality (scraping the directory to get node types and listing them out). This bad boy will be ready to go after a few more tweaks.


(Some slick new icons in an example tree structure)

Next up is hooking up the VBT for use and refining the mocapped animation workflow to start pumping them out. Be well!

-MB

Thursday, January 15, 2015

Guess Who's Back, VBT Editor

After a bit of dormancy, development on the game is once again in full gear! Major changes to the design have occurred resulting in sharpened focus on magic, strategy and roleplay. I am very excited for what's to come. I'll go into this in more depth in an upcoming post. In the meantime, a teaser...

(In-Progress Visual Behavior Tree [VBT] Editor)

AI will be using behavior trees (as you may have guessed) and so for easy modification and scalability I've started whipping up a visual editor in the Unity GUI. Once this guy is all done, it'll output to XML to be read in at runtime and give our AI some awesome depth and reusability! More soon. -MB

Wednesday, September 25, 2013

Waldschattenspiel Inspiration

     After thorough contemplation of the affect of the mechanics and the feeling I would like to convey, I am going to make an overhaul. I am scrapping the upgrade system as it currently exists and replacing it with 2D ray-casting as to create more of a feeling of vulnerability. I had recently played Waldschattenspiel, a german board game that uses a candle and stand-up wooden trees. One player rolls to move the candle, trying to find the other players who hide in the shadows of the trees. The tension that emerged when the candle neared the hidden players, like a wolf sniffing out prey, was wonderful! I really want to convey feeling that would arise from actually getting lost in the woods- wounded, starving, alone- trying to hide from the beasts and make your way, rather than immediately having all the power. I think that this would be a more engaging and unique experience than that from simple upgrades. The player may achieve such power later in the game as to enforce a sense of progression, but it will not be to as much of an extreme extent as I had thought of before.