"[How To] Stop Clothing Copying"

If I’m not mistaken, it uses the Image asset type. The same kind used for decals.

1 Like

I second this, as I think that with the removal of tickets, we really need to get rid of price floors to make up for it.

Price floors have not stopped people from being able to steal other people’s assets. All they have done is made it so that you are forced to monetize assets, stolen or not stolen. This is no solution to the problem. Anyone with BC is still able to steal another person’s assets. Bots can’t re-upload stolen shirts, simply because it has always required BC to upload shirts.

If you want to do something that has an actual effect, add a fee for uploading Shirts/Pants. As well as this, as mentioned in the OP, a system that allows the user to make a report, if they provide a link to a shirt that was made before the re-uploaded one, I think will be a great system which would require little moderation since it could mostly be automated. Automated warnings/bans could be put in place if the creator of an item sends a link of their original item, and they are significantly similar.

I think that it is desperately needed that the price floors be removed now that NBC players can no longer buy clothes (As they have no way of getting any income. Now, all we will see, are people in default colors and T-Shirts. That’s really lame and a big step downwards from the “IT’S FREEEE” roblox).

3 Likes

Yes, I actually used decals for the images that I posted above, for faster testing and I don’t have BC.

Also, I was able to get the texture (and obj) files that are used for the 3d thumbnail, I don’t think that it would be that easy to secure that system.

1 Like

If you know the downsampling method, you simply find an higher resolution input that, when downsampled, exactly matches. The full resolution images don’t need to match.

(More likely, people would just have the slightly degraded quality versions.)

3 Likes

Actually, your example has very high frequency: it’s the notorious step (Heavyside’s) function. And The fact that the bitmap exhibits aliasing during downsampling is exactly the result of its highest band exceeding the Nyquist limit. That’s the definition of aliasing.

With aliasing, in the frequency domain the portion of the signal’s band that sticks beyond the Nyquist frequency is mirrored back against it and superimposed onto the rest of the signal. That is unless you apply some anti-aliasing, usually in the form of a pre-filtering of some sort, to limit the signal’s band to be under the limit.

P.S. Btw, now you know why the most of the shader-based anti-aliasing techniques you see in games (FXAA, TSAA, xxAA) are not really anti-aliasing (i.e. suck): post-filtering of a downsampled signal is a bad substitute.

2 Likes

This sounds like reversing a hash to me.

By Pidgeon Hole Principle, many inputs will map to the same output. How do you get the information back?

1 Like

It is more like finding hash collisions. The end user only sees the downsampled version. I just need to find any input that results in the same downsampled version. To do this, I only need to know about the downsampling algorithm.

Basically, the full resolution images don’t need to match and likely will not match exactly.

1 Like

What if the downsampling algorithm destroys information? For instance, maybe it averages two numbers.

You guys make it sound like I can take a black and white checkerboard, upsample then downsample it a million times and I can expect to get something that isn’t completely grey at the end of the process.

1 Like

The original image already contained bonus information that was never useful. I don’t need to duplicate this unused information at all as I only care about how my shirt will render on potentially buyer’s clients.

For your example the very first time you downsample it, you get the gray image. Your proposal says that the client will get this downsampled version, which is gray. If I want to copy your shirt, I only need to find any higher resolution image that also downsamples to a gray image. I don’t need to find your specific version.

Basically, I’m solving:
serverDownsample(myUpsample(mine)) = serverDownsample(yours)
which doesn’t require:
myUpsample(mine) = yours

2 Likes

Ok. That make sense. Let’s say the downsample is InterpolationMode.HighQualityBicubic. I make a shirt and you want to steal it. What does your upsample algorithm do?

1 Like

I don’t know enough to make a good algorithm at the moment. It looks like, after some steps, bicubic still expresses each output point as a linear combination of 16 input points. If that is accurate, then the downsampled points and boundary conditions become the constraints of an LP-feasibility problem, with the upsampled points as the variables. The problem would clearly be feasible as it was generated from a feasible solution. There is probably a better algorithm, or a better heuristic.

1 Like

Original creator uploads sequence: AABBCCDD
In-game, it gets downscaled to: ABCD
Someone copies and uploads: AXBXCXDX
In-game, it gets downscaled to: ABCD
(Same with image downscaling/upscaling, not using a stupid ^ text example)

It isn’t an exact copy, but it appears the exact same way in-game.
The people that buy the original/clone wouldn’t care if the originals are different.
They only see the in-game version, which will be the same.

The only thing downscaling could be used for is something like:
Hash the downscaled version, and check if that’s already uploaded.
That way, people upscaling to another version still get caught.
It could even be, that if someone changed some pixels, downscaling loses that information.
Changing a pixel would still result in the same downscaled version, so “already exists”.

1 Like

Ok. So you have me on board in the case where the downsample interpolation function is monotonic (bicubic & bilinear work, lanczos doesn’t).

In your LP problem it seems that a pair of adjacent downsampled pixels share some of your 16 variables, so they are not independent. If this is the case can they be separated or do you actually have widthheight16 free variables?

I also wonder about quantization given that the channels are 8-byte ints. Since you know the output it going to be quantized, it lets you throw out a huge percentage of the search space. But it seems like it would be a source of dependent variables between patches that you are sampling (the patches individually average out to the right number, but mess up the adjacent patch due to quantization as you move the reading window around)

1 Like

That only works if the downsample algorithm involves no interpolation. It takes every 2x2 patch and returns 1 pixel.

Good downsampling will take at least a 4x4 or 8x8 patch, create some kind of edge-preserving average around the second derivative and output 1 pixel.

1 Like

Not sure what you’re talking about. Sounds have always just used their sound id. You can download the sound using that id and just reupload it. It’s easier than stealing a shirt, really.

1 Like

Sounds and textures need to be freely accessible by anyone in the same instance as you. Otherwise your local client wouldn’t be able to download the sound to play it.

1 Like

There would be a ludicrous number of variables. But even though there are dependencies, the problem is known to be solvable as it is a feasibility problem that was generated from a feasible solution.

And just like the crypt case, even if I can’t find the downsampling collision, someone else can. Using a giant LP is probably not practical unless the image is small.

Just as an aside, there probably is a gradient descent method that can be done where an unknown (but callable) downsampler is approximated as a sequence of bilinear transforms. This might not get the exact pixel values though.

1 Like

I know it’s a technical term but when you are talking about optimization in 8 million dimensions I just don’t know.

1 Like

@Shedletsky Yes, that makes sense, I understand that but that’s not what I’m stating, I’m speaking about users that directly download ROBLOX uploaded assets from the server.

I’m speaking more to the public download ability through the website to file, all clothing on ROBLOX that is actually downloaded in full quality is done by finding the shirt, -1 from the ID, and typing into (typically google chrome’s) URL bar “asset” in between the roblox.com/ and the ?id=########, this prompts chrome to automatically download an unnamed file with an unknown extension, changing the extension to .png will load the file as the image of the article of clothing in full definition as per what the original uploader added. There are now websites that do this for you, and gives you the clothing itself.

When user audio was released it was (almost) the exact same process to locate and download an audio asset, you would -1 from an audio ID and it would prompt google chrome to open the .mp3 file in its media player, allowing you to download the file.

This is no longer possible, -1’ing an audio ID now won’t go directly to the asset, and won’t prompt chrome to open it in its own media player, it simply skips to a solidmodel asset or somebody’s place. This shows ROBLOX had at some point made a change in the URL basis of audio assets (presumably for copyright, who knows) to make it less easy to access and download by the user.

3 Likes

This in a nutshell.

Saving the image shown on the site is old news, the majority of people right now just refer to this download method instead. Heck, I even do it myself to retrieve my own uploaded outfits that I don’t have access to anymore (old pc’s etc.).

Example:

Desired template: [Hotline Miami] Biker alt - Roblox
Change to: http://www.roblox.com/asset?id=252842626

Rename the downloaded file with “.png” on the end to change the recognised extension and you’ve got yourself a template in full quality.

Also while we’re on the topic of copying I’d like to point out that the idea that people won’t buy a piece of clothing because it’s a low quality copy is simply naive. ROBLOX’s er…core audience…is of a certain age that I don’t think it really makes a difference to a lot of people, whether that’s because they don’t know any different or whether they just don’t care.

I’ve had plenty of instances in the past where people accuse me of copying a piece of clothing despite the fact the alleged original is clearly of lower quality (granted, this doesn’t happen as often anymore what with the current method). Then there are the people I occasionally see in the comments saying something like “who cares if it’s a copy, this looks awesome!!11”

1 Like