As a Roblox developer, the overall the design of the asset system in relation to images has been plaguing me (and others) for a long time.
We have had a number issues (e.g. this, this, etc. etc. you all know the pain) that were caused by how this system works. We’ve also had updates solving specific problems with this system - e.g. not being able to get image IDs anymore through playing with the URL.
Decals are treated like the default image type, and are what you get when you upload an image - but it seems there is no point in having them as an asset at all.
To get a decal in-game, you make a new decal instance and paste your image ID into it, just like every other object that uses assets. You don’t need a special decal asset to do this, and it revolves entirely around the image asset.
As primarily a designer and scripter, the only times I have used Decals recently have been for getting the image ID of some random free asset. Yet I’ve had what adds up to hours of my time (maybe even days?) wasted simply converting decals to images.
And you employees at Roblox also have had some (and probably will have more) of your time wasted implementing fixes to specific issues that are only relevant to this weird decal-image relationship.
As for the toolbox and library, they could just show images instead of decals, and have the former feature copy the ID to the clipboard instead of creating an often-redundant instance (which is another annoying problem).
fyi you can just paste the decal ID into any decal or imagelabel or other asset instance in studio, and studio will automatically convert to the image ID.
You can even just paste the full URL on the decal page and it will convert to the rbxassetid://imageId format.
This is an enormous pain point for anyone who uses scripts to dynamically generate UIs. I use Roblox’s Roact library to generate my UIs through code and my upload process looks like this:
Copy image ID
Create an image label (or scroll through hundreds of instances to get to an existing image label)
Paste in image ID into said ImageLabel
Wait for image label to make web request and replace the asset id with an image id
Copy Image ID
Paste into script
This is what the process should look like:
Copy image ID.
Paste.
Steps 2-5 are a complete waste of developer effort that could be put towards making more immersive, high quality games.
If this sounds like a first world problem, that’s because it is. But imagine doing this thousands of times, over and over again. And you begin to understand why this is such a frustrating issue.
This would require a fair amount of reworking of ROBLOX’s system for uploading.
Group images? Uploaded as images.
Decals? Uploaded as images.
Shirts? Uploaded as images.
etc etc etc.
I’m sure there’s some internal reasons as to why it was made this way, including ones that deal with moderation I’m sure. It would be a lot of work for them to change it, when they can just make a button on the decal page to pull up the image automatically (as well as have an in-game API that resolves a decal ID to image ID).
This is in the case of decal assets which are completely useless. Everything is uploaded as images, yeah, but redundant things (like decal assets) also get uploaded, which is the problem.
There’s literally no valid reason to keep decals aside from changing them requiring effort. It won’t even be as hard as you said, they theoretically just have to remove the decal assets tabs from the create page and remove the part of the uploading process that handles decal assets (obviously that’s not all the work they’ll do but it’s the rough idea).
Yeah, one that may have been relevant in 2006 – probably not now.
Shouldn’t be as difficult if it’s just display. I.e.
Develop page shows Images (not decals)
Toolbox copies ID to clipboard or sets Image/Texture/etc property if something is selected
Library shows Images (not decals)
Shirts/Pants/etc aren’t uploaded as decals, so they can be left as-is. As for adding an API to convert decals to images, that seems like a hack to a problem developers don’t need to deal with to begin with.