I want to add an optional setting to my game that makes the animals use 4K textures instead of 1024x1024 textures. As far as I know 1024x1024 is the limit.
Why do we even have to worry about a resolution limit? Shouldn’t it be based on a file size limit? Not to mention that a high quality JPEG that is 2000 x 2000 pixels (image used) exported from Paint is 715.3 KB compared to a 3.8 MB PNG. I can actually get to 2500x2500 and just get to 1 MB from Paint.
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.
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.
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
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.
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.