Emission map support on SurfaceAppearances

Games can have thousands of surface appearance instances that may individually all be unique. Adding a whole extra texture even if it’s compressed and packed into one asset can have a large impact on the amount of time it takes clients to fully download all of the assets for an experience. Depending on implementation this may also have a constant static cost simply to support (e.g. no emission map may not have zero cost.).

Simply saying that this is not likely as trivial as it seems.

The server never sends over direct assets to clients, why do you think it does that?

Clients will download things on their own, have it be a animation, image, mesh anything.

So there wont be any extra bandwidth besides replication / the server telling the client what the ID is. Which afaik, will only happen once until said property is changed. And from what i remember, surface appearance properties are not scriptable so what does bandwidth have to do with this?

I am not talking about server bandwidth? The client has its own unique network and memory situation. These things apply directly to them and their unique situation. Accommodating mid-to-low tier devices and networks is part of the problem.

2 Likes

Emission maps will not cause any issues.

If you are really concerned about it downloading too many textures, you should really check out ARGB image packing. Which Roblox already uses for its built in textures btw!

I doubt this property would have any issues, but even if it did, it should be up to developers themselves to optimize their own games. It is an important skill. Creativity should not be limited because a few people don’t know how to optimize their games properly.

2 Likes

EXACTLY, this is so true like, i hate that unoptimized games are so common.

The fact this feature is still just in the ‘screaming into the void’ stage of feature requests after more than 2 years is a massive shame. I would probably use something like this every day, yet we haven’t even had someone from Roblox here to say why or why not they are or aren’t considering this. I’m getting really tired of manually drawing planes over glowing parts of a model.

4 Likes

This is correct. Roblox currently uses “TexturePack” assets for SurfaceAppearance/MaterialVariant, which pack together different PBR maps into a compressed set of images.

At minimum (assuming unit normals):

  • Pack 1 (4 channel):
    • Albedo R
    • Albedo G
    • Albedo B
    • Albedo A
  • Pack 2 (4 channel):
    • Metalness
    • Roughness
    • Normal X
    • Normal Y

Or, if allowing non-unit normals, which would be weird:

  • Pack 1 (3 channel):
    • Albedo R
    • Albedo G
    • Albedo B
  • Pack 2 (3 channel):
    • Albedo A
    • Metalness
    • Roughness
  • Pack 3 (3 channel):
    • Normal X
    • Normal Y
    • Normal Z

RGB emission would introduce 3 more image channels which would need to be packed. That would force Roblox to use 3 4-channel packed textures:

  • Pack 1 (4 channel):
    • Albedo R
    • Albedo G
    • Albedo B
    • Albedo A
  • Pack 2 (4 channel):
    • Emission R
    • Emission G
    • Emission B
    • Metalness
  • Pack 3 (4 channel):
    • Normal X
    • Normal Y
    • Normal Z
    • Roughness

A simple brightness modifier channel (adopting the albedo colour) would fare a little better, letting Roblox drop down to 3 channel again:

  • Pack 1 (4 channel):
    • Albedo R
    • Albedo G
    • Albedo B
    • Albedo A
  • Pack 2 (3 channel):
    • Emission
    • Metalness
    • Roughness
  • Pack 3 (3 channel):
    • Normal X
    • Normal Y
    • Normal Z

So if Roblox is currently using 2 packed textures per TexturePack (very possible and I’d argue quite reasonable), this could incur a ~50% memory bloat on PBR textures.

All of this before we’ve even discussed non-identical texture map sizes and how those can waste memory, or perhaps more importantly, GPU texture formats/texture compression, and how Roblox might want to compress some packs more severely than others if they think the change might not be visible, or the data might be predictable enough (for example, metalness is often mostly 0 or 1, and roughness can be compressed much more than albedo or normal)

5 Likes

Thanks for sussing that out.

CC @tabby0x @InsanityFE4R @Fennecpaw
See above.

As I said, it’s not necessarily free to support emission maps. Simply supporting them is liable to increase the static cost of surface appearance. As they are meant to be used game-wide inside many instances at once, this could have a significant impact on memory use and download size for all games, including already established games. Just because the engine supports it on the client end with built-in materials doesn’t mean that it’s easy to support the same for streamed assets for the aforementioned reasons.

The only point I’m trying to make is that this is not as trivial as “just add an emission map”, and so patience and skepticism is warranted.

4 Likes

Roblox is a billion dollar company, I doubt the context of how easy it is to implement it will affect them as much. Also colour has nothing to do with it, it’s inherited from the Albedo map and all Roblox has to do is add a bloom effect to those areas based on Emission Color Multiplier rather than World Brightness.

Even if it uses a tiny bit more memory, I’m not making games for mobile devices that only have 3-4 GB of memory tops.

Dollars don’t change storage and network requirements.

9 Likes

Even if we pack more images, that’s just the cost of having games looking better in fidelity.

Adding a feature that’s standard is really needed. Its been in other engines for decades.

Consider this too, is it better if I make really dumb topology just to get a few parts of my mesh be emissive? Are the extra draw calls i have to add with additional meshes really worth it? I had to take so many stupid workarounds that could be fixed with a simple texture.

1 Like

Also, no. Emissive Textures are typically a completely separate texture. Due to them needing a RGB channel, unless you are using a gray scaled image and then multiplying it with a color, but since most developers would like to put actual colors on their emission maps I doubt having grayscale images is the way to go here.

1 Like

Weird, because rather than having 2 coloured images, you could save up some memory by limiting the emission map to Grey Scale and using the colours from the Albedo Map that’s already saved in your memory. I think Roblox should revise their implementation of it.

That’s exactly what you can change with some money.

No… The weight of this change rests on the user. Roblox’s budget does not affect the hardware belonging to users of the platform. Recommend you stop fighting on this as the only point being made here is that it’s not likely a trivial change that can simply happen without knock-on negative effects on users and game performance, it is harder than “just do it”, so be patient, as making irate statements isn’t going to help anything. Nobody is saying that this feature is not highly desirable. Any further arguing on this is out of scope.

5 Likes

Even then, the network only requires an extra map to be sent while the rest is performed on the client. I don’t think that one extra texture will cause my memory to rise by 300 MB from one extra texture.

Everybody knows graphical changes don’t come cheap, you can’t expect to play a triple a game at 5000 FPS, that’s a really bad assumption.