Protecting textures with a personal 'code' of some kind. How?
|
Paulo Dielli
Symfurny Furniture
Join date: 19 Jan 2007
Posts: 780
|
03-19-2009 17:37
One of my most precious textures was copied this week. The copycat made a screenshot and applied the texture on his own products, that he sold on XstreetSL. Also the complete product design was copied, but that's not the issue.
After I wrote him he admitted to have stolen the texture. The products are now removed from XstreetSL and in-world.
But I wonder. What I would like to do from now on is to put some kind of 'code' in my textures, that only I can recognize. Some tiny pixels, scattered over the texture but in a specific position. The only question is: what is the smartest way to do it without making the texture look bad (especially if it needs to be repeated on a prim) and without making the code too obvious. The idea of course is that the code is so small that a copycat doesn't notice it.
Any ideas?
|
Briana Dawson
Attach to Mouth
Join date: 23 Sep 2003
Posts: 5,855
|
03-19-2009 17:45
Not worth the effort.
|
Paulo Dielli
Symfurny Furniture
Join date: 19 Jan 2007
Posts: 780
|
03-19-2009 20:06
Why Briana? Wouldn't it give some kind proof for a DMCA report that the texture is really yours?
|
Briana Dawson
Attach to Mouth
Join date: 23 Sep 2003
Posts: 5,855
|
03-19-2009 20:19
From: Paulo Dielli Why Briana? Wouldn't it give some kind proof for a DMCA report that the texture is really yours? Yea but i just do not have faith in any system meant to thwart the acts of people who do copy such things. They would just patch some area of the texture over it or something. The internet and software packages maybe need a perm system more like SL but expanded with some of the suggestions made in past forum posts.
|
Viktoria Dovgal
…
Join date: 29 Jul 2007
Posts: 3,593
|
03-19-2009 20:20
Try this thread for some watermarking possibilities, some ways are going to be more useful in proving origin than others. /109/7f/214811/1.html
|
Peggy Paperdoll
A Brat
Join date: 15 Apr 2006
Posts: 4,383
|
03-19-2009 20:30
I don't know how all it works but if you have the original files you made to create the texture, you have enough to prove it's yours. I suppose you could put some watermark of coded pixel embebbed in each of your textures..........quite a lot of work when it's not necessary. That may be what Briana was talking about.
My thinking is pretty much as Briana's......you are not talking about much that is lost should someone "steal" your texture and sell it. If it's has such value to you personally since it's "your art" then the orginal files should be enough.........otherwise you run the risk of damaging your art with extraneous stuff embedded in it. The possibilty of someone ripping you off even with at secret code is still great.........they can find it if it's there and remove it.
|
Argent Stonecutter
Emergency Mustelid
Join date: 20 Sep 2005
Posts: 20,263
|
03-19-2009 20:47
Here's a real life example of some moderately effective non-steganographic watermarking: http://en.wikipedia.org/wiki/EURion_constellation
|
Paulo Dielli
Symfurny Furniture
Join date: 19 Jan 2007
Posts: 780
|
03-20-2009 05:35
From: Peggy Paperdoll I don't know how all it works but if you have the original files you made to create the texture, you have enough to prove it's yours. .......otherwise you run the risk of damaging your art with extraneous stuff embedded in it. In this particular case it was easy to prove. My original Photoshop files were even older than the rezdate of the copycat and his products. And yes, that's my biggest concern: how NOT to damage my textures. I'm pretty much a texture perfectionist, and especially with repeating textures any outstanding pixel annoys me very much. When I read the comments here, I think it's best to leave it as it is and make sure I save all my original files, but I will experiment a bit with Argent's idea and post any successful result here later.
|
Chosen Few
Alpha Channel Slave
Join date: 16 Jan 2004
Posts: 7,496
|
03-20-2009 09:51
If you want to spend money on "insurance" of a sort, there's always Digimarc's invisible watermarking. If you have Photoshop, you'll find the plugin for it in your Goodies folder on your install disk (or in your install file package, if you purchased via download). Their service is a little pricey, but if you're willing to pay for it, they'll maintain an official listing of your identity. Any image with your watermark in it will be traceable back to you. They even have capability to track your images across the Web, wherever they appear. Last I checked, it's around $500 for the to keep track of up to 5000 images.
You can also add invisible watermarks yourself, if you'd rather not pay for a third party service. Namssor has posted pretty extensively on this forum about her home-made ones. She's never explained exactly how she does it, though.
This won't prevent theft in any way, of course, as I'm sure you already know. It just provides a relatively easy way to prove authorship. Strong watermarks will survive cropping, blurring, compression, etc.
_____________________
.
Land now available for rent in Indigo. Low rates. Quiet, low-lag mainland sim with good neighbors. IM me in-world if you're interested.
|
Namssor Daguerre
Imitates life
Join date: 18 Feb 2004
Posts: 1,423
|
03-20-2009 19:06
From: Chosen Few You can also add invisible watermarks yourself, if you'd rather not pay for a third party service. Namssor has posted pretty extensively on this forum about her home-made ones. She's never explained exactly how she does it, though. I'll explain a basic Photoshop method that should get the job done: Think of your texture as a carrier file. 1. Choose a simple and unique watermark image that covers most of your carrier file's area, and that can be converted nicely to black and white bitmap format (solid black and solid white pixels). Maybe add your name into it. 2. Convert your watermark image to bitmap if you haven't already done so. 3. Go back to your carrier file and create a new channel in your carrier file. Run a noise filter on it at maximum setting, gaussian, and monochromatic. 4. Run a threshold on that channel at 50%. 5. Repeat steps 3-4 on at least two new channels for a total of three additional alpha channels. Label them 1,2,3 if you like. 6. Copy and paste your watermark image into your carrier file on a new layer. Label it so you know what the image is, as it will change dramaticly in the next few steps. 7. Use the three noise channels to scramble the watermark layer. A. Use noise channel 1 as an alpha channel selection on the watermark layer and invert it. B. Repeat step "A" for channels 2 and 3 in that order. At this point you end up with an image that basically looks like your other noise channels, but can be translated back to your recognizable watermark if you reverse the process (inverting 3,2,1 in that order). It's now time to embed the scrambled watermark. 8. Copy your carrier file and paste it on a new layer. 9. Create a new Level adjustment layer for your watermark layer using the watermark layer as your clipping mask. 10. Reduce the white point Output Levels to between 2-5 from the original position of 255. Your image should go almost black at this point. This number determines the watermark's strength. A higher number is a stronger watermark, but a stronger watermark will alter the original image more, so be careful. 11. Set the watermark layer to Difference mode. You are now done. The resulting image should produce a very slightly altered version of your original texture with an almost imperceptible amount of granular noise. If you don't have the original you probably won't notice the difference. Extracting the watermark is simple: Run a Difference calculation between the the original and the watermarked image. Then run a Threshold at the same setting you used for the Output Levels in step 10, then reverse the process in step 7 with the original noise channels. Your watermark will reappear in a recognizable form after that. It won't be exact depending upon what translations have been performed on the image, but it will be readable. This method can survive normal JPEG compression. I won't be around this weekend, so if any questions come up about this process answers will have to wait until Monday.
|
Chosen Few
Alpha Channel Slave
Join date: 16 Jan 2004
Posts: 7,496
|
03-21-2009 05:35
Thanks so much for the detailed instructions, Nam. I'd had no idea how you were doing it. I also have no idea why I never asked you directly. Oops. Time to play. 
_____________________
.
Land now available for rent in Indigo. Low rates. Quiet, low-lag mainland sim with good neighbors. IM me in-world if you're interested.
|
Ceera Murakami
Texture Artist / Builder
Join date: 9 Sep 2005
Posts: 7,750
|
03-21-2009 06:23
If you plan to create a limited number of specialized, high-value textures, like a skin maker creates, then Nam's technique is a very good one. But you need to do it from day one with each texture you release. If you have ever made the unmarked texture available in SL, then there isn't much value in watermarking later copies.
If you make a LOT of textures, Nam's process doesn't seem to be worth the effort. The added time it takes to repeat the watermarking process for every texture in a collection of over 1000 textures greatly increases your production time, with very little return benefit. And again, it's somewhat useless to apply it after the fact, if there are plenty of unmarked instances already sold to people. Also, if you use exactly the same watermark on all the textures, it greatly increases the ease of extracting that watermark. So to do it well, each texture bundle needs a new watermark created?
The commercial Digimarc service has costs associated with it that would easily wipe out most of the profit margin for an SL texture artist. I have over 1000 textures that I sell at TRU, and they sell pretty well. Digimarc protection would cost $199 USD *per year* for up to 3000 images, or $499 USD *per year* for up to 5000 images. More than 5000 images? They won't give you a quote for that on-line, but "Enterprise Edition" pricing costs more. Maybe it's worth it for a skin that you sell for L$3,000 or more (more than ten dollars US per sale). But not for typical SL textures that you get L$40 (less than two cents in US currency) each for.
_____________________
Sorry, LL won't let me tell you where I sell my textures and where I offer my services as a sim builder. Ask me in-world.
|
Chosen Few
Alpha Channel Slave
Join date: 16 Jan 2004
Posts: 7,496
|
03-21-2009 17:47
From: Ceera Murakami The added time it takes to repeat the watermarking process for every texture in a collection of over 1000 textures greatly increases your production time Not necessarily. You can set it up as an action, and batch process as many files as you want with it. From: Ceera Murakami The commercial Digimarc service has costs associated with it that would easily wipe out most of the profit margin for an SL texture artist. I have over 1000 textures that I sell at TRU, and they sell pretty well. Digimarc protection would cost $199 USD *per year* for up to 3000 images, or $499 USD *per year* for up to 5000 images. More than 5000 images? They won't give you a quote for that on-line, but "Enterprise Edition" pricing costs more. Maybe it's worth it for a skin that you sell for L$3,000 or more (more than ten dollars US per sale). But not for typical SL textures that you get L$40 (less than two cents in US currency) each for. I agree that it's not necessarily worthwhile for every amateur texture artist to spend the money on Digimarc's service. However, for anyone doing any measure of serious business, even if extremely part time, the math is not unreasonable. If one were to go with the $499 package, it breaks down to 10 cents per image. Compare that with your figure of 2 cents income per texture sold, and the break-even point is only 5 sales per year per texture. Surely even the worst selling texture of all time would yield more than 5 sales in a year. That's assuming one actually has 5000 images to protect. If we go with your number of just 1000 images, we can go with the smaller $199 package, which would come out to 20 cents per image. The break-even point for that is 10 sales per image per year. Again, even the worst selling textures would likely generate more sales than that in a year. It's also not just texture sellers who may wish to consider whether this kind of service might be worthwhile. Builders who make unique textures for their models could also have use for it. A well textured item will generally yield way more than just 2 cents income per copy, and will likely have not just one, but several valuable images applied to it. Take an item that sells for L$5000, for example. That's around US$18 in income. All it takes is 28 sales to pay for that $499 package. With that in mind, it's almost silly not to do it. Again, I'm not saying everyone should use Digimarc. But I do think it's something everyone should probably consider.
_____________________
.
Land now available for rent in Indigo. Low rates. Quiet, low-lag mainland sim with good neighbors. IM me in-world if you're interested.
|
madddyyy Schnook
SLGuides Virtual Worlds
Join date: 2 Jan 2006
Posts: 207
|
03-22-2009 09:52
i use paint.net hidden image plugin. And it has been used to succesfully remove images stolen that came from original photos. and do not get runined in sl.
Paint.net is also FREE.
|
Nina Stepford
was lied to by LL
Join date: 26 Mar 2007
Posts: 3,373
|
03-23-2009 03:59
From: Namssor Daguerre I'll explain a basic Photoshop method that should get the job done...
_____________________
SLU - ban em then bash em! ~~GREATEST HITS~~ pro-life? gtfo! slu- banning opposing opinions one at a time http://www.sluniverse.com/php/vb/zomgwtfbbqgtfololcats/15428-disingenuous.html learn to shut up and nod in agreement... or be banned! http://www.sluniverse.com/php/vb/off-topic/1239-americans-not-stupid.html
|
Abu Nasu
Code Monkey
Join date: 17 Jun 2006
Posts: 476
|
03-23-2009 05:15
I think I understand Nam's method. Basically creating slight differences using noise in the shape of a watermark. Or using a watermark to mask noise that is used to create the slight differences. Yeah, something like that.
Recently FM gained the ability to support scripting. This means that FM filters that are batch friendly are *much* easier to make. Plus I can now easily load external (watermark) images using DevIL.
Now, doing Nam's method using an Action + Batch shouldn't be too hard. I imagine it would be rather trivial if you make good use of the clipboard. However, in light of FM's newer functionality, I am a bit intrigued with doing a filter.
If anybody has any idea for such a filter, I'm all ears. Using Nam's method, but ideas for the kind of noise, channels, options, and things like that. Monochrome noise or RGB noise? Put the watermark noise in RGB or in the lum component? That kind of stuff.
|
Paulo Dielli
Symfurny Furniture
Join date: 19 Jan 2007
Posts: 780
|
03-23-2009 05:19
From: madddyyy Schnook i use paint.net hidden image plugin. And it has been used to succesfully remove images stolen that came from original photos. and do not get runined in sl. Paint.net is also FREE. Hey Madddyyy. I can't find this plugin on Paint.net. Do you have a link?
|
Namssor Daguerre
Imitates life
Join date: 18 Feb 2004
Posts: 1,423
|
03-23-2009 07:02
From: Abu Nasu I think I understand Nam's method... using a watermark to mask noise that is used to create the slight differences. Just reverse the concept in that last sentence and you've described it in a nutshell. I'm using noise to mask the image of the watermark so that it appears as random noise patterns thoughout the image - a common method used in steganography to mimic the natural noise of film grain. From: Abu Nasu Now, doing Nam's method using an Action + Batch shouldn't be too hard. I imagine it would be rather trivial if you make good use of the clipboard. However, in light of FM's newer functionality, I am a bit intrigued with doing a filter. I bet this would be quite successful. I use Photoshop's action capability extensively for my watermarking. The only touchy spot is that the actions can get screwed up easily if other unneccessary image windows are present and open. I think a filter would eliminate this issue. From: Abu Nasu If anybody has any idea for such a filter, I'm all ears. Using Nam's method, but ideas for the kind of noise, channels, options, and things like that. Monochrome noise or RGB noise? Put the watermark noise in RGB or in the lum component? That kind of stuff. I believe I described some of that stuff way back in my earlier posts on watermarking. The basic description I give here only deals with monochromatic noise. RGB or luminance based noise will add more complexity and better steganographic capability to the process. You can very easily extend the monochromatic method described here to each color channel (whatever they may be). You can even use pre-processing on the original image to enhance the strength of the watermark and further reduce it's detectable alterations. It is the same concept that noise cancellation headphones use to cancel out sound waves. If you know the pattern going in you can reduce it's detectable effect by inverting the pattern going out. Just beware that the complexity and amount of information needed to extract the watermark increases exponentially with each key used. Monochromatic noise takes 24 bits to extract 8 bits of information. Chromatic noise takes 72 bits to extract 24 bits of information. I haven't done the math on the preprocessing that I use because it is variable depending upon the number of transforms. Let's just say I've taken it as far as I want to go with the Photoshop method.
|
Chosen Few
Alpha Channel Slave
Join date: 16 Jan 2004
Posts: 7,496
|
03-23-2009 07:23
I love your filter idea, Abu. It also occurs to me that this could be wonderful use for CS4's new custom panel feature. A Watermark panel could probably be relatively easily created with Configurator, complete with a field to choose your source image, buttons/sliders for adding your desired amount of noise and other effects, channel selection, etc.
_____________________
.
Land now available for rent in Indigo. Low rates. Quiet, low-lag mainland sim with good neighbors. IM me in-world if you're interested.
|
Abu Nasu
Code Monkey
Join date: 17 Jun 2006
Posts: 476
|
03-24-2009 01:24
Okay, I got the bulk of the preliminaries done. I can load and watermark. I can even extract, but this is currently very hacky.
One of the problems is going to be the watermark image file. I can give a filter a memory via registry to remember and auto-load last image used, but I can't pass the string through the scripting. You will have to remember to prime the pump so to speak if you are using more than one watermark image.
As for the noise, gonna go with pseudo-random and a slider for the seed. This is good - just don't lose the seed.
For the first beta, will use a very slight variation on what Nam posted. All I'm really gonna do is make the adjustment bi-directional instead of just subtracting.
And hopefully I can get a solid framework for easy variations. This is the part that kind of sucks about these kinds of filters. How do you boil it down to something easy yet flexible? How do you maximize variety while keeping it elegant?
If I'm not back in a week, give me a holler. There is a good chance I will get side-tracked with wavelet theory.
|
Sioxie Legend
Obsessive Designer
Join date: 11 Nov 2006
Posts: 168
|
03-25-2009 06:43
Ah - my heros!
I am going to watch this thread like a Hawk. Can't wait to see what you guys come up with.
I'm curious Abu - does your home resemble a mad scientists laboratory? And Chip's house must be just like the Docs workshop on "Back to the Future" - so smart. Thank you Abu, Chip, Chosen Few and Namssor - you all make coming to the forums such a treat.
_____________________
Sioxie Legend __________________ http://secondwavefashion.blogspot.com/ www.soignemonde.com https://www.xstreetsl.com/modules.php?name=Marketplace&MerchantID=31662
|
madddyyy Schnook
SLGuides Virtual Worlds
Join date: 2 Jan 2006
Posts: 207
|
03-25-2009 10:43
From: Paulo Dielli Hey Madddyyy. I can't find this plugin on Paint.net. Do you have a link? http://paintdotnet.forumer.com/viewtopic.php?f=16&t=5558
|
Abu Nasu
Code Monkey
Join date: 17 Jun 2006
Posts: 476
|
03-27-2009 01:52
Pseudo-random isn't always pseudo-random. Who knew? Talk about being thrown for a loop, but my hack-around seems to be working. Thought it up a bit more and I now fully understand what makes this technique work and what makes if fail. That is, I know where I can wiggle things and when I shouldn't. So, I going with something that full RGB.  That is an example of an extracted watermark. As you can see from the left over noise that there is some clipping going on, but I'm hoping y'all won't mind that. Not sure if I'm going to fix that or not. At least there is more than enough visual to see that a watermark does exist. I am only showing the extracted mark, but know that there is absolutely no visual clues that a mark exists in the encoded image or in the noise used to extract the mark.
|
Abu Nasu
Code Monkey
Join date: 17 Jun 2006
Posts: 476
|
04-01-2009 07:24
DevIL Download:  Put DevIL.dll in Photoshop/, Photoshop/Plug-ins/Filters/ or that one Windows directory... System32? I have DevIL.dll in my filters directy and it's all good for me. This DLL is needed for Nam's Mark to load an image watermark. Namssor's Mark b1  Chuck that into your filter directory and re-start your host of choice. BBL with some notes.
|
Abu Nasu
Code Monkey
Join date: 17 Jun 2006
Posts: 476
|
04-01-2009 08:55
Watermark There is a button to load a watermark image file and a non-editable string to show last watermark image used. The last mark used is stored in the registry and should be automatically loaded on each invocation. I have tested with Ctrl+F but not with scripting (in an Action). ---- Watermark Threshholds The watermark image needs to be threshholded. Since this implementation is full RGB, you can threshhold each channel individually. I did think about threshholding the whole thing at 128 under the hood, but decided on some flexibility and control. ---- Noise These control the noise mask. Since the noise is pseudo-random, you can use Seed at the same value for the exact same noise everytime, or use different seeds for different noise in different projects or whatever. Inter is the number of interations that noise is added. N Threshhold determines whether or not a given pixel is 'on' or 'off'. Using these slider, the noise mask can have different spreads. ---- Output These are the options for raw output. Whichever one is active for the Preview is what you get in the final output. The only two that you will really need are Noise Only and Marked Image, but I tossed in the other two for detective reasons. ---- Defaults These will save or load slider values only in registry settings - SLIDER VALUES ONLY! No affect on the watermark image or output options. ---- And finally Strength all by its lonesome. The higher the value, the more mask + noise will affect the final image output. ---- How to check a Suspect image: Load up your original in PS. Put the Suspect image in the same document on a new layer above the original. Set the blending mode of Suspect to Difference. Above this, add a Levels adjument layer and bring Output 255 all the way down to 10 or so. Above all of that, add a new layer and fill with any colour your precious heart desires. On this layer, fire up Namssor's Mark and use the *exact* same settings that you used to watermark your work. For Output, use Noise Only. Since outputting Noise Only, only the Noise sliders absolutely have to be exact. Click OK. Once back in the Layers palette, set the new Noise Only layer to Difference. Maybe, just maybe, your watermark will show. Now, I can do the watermark check with a filter, but I decided on letting you use Photoshop's tools for this. I did this for very specific reasons (I'll let you ponder why). In the tests that I did, the results were far more positive than I was expecting. There is still some noise, but definitely more than enough visual to conclude in the affirmative that my mark does indeed exist in the suspect image. I even tested the pseudo-randomness and that pulled through like a charm. But the one thing that I didn't test is putting it in an Action and Batching. For where I'm at, testing positive with Ctrl+F is enough. Another thing I did was try to break the watermark. This is proving to be far more difficult than I originally thought. Even against my assaults, the watermark remains largely intact. One thing that really helps is that I did this in RGB. I'm smart, understand the method intimately, coded it - and I'm having a hard time defeating it. Kudos for that I guess. Does that make me less of a coder? Jeez, I feel so inadequate all of a sudden.  niff: I need a hug. ---- PC Win only. I'm still WinXP SP3 and it works for me. No idea if it will work with any flavor of Vista in particular. Photoshop CS2 and it works for me. No idea if it will work with higher/lesser versions of PS. Also, it should work with other hosts but I have no real idea which ones (PSP, Gimp, etc). It does use the registry for a handful of values. This might come into play if you keep your computer on lock-down. I actually tossed in far more error-checking than I usually do. Ummm... I think that's about it for now.
|