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.
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”.
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)
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.
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.
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.
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.
I know it’s a technical term but when you are talking about optimization in 8 million dimensions I just don’t know.
@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.
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”
Nothing is stopping anyone from walking into the Gucci store, taking a picture of a shirt and getting it made in China for a few cents instead of $500, yet people still go to the store and buy them full price. Why? Two reasons;
- People generally don’t like ‘fake’/copied things
- It’s way easier/accessible to just buy it from the store
Here are some things we could do to apply those:
- Make stealing as hard as possible, have it so the only way to get the asset is by ripping it out of the game client itself
This would just make it more of a pain to steal clothes, will not solve the problem but it will help.
- Add a ‘verified’ system for clothing sellers
A verified system will make people more cautious when buying unverified clothes, a smarter/more aware consumer base will definitely harm the sale of stolen clolthing
- Have the clothing seller’s name and verified sticker displayed under the item in the Currently Wearing box on our profiles.
It would make people look bad if they were wearing an outfit that has a well-known brand on it but didn’t have the verified sticker. Like I said before, people don’t like wearing ‘fake’ stuff so if it’s really easy to tell you’re wearing fake clothes, people might be ashamed and not do it, just like most people don’t want to do it in real life.
- More support for stores
To elaborate;
This tab could use some features to make finding clothes new clothes easier. I think that tab should have a full on store rather than a link to see all assets made by that group. Something the group could have control over, like maybe I want to advertise my Spring clothing, I’d make a Spring 2016 collection on the group page, add a bunch of clothes to it and ‘feature’ it on the Store tab, making finding new clothing a lot more accessible. This would also get people to keep coming back to the same stores instead of venturing off and stumbling on stolen clothes.
This is just too much work for ROBLOX staff to maintain, and i’m not going to go out of my way to get my clothing verified just incase it’s stolen.
The only way clothing is copied in HD is by downloading the asset directly off the website as me and blob stated before, it’s a insanely easy process and i’m sure ROBLOX can fix it.
I don’t care if somebody steals my clothing from the image displayed on the -1, and crops it to make it wearable, that kind of stuff doesn’t bother me.
When I wrote my post I had actually profiting from shirts in mind, not just clothing that you don’t want anyone else to have.
I don’t have a problem with profit, and if that’s the idea for verification then that’s fine.
But it won’t stop copying anytime soon.
We can’t stop copying, we can only try to solve the problems that copying causes.
As I stated earlier ROBLOX already used a method to prevent users from downloading audio files off of the server via asset.
It’s not impossible to stop copying, the method used to download these images is so menial that i’m sure ROBLOX can prevent the client from downloading it.
Go to sound page > Inspect Element the play button > Copy the “data-mediathumb-url” attribute.
Example: https://www.roblox.com/Rihanna-Work-ft-Drake-Thanks-for-4k-takes-item?id=359748862
Result: Screenshot by Lightshot thus Prima Bossa Nova
That was difficult and time consuming.
As I stated a while back, it is possible to retrieve the textures using the 3d thumbnail, which uses a good bit of freeware.
Inspecting the element of the 3d thumbnail, look for: (This is from my character page)
<span class="thumbnail-span" data-3d-url="/avatar-thumbnail-3d/json?userId=1861409" data-js-files="https://js.rbxcdn.com/47e6e85800c4ed3c4eef848c077575a9.js.gzip"><img style="display: none;" alt="T_FM" class="" src="https://t7.rbxcdn.com/fbe3ab0f75e99110c8cb35fa2c410250"><canvas height="352" width="352"></canvas></span>
(If you open the “data-js-files”, it shows that it isn’t completely made by roblox, so any major modifications outside of the intended use of it would take a while.)
Copy the “data-3d-url=,” which would be “/avatar-thumbnail-3d/json?userId=1861409”
Add roblox.com,“roblox.com/avatar-thumbnail-3d/json?userId=1861409”
It takes you to a page with
{"Url":"https://t1.rbxcdn.com/9e503168a659ef0ccfc5d2bbe90fde06","Final":true}
Go to the “Url”
It opens a page with
{"camera":{"position":{"x":-2.28341,"y":107.598,"z":20.8882},"direction":{"x":-0.40558,"y":0.40558,"z":-0.819152}},"aabb":{"min":{"x":-2.0,"y":102.5,"z":24.6022},"max":{"x":2.0,"y":108.158,"z":26.3978}},"mtl":"ef658632d6995e589ca04bbd36c1a2ab","obj":"1f2c100e10965bea3427ac512f4bc895","textures":["0209d74d14a7f3bddb5d2aeb458695b0"]}
From this, anyone can take the OBJ, MTL, and texture file.
Copy the id there, so “0209d74d14a7f3bddb5d2aeb458695b0” for the texture
Paste it after “t1.rbxcdn.com/”, so “t1.rbxcdn.com/0209d74d14a7f3bddb5d2aeb458695b0”,
That may or may not work, if not, go to t2.rbxcdn.com, t3.rbxcdn.com, and so forth, repeat until you get an image.
The obj and mtl are simple text, copy to notepad/notepad++ and change to the proper file extension.
The texture file is optimized for obj objects, but it wouldn’t take a rocket scientist to modify it to the shirt/pants template.
This is tested in chrome and firefox
I don’t have any experience in extracting files like this and I figured it out a way that would require tons of work to fix, imagine what an experienced hacker could do using the proper tools.
(And now I just enabled the developer community to extract high quality textures from shirts/pants/hats)
The same results can be created using the roblox studio export to obj feature, good luck securing that!
Of course it is.
You are rendering it in your browser. Obviously the texture is in memory somewhere. How many times do we have to say it.
Again, me and blobmista4 explained the much more oftenly used and efficient way to steal clothing in high quality.
There has to be a way to stop something as easy as typing “asset” into the URL from downloading the actual file.
And, I can assure you that 75% of the people who freeload off of other peoples clothing won’t take the time to learn that method.
@EisnteinK ^^
As I said, they already stopped it from being accessed by -1 and then typing asset.
It’s clearly possible to do the same for shirts.