Add a Canvas GUI for painting pixels on the screen

Bumping this topic because I was just about to suggest this exact features.

Currently it’s waaaay too complex to create any kind of minimap. Screenshots from above the map don’t work because camera’s can’t have a FoV of 0, so the sides of a top-down screenshot will always be from an angle. The only alternative solution it to create 1x1 frames for every X studs, but that will totally kill performance in no time. A canvas element would make this process really simple.

There are also games on Roblox which involve drawing on a board like MeepCity or Doodley. This is usually done physically with parts, but a canvas would enable developers to easily recreate this feature in 2D.

Additionally, canvas elements could be used to make heatmaps in Roblox. Wouldn’t it be cool to have shooter games on Roblox in which you can view personal heatmaps of where you died in each map? It would be a cool feedback mechanic for players.

You do not have to restrict the functionality at all. GUIs are local, nothing you draw on your screen is replicated. If a developer decides to implement a feature that allows canvas drawings to be shared between players in a server, then you could technically blame that developer instead for allowing inappropriate content to be displayed to innocent children. Although I think it’s unnecessary to protect such a feature for the tinniest chance of something going slightly wrong. Games like Minecraft had no security for inappropriate creations anywhere, yet I have never seen a news article about kids building inappropriate structures on public servers.


I think a canvas GUI element has a lot of different uses which are currently (almost) impossible to implement without it. I think it would therefore be a good addition.

26 Likes

We need this.

20 Likes

Bumping this topic because I feel like it could use some more attention as this feature has many valid use cases. Zomebody made some good points such as minimaps being quite difficult to do since we are restricted to using 1x1 frames. Another example would be ScriptOn’s custom camera rendering system, it could greatly benefit it’s functionality by reducing the lag greatly thus allowing him to do higher quality renders with it. I also agree with the OP and Zomebody that there’s not a need to restrict the functionality of it as this feature technically already exists with 1x1 frames. This feature would simply decrease the lag and make it more applicable/efficient than using 1x1 frames.

6 Likes

A post was merged into an existing topic: Off-topic and bump posts

Found myself in need of this recently when messing around with fractal rendering (takes me about 20 seconds to create an array of 200x200 frames and I have to force close Studio when done as it will crash otherwise).

A simple, but important use case I can think of is a generated 2D map for procedural worlds. I saw that a lot of recent hack week projects and general features revolved around procedural and infinite places, but it is still impossible to provide players with what is a crucial gameplay feature.

13 Likes

We desperately need this.

The major concern with adding this is security, in that you could draw something inappropriate on the screen. This concern does not make sense, though, when you consider the fact that you can make the same inappropriate thing in 3 dimensions using bricks. (same things @RBX_Lua and @EchoReaper said). If I really wanted to make something inappropriate, I could do the same thing using frames and a 2d greedy “meshing” algorithm.

This just opens up the ability to create anything we want using 2 dimensions. There are an insane amount of use cases for this (read above), the fact that this doesn’t exist is just mind boggling.

21 Likes

It only takes 6 frames to draw a nazi symbol. If people want to troll, preventing this isn’t going to stop them.

8 Likes

Sure, but having a canvas object makes it feasible to draw (animated) high-resolution inappropriate images that haven’t gone through moderation. It’s not impossible to do without the feature (you can draw a bunch of pixel frames), but it’s much more involved and will likely have a very large performance impact / limit to how many frames you can render in UI at once, which discourages that approach and so reduces abuse.

Simple shapes (like swastika) are not within the scope of that argument of course, since you can display them performantly with only a few strokes of frames/parts. It’s about discouraging more serious abuse.

5 Likes

Yeah… No this isn’t true.

Firstly we can play already play video on the screen, see:

~~https://dl.dropboxusercontent.com/s/0r0c2i88brlll0d/GSpguRCJYX.mp4~~

and show high resolution full color images:

~~https://media.discordapp.net/attachments/142748177592877056/680124263138852946/unknown.png~~

Neither the video nor those textures on the renderer were moderated and it doesn’t actually have that big of a performance impact. On my S21+ it doesn’t even drop my framerate after being drawn. So it’s not “a bunch of pixel frames”, it’s anything you want.

And, I don’t think the exploiter cares if your framerate drops to 10 or 5. This argument is mute and I remember playing SFOTH something 10 years ago and seeing inappropriate frames being drawn on my screen. It’s not discouraging serious abuse either, it would probably take maybe an hour for an exploiter to figure out how to do this. So this argument just doesn’t work.

Thanks for the awesome draw method by @ShoesForClues

16 Likes

Good to know about the performance part on limited-color animation and static images, but it is undeniable that having an official canvas object will increase the potential for abuse, since it will be more broadly discoverable as a feature and remove part of the technical hurdle. (e.g. the “awesome draw method” part that has to be implemented, and the fact that you might be able to efficiently draw full-color unmoderated animated sprites) There’s a difference between something officially shipping with Studio/engine and something you have to find a library for and drop it in and use.

2 Likes

This doesn’t feel like a valid argument. Adult content is adult content whether it’s in 480p or 4k. Having higher resolution doesn’t cause more harm imo. Especially not when it comes at the cost of not having CanvasUI or whatever it’d be called.

It’s quite easy to add adult content already, to the point where a specific API for it wouldn’t make it much easier at all.

15 Likes

I agree. The addition of this would be helpful for procedurally generated content, and I don’t think worrying about adult content is worth it considering it’s trivial for me to build things out of bricks that are inappropriate, use scripts to generate inappropriate meshes, use frames to generate inappropriate images, or even use sound playback location to perform sentence mixing in game to make speech audio say inappropriate things (even with Roblox-uploaded audio).

It’s just one of the risks involved. The chance of exploiter abuse is minimal because of client filtering, which means that it is still possible to track down who uploads disallowed content to their game because it has to have been the game’s creator or a developer. That’s what matters in my opinion, being able to pin a name to the occasional bad actor so that something can actually be done about it in the first place.

8 Likes

For the record (also @ other people above), I didn’t say Roblox shouldn’t have a canvas object eventually, I’m just emphasizing the safety challenges. I don’t think “it’s already easy to add adult content, so it doesn’t matter” is going to be a strong argument to convince many a product manager at Roblox that this may not impact content safety.

4 Likes

What you are speaking about isn’t an issue regarding whether or no they should add a canvas GUI, but rather how they can improve safety in general. Even if we disregard usage of frames as a mean of displaying adult content because of how slow it is, you can always render entire videos using ASCII.

Safety is not a reason not to include critical features; otherwise, Roblox would still be about building stuff out of virtual knockoff legos using wands and hammers.

11 Likes

Honestly the UI editor built-in Studio is very underwhelming, not only that but it’s a pain to import assets from professional third party tools like Figma, AdobeXD and Photoshop.

Adding this would be great for users to create inside of Studio, isn’t that what Roblox vision is?

Either give us better support for 3rd party tools or add this as a band-aid for now until better / professional workflow support arrives.

People will always find ways to break the rules, not that we shouldn’t prevent it but why would you hurt legit users?

Game development is already hard please don’t make it harder for us

11 Likes

As a workaround for now you can use @boatbomber’s GreedyCanvas. https://github.com/boatbomber/GreedyCanvas

It pretty much accomplishes exactly what you’re looking for. Obviously a built-in implementation of a Canvas GUI would be more efficient, but this is definitely a solid workaround.

Using it you could draw things like this:
image

You can also check out this twitter thread:

21 Likes

Ive been needing a feature like this for a loooong time. Currently, if i want any form of a canvas to draw pixels, it would have to be a gui with a bunch of frames as pixels (which can be really laggy and inefficient when creating or constantly updating the pixels)

There are so many use cases for this and I am surprised that we dont have a ui element like this yet.

But I guess a temporarily solution would be to use my grid-based CanvasDraw Module:

9 Likes

This only covers static images, which you could just upload at a higher quality anyways, so it doesn’t have much use besides being cool. The whole point of a canvas GUI is to dynamically generate an image like a map or a drawing canvas that can be frequently edited during runtime if needed.

1 Like

This is false, you can see an example of this is the twitter thread that was included in my post: https://twitter.com/BoatbomberRBLX/status/1459030873349795842

This does not change the fact that I still think this should be added as an official feature. Roblox could implement this way more efficiently than we ever could. That’s why I said it was a “workaround for now.”

2 Likes

What im saying is that the fidelity is too low for any vector like content. You run into the same issue as with JPEGs, where they are excellent at displaying photos, but add heavy noise and artifacting to anything vector like, which just happens to be the main use case of a canvas. Not saying that it doesn’t have its uses, just that it’s too niche to make it a proper alternative. It’s also still pretty heavy compared to a single image, making any use related to procedural sprites or 2D effects unimaginable.

5 Likes