First Quarter 2023 Milestone
This past milestone includes developing automation throughout the art pipeline process, with a couple extra gems to get a good feel of the visual I'm going for within Roblox. My initial goal is to be as authentic as possible to the original maps, gameplay, and sounds until I'm told otherwise. After building a portion of the "0fear" map from scratch, I decided my focus was going to be gameplay programming, gameplay design and automation as a technical artist.
Map Creation
Wrote a command line interface using Python to read .BSP map files from Q2WF and output FBX's that I could bring into a 3D Application like Blender and modify as needed. This means modeling from scratch isn't necessary for any maps that I'd like to bring to the Roblox Game. What we'll absolutely have to do though, is cleanup and slight modifications to improve collision. This maintains the authentic mesh across all maps that will be used in the game.
Texture Preparation for PBR Materials
Used Python to extract the .WAL textures from the .PAK files and convert them to Roblox's preferred texture format .PNG using the PIL library.
Used Topaz Gigapixel AI to Upres the textures across the board, because many were 64x64.
Used Krita, which is a seemingly beautiful replacement to Photoshop for most things a game developer needs, to create valid "normal maps", "roughness" and "metalness" maps that is required by Roblox's PBR shading with the surface appearance node. Will likely create a python plugin to do this automatically across all textures for future maps.
Re-Importing FBX Mesh into Roblox
Roblox doesn't seem to play well with updating existing mesh that was previously imported. It requires the developer to manually re-apply all children nodes or settings and doesn't just update that mesh object. You also can't just update the mesh ID. This is very time consuming when iterating. There is the concept of a "Package" but that's more of a "prefab" like in Unity. To solve this problem, I created a quick Roblox plugin to make this process automatic, because I was tired of having to re-apply surface appearance nodes, lights, or settings on the mesh object.
The workflow is now:
Import FBX
Drag the FBX into the import location
Click a button to replace old model meshes with new imported model meshes, retaining any children of those mesh and settings, including Transformation data.
Sounds
Extracted the .WAV files from the .PAK files and converted them to Roblox's preferred sound format .MP3 using the pydub library.
Added Walk, Jump, and Grapple sounds as a base to get the audio feel of the monkey grappler, as well as the battle sound in the center of the 0fear map.
Additional Gems
Started with the default CTF game Roblox provides. Looking it over, I'll completely revamp it, but it was good to see how Roblox suggests we do it.
Added Placed Teleport FX and Teleportation works.
After attempting to use lightmaps in Roblox, to find out there was no way to overlay the lightmap over the diffuse map, nor a way to add bilinear texture filtering in Roblox like the way Quake 2 does. I made the decision to use real time lighting instead, to give the map a more modern feel in Roblox. This would go on to include additional Atmosphere, Ambience and Depth.
I also cringed a bit when grappling past the water texture quake 2 used to use, so I spent some time working with the terrain editor to learn how to use the water system to place water where required for the map.
This concludes the progress thus far.
Starting into the Second Quarter Milestone
By the end of the second quarter my goal is to:
Grapple Hook Polish
Teleportation System
Item pickup and Heads up Display to reflect Ammo, Armor and Health points.
Capture the Flag System Overhaul
Custom Weapon System to be re-usable across all weapons in WFR
Implement all weapons including models, textures, animations, and FX held by the Marine Class.
Going Forward
For Quake 2 Weapons Factory in Roblox
Teleport FX and sounds.
Pickup the ammo packs and armor with sounds, as well as respawn FX/Sounds.
Adjust the the rocket launcher client model to the correct one, since I realized I'm using the server model (the model others see, not the one the player sees on themselves)
Implement weapon gameplay mechanics. Shoot a rocket, auto reload, likely not animation for the next update.. but maybe...
Comentarios