As I'm sure some of you are aware by now, Ikemen GO recently started experimenting with support for 3D-model-based stages. If you're reading this, then that means 3D stage support has now been made available in the nightly builds! This is something I'm very excited about (if the sheer length of this post is any indication) and I'm eagerly anticipating to see what bonkers things the community can create with it. However, I also imagine many of you aren't very familiar with anything 3D, so I figured it'd be a great idea to share some of my knowledge and advice with Blender, hence this guide.
This guide is intended to help people get to grips with this new way of making stages, covering both how 3D stages work in Ikemen and a crash-course on how to use Blender to create them from scratch. My explanations on Blender are not going to be as comprehensive as many others available online, but hopefully it's good enough to get you folks started!
Table of Contents
- Background Information
- Limitations
- Getting Started
- How to Blender
- Object Mode
- Edit Mode
- Materials
- Textures
- UV Mapping
- Modifiers
- Animation
- Vertex Colors
- Armatures
- Preparing for Ikemen
- Baking Animations
- Skyboxes
- Baking Lightmaps
- Exporting to GLTF
- Using GLTFs in stages
- Troubleshooting & Common Blender Questions
- Miscellaneous Tips
- Further Reading
- Special Thanks
Background Information
Since the dawn of M.U.G.E.N, stages have been made using two formats: a .DEF file, and a .SFF file. The .SFF contains 2D graphics data, while the .DEF specifies stage boundaries and dictates where these graphics are to be placed in a 2D space. While you could always use parallax to give stages a sense of depth, and some very clever tricks have been devised over the years to give the illusion of 3D, stages have always ultimately remained as two-dimensional images.
Recently, Ikemen GO introduced the ability to use a 3D model instead of placing 2D graphics. Rather than an SFF, these 3D models use a file format called GLTF (extension either .gltf or .glb); this format is relatively new, but it's completely open-source, standardized, and easy to create and export to using programs like Blender. GLTF is already being adopted by many other projects, such as the Godot game engine, and its nature means you can have the entirety of a model - mesh, textures, animations, everything - all in one file, just like a .SFF would have for 2D graphics, making it ideal for stage distribution.
3D stages come with quite a few inherent benefits. On top of just looking really nice, 3D stages are not restricted to one particular resolution, and can look nice and crisp whether you play at 480p or 4K. Depending on the scene, 3D stages can also potentially offer massive reductions in file size compared to a 2D-conversion-of-a-3D-stage; I was able to make a conversion of a Marvel vs. Capcom 2 stage that can fit on a floppy disk! Naturally, this also opens up a whole planet of possible new stage ports from other games that wouldn't have been easy or possible otherwise; I've already experimented with porting areas from a few different Dreamcast and GameCube/Wii games, and I'm sure others will follow suit porting from other games shortly after this guide goes live.
Limitations
Ikemen's implementation of GLTF is fairly simple at the moment, and lacks support for some common elements that might be found in other implementations, namely:
- ]
There is no direct support for light objects or environment maps. However, you can get around this by pre-rendering (or "baking") your lights beforehand and creating a skybox respectively; we'll touch on this later.] Update 11/12/2024: Lights and environment maps are both supported! I'd still recommend baking lights if possible/applicable! - Related to the above, Ikemen does not currently use any part of a material other than the color map, so no roughness, metallic, specular, normal, emission, etc. are displayed.
Armature deformations/weights are not supported. This means that, while models with armatures will be drawn, they won't animate and will most likely default to their base pose. Update 12/26/2023: Armatures are now supported in the latest nightly builds!- Volumes/volumetrics of any kind are not supported, which means that things like fog will have to be simulated with a bunch of transparent planes.
- Currently, only PNG, JPG, and uncompressed DDS textures are supported. Draco compression is also not supported.
It's entirely possible these limitations can be addressed in the future. If you happen to know 3D graphics programming and how to program in Go, and want to help improve our 3D support in Ikemen, consider visiting our Github and making a pull request!
Getting Started
As of the writing of this guide, the latest stable version of Ikemen GO is version 0.99. Future stable versions should include 3D stage support, but for now, you'll need to download the latest nightly builds of Ikemen GO to get support for 3D stages.
Note: The nightly build changes every day whenever code changes are made to Ikemen, so it's not as stable or as widely-tested as release versions like 0.99 and features may change or break at any time. Please keep this in mind when making 3D stages with it!
If you're looking for 3D stages to try this out with (or you just want examples to test), I've created a few stages you can download here. Most notably, I've created an original stage titled Third Heights and I'm releasing it under MIT, same as Ikemen GO itself. This stage is also included in recent versions of Ikemen GO, so if you've downloaded a recent version of nightly, you might already have it!
Other members on MFG have also released 3D stages, such as these Melty Blood: Type Lumina conversions by Eiton and this CvS London conversion by Violin Ken.
For creating 3D models; there's quite a lot of programs out there to create and edit with. Here's what I recommend:
- Blender: A well-known free and open-source 3D modelling program. This is what I'm going to be using for this guide, and it's most likely what you'll want to use unless you happen to have a copy and experience with other programs like Maya or 3Ds Max. I'm using version 3.4 here, but the general workflow should be more or less the same across all versions past 2.8. [Editor's note: Blender 4.0 released right in the middle of me writing this guide, so if the UI looks slightly different for you than what I'm showing here, that's why!]
- Rodzilla's Material Maker: Also free and open-source, this program makes it easy to create procedural, seamless textures for use with 3D models. I used it to create the textures in my original stage, Third Heights.
- If you don't want to make your own textures from scratch, ambientCG.com has thousands of textures available as CC0/public domain, mostly photorealistic ones. Ditto for polyhaven.com. I'd still recommend making your own if you can though!
- Either GIMP, PhotoShop, Paint.net, or some other image editing program. Not strictly necessary, but it's very handy to have on hand for editing textures. (Blender has its own image editing tools built in, but I find them to be clunky personally.)
If you're wanting to rip and convert a stage from an existing game, that is beyond the scope of this guide and I won't be covering it here since it varies wildly from game to game and requires some pretty intricate technical knowledge. You'll want to check The Models Resource or search for ripping tools/modding communities for the game or the system(s) it was released on for info on that.
How To Blender
If you already know how to use Blender, you can skip ahead to the section Preparing for Ikemen, as the next several sections are going to cover the basics of how to do basic, common things in Blender.
For the rest of you... get ready for the mother of crash courses.
Note: Due to MFG post size limitations, I'm not able to include the How to Blender sections in this post. I've split them into two replies to this thread. Click the respective section to be taken to the reply containing it:
Preparing for Ikemen
Spoiler, click to toggle visibilty
Okay, now that I've given all the newcomers a crash course on how to use Blender (or at least a subset of it), I can FINALLY start talking about the fun stuff specifically for Ikemen. As will become evident in a second, from this point on I'm assuming you have decent knowledge of how Blender works, beyond what I've covered here already.
First off, make sure that the origin of the world (coordinates {0, 0, 0}, where the grid axis lines all intersect) is aligned with where you want the fighters to be standing. If you need to adjust the position of the scene, hit
A to select everything, then
G to move it into place. This part is pretty crucial, so make sure to get it right!
Next, make sure the scene itself is oriented properly. If you press
Numpad 1, you'll be looking in the direction that Ikemen's 3D camera will be looking towards. Make sure your scene looks correct when viewed from this direction, rotating the mesh if necessary I recommend pressing
A, then
R, then
Z to lock rotation to the Z axis, then rotating it until it looks how you'd like.
Finally, and this isn't
as important (as you can adjust the scale of the model in the .DEF later), I'd also recommend scaling the stage to a reasonable size when possible. "Reasonable" is subjective here, but as a general rule of thumb: a default cube should be roughly the height of a fighter relative to your stage. This isn't a hard and fast rule, but it's something I like to do for consistency's sake across various stage models and to make it easier to adjust stage size. The procedure's pretty similar to rotating and moving:
A to select all,
S to scale up and down, hopefully you get the idea.
Here's an example of what it should look like when its aligned properly and scaled to a reasonble degree:
Baking Animations
Spoiler, click to toggle visibilty
For the most part, animations should just work as-is, but I've ran into some interpolation issues when exporting animations involving keyframes beyond the start or end of Blender's animation frame range. Here's a few tips I have that might help you out.
One quick fix to most animation problems is to
bake the keyframes of an object's animation. Note that baking an animation is not really reversible, so I'd recommend animating everything how you'd like
before baking.
There's two ways to do this: the first is to go to the
Animation workspace, select your keyframes, and then press
Shift+Alt+O to sample the keyframes. This essentially "bakes" their animation data by creating a keyframe on every single frame (indicated by blue dots).
The other way is to
Bake Action, which is the better option in my opinion since you get a lot more control over how the baked animation is made. Select the object(s) whose animations you want to bake, then go to
Objects -> Animation -> Bake Action. This brings up a menu that looks like this:
The main things I would recommend enabling here are
Visual Keying (keyframe the object exactly as it appears in your scene), and
Clear Constraints and
Clear Parents if your object has any.
Another thing you might want to try is, in Blender's export settings, go to
Animation -> Rest & Ranges -> Negative Frames and set it to
Crop. This seems to fix "jitter" that can happen when an animation loops back to the beginning.
Skyboxes
Spoiler, click to toggle visibilty
As mentioned above, Ikemen does not directly support light objects, and that also includes the environment map. This means, if we don't want a pure black background, we must simulate an environment map using an old-school approach: the
skybox (or
skysphere if you want to be fancy and use a sphere, but most people still call it a skybox either way). A skybox is a big mesh (usually a cube for performance reasons, but a sphere works great too) that goes around your entire scene and typically has flipped normals, allowing you to look through it on the outside.
To create a skybox, press
Shift+A to create a new cube or sphere, then switch to Edit Mode and scale it up to fit over the entirety of the scene. Now press
Alt+N (or use the
F3 search menu) and look for an option called
Flip; click it to flip the mesh's normal direction. Assign it a new material, give it a sky texture, unwrap it so it looks nice, and then here's the important part: in the Material Properties panel, scroll down until you see the
Settings section. In there should be a checkmark toggle labelled
"Backface Culling"; enable it and you should now have a functioning skybox!
Optimizations
Spoiler, click to toggle visibilty
Performance is something I value quite a bit, and user-made 3D content in other games have a reputation for not being optimized very well at all (see: VRchat), so I wanted to share some tips for optimizing your scenes for Ikemen, whether to improve performance or cut down on file size. I
strongly recommend taking these into consideration if you want to create 3D stages, as the better optimized your stages are, the more people that can actually use them on lower-end hardware. You can use
a site like gltf.report to analyze your exported file and see what portions contribute to file size and performance.
One big one is to combine your textures into what's called a
texture atlas: basically one gigantic texture (or rather material, thus muitple textures) that all of your meshes use at once. This performs much better since the engine (not just Ikemen, but *any* 3D engine) doesn't have to sift through tons of different materials one-by-one. Blender doesn't have a native way of doing this, but there's
an add-on that I've used for doing this, and it's really easy to use. After installing it, just press
N, head to its respective tab in the sidebar, then click
Generate Material List, then
Save Atlas To.... Your mileage may vary depending on the scene, though it
usually works fine.
Another one is texture resolutions: Don't be afraid to lower the resolution! Textures are by far the largest contributor to file size, so reducing the texture size is pretty much always worth a try, especially if the perceived difference in quality is minimal. I would recommend removing your roughness and metallic maps before exporting as well, since Ikemen doesn't actually read them at this point in time; thus, including them with an exported model will do nothing other than increase its file size with no real benefit.
If you're using a lightmap and your exported file comes out absolutely gigantic, you may want to
strongly consider exporting the lightmap's texture and converting it into a JPG file. This will create some minor visual artifacts, but it will also
DRAMATICALLY reduce file size on busier lightmaps. (Case in point: I had a roughly 100MB lightmap file in PNG format that, after converting to JPG, only took up less than eight MB!) Blender itself can do this format conversion automatically on export by going to
Data -> Material -> Images and setting the texture export format to JPG.
Another tip: the actual mesh geometry itself is pretty tiny already in terms of file size, but it's probably a good idea to try removing any geometry that would not be visible to begin with: the backside of objects that are always facing the camera and the faces of a skybox behind the camera are good candidates for this. This has the added bonus of giving you some precious UV space for baking lightmaps.
Speaking of which...
Baking Lightmaps
Spoiler, click to toggle visibilty
I want to stress: this part is
entirely optional, and as you're about to find out, potentially
very tedious and time-consuming to do, but worth it for the improved visual quality in my personal opinion (a great saying I heard in the 3D community and also just a good tip for art in general is "90% of art is in the lighting"). I would
only recommend doing this if you are patient and are savvy enough with Blender that you know how to use the node editor and how UV maps work.
Baking your lights means to pre-render your lights onto a new texture map, which is then applied back onto the models, giving you the visual benefits of lighting without having to require the computer to actually calculate said light in real time, which saves a ton on performance. This technique is
very common in games, used in everything from
Half Life Alyx to
Quake to
Mario Kart. It's also the only way to get lighting detail out of Ikemen right now, as there's no support for light objects directly at this point in time. Unfortunately, as you're about to find out, it's a pain to do in Blender.
The following instructions are an abbreviated version of
this article on Blender Knowledgebase, which is where I learned how to bake lightmaps. If you run into issues, check that page.
So first, you'll need to open the
Node Editor tab and add a new Image Texture node to an object's material, with the node not being connected to anything else. Create a new image (the name doesn't matter but I usually call it "Lights" or "Lightmap"), and set the resolution of the texture to a high power of two (I usually use 8192x8192 as that's a good compromise between quality and performance). In the
Object Data properties (that's the green triangle tab), create a second UV map and connect that second UV map to the Image Texture node using a UV Map node. Make sure to also select said second UV map if it isn't already, as this will become important in a second.
Now you need to add that same Image Texture node to every single material whose lighting you want to bake, along with creating a second UV map for each object whose lighting you want to bake. You can make this process
slightly less tedious by converting all your materials into an atlas (see
Optimizations), but it'll probably still take quite some time.
Once you've done that, select
all the objects you want to bake, switch to the UV Editing workspace, and enter Edit Mode. Press A to select the entirety of the meshes for all the selected objects, then press U to bring up the UV menu. Select
Lightmap Pack and set the image size to the same size as your new texture from earlier. The margin value is kinda hard to explain and you might have to trial-and-error it depending on your meshes, but I generally go for 0.15 to 0.2.
Once your lightmap UV is set up, you must now head back to the Node Editor. Make sure the Image Texture node with the lightmap texture is selected, then go to the
Render Properties tab (the gray camera icon) and change your render engine to
Cycles. Make sure to set the Device to
GPU Compute (as this will dramatically reduce the time it takes to bake), and make sure to
disable the Denoise options, as not doing so will result in weird artifacts on the edges of every face of your baked lightmap (I found this out the hard way).
Now that
ALL of that preamble is done,
save a backup file of your Blender scene, then you can finally scroll down to the
Bake section and click Bake. Depending on your hardware, the size of the lightmap texture, and the number of objects/materials you're baking... this could take quite a while. My original Third Heights stage took roughly 8 minutes on an RTX 3060 Ti to bake an 8192x8192 lightmap, so if that gives you any idea of how long it'll take on your scenes, there you go.
Once it's done, you'll then need to set the lightmap UV map to the rendered UV map (meaning the little white camera icon should be enabled for it) for every object, connect the Image Texture node to the Material Output (or Principled BSDF, but preferrably Material Output), and then you should be able to export the model with your shiny new baked lightmap. If it still defaults to the old UV map and your exported scene looks like a garbled mess, you might need to delete the old UV map entirely to get it to export properly; I'm still a bit confused on this myself, frankly.
Exporting to GLTF
Spoiler, click to toggle visibilty
So now that our model's all prepared and ready to go, it's time to export your creation! To do that, go to
File in the menubar at the top of the screen, then under
Export, click
GLTF 2.0 (.gltf/glb).
A window will pop up asking where you want to save, and on the right will be some parameters you can adjust if desired. If your scene uses Modifiers, make sure to go to
Data -> Mesh -> Apply Modifiers and enable it. Aside from that, the default settings are plenty good for most scenes, so navigate to where you'd like to export the file and click
Save. The resulting file should, by default, be a self-contained
.glb.
Note: I glossed over it in order to reduce confusion, but GLTF actually has two separate formats it can export in; .GLBs are a "binary" format, meaning that it can contain everything it needs in one file. .GLTF also supports exporting all the model and texture data as separate files, which I do not recommend as it makes distributing a 3D stage much more cumbersome and messy.
It's a good idea to verify everything looks how you'd like first by viewing your exported model file. If you're on Windows 10, you can view the .glb file directly using the built-in 3D Viewer application. Otherwise, you can use web-based tools such as
this one from Khronos Group or the aforementioned
gltf.report.
Using GLTFs in stages
Spoiler, click to toggle visibilty
So now we finally have our model file, it's time to put it to use! I'm not going to go into detail on how stage .DEFs in general are written, as there are countless guides for that already both here on Mugen Fighters Guild and elsewhere online; for the most part, it's identical to how you'd usually make a stage. However, I will highlight the new stuff needed for 3D stages to display.
The first new parameter is called
fov, and it goes under the
[Camera] section. This controls the field-of-view of the 3D model. I personally set mine to 30 as that's what Blender uses by default for its camera, but you might want to experiment a bit.
[Camera]
; (insert other camera parameters here)
fov = 30
The next one is in the
[BGdef] section, where you would define the SFF file the stage uses. The SFF is still required to be included by spec (although the contents of the SFF don't really matter much; I recommend using it to
make a stage portrait). You can use the parameter
model to specify the filename of the model, in a similar way to
spr for the SFF:
[BGdef]
;Filename of 3D model file
;Supported file types are gltf and glb. Texture types supported are PNG and JPEG, no DDS.
;Make sure the world origin of the model is at the camera starting point!
model = stage3d.glb
;Filename of SFF file, required by spec
spr = stage3d.sff
Finally, to actually use the model in a stage, a brand-new
[Model] section has been defined, with the following format:
; Model element definition; this is similar to the [BG] blocks in 2D stages
[Model]
; X, Y, and Z coordinates of the model
; X = horizontal, Y = vertical, Z = depth
offset = 0, -0.25, -1
; Scale of the model
scale = 0.5, 0.5, 0.5
You may need to tweak the position and scale quite a bit to get it looking correct; a pro tip from me is to use
Shift+F4 in Ikemen GO to reload the stage's files without having to restart the entire game, making it easier to test changes. I recommend creating a temporary plane at {0, 0, 0} and rotating it 90 degrees on the X axis (so that its facing towards the camera) to make it easier to set your offset values correctly.
If your stage was aligned correctly in Blender, you shouldn't need to adjust the X offset much at all. The Y offset I usually keep somewhere around -0.2. As for Z offset, I usually set its value between -0.75 and -1.5, though you might need to dial this value in if you notice your model/characters are moving "faster" than they should. Also, quick note:
do not set the Z offset to 0, as otherwise the model's geometry will not move at all. Likewise, setting it to a positive value (above 0) will cause the geometry to move
inversely to your characters.
Once all of that is done though, congratulations: You now have a 3D stage in Ikemen!
Troubleshooting & Common Blender Questions
Spoiler, click to toggle visibilty
This part compiles a bunch of common questions I've been asked when helping out others with Blender stuff, and is probably of good value to you folks too!
How do I get transparent textures to display right?Go to the
Node Editor workspace and make sure the Image Texture's
Alpha output is connected to the
Principled BSDF shader's
Alpha input. Then, go to the Material Properties of the material with the transparent texture, and make sure to set
Blend Mode to
Alpha Clip. You might also need to toggle
Backface Culling depending on the model.
How come my model's faces look weird and 'inside-out'-y?This usually means your model has its normals flipped or otherwise not set correctly. The fastest way to fix it is by selecting the entire mesh in Edit Mode, pressing
Alt+N to bring up the Normals menu, and then clicking
Recalculate Outside. Blender has a built-in
Viewport Overlay option (it's in the down-arrow button next to the icon with the two circles) to display normal orientation as well; blue is facing outside and red is facing inside.
What are some good sizes/model stats for a stage?In terms of file size: all of the stages I've made so far rarely exceed a .glb size of 20 megabytes. Whether or not that's feasible for your stage depends on what it is and how much detail you want to include; admittedly mine are rather simple in terms of composition, but still. If you feel like your stage's file size is too large, try some of my Optimization tips above.
In terms of geometry/tri counts: I usually try to keep my stages around the 10,000 to 30,000 tris range. That puts it somewhere between a late Gamecube and early Xbox 360 game in terms of mesh detail; this might not sound like much, but a general rule of thumb is that textures carry
much more detail than the underlying mesh itself does, so higher poly counts won't really give you much benefit after a certain point.
Speaking of textures, unless you're using a lightmap, my textures for stages don't usually exceed a resolution of 1024x1024. This makes sense as I imagine that most people playing Ikemen are probably not playing at a high-enough resolution for 1024x1024 to seem 'low-quality' (especially since the texture isn't going to be seen at its native size, but rather distorted onto a 3D mesh, thus you'd only be seeing a fraction of its actual resolution).
Why is my 3D stage rendering as solid black?This can be a few different things. First, make sure you're using a version of Ikemen GO that actually supports 3D models (as of this writing, that means
specifically the nightly builds, not 0.99). Secondly, make sure that your graphics drivers are up to date (particularlty for those of you using older graphics cards or chipsets). Thirdly, if it's a stage/model that you've created:
- Make sure that, when exporting from Blender, your image texture is connected to the Principled BSDF node's Base Color input, which is in turn connected to Material Output. Any other BSDF input, such as Emission, won't render anything in Ikemen.
- Make sure that your stage's position and scale are appropriately set in either Blender or Ikemen GO, preferably the former.
- Make sure your model's normals are facing the correct direction.
- Make sure that your .def file is correctly pointing to the filename of the .glb file you exported, and make sure said .glb is in the correct file location.
- If you added vertex colors to an object, check and make sure they aren't all set to black; for some reason that's what Blender defaults to for the default vertex color.
It's also been observed that those using Windows 11 have had 3D stages not render unless you go into Ikemen GO's properties and set its Compatiability Mode to Windows 10 and/or explicitly set the GPU to use. If you're running Windows 11, give that a try as well!
I'm getting a huge error about nil pointers! What did I do wrong?As of right now Ikemen GO will crash if a model includes an object that has no materials assigned to it. Make sure that all your objects have at least one material!
Another common cause is when authors erroneously remove or otherwise not include an SFF in addition to the GLTF file. This will cause Ikemen GO to crash due to a missing SFF, so make sure to include one! I'd recommend using the opportunity to make a stage portrait (sprite 9000, 1 in the SFF; you can check Ikemen's included stages as reference for what it should look like).
Miscellaneous Tips
Spoiler, click to toggle visibilty
This part is pretty much just some useful tips I've accumulated that might be good to know. I haven't organized this section, so prepare for subject whiplash!
- Pressing Shift+Tilde toggles a mode that lets you control the viewport camera using WASD-style controls like a traditional 3D game. This can be useful for inspecting a scene more easily than the usual camera controls in Blender.
- If you're working on a cartoony, vibrant scene (or importing from an existing game) and notice it looks kinda washed out compared to how Ikemen renders it, try going to Render Properties -> Color Management -> View Transform and set it to sRGB instead of the default of Filmic. Filmic is intended for photorealistic scenes, and sRGB is what used to be the standard before Filmic came along. This shouldn't affect the actual exported model's look; just Blender's preview of it.
- If you're struggling with UVs, a shortcut you can take is to select the faces whose UV you want to change in Edit Mode, then use Project from View to project the UVs from the viewport back to the UV editor. Depending on the context, this can be a MASSIVE time saver.
- If you press Ctrl+A, you can apply the current position, rotation, and scale of the object to the mesh directly. This will also reset the pivot point of the object. If you're getting weird looking results when animating a mesh, try using this first!
- Pressing N brings up a sidebar menu in the viewport which has some useful parameters. If you have the Material Combiner add-on installed, this is where you can go to use that addon, which I recommend doing when preparing your scene for exporting!
- If you need to select a continuous line of faces in Edit Mode, try Alt+Left Clicking to select an entire loop of edges or faces. This can save you quite a lot of time!
- The Edit Mode key for extruding a face is E, but you can also press Alt+E to get a menu to extrude along a face's normals or to extrude all faces individually. Also very handy!
- If you're editing a trio of parameters all at once (such as an object's scale), you can click-and-drag across all three of the number sliders and edit all three of them simultaneously.
- When you're transforming an object (whether that be rotating, moving, or scaling), you can actually type a value during the transform if you want to quickly dial in an exact value. For example, S -> 0.01 will scale down an object to exactly 1/100th of its size.
Further reading
This post is really only scratching the surface; 3D modelling is an entire skillset in its own right and I can't possibly cover every little detail in one post. As such, here's some great links to learn more about Blender and 3D models in general:
Special Thanks
- Eiton, for implementing 3D stage support in the first place.
- Violin Ken and PotS, for proofreading this guide and giving me some feedback.
- The Blender Foundation for giving us such an incredible 3D tool for free, and making it open source.
- This also applies to its community. Thanks for giving me the resources to get started on 3D stuff myself!