The only potential problem is with games with a feature like custom houses that allow players to add picture frames with their own decals. An API for getting an image’s resolution would be useful in that case.
Perhaps they can add a way to get lower-res versions of a image directly from the site.
I’m working on adding new dragons to my game, and I want people with high-end devices to be able to enable 4k/8k textures via my settings menu if their device can handle it. Cutting uv maps into multiple 1024x1024 pieces can achieve this, but it requires more texture memory than simply using 1 high res map, and is a complete waste of time!
I’m getting a lot of pressure from the 3D artists I’ve hired to be able to upload 4K textures. It’s unreasonable to need cut models into a dozen pieces to achieve 4K. Players should be able to stream high quality PBR textures based on their hardware and internet.
Here’s a 256x256 region of a 4K texture for the new original Forest Dragon we’re working on:
This is how it looks at the current max resolution of 1024x1024:
Hundreds of hours of work went into this texture. This quality is ugly, and just disrespectful to the artists who spent their time working on details that players can never appreciate.
Players purchase animals in my game, and they deserve to be able to experience it in 4K. Developers deserve to be able to achieve 4K without uploading a single character as 16 individual meshes each with their own 1024x1024 PBR texture. I’m paying for artists to spend days optimizing their UV maps around this outdated limitation.
Ideally, texture quality would stream proportionally to meshSize / cameraDistance * meshUVMapFactor * (screenResolution / tan(fieldOfView / 2))
and prioritize loading on-screen assets. ( meshUVMapFactor
would be mesh-specific and be based on the average of each triangle’s 3D size in relation to it’s area on the 2D uv layout, because heavily repeating textures can get away with using a lower resolution.)
There’s also a fundamental problem with the texture limit applying to width/height instead of area. If I have 3 square regions I need to fit on a texture (512x512 for example), it would be the most efficient to upload it at 1536x512.
However, due to the 1024x1024 limitation, it’s automatically downscaled to 1024x341. I have run into this exact problem multiple times over the years. To achieve the best texture quality, I need to introduce +33% extra unused space and upload it at 1024x1024 like this:
Developers should be able to upload at a high resolution. I don’t care if I need to pay Robux to upload at that resolution. I don’t think 4K should be a premium feature though. Players are already paying for the experience I’m creating and they deserve high quality textures. Roblox has been a fun platform to work on, but other game engines are starting to look very tempting because of this one texture quality limitation.
I’m in support of 4k resolution textures but I do hope if 4k textures are added that they are downscaled to 1k if your internet speed is under a certain threshold becuase the 4k textures are prohibitively expensive data-wise to people on 3g data or on rural internet, and i already spend enough time sitting around in spawn waiting for the textures in roblox experiences to load as is.
Related thread with some good examples of why we should be able to do this.
CoD and Flight Simulator dynamically stream textures now to reduce load time, something Roblox should consider when deciding to move to higher quality textures.
can’t you just… split the character into meshes for different parts? Don’t get me wrong, I would love more textures resolution. i’m just thinking workarounds
that’s what I do here, the helmet and gun are separate meshes. keeping these “high interest” spots detailed.
This is what we’re being forced to do, and why I keep pushing for this. The problem is that it’s a waste of time, money, results in a character that performs worse than if it were just one mesh, and has worse uv area coverage. I’m paying 3d artists by the hour, and I feel ridiculous asking them to separate the uv maps for a single character into a 4x4 grid of mesh pieces. This also results in very slight seams between the meshes, which becomes noticeable as you get further from the origin. This is simply a huge inefficiency for my team and it’s frustrating for everyone; I need to decide if we should cut up our models now and regret it when this limitation is fixed, or create models with reasonable uv layouts now but have the game’s dragons look like potatoes for the foreseeable future.
I need this if I am to continue development on Roblox. I simply cannot achieve my goals with 1024x1024 textures.
My game uses custom characters and doesn’t have catalog accessory assets competing for performance. It could easily run 2048x2048+ textures, look great, and perform well. I feel absolutely ridiculous as a project director telling artists to waste time slicing uvs for large characters into multiple 1024x1024 textures to achieve even 2k quality. It’s a waste of my employee’s time, a waste of Roblox moderator’s time, and a waste of my time uploading these textures in so many pieces.
It’s perfectly acceptable if textures preload at a reduced resolution. Not all devices need to load 4k textures, but medium/low end devices should still try if there are only a few close up objects and their screen has a high enough resolution. I’d be okay with paying Robux to upload 4k images. If a textures has never been loaded after 5 years and the uploader has no revenue just downscale it. I’ve needed this for years, and I’ve been asking for this for years.
Some way to reference multiple texture maps from a single mesh (like UDIMs) would also greatly reduce how much texture resolution needs to be loaded. Fewer MeshParts results in huge performance gains, so it’s very practical to group related textures together. Tree trunk + tree leaves for example: There might be a scenario where you just have a tree trunk closeup, but the tree leaves’ texture area is also loaded at high resolution in video memory but isn’t needed because they either aren’t in the scene or are more distant. This also relates to MeshPart physics generation; Objects like detailed buildings seriously need multiple textures, but separating the mesh into non-manifold pieces breaks physics generation. My game’s structure artist is very disappointed by the quality in-engine, even after optimizing and separating it into a dozen manifold pieces with 1024x1024 textures; Her preferred workflow involves UDIMs.
It blows my mind that in 2021, the maximum texture resolution supported by the Roblox engine is 1024x1024. Absolutely appalling and unacceptable. I’m currently working on a space exploration game. Said game has planets. Planets tend to be large. 1024^2 is not anywhere near enough resolution to have a large planet that looks anywhere decent from a close distance.
In fact, here is exactly what it looks like from close up. Like purple vomit. Unacceptable.
Needs to be a feature. The longer Roblox waits, the further behind they’re getting. Basically need this for new projects.
Going to have to agree with this. I create my own textures and the resolution quality of 1024x1024 isn’t enough. It makes textures that are naturally well-made to look cheap.
It’s happened on multiple occasions. Modern phones can handle 4K textures and backwards compatibility could be as simple as scaling down these textures before it’s being sent to the client.
Optimally, picking the resolution preset per each device type with some sort of boundary input would be incredibly powerful and would yield favorable results while maintaining the legacy motives that Roblox wants to be under.
Running into this issue, looking for solutions other then splitting the image up… Disappointing that roblox does not support 4k or higher…
I’d rather have 4k textures than making my mesh 50k triangles.
If Roblox won’t be implementing 4k then at least make it 2k. Almost every game in this 2023 outside of this platform already use 2k+ texture as default. I don’t see performance problem since it’s really up to the developer, adding 4k possible doesn’t make some game less lag as the developer already using high poly models. If player’s performance is that much matter then make that every game in roblox must not have overall tris count more than 1M triangles.
It’s March of 2023. It is completely unacceptable that we are still dealing with decade+ old texture sizes.
Because of this we have to upload multiple textures, meshes, etc as workarounds.
How is it that we have games with very high poly counts, a new lighting system, and a million other nice changes, yet the resolution is still tiny? Its awful. Should be at least 2048x2048, but ideally 4096x4096. The limit should really be file size.
I completely agree. Roblox is very advanced in some ways but extremely backwards and limited in a lot of others. Even old games like Half Life 2 have no limits on their texture sizes as long as they are a power of 2.
Roblox does have an additional burden of having to send those textures over the internet but that is an issue that can be addressed. Texture streaming and mipmapping are not exactly new techniques, and Roblox does already cut down textures that are too large.
I personally think Roblox should focus on getting their engine up to the standard of last decade at the very least, this would be a good start to that.
Roblox can store and send over textures in the .webp format which has very high compression efficiency (even at resolutions as high as 4K) and minimal artifacts (looks 10x better than JPEG).
The only downside to this is that decompression might be slow on old devices but it would save a lot of internet bandwidth and server storage.
Keep in mind that in a single 4K texture you can put 16 1K textures and uses roughly 1500% more memory uncompressed. A 2K texture alone can already hold 4x 1K textures which already is about 300% more memory usage.
We should totally have 4K textures, I agree. But I can see why Roblox might not have yet.
Majority of Roblox users have outdated phones or potato PCs, most players are likely kids as well so they might not be prioritizing it right now.
I do wish for it to be a feature very soon (along with texture filter options cause I still cannot make 256x256 textures look great either, very ugly and blurry).
Splitting meshes to have high res textures feels really unnecessary, it adds more texture objects to memory and requires more sampling and I’d imagine it also increases draw calls due less efficient clustering/batching.
I’m going to drop in here with an unpopular opinion. Increasing the texture resolution might not necessarily be the best solution. (cue audience gasp)
Not to say it’s never going to be the right solution, but I think that part of the problem is that Roblox doesn’t give us enough tooling to avoid higher texture resolutions.
I think there would be merit in first exploring ways that we can make smaller textures go further. It’s entirely possible we could use smaller, tiled textures to add high frequency details, such as concrete texture, fur, wood grain et cetera. Combine that with some organic tiling methods to break up repetition and you have a very good candidate for a base material - MaterialVariant already does this.
However, this leaves the question of larger variation, such as the large details of a character or large-scale variations in the textures of walls, unresolved. The way I propose this could be addressed is by using various methods to combine material variants. For example, imagine having a low-frequency normal map which stretches to cover an entire character, and outlines the basic form of all of the geometry on the character as perceived at the large scale. This can be lower resolution than normal because it does not have the task of modelling ‘micro’ details such as scales or bumps. On top of that, we could add a smaller, more often tiled material to represent the detail of the surface of the skin or clothing. These textures can also be lower resolution, because they visually appear smaller. This kind of blending allows for greater pixel density without massively increasing memory consumption by loading in larger textures.
Another possible use case would be material blending for solid surfaces, such as brick walls, and adding edge wear to meshes. I previously proposed such a feature request here.
This is not to negate the importance of having high resolution textures in some places, and it is not to negate the fact that having one texture is simpler in workflow terms, but we have to remember that - especially when it comes to textures - working smarter pays off dividends more compared to working harder. Using modern hardware or graceful degradation as an excuse to lob resources at stuff is generally never the right way to solve a problem.
Roblox currently restricts us from exploring these kinds of methods, because Roblox does not offer such blending and texture composition tools. I would hope that Roblox explore methods like these before increasing the texture resolution, because otherwise I fear that everyone will just use unnecessarily high texture resolutions for everything, even when it’s really not a good idea to.
This is a smart idea but, is a lot harder to accomplish correctly and efficiently. It’s a lot easier to just have 2K or 4K resolution and then, scale down, compress, reduce quality, etc based on the “general” hardware specs.
Real issue here is legacy devices. The more high quality images that I put in, the more memory I’m consuming. Legacy devices run incredibly slim. You have to deal with loading models / meshing with assets (images included). That’s a lot for a legacy machine to handle. A phone, unless it’s a cheaper android, can handle 2K and 4K without breaking a sweat.
I really do think the solution here is to just allow developers to scale down / compress images based on broad machine specs.
Either way, what we have now isn’t compatible nor competitive to the market.