These weeks were the final push to complete the VFX work for WolverineSoft Studio’s Project Blue (final title: “Io”). After the last leads meeting I had a lot on my plate for the upcoming period in terms of effects that had to be finished. Through a combination of my work and those of my pod members most all of it was successfully put into the game.
Week 1 — Pre-Gold 1
On Confluence the leads had created lists of “Remaining Tasks for Development” that had to be completed for the Gold version. Through a combination of my judgment and input from our producer it was decided that the following tasks should be added in the last two weeks:
- Player teleport VFX (dissolve/materialize)
- Teleport sphere (portal) VFX
- Fix sword slash VFX
- Crumbling block shader and particles
- Boss particles and VFX
- Player death VFX
- Environment VFX (lower priority)
- Crystal glint shader (lower priority)
Our producer determined that the first spring, Pre-Gold 1, should be the last period for implementing new features so that the second, final sprint could be reserved for bug-fixing. This meant that almost all of these tasks had to be completed in this one week. Unfortunately as the heavier ones like player teleport VFX and the sword slash VFX were based on work I had done, I had to work on these tasks myself to ensure that they got done in time.
However I did assign the following work to my pod members at the start of the week:
- David: Continue working on improving his enemy shader that he was unsatisfied with last week. Proceed to boss particles using his dust particles once finished.
- Zena: Crumbling block shader and particles.
- Eli: Unfortunately we are late in the project now so no new art is needed. I did not have a new task for Eli this week.
Sword slash VFX fix
The sword slash VFX was something I had created several weeks before, but the player pod lead Matt had informed me should be given extra “oomph” after feedback along those lines from the previous playtesting session. He recommended I look at the directional attacks from Hollow Knight as an example.
On Monday I worked on adjusting the animation sprites and communicating with Matt on exactly what he wanted. This was my most frustrating task this week since I had to go back and change work I already did and it was laborious to go into Illustrator and manipulate each of the curves to add volume to the slash while keeping everything aligned.
I was also waiting on the art lead George to finish adjusting the player attack animations, which he eventually did. However my effect in the end didn’t match the animations as much as before. Some team members seemed unhappy with this, but Matt thought a strong, powerful-looking slash VFX was more important so he determined that some de-coupling was okay. However I wanted to do something so the next day I did go in and adjust the sprites a bit more to make the tails smaller. This let me meet the demands of both Matt and the others who wanted more synced VFX.
I then created a pull request and the content got merged into the game.
Player teleport VFX
Later that day I started to continue work on finishing the player dissolve/materialize VFX for teleporting. I had had done most of the technical setup for this the previous sprint but now was working on implementation. At the same time I was trying to integrate a “magical sphere” animation that Eli created before while adjusting it so it did not become too distracting. It was so bad I was almost considering scrapping the effect, but on Matt’s suggestion I reduced the alpha of the effect so that it faded more and this made it look much better.
Once I showed my work to others on our Discord I got some positive feedback, but Eli was a little confused because while I used the effect as “portals” that appeared at the start and end points of teleportation, he intended for it to only appear around the player after they threw their sword but before they actually teleported. On Wednesday I spent time adjusting the code to fix this and cleaning up the sprites a bit in Photoshop.
Helping Zena with crumbling block VFX
Late Wednesday night after Zena reached out to me about trouble getting a good “cracking” effect in Shader Graph, I checkout out her code to see how I could help. The main problem was that the shader result always came out too pixelated. I tried various blocks including gradient nodes to try and get some sort of edge-detector like functionality on the Voronoi noise she was starting with, but to no avail. I ended up switching to Photoshop and creating my own sprites for each frame of the cracking animation that could be superimposed on any texture in the shader.
The next day I finished this work with Zena and she made a pull request that was approved and merged.
Teleport VFX bug fix
There was a small bug identified on Thursday where additional dissolve particles would appear in shapes other than the player on other parts of the screen. I eventually figured out this was caused by volumetric lighting on the crystals in the Crystal Caves level, which evidently appear on all layers no matter what.
The simple solution I found after poking around was to raise the alpha clip threshold on the Texture property of each of the particle systems to 0.8, which filtered out the effects of these lights since they were not at 100% alpha.
Later Thursday I worked on adding the teleport dissolve effects to the boss. I ported them by just creating an additional particle system for the boss while using the same extra camera I use for the player. The effect needed some tweaking to get it appearing in the right position and at the right size but eventually I got it to where it was looking pretty good.
I showed my results to Gino, the boss pod lead, afterward and he was pretty impressed. He started to want other effects like some sort of “hint effect” for where the boss would teleport, but this was out of scope of what there is time left to accomplish for the week so I had to refuse. I probably should have done this work with Gino a few weeks earlier so I could get more feedback on what he really wanted when there was more time to actually implement it.
Player death VFX
Late Thursday night and on Friday I worked on implementing player death particles since they would be based on the teleportation particles I had made. I started with the enemy death VFX Zena made before and changed the color to be the same neon blue that Io’s dissolve particles are (and her sword). Originally I just had these “smoky” particles but after feedback from other leads I went ahead and added the dissolve and materialize particles in too to communicate how Io is relocated on death from the spot where she dies back to the last checkpoint.
On Saturday I worked to get the final confirmation on design from other leads, and created a pull request for my work. A member of the player pod added some of his own fixes to my pull request, which caused a merge conflict I had to go in and resolve. Once this was done I was able to merge in my work.
Retro meeting 3/28
On Saturday we had our last leads retro meeting, where I recapped all of the work I had done this week. The main discussion was just about finishing up the project and creating the weekend build for playtesting at the studio meeting the next day.
Studio meeting 3/29
At the studio meeting everyone playtested the new build once again. Out of this I noticed that the teleport VFX didn’t seem to be appearing, and one team member noticed parts of them sometimes appearing in the corner of the screen. I worked on this bug over the next two days.
After playtesting I had a short meeting with my pod. Zena completed her work and Eli hadn’t done anything on his own, while David had disappointing results. He ended up creating a cool improvement to his enemy shader that made it more wavy-looking, but evidently put a lot of time (too much time) into it before realizing that the enemies are so small on screen that players probably wouldn’t notice the difference. I felt bad since the improvement really did look better, but only if you viewed the enemies at a much larger size than how they actually appear in the game.
Total time breakdown for Week 1:
- 4.5 hours on sword slash VFX
- 6.5 hours on player teleport VFX
- 3 hours on crumbling block shader help
- 1.75 hours on fixing teleport VFX light bug
- 4.25 hours on boss dissolve particles
- 5 hours on player death particles
- 1 hour for leads retro meeting
- 1 hour for studio meeting
- 2 hours on starting to fix the missing teleport VFX bug
Total this week: 29 hours
Week 2 — Pre-Gold FINAL
In the second week, my goal was to focus on fixing any bugs. This involved a lot more playtesting than I had done before. I had originally planned to work on adding in aesthetic VFX like my sunlight effect, but after getting a tepid response just focused on helping find and/or fix any remaining bugs with my work or others.
Missing teleport VFX bug
On Sunday and then Monday I worked on figuring out why the teleport VFX were missing in the weekend playtesting build. I quickly figured out that I hadn’t adequately tested the particles at different screen sizes, and that they weren’t scaling properly. In the end, I had to work out a sort of complex conversion formula by which I scaled the sprite used for emission in the particle systems depending on the size of the screen. After some trial and error I found a formula using the orthographic size of the camera and the pixels-per-unit number of the sprites that worked for me.
I was very pleased with how I was able to come up with a technical, solution that addressed the general case so my particles would work for any screen size. In doing this I eliminated minor issues I had before with experimentally adjusting the scale and position of the particles to align them with the player sprite in the editor. With the new solution this is not necessary since the particles are generated with a camera capture of the entire screen, which is now properly scaled to match the actual size of the screen.
Playtesting the near-final build
I spent much more time this week playtesting, both on my own and with others. On Wednesday a member of the level design pod reached out to me and we collaborated for two hours as me and another team member tested play in the Windmill Fort level to determine the best keyboard controls for the windmill grabbing mechanic. This was actually my first time playing through this level so I was excited to see what it looked like.
The next two days I made my own builds and kept playing through the game again but didn’t notice any more VFX bugs that needed to be fixed. Eventually Zena reached out to me about one I missed relating to her crumbling block shader.
Assisting with fixing the crumbling block shader
Zena informed me that sometimes when you interacted with the crumbling blocks the animation would play in the middle instead of at the start. I hadn’t originally noticed this but in the editor was eventually able to recreate the bug. She determined that it was related to a timer variable being reset that was affected by which zone the player respawned in. She made the fix and I approved a pull request to merge her fix in.
Later over the weekend we discovered that this did not totally fix the bug, and I had to spend a little more time helping Zena find the ultimate source of the bug in the script, which was related to setting the animation material start time to when the level was loaded, when it should have just been the time when the player landed on the platform.
Final Studio meeting and retrospective
Before the last studio meeting, I compiled a list of thoughts about the things the VFX pod did and didn’t do well in Confluence. During the studio meeting everyone playtested the (near) final build, and Nico gave some closing remarks. Afterward in our pod meeting I went over this retrospective with my pod members, and also got their own thoughts and comments on it which I added to the document. At the end I thanked everyone for a good semester and we said final goodbyes.
Total time breakdown for Week 2:
- 2.5 hours fixing missing teleport VFX bug
- 2 hours playtesting the windmill mechanic
- 0.5 hours catching up with pod members midweek
- 1.5 hour playtesting and helping Zena with the crumbling block bug
- 2 hours on retrospective writing and final studio meeting
Total this week: 8.5 hours
I felt like this was an extremely productive finish to the project for me, but most of the work was frontloaded in the first week. For better or for worse I pushed myself so hard to complete all of the tasks I had for the first week in that week that in the second there wasn’t much left to do, and I personally did not add any new extra features. However, the last week was supposed to focus exclusively on bug fixing, which I did, so I did get what I needed to done. The only things that didn’t get put in were really just extra aesthetic VFX on the level backgrounds, but as mentioned when I talked to other leads they didn’t necessarily believe that was necessary or what I had come up with would work.
Thus I am proud of all the work I did get done in this period in addition to everything my pod as a whole completed this period and over the entire semester. Being a pod lead was an interesting and sometimes challenging experience, but I am glad for it and the knowledge that it has given me to drive future game development projects to success.