Painter

Reference

to get Painter 6 to run on modern system: http://dev.depeuter.org/metacreations_fix_30.php

the damn seamless tile trick i can never seem to remember

Making Pattern Pens

To create a masked pattern, open a new layer. Create a design or whatever. With the layer active, do a Drop and Select. While the little ants are still marching around Do capture pattern. What ever was on the background layer will show when using the Pattern Pen. When you switch to the Pattern Pen Masked only the masked part will show.

Getting the 3d data out of Impasto

Here is a Blender add-on to import Corel Painter RIFF files.
Corel Painter is a commercial traditional media digital art application.
I created this add-on specifically to extract the impasto (3D) depth layer information found in RIFF files, but the add-on should also be able to load most raster layers from RIFF files.
Corel Painter can store up to 65536 levels of impasto depth information per layer in RIFF files.
Theoretically, using this add-on, fine displacement and 3D printing, you should be able to print a painting featuring a real visual and tactile impasto texture.

Once the add-on is loaded, UV/Image Editor -> Image -> Import Painter RIFF (or spacebar "Import Painter RIFF")
Hover over the options at the bottom left of the file selection screen for tooltip help on the import options.
Options are:

All Layers:

Import all raster images from all layers in a RIFF file; otherwise only images from the canvas layer will be imported. This add-on will not import text or shape layers.


Adjust Layers:

Adjust imported layer image sizes and positions to fit/match the canvas dimensions. Otherwise layers will be imported using their own native sizes and positions.


Drop Impasto:

Drop lowest impasto level to black. Useful for displacement which starts from black. Painter impasto is based from a middle grey. Note that the lowest impasto level can easily be lower than the base (paper) level in Painter, even with a single brush stroke.


Spread Impasto:

Spread out full impasto range for each layer from black to white. Otherwise impasto range is imported as is.


Notes:

You must save RIFF files UNCOMPRESSED from Corel Painter for this add-on to import them.
IMPORTANT: After images are imported, save them as soon as possible, otherwise Blender will not keep them!
Save impasto images as BW 16-bit PNG to preserve full depth information.
Mask images can be saved as BW 8-bit PNG.
Other images can be saved as RGBA 8-bit PNG to preserve full detail and transparency.
The canvas layer in Corel Painter does not contain transparency information. Paint on a layer instead of the canvas if you want transparency.
Watercolor and Liquid Ink layers include extra images containing wetness information.
The add-on will not combine layers together, do this (drop function) in Corel Painter
Corel Painter RIFF is non-standard proprietary file format for which I found no information or specifications, I had to deduce and guess the structure. So save your work before using this add-on in case there is a problem, or better yet, use this add-on in a separate session only to import and save impasto layers and images.

Manual

  1. start with a single layer impasto image saved in uncompressed RIF format
  2. load the RIF file into Winhex or your favorite hex editor
  3. the four bytes at offset 0x144 name the start of the layer's color image, usually 0x0170
  4. the four bytes at offset 0x0164 name the start of the layer's bump image; the size of the color image and the bump image is the image width * height * 4; RIF use 4 bytes per pixel (ARGB sequence)
  5. in Winhex, copy the block containing the bump image to the block containing the color image
  6. resave the RIF file with color appended to the filename and reload it into Photoshop
  7. the file's green channel is the bump map, so, in Photoshop, duplicate the green channel, copy it to a layer, then save that grey layer imagery as a JPG
  8. reload the original impasto RIF file into Winhex
  9. fill the bump image block with 0x80; this value is a midtone grey and will de-bumpify the RIF color imagery
  10. resave as yet another differently named RIF
  11. reload that RIF into Painter, then resave it as JPG; the JPG will have flat color imagery without the brush ZDepth
  12. now there's a flat JPG color image that can be bumped by the grey JPG bump image

the following scripts supposedly do that:

import PIL
import PIL.Image
import PIL.ImageOps 
import struct

file = open ("/Users/Auriea/Desktop/impasto.rif", "rb")
file.seek(4)
h = struct.unpack("h",file.read(2))[0]
w = struct.unpack("h",file.read(2))[0]

print h, w

file.seek (0x170 + w * h * 4) # Location of impasto buffer
buffer = file.read (w * h * 4) # Impasto channel, 32-bit integer
image = PIL.Image.frombuffer ("I", (w, h), buffer)
image = PIL.ImageOps.flip (image)
image.save ("/Users/Auriea/Desktop/bump.png", "png", mode="I")
#python
1. XTractRIF.py
1. usage: "XTractRIF.py <filename>.RIF" Runs on Python2.4.3 with PythonImageLibrary1.16
1. This outputs an RGBA (zero-transparency) PNG color image and a 
1. greyscale PNG bump image from an uncompressed Painter impasto RIF file

import os, sys, struct
import PIL
import PIL.Image
import PIL.ImageOps 


infile = sys.argv[1]
fnam, ext = os.path.splitext(infile)

file = open ( infile, "rb")

file.seek(0x04)
h = struct.unpack(">h",file.read(2))[0]
w = struct.unpack(">h",file.read(2))[0]

file.seek(0x0144)
colorstart = struct.unpack(">l",file.read(4))[0]+1
file.seek(0x0164)
bumpstart = struct.unpack(">l",file.read(4))[0]

file.seek ( colorstart )
bufferc = file.read ((w * h * 4)-1)+chr(255)
file.seek ( bumpstart )
bufferb = file.read (w * h * 4)
file.close()

1. Save color image
imc = PIL.Image.frombuffer("RGBA", (w, h), bufferc)
imc = PIL.ImageOps.flip (imc)
imc.save (fnam+"_Color.png", "png", mode="RGBA")

1. Save bump image
imb = PIL.Image.frombuffer("RGBA", (w, h), bufferb)
imb = PIL.ImageOps.flip (imb)
imb = imb.convert ("RGB")
r, g, b = imb.split()
b.save (fnam+"_Bump.png", "png", mode="L")