Recommended Posts

Very strange: I'm using the latest paint.net (3.5.10), liquify (ver. 1.5) works in its dialog, but won't render to the canvas. After I click ok, the original remains untouched. Pyrochild's other plugins work just fine (stitch, smudge, etc.). Any ideas on what I'm doing wrong?

Share this post


Link to post
Share on other sites

Not trying to be negative here, but can you or someone please post more samples of what exactly this plugin does before I consider installing it? I'm sure it's great, but the sample you provided in your first post doesn't really show much of what it does. Thanks ahead of time.

Just a simple example using the "Push" feature in the plugin.

Before:

Smile.jpg

After:

SmileFangs.jpg

And yet another:

AliLandryVampiress.jpg

Share this post


Link to post
Share on other sites

from pg 49 in my gallery I did a tulip using the very first version of smudge. If I was to do this picture again. Liquify would be a better option for some of the shaping.

thisistheversionImgoingwith.png

Edited by oma

Share this post


Link to post
Share on other sites

Is there a way to save mesh to some kind of "human readable" format? Are there any current mesh file format specs?

I need it coz I want to use saved meshes in my computer game.

Thanks!

Share this post


Link to post
Share on other sites

Top plugin pyrochild. I've used it for Ebru effects (marbling) and for tricky tweaks.

Used it a lot in some of my abstracts as well.   

 

N%20East_zpsnv47jyt3.jpg

  • Upvote 1

Share this post


Link to post
Share on other sites

I can't believe I've never posted on this thread telling you how awesome I think this plugin is.

 

Absolutely brilliant! I love it!

 

 

  • Like 1

Share this post


Link to post
Share on other sites

Photoshop has changed the file format of .msh files created in Photoshop's Liquify. The newer .msh files are much smaller (50-300 kB) compared to the original .msh files which were often 15+ MB each. Probably Adobe is just compressing the old files, but I suspect the compression is lossy because of the massive reduction in file size. The old larger files can still be imported in Photoshop but can only be saved in the new smaller format.

 

What this means is that Paint.net's Liquify is now only partly compatible with Photoshop's. Meshes created in Paint.net can be imported into Photoshop, but not the other way around. So I'd like to know: will the plugin be updated to read Photoshop's newer format? And in any case, would anyone be willing to speculate on how the new meshes may be being compressed? That could help any reverse engineering attempts ...

Share this post


Link to post
Share on other sites

I don't have Photoshop. Could you attach:

  • A .msh exported from Photoshop
  • Dimensions of the image it was created for
  • Before and after image of the mesh's distortion

Then I can take a look... no promises :)

Share this post


Link to post
Share on other sites

No problem. I made three PNGs of various sizes and used the "push brush" twice in Liquify to make simple test meshes. Dimensions are in the file names. The resulting zip file is too big to attach (still only 1.4 MB), but here's a link to Mega.nz:

https://mega.nz/#!We5QkARI!2-qD_qK2e8ADnYJcT578x9RxXo4uvBH0rXeDPeR-pRU

 

I understand there are no promises when trying to reverse engineer something, but thanks a lot for trying!

 

 

Share this post


Link to post
Share on other sites

Hey pyrochild, I assume you didn't manage to crack this since I haven't heard anything. But I'm going to need to look into this myself, so please let me know if you made any progress at all that could give me a head start. For example, any thoughts on what kind of compression Adobe is using to get such large compression ratios (see my previous post)?

 

Share this post


Link to post
Share on other sites

By time traveling 10 years into the past, then writing the Liquify plugin yourself since it didn't exist back when 3.36 was a reasonable version of Paint.NET to be using

  • Upvote 2

Share this post


Link to post
Share on other sites

peabody-sherman.jpg

       "Sherman, set the WABAC Machine to the summer of 2008!"

Edited by HyReZ

Share this post


Link to post
Share on other sites

Not using paint.net myself (actually making competing app), but since we're all helping each other out. (Yes, it seems new mesh format isn't saving as much data, width/height are smaller than original width/height)

 

 

Last bit of my code:

 

        if (version === 2)
        {
            var width = stream.readUint32();
            var height = stream.readUint32();

            ...

        }

        else    // version === 4
        {
            var width = stream.readUint32();
            var height = stream.readUint32();

            if (width > 32768 || height > 32768) {
                throw new Error("Liquify Mesh File - width or height too large");
            }

            var _unknown0 = stream.readUint32();
            var _unknown1 = stream.readUint32();
            var _unknown2 = stream.readUint32();
            var _unknown3 = stream.readUint32();

            var width2 = stream.readUint32();
            var height2 = stream.readUint32();

            var _unknown4 = stream.readUint32();
            var _unknown5 = stream.readUint32();

            var width3 = stream.readUint32();
            var height3 = stream.readUint32();

            var data = new Float32Array(width*height * 2);

            for (var y = 0; y < height; ++y)
            {
                var x = 0;
                while (x < width)
                {
                    var skip = stream.readUint32();
                    x += skip;
                    if (x >= width) {
                        if (x !== width) {
                            throw new Error("Error in file");
                        }
                        continue;
                    }

                    var offset = (y * width + x) * 2;
                    var count = stream.readUint32();
                    for (var xend = x+count; x < xend; ++x) {
                        data[offset++] = stream.readFloat32() / width;
                        data[offset++] = stream.readFloat32() / height;
                    }
                }
            }
            assert(stream.pos === stream.length);
 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.