Original plan from 2018: So an old co-worker and myself decided to collaborate on a game project idea. It's mostly an opportunity to learn some new areas of game development at the same time as make something that is fun and looks cool.
He'll be streaming some of his programming on twitch: HERE
I figured I would make a thread on polycount to document what I learn during the process.
Anyways, here's a crazy proportioned knight that we're going to use as a starting point.
Figure it might be worth mentioning that all of these models have been made with Zmodeler. Something else I'm trying to get better at using. I think if it had a simple "cut polygon" tool like Max or Maya it would be even more powerful. You can get similar functionality using the zsphere method but it's so cumbersome to get the mesh into there in order to modify it.
Here's a little WIP of the player character.
Here's a first pass attack animation on the new rig that will get broken up into 2 separate animations for use with my combo system in Unity.
I'm purposefully keeping the amount of keyframes pretty minimal in order to try to speed up the process.
Every Artist in the world looks at this and is jalous^^
back to topic, your keyframes look juicy already keep it up
also i like the gradient you had on the assets 3 years ago looks nice!
Essentially this was the first complete "loop."
I overlooked the significance of the keyframe placement of my first pass animations, which, just by luck were placed in a way that made the melee "feel" good right off the bat.
The spheres represent my spherecasts that are casting back to their position from the last frame, essentially creating a filled area that is checking if there is an enemy to damage.
My old animations had a nice perpendicular area, like a slice of pie, out if front that felt really nice whereas the new animation create a triangular shape that keeps missing.
At least... I think that's what is causing the issue, lol.
The goal was to achieve a similar feel of your typical 3rd person shooter where the upper body faces forward while the lower body animations face the direction the player is moving.
For this I ended up using 3 layers and avatar masks for my locomotion animations:
-One for the lower-body
-One for the hips
-One for the upper-body
I synced the layers to the base locomotion layer so that all three layers share the same state-machine structure. This allowed me to customize the blend trees for each state in each layer. (I should probably put the Death state on it's own layer...)
This also worked well for combining the attack animations with the lower-body locomotion animations. For the full body attack animations I just set the layer weight through the player controller script based on whether the player is grounded and movement speed is zero.
All the animations are going to need at least another pass but its getting there. Trying to nail the "feel" before I start polishing anything.
A few animation tests
A rough texture pass. Going to get him rigged up and in engine before going any further. I want to mess around with a fresnel to help add some depth that feels like its lacking and eventually add shading to all of the armor. But I'll do that on another pass.
Very nice progress 👍👍👍👍👍
Loving this project so far!
Yo, I like it. The animations are cute, they remind me of old games.
I would suggest breaking the symmetry a bit more. Right now the only asymmetric element is the belt across the torso.
@Crazy_pixel @Gussketchbook @Temppe thanks, I'm glad you're liking it!
In regards to more asymmetry I could definitely see that. Ideally I'll do another pass on everything so I'll have to do some iterating when I come back around to it.
Got the skeleton hooked up in Unity and having a bit of fun beating up on him. Animations are currently the same as the player character since they share the same rig - I'll be making new animations at some point in the future.
I've also been playing through Hyper Light Drifter again for some inspiration and got my hit flash effect working more closely to the functionality in HLD. It now flashes from white to black 3 times each hit, rather than just flashing white.
Something else I'd like to get working is the slight model shake that happens in HLD when the enemy is hit. So I might mess around with that next.
Screen freeze and screen shake are also on the list.
Took some time to learn how to make my own custom font with FontForge and scanned in some hand-drawn letters as well as scripted a simple ScreenFader class for transitions; also did a pass on a menu screen logo.
I'm planning on doing a 3D scene as a backdrop so going to start doing some experimentation for that along with some general environment art tests.
Made a rough tiling brick texture with Bpainter this morning. I think I need some more size variation in it so gonna keep messing with it. Might do an extreme weathered version of it as well.
I've been working on some more environment art modeling/texturing experiments over the last few days; did another pass on the brick wall texture and played around with various trim techniques.
More tiling texture experiments. Still very WIP as I try to start putting a little scene together to see how the values work with each other. As one can see there are still a lot of adjustments to make but I definitely feel like I'm getting closer to the feel I'm going for.
I need to start doing some lighting tests to see how the value range will hold up after some light bakes.
A little breakdown of the different textures being used.
Starting to get a small scene put together and setup in Unity. Doing most of the scene layout in Blender, including some of the collision, and then I'm going to use ProBuilder to create collision for things like the floor, ceiling, walls etc, in engine.
Mostly trying to learn some environment best practices so I was asking our Environment Art Lead at work how they go about some things. Working on applying some of the things I was told.
Did some experimenting with some stylized flame VFX. Still playing around with a very raw visual style so resolution was intentionally reduced and I used no filtering.
I've also been messing around with some lighting on the dungeon scene. Pretty dark so I'll continue to play with it to get the feel I'm after while not losing readability but just sharing for the heck of it.
I converted to Unity's URP so I could use ShaderGraph and something is a little messed up with my portcullis alpha cutout so I've gotta figure that out; I'm assuming it's the URP material I'm using but I haven't messed around with it too much yet.
Some more lighting experimenting and learning. Still very much WIP but getting closer to the feel I'm trying to achieve with this scene.
Here's a super simple brightness/contrast shader graph I made to give some control over how the diffuse texture looks with the dark lighting.
This is a really annoying issue I always seem to run into when importing FBX animations from Blender into Unity since there is usually a bit of a time gap in-between so I decided to write a post in order to remember how I solve it. (I need to start utilizing Export Presets...)
The issue is jittery animations when using IK on the hands/feet:
In order to solve this issue set the "Bake Animations" settings accordingly, specifically "Sampling Rate" and "Simplify":
In Unity disable "Resample Curves" and turn "Anim. Compression" to off:
The result should be smooth IK animations:
Some of the Unity settings are a bit specific to the way I'm trying to maintain a "stepped" animation look by using minimal keyframes but the export settings are the ones I forget and go through a number of trial/error attempts to figure out.
Something else worth noting is that occasionally updating the animation in Unity doesn't always seem to work so Its worth deleting the animation entirely and dragging it in fresh to see if that solves the issue.
Now that I got my IK jitter issue fixed I got a new simple spawn animation hooked up for my basic skeleton enemy (who still needs another texture pass).
It's pretty fun spawning a bunch of these in and seeing all of the hands popping up out of the ground.
Next I need to get some VFX and sound FX created for these guys as well as some new basic anims.
i really like this character, the proportions are really fun.
Thanks, @killnpc, I'm having fun with them!
I think may you will have a problem in the future if you keep going in this way, the main character and the enemy have a too similar silhouette, from a normal distance read similar and I think that is a problem, mmm maybe you can fix it with colors but dk..
Overall looks really cool your models and design ^^
Hey @vilop1998 thanks and I appreciate the feedback! Admittedly, I hadn't really thought about the similarity between the enemy and player silhouette causing a readability issue but it's definitely a valid critique and I'll be thinking of ways to address it. Nothing is set in stone and the player character will be getting a redesign at some point so I can try to push their silhouettes further apart once I get to that stage.
I'm planning on making more exaggerated enemy types on unique rigs in the future but for now the focus has been on getting the most out of one rig. The challenge your feedback presents will be a good exercise to see how far I can push things on the current rig.
I've been playing around with a VFX for my spawn animation which has been a lot of fun.
First there are a few particle systems with some smoke and bone fragments with small variations to each of them. The bone fragments use a dissolve material which I found could be controlled through the "custom data" property within the particle system.
And here's the simple dissolve setup that I'm using based on THIS video but I added branch so that I could also control the dissolve amount with a slider parameter.
And this was the result:
The next part was to create some ground shards like the skeleton is bursting through the surface.
I took a simple mesh that I created and made an animation in Unity to scale the mesh on the Y axis while also adjusting the dissolve parameter amount on the material from above.
I did the same thing for despawning only in the opposite direction and then I made a state machine to transition between the two animations based on an exit time.
And here's how the ground shards were looking so far:
The particle system was easy enough to get everything timed to the animation but for the meshes I ended up creating a delay timer script and attached it to a parent object of the ground shard meshes.
Now I could easily control the position, scale, and spawn delay of the ground shards.
With some more tweaks it was looking like this:
Got an attack combo system working for enemies!
First I set an integer and increment by 1 each time the enemy enters the attack state.
This is then being used to set a parameter on the Animator.
Then inside of the attack sub-state machine there are the states with the attack animations on them and a transition based on the combo count parameter.
On each state I can then set an index from an array of weapon effects to control which effect will play with each attack state.
For the skeleton I used a couple of simple meshes and a dissolve shader with some animated parameters.
Here's the mesh that was used for combo1 and it was mirrored and adjusted to fit combo2.
Currently I'm just using some Voronoi noise but I intend on authoring something a little later.
By animating a couple of parameters I was able to get some nice movement that felt like a swipe.
After some timing adjustments here's how everything was looking:
It's just more fun fighting skeletons when the explode!
hell yeah man, skeletons xylophoning into a pile has got to be top 10 videogame-y caramels.
Got around to making a rough new animation for the footsoldier enemy. Still needs some polish and adjustments but for now it does the job.
I also setup some tracking functionality for a bit of added challenge.
This attack also activates super armor so it takes a little more to stagger the enemy and allows the attack to complete creating more of a threat.
Spent a good while yesterday trying to get my screen fader to work when going back to the main menu. The fix ended up being adding a fraction of a second(0.1f) to the method loading my menu which allowed for the fader script to complete before loading into the new scene. Spent way too long trying to solve that issue...
Guess that's how you learn, though.
Anyways, I now have some simple fades between the Main Menu and the level.
Got dash functionality and visuals roughed in after reworking the superarmor system.
Getting some rough VFX in there for the dash and polishing up transitions a bit before doing another pass on the poses/anims.
I had to script in some functionality to rotate the VFX according to the character's forward direction since the forward vector of the pawn never changes in relation to the camera. This allowed the main vfx to trail behind the player regardless of direction they're moving.
Over the past few weeks I've been working on integrating FMOD into my project and doing another pass on some sound design. Been a bit slow with all the other life stuff going on but still managing to make some progress.
Finally getting around to redesigning the player character and working on my concept/design abilities. Going to stop dancing around it and move towards a full on WoW hand painted style.
This is still WIP but felt it was at a place I'd share. Once I finish the rest of the orthos I'll model him out and see him in engine. Then I'll make the proper adjustments to the environment textures and enemies which will also get a design pass.
This has also been a good project to get more comfortable with Affinity Photo.
Modeling portion done for my player character rework.
I've realized it's been a minute since I've 100% hand-packed UVs... Been using UVPackmaster to greatly speed up the process on my work machine and I think I'm going to have to pick up a personal copy because it makes a significant difference even if not relying on it entirely.
Now I'm ready to start painting.
I also made some mesh adjustments like breaking the chest strap off based on some feedback from GeekyGek over on the discord channel.