Game development career thread:

Kharzette

Watcher of Overs
5,702
5,684
That color to index thing got really strange. The math didn't make any sense, so I tried again for just an ordinary number as an attribute.

In the gltf exporter there's an option for custom attributes, and the tooltip says what you'd expect. However, because I am old and blind as a bat I have a huge mouse cursor and it was covering up the important part. It only exports if the name begins with an underscore :emoji_laughing:

Nomatter the format it converts it to float, but it seems to convert back fine in my tools. I was worried an index of 7 would turn into 6.999999 (and get truncated to 6).

I'm using the index for a specular power table as well, and will do an emissive bool later for glowing bits. If I had shaders from this century I'd probably do metallic / roughness.

Mixing a texture with the table colours is a bit strange. For the body I wanted slightly reddish knees and cheeks, and I might shade in some creasy parts here and there. It seems to work best to just add the texture value, but it does make it too bright when the texture affected area is in darkness.

I tried a texture color * texture alpha + vert color * (1 - texture alpha) but that seems to blacken the low alpha outer edges of the rosy spot. Multiplies also look strange.
 

Flobee

Vyemm Raider
2,878
3,363
So I spent an entire day retopologizing a character model by hand (for the second time), and I'm really starting to wonder if its not worth just using an auto-retopo tool like the one in 3DCoat to just do it more or less instantly. I suspect I can get an acceptable model with ~1/3rd of the polygons if I do it by hand, but I'm wondering if thats even going to matter. Can't help but wonder in poly count is likely to be a throttle-point for performance or if I'll see it from lighting or some other UE5 crap. I have plans to do at least 20 models myself and if you figure I get twice as good, thats still half a day each so ~15 days of work, vs taking 20-30 minutes to properly configure auto-topo for each model... the downside being the models are say 15k vs 5k if I did them myself.

I dunno, I have a tendency to try to do it "right" but in cases like this I can't help but wonder if its really just a waste of time.

EDIT: Oh yea and I guess as a general update I've blocked out my first dungeon in a format that I more or less consider final, so once thats finished and I get some textures on it maybe I can share some SS. Hoping to have at least 1-2 finalish character models too using this new workflow. My loose goal is a playable demo Q1 2026 so I figure if I don't get something visual I'm happy with now thats not going to happen. System-wise I'm in a good spot, combat is in a more or less complete form functionally. Added weapon procs the other day, gear/inventory works entirely outside of a lack of visuals (hence the art stuff I'm doing now). Have a handful of class abilities for simple combat loop testing. The lion's share of the work from this point is visual stuff and the game is like 90% functional. I'm sure I'll find plenty of stuff thats not working right as I move forward but the core loop is playable outside of some of the character progression stuff thats not fully implemented.
 
Last edited:
  • 4Like
Reactions: 3 users

Control

Bronze Baronet of the Realm
4,326
11,782
Can't help but wonder in poly count is likely to be a throttle-point for performance or if I'll see it from lighting or some other UE5 crap.
Just load up a bunch of models and test it? No need to waste weeks on premature optimization. How many models will you be showing on screen at once? a few tens of k polys this way or that doesn't seem like it should much of a difference.
 
  • 2Like
  • 1Solidarity
Reactions: 2 users

Flobee

Vyemm Raider
2,878
3,363
Related issue I've been trying to wrap my head around, perhaps someone here has experience with this and can help. I'm trying to figure out how to best split up the player character models for displaying armor that is equipped. As far as I can tell I have a few viable options, doing so with texture replacements (like Everquest or MnM is doing), with mesh replacements (replace the "naked" torso with an armored torso), or some combination of the two.

Replacing the mesh entirely is simple enough and for some pieces I think its almost certainly the way to go (helmet and shoulders for sure) but as an overall approach I think I would prefer a combination where some armor is represented as just a texture change and some is a new mesh, and some are both. I believe WoW uses something similar to this. Regardless of the specific implementation my end goal is to be able to scale any texture or armor mesh to fit multiple player races and I simply don't understand the UV workflow well enough to even ask the right questions for how to do this.

I'll use MnM as an example since their developing in the open and I can see some of how they're doing things. They're doing some sort of wizardry with UV's being unpacked in a specific layout, see example:
1751972471298.png


this seems to allow them to create an armor texture once, then scale it to fit multiple unique character meshes, using some sort of lerping so far as I can tell. My assumption is that the entire character's visible armor slots would be pulled from 2, maybe 3 textures. However this would assume that their only wearing the same "set" that exists as a single texture. This leads me to wonder how this works in practice. Lets say you have 7 visible armor slots, I can grok that each slot has a UV "coordinate" that it looks for on an assigned texture, conceptually at least, but how are these textures organized? Is it a texture for each armor type? Like lets say there is a chain armor texture that includes an island for each slot, and if the character has chain boots on, the entire chain armor texture is called and the UV coordinates for boots is passed in and loaded?

If that is the case then in the scenario where the armor in each slot is from a different set, thus a different texture, you're potentially having 7+ draw calls per character? That seems like it would scale poorly but for my use case its probably viable. Am I overlooking something here? If that is conceptually solid then I'd at least have a direction and I can figure out how it would be implemented. Am I completely off the reservation with this approach?

The alternative to this seems to be doing a mesh replacement which is easier to understand but brings me to another major question, how with either of these methods do you scale this to multiple races that have different meshes? The goal is to create the art asset a single time and scale it to fit multiple meshes, whether that is geometry from a armor piece that replaces a body part or just a texture replacement, the question is essentially the same although I understand the method may differ.

The only people I know for sure can answer this sort of question that I have any level of access to are the MnM guys but I don't want to be bothering them with technical questions for my own personal project. Hoping some of you may have experience and be able to point me in the right direction. Honestly even just helping me frame the question using the right UV/ modeling technique names would be helpful as it would allow me to be more targeted in searching for what I want to do. Sorry the post is a bit of a ramble but I'm trying to grapple with something I don't quite have the language for right now.
 
Last edited:

Control

Bronze Baronet of the Realm
4,326
11,782
Related issue I've been trying to wrap my head around, perhaps someone here has experience with this and can help. I'm trying to figure out how to best split up the player character models for displaying armor that is equipped. As far as I can tell I have a few viable options, doing so with texture replacements (like Everquest or MnM is doing), with mesh replacements (replace the "naked" torso with an armored torso), or some combination of the two.

Replacing the mesh entirely is simple enough and for some pieces I think its almost certainly the way to go (helmet and shoulders for sure) but as an overall approach I think I would prefer a combination where some armor is represented as just a texture change and some is a new mesh, and some are both. I believe WoW uses something similar to this. Regardless of the specific implementation my end goal is to be able to scale any texture or armor mesh to fit multiple player races and I simply don't understand the UV workflow well enough to even ask the right questions for how to do this.

I'll use MnM as an example since their developing in the open and I can see some of how they're doing things. They're doing some sort of wizardry with UV's being unpacked in a specific layout, see example:
View attachment 593334

this seems to allow them to create an armor texture once, then scale it to fit multiple unique character meshes, using some sort of lerping so far as I can tell. My assumption is that the entire character's visible armor slots would be pulled from 2, maybe 3 textures. However this would assume that their only wearing the same "set" that exists as a single texture. This leads me to wonder how this works in practice. Lets say you have 7 visible armor slots, I can grok that each slot has a UV "coordinate" that it looks for on an assigned texture, conceptually at least, but how are these textures organized? Is it a texture for each armor type? Like lets say there is a chain armor texture that includes an island for each slot, and if the character has chain boots on, the entire chain armor texture is called and the UV coordinates for boots is passed in and loaded?

If that is the case then in the scenario where the armor in each slot is from a different set, thus a different texture, you're potentially having 7 draw calls per character? That seems like it would scale poorly but for my use case its probably viable. Am I overlooking something here? If that is conceptually solid then I'd at least have a direction and I can figure out how it would be implemented. Am I completely off the reservation with this approach?

The alternative to this seems to be doing a mesh replacement which is easier to understand but brings me to another major question, how with either of these methods do you scale this to multiple races that have different meshes? The goal is to create the art asset a single time and scale it to fit multiple meshes, whether that is geometry from a armor piece that replaces a body part or just a texture replacement, the question is essentially the same although I understand the method may differ.

The only people I know for sure can answer this sort of question that I have any level of access to are the MnM guys but I don't want to be bothering them with technical questions for my own personal project. Hoping some of you may have experience and be able to point me in the right direction. Honestly even just helping me frame the question using the right UV/ modeling technique names would be helpful as it would allow me to be more targeted in searching for what I want to do. Sorry the post is a bit of a ramble but I'm trying to grapple with something I don't quite have the language for right now.
Take all of this with a huge grain of salt since I'm no artist. First it's probably important to decide if you're going to have enough characters to bother spending time on a more elegant/scalable solution. If it's only a few, you might be better off just doing it the simplest possible way even if that feels like a lot of labor intensive rework. Just doing everything separately for 5 characters (or whatever) is probably going to end up being faster than implementing a nicer system. And again, be sure that you're not wasting weeks on premature optimization. Is it really going to impact your performance if you need multiple draw calls and textures loaded for each character?

A couple of random things that might help. Depending on what you want to do with the armor textures, you can probably change the texture color at runtime, so palate swaps could essentially be "free". Assuming that you're starting with the same base mesh and you want to just swap textures for gear, you might be able to solve the texturing issue just by making sure that the polys are in the appropriate spot on each character mesh. Similarly but probably more complicated, you can probably also use multiple meshes for your characters, so each one has a separate torso/head/etc that you join at runtime. Also, you might be able to join/separate those meshes into a single mesh at runtime too.

Also, unless you're trying to do this all yourself on principle, there are probably assets that cover much of this for you. Take a look at how Unity's UMA2 does it. It has a big learning curve (as assets go anyway), and you have to set up your characters with it's workflow in mind, but it's pretty magic. Last I checked, their tutorial videos just scratch the surface though, and you really have to dig through its discord and code if you really want to see how it works.
 
Last edited:
  • 1Like
Reactions: 1 user

Flobee

Vyemm Raider
2,878
3,363
Take all of this with a huge grain of salt since I'm no artist. First it's probably important to decide if you're going to have enough characters to bother spending time on a more elegant/scalable solution. If it's only a few, you might be better off just doing it the simplest possible way even if that feels like a lot of labor intensive rework. Just doing everything separately for 5 characters (or whatever) is probably going to end up being faster than implementing a nicer system. And again, be sure that you're not wasting weeks on premature optimization. Is it really going to impact your performance if you need multiple draw calls and textures loaded for each character?

A couple of random things that might help. Depending on what you want to do with the armor textures, you can probably change the texture color at runtime, so palate swaps could essentially be "free". Assuming that you're starting with the same base mesh and you want to just swap textures for gear, you might be able to solve the texturing issue just by making sure that the polys are in the appropriate spot on each character mesh. Similarly but probably more complicated, you can probably also use multiple meshes for your characters, so each one has a separate torso/head/etc that you join at runtime. Also, you might be able to join/separate those meshes into a single mesh at runtime too.

Also, unless you're trying to do this all yourself on principle, there are probably assets that cover much of this for you. Take a look at how Unity's UMA2 does it. It has a big learning curve (as assets go anyway), and you have to set up your characters with it's workflow in mind, but it's pretty magic. Last I checked, their tutorial videos just scratch the surface though, and you really have to dig through its discord and code if you really want to see how it works.

If you do want a more complicated system,
Thank you, appreciate it. I do have an unrealistic goal for playable races and I suspect this process is going to help me narrow that down to something more reasonable, but I'm not going to fully understand what that looks like until I get the workflow figured out. You're also likely correct that worrying about performance is premature but I'm thinking of this in terms of time efficiency as someone doing this purely solo. What is the time/effort investment of doing this "right" the first time in comparison to the time and effort of redoing it later if needed. Not saying that is the right approach, but its where my head is at right now after putting myself in that position a number of times already. This is not my first code-base for essentially the same game idea haha. Learning isn't free though /shrug

My intention is to use a modular approach with the mesh for each slot (Head, torso, arms, wrist, hands, legs, feet, and potentially shoulders in my case) all attached to a single skeleton. Your suggestion to check other modular assets is a good one and I'll definitely do that, should have thought of that myself! My intentions are a bit different but I think I can still learn a lot from how they've done things.

I'm, perhaps unfortunately, set on doing at least the character and armor modelling / texturing myself. My goals being to hit a specific visual that I want in addition to learning how all of this works for the future. I'm taking that approach with the whole project honestly and only buying/using assets where I don't think the juice is worth the squeeze from a learning perspective for doing it myself.

Appreciate your time as even just writing out how I'm trying to approach this helped me organize my thoughts a bit and I think I have a workable approach to at least try. I'll report back with what I end up with and whether or not it works how I intended. Thinking I'll just modularize my sculpted high poly mesh and baked down low poly into the slots above, get a base mesh painted and into the game with the modular configuration I intend. At that point I'll model something simple and test it as an equipped item mesh swap. At that point I'll likely finish a second race model and work on projecting that armor mesh/texture onto the second model and see if I can get it to look even close to correct. This will probably result in a separate mesh and texture for each race (Human_Male_Chain_Chest, Human_Female_Chain_Chest, Troll_Male_Chain_Chest, etc) but it should be simple enough. Maybe somewhere on that path I can find a more elegant way to save some resources as this approach strikes me as a bit of a knuckle drag.
 
  • 1Like
Reactions: 1 user

Control

Bronze Baronet of the Realm
4,326
11,782
Learning isn't free though /shrug
Dear God isn't that the truth. No matter how much you plot and plan, you've really just got to try something to find all the ways that it doesn't work. Then that opens up the black hole of "how long do I spend beating my head against all these problems before changing the original approach?"
1 Of 1 Simpsons GIF by shremps


I'm, perhaps unfortunately, set on doing at least the character and armor modelling / texturing myself.

At that point I'll likely finish a second race model and work on projecting that armor mesh/texture onto the second model
I was thinking more of something like UMA (I'm sure there's something similar for Unreal) that deals with the technical parts of mesh/texture combining/swapping for you, not so much buying premade characters. I mean, either or both is fine, but if you're focused on the art, maybe you don't care as much about letting someone else deal with some of the technical bits for you. No shame in not doing literally everything yourself. Always keep in mind that people build entire careers out of doing just 1 of the 50 things a solo dev needs to figure out (and then AAA companies hire teams of those people doing that one thing).

Oh, and another option would be to use the same character mesh for everything but use morphs/blendshapes to change the shape at runtime. Solves some issues at the expense of memory. In Unity, you can bake/unbake the current shape to bypass the memory problem, so it works pretty well for things like character creation where you're really only loading the full set of morphs once and for one character in an empty environment. Something like UMA can take it a bit farther and combine the character and gear meshes and textures at runtime.
 

Flobee

Vyemm Raider
2,878
3,363
I was thinking more of something like UMA (I'm sure there's something similar for Unreal) that deals with the technical parts of mesh/texture combining/swapping for you, not so much buying premade characters. I mean, either or both is fine, but if you're focused on the art, maybe you don't care as much about letting someone else deal with some of the technical bits for you. No shame in not doing literally everything yourself. Always keep in mind that people build entire careers out of doing just 1 of the 50 things a solo dev needs to figure out (and then AAA companies hire teams of those people doing that one thing).

Oh, and another option would be to use the same character mesh for everything but use morphs/blendshapes to change the shape at runtime. Solves some issues at the expense of memory. In Unity, you can bake/unbake the current shape to bypass the memory problem, so it works pretty well for things like character creation where you're really only loading the full set of morphs once and for one character in an empty environment. Something like UMA can take it a bit farther and combine the character and gear meshes and textures at runtime.
So my plan was to use the built in system for UE characters based on the UE skeleton which essentially lets you drop in modular pieces to a leaderpose and it just works out of the box assuming the skeleton is correct, matches the animations, etc. My equipment system already handles the call for new meshes so, at least theoretically, I think I have it handled from that aspect. If I'm overlooking something I'm sure I'll find out soon enough. I know absolutely zero and morphs / blendshapes so I'll need to dig into that as hopefully that's one of those keyphrases I didn't know in order to look up the type of thing I'm trying to do.

If I really wanted to completely give up on this UE 5.6 added Metahumans into the engine so I'm sure that would be the simplest, and most generic, way to get it working.
 
  • 1Like
Reactions: 1 user

Flobee

Vyemm Raider
2,878
3,363
Redid the Troll, much happier with this version I think. Still not completely satisfied but getting closer to what I have in my head. Gotta re-rig him but might jump right into making a couple pieces of armor and see if I can get the modular system rolling. If I can get that functional I feel really good about that Q1 goal as this is my biggest stumbling block

1752088212932.png


Mandatory Troll buttcrack
1752088251509.png
 
  • 6Like
Reactions: 5 users

Kharzette

Watcher of Overs
5,702
5,684
I missed your post in all my duneing but yea most game characters have a draw call per armor slot.

Some games try to build a large texture atlas on a thread to get that down to 1 per character to help with big crowds (I think swtor does this). They also might build a big atlas of multiple characters in scenarios like fixed sized team pvp scenarios where you know gear swaps and new players entering / leaving are unlikely.

It is a tricksy problem. The last time I did mesh part replacing I had slight tiny seams and had to write a tool to weld the vertex weights along the boundaries.
 
  • 3Like
Reactions: 2 users

Flobee

Vyemm Raider
2,878
3,363
I missed your post in all my duneing but yea most game characters have a draw call per armor slot.

Some games try to build a large texture atlas on a thread to get that down to 1 per character to help with big crowds (I think swtor does this). They also might build a big atlas of multiple characters in scenarios like fixed sized team pvp scenarios where you know gear swaps and new players entering / leaving are unlikely.

It is a tricksy problem. The last time I did mesh part replacing I had slight tiny seams and had to write a tool to weld the vertex weights along the boundaries.
Thanks for confirming that! This sort of information has been incredibly hard for me to find as its just not something very many people know about it seems.

I 'solved' the seam problem in my case, imperfectly, by joining the entire mesh together, then merging the overlapping vertices then re-splitting the mesh "by texture" seemed to work pretty well as I no longer see daylight when he moves haha. I managed to get him to swap to a silly shirt I made real quick when equipping a shirt in game so overall happy with that as the system I'm using seems to work. The model isn't 'done' as he still has some weight painting fixes that need to be implemented and there is something about his rig that is wonky that makes animating him difficult, but I got to a spot where I was willing to move on for a bit and swapped to working on zone geometry for the first dungeon.

This has been a pretty big undertaking as after some experimentation I'm finding that creating the geometry in a way that allows me to easily add collision has been a challenge. Starting to look like I'll be doing the geo in Blender then just manually adding all of the collision in UE5 later. I tried using the UCX_ naming method to auto create collision but because I made a lot of the geometry in such a way where the walls and the floors are a single piece the auto detection methods I've found simply don't work. I still need to figure out a good workflow for this but for the rest of this zone I'm just splitting all my flat pieces into their own object so I can duplicate them into a UCX_ to auto-generate at least SOME collision as thats going to take ages to do manually, and if I decide to edit the geometry later I think I'll have to do it all over again lol.
 
Last edited:
  • 3Like
Reactions: 2 users

Haus

I am Big Balls!
<Gold Donor>
16,276
66,336
Seems apropos to cross post this here, unfortunately.


On one hand.... I feel for anybody eliminated by AI, especially an AI the company directed them to develop....
On the other hand... It was the Candy Crush people. ;)
 
  • 1Worf
Reactions: 1 user

Izo

Tranny Chaser
20,607
26,666
Seems apropos to cross post this here, unfortunately.


On one hand.... I feel for anybody eliminated by AI, especially an AI the company directed them to develop....
On the other hand... It was the Candy Crush people. ;)
Is this a good thing, Foler Foler ?
 

Kharzette

Watcher of Overs
5,702
5,684
My ludum game (which I abandoned for a month to Dune) I think is going to need whole head replacement.

For most of the game the main character is bald, but I'll have companions with hair, and then there are some "mishap" hairs for the main character. All are going to be really goofy when combined with helmets.

Flobee Flobee are you doing an EQLike combat system? Is that like a D100 for attack rolls?

I'm thinking of doing an old D20 with thac0 style for this game. I only have 5 armour slots and was thinking just like -1 AC per slot for leather, -2 for chain etc. Lower AC being better like the old days.
 

Flobee

Vyemm Raider
2,878
3,363
Flobee Flobee are you doing an EQLike combat system? Is that like a D100 for attack rolls?

I'm thinking of doing an old D20 with thac0 style for this game. I only have 5 armour slots and was thinking just like -1 AC per slot for leather, -2 for chain etc. Lower AC being better like the old days.
Yea combination of EQ and WoW classic is the goal. The way everything is calculated is still in flux to some degree but basically checks for attack type (elemental or physical essentially) if physical, base hit chance + or - modifiers based on attacker and defender stats (yea essentially a D100 with modifiers), avoidance chance calculation (scales with stats) after that, and if hit is successful it calculates damage with a calculation of weapon damage (if attack designated to use) and strength with a reduction from targets armor coefficient.

Elemental attacks are a bit simpler but do a check again for the proper resistance type and as of now don't have avoidance checks. Have a laundry list of secondary attributes that are based from the EQ style set of primary attributes that can all be scaled via curves if I choose. A lot of that is just penciled in right now to function.

Will probably adjust this as I get a bit further with balancing as I already forsee some issues, but its functional for now. I considered a D20 type system but decided it would be a bit limiting for what I want to do but it seems completely reasonable if it fits what you're looking for imo. I just felt more comfortable with a system more similar to games I've spent more time playing
 
  • 1Like
Reactions: 1 user