Sign in to follow this  
viper110110

What program to use to add alpha

Recommended Posts

viper110110    1114

I want to use the alpha channel to add height data to my textures. I am currently getting textures online and then using paint.net to convert them to DDS. Problem with paint.net is that I can't set the alpha to zero while maintaining the RGB data. It also makes editing a pain if I want to make changes. I can calculate the height on the fly based on the average of the rgb, but I would prefer to use an actual map so that I can adjust the values myself.

Share this post


Link to post
Share on other sites
eppo    4877

Most Image editors let you interpret an image's alpha-channel as a (paintable) greyscale image. I know Gimp, Photoshop and Photo-Paint allow you to do this.

 

Another method is to create a separate greyscale image that serves as an alpha-channel. You can use the DirectX Texture Tool to load the image into the alpha-channel of an RGBA image to combine the two.

Share this post


Link to post
Share on other sites
viper110110    1114

Another method is to create a separate greyscale image that serves as an alpha-channel. You can use the DirectX Texture Tool to load the image into the alpha-channel of an RGBA image to combine the two.

I like this one. I want to be able to manipulate the range of the heights that I am generating.

Share this post


Link to post
Share on other sites
Kryzon    4624

Get the GIMP, it has several tools to deal with Alpha Channels and Transparency (some of which even Photoshop doesn't have).

http://docs.gimp.org/en/gimp-layer-transparency-menu.html

 

When you open an image most of the time it won't contain an alpha channel (and this is a per-layer property), so you need to right-click your layer thumnail and choose "Add Alpha Channel" so that that layer can be semi-transparent wherever you erase it, if you want to. 

 

It can add alpha to a layer based on a certain color. "Layer -> Transparency -> Color to Alpha" will make every pixel of your layer transparent depending on how much it does not contain the reference color you specified.

If you do this on a grayscale image and set the reference color to black, it will make all pixels transparent according to their value, with black being fully transparent and white opaque.

 

You cannot edit the global alpha channel of the image like you can in Photoshop, and I think this is unfortunate. You can, however, edit the alpha channel of every individual layer.

You right-click on a layer thumbnail, and from the context menu choose "Add Layer Mask", and choose the option to initialize it to white (fully opaque). You can now paint in grayscale in this mask buffer to define the visibility of the layer this mask belongs to. You can also use the color value tools on this mask buffer (like "Levels", "Brightness & Contrast" etc.).

When you're done, you can right-click the layer thumbnail and choose "Apply Layer Mask" to "bake" the mask as transparency information in your layer buffer.

Edited by Kryzon

Share this post


Link to post
Share on other sites
vlasta    150

Zeroing out the colors when alpha is 0 can sometimes be handy as fully transparent pixels are usually not useful. But in your case, when you are using the alpha channel for something else than transparency, I can see that this optimization it can be a pain.

 

Anyway, do you need to compute the alpha values from the rgb channels of the current image, or are you using a different image as a source? I am asking because I am an author of a freeware image editor and knowing the needs of the users is useful for me and because maybe my software could be useful for your case. You can access pixels using JavaScript and easily compute and set your custom alpha if everyting falls in place.

Share this post


Link to post
Share on other sites
Kryzon    4624

I am asking because I am an author of a freeware image editor and knowing the needs of the users is useful for me and because maybe my software could be useful for your case.

If I were you, I would try to implement a basic script dialect to express operations to be made per-pixel, even if it's simple mathematical expressions on top of the original RGB channels' values.

This way you can accommodate for almost any need a user may have. The user can program the operations he wants.

 

It's the idea behind FilterFoundry for Photoshop: http://thepluginsite.com/knowhow/ffpg/ffpg.htm#1

It's a bit also what the SVG standard allows you to do by chaining filters: http://www.w3.org/TR/SVG/filters.html

Edited by Kryzon

Share this post


Link to post
Share on other sites
viper110110    1114


do you need to compute the alpha values from the rgb channels of the current image, or are you using a different image as a source?

 

I am somewhat basing it off the current image. I basically want to take the current image and then stretch the range of values to be full 0-255. That way a dark texture won't always fall below a light texture. The current best way for me seems to be to use paint.net to convert to greyscale, adjust the range manually based on the histogram, then save the greyscale image and import both into the directx texture tool.

Share this post


Link to post
Share on other sites
vlasta    150

In that case, I think my editor can help you. You can get it at http://www.rw-designer.com/image-editor There is also a portable version that you can just unzip and run.

 

Once you open an image, go to menu Effect->Custom operation and paste this code into the box:

// create temporary copy
var dup = Document.Duplicate();

// make copy grayscale
Operation.Execute(
    Operation.Create("Raster Image - Grayscale"),
    dup);

// streatch values to full 0-255 range
var ac = Operation.Create("Raster Image - Automatic Contrast");
ac.Tolerance = 0;
Operation.Execute(ac, dup);

// move red values from the copy to the alpha of the original
var dst = Document.RasterImage;
var src = dup.RasterImage;
var sizeX = dst.sizeX;
var sizeY = dst.sizeY;
for (x=0; x<sizeX; ++x)
    for (y=0; y<sizeY; ++y)
        dst.SetPixelAlpha(x, y, 0, 0, src.GetPixelRed(x, y, 0, 0));

It should do what you have described. The last loop is kind of lame and if it is too slow for you, it can be replaced by some other code that does the operations faster, but it would be less readable. Some info about scripting in the editor can be found at http://www.rw-designer.com/javascript-operation

 

Also, I have an unfinished DDS codec for the editor. If you need one of the DDS uncomressed formats, I can give you access to it.

 

Kryzon, I currently have the options for running filters or manipulating colors in JavaScript. It is true that for fast, custom, per-pixel operations, neither of these methods is ideal. I'll look into the alternatives, but it seems quite difficult to come with a method that would deliver both flexibility and speed.

Share this post


Link to post
Share on other sites
3Ddreamer    3826

GIMP is probably the second best overall for Alpha channels, some argue the best, but it is no cost.  Almost everything that you need is in GIMP and chances are it is all that you will ever need for Alpha issues.

 

 

Clinton

Share this post


Link to post
Share on other sites
riuthamus    8361

i use photoshop. For alphas that need to be crisp I normally create an empty back layer with the color tone matching the edge ( this is used to make alphas work def rendering ). To get the alphas to display correctly for SRGB you have to use a different save file. I used super PNG. I have several threads about this because we were having issues. Photoshop is my weapon of choice though, assuming you have the cash for it.

 

SuperPNG

http://www.fnordware.com/superpng/

Edited by riuthamus

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this