Lets move away from the Decal asset type

As a Roblox developer, it is currently too hard for users to include their own images inside games.

The issue of decals and images has been reported, to death, so I wont get into that here, instead, I suggest just outright removing the Decal asset type, and only uploading the Image half for new images.

They serve no purpose in modern Roblox other than anoying players when they cant be inserted into games easily. The subtract 1 hack doesn’t work anymore, because users and bots are uploading hundreds if not thousands of assets every second.

Every Decal asset is a single Decal instance with a texture set to the image encapsulating it. In the old days, something like the InsertService or GetObjects likely used this as a hack to insert images, but since InsertService cant import third-party non-Roblox assets, and GetObjects only really works in Studio, whats the point?

For other asset types that encapsulate a single image-based instance (Shirt, TShirt, Pants), they should stay around because they do serve a purpose outside the Roblox engine, but decals are pointless.

If Roblox is able to address this issue, it would improve my development experience because I would no longer have to rely on hacks to allow users to use their own images in games.

7 Likes

something that i would like for roblox to add is the ability to get the decal’s imageid.
would make stuff easier

other than that i agree with you

2 Likes

To get an asset Id from a decal, you’d write a function like this:

function GetDecalAssetId(decalId,attempts)
	attempts = attempts or 20
	local marketPlaceService = game:GetService('MarketplaceService')
	local ownerId = marketPlaceService:GetProductInfo(decalId).Creator.Id
	for i=1,attempts do
		decalId-=1
		local info = marketPlaceService:GetProductInfo(decalId)
		if info.Creator.Id == ownerId and info.AssetTypeId == Enum.AssetType.Image.Value then
			return decalId
		end
		task.wait()
	end
end

This function isn’t perfect as it doesn’t handle network errors, but you can modify it to fit your needs.

I agree that it shouldn’t require a hacky method like this and I do believe that Roblox is working on new website API that will make it much easier to do things that would otherwise require a hacky method or proxy.

Aside from that, decals are still very useful. Decals are far more performant than say SurfaceGui. My only issue with decals is that they’re currently too limited. They don’t have the kind of properties that ImageFrames/Buttons do, such as sampling methods, which definitely restrict where and how I can use decals. Removing decals does not benefit anyone and is not a solution to anything.

1 Like

I’m referring to the decal asset type that’s used on the website, not the Instance lol.

1 Like

In that case, I agree theoretically. But the issue with core changes like this is that it it can break things that depend on things staying as they currently are. Perhaps Roblox could present things differently so that images are the new default and begin moving away from decals on the website front-end. I believe that either is or used to be the case when uploading images directly via Studio.

1 Like

Fwiw decal is currently serving as the differentiator between images the user has intentionally uploaded versus images uploaded to their account from all sources (e.g. badges, game icons, etc.)

Moving away from decals leaves a functional void here that would also have to be accounted for.

I think best option here is for anything that takes an image id will automatically display the associated image even if you provide its decal id. Or even better to add an API that can do it.

1 Like