Replacement default color map and background palette

We ( a group of developers) are thinking of replacing the default background palette with a color that is more neutral gray with a hint of red (i.e., making the background a warmer color). We are also discussing changing the default color map to a map that has more discriminatory power. As the default background color and the default color map interact, we need to discuss both at the same time.

A bit of background on the Cool to Warm color map. This color map was created by Ken Moreland around 20 years ago as a better alternative to the old rainbow. It corrected two issues with the Rainbow color map. Cool to Warm is linear where the original rainbow is not (original rainbow has a huge green area in the middle). Additionally, the original rainbow looks the same in the mid range and high end for color blind folks that can’t tell the difference between red and green. It was a huge improvement. However, the Cool to Warm color map does not have excellent discriminatory power - the ability to resolve fine changes in variable data. The goal of this project is to create a linear color map that is color blind friendly that has better discriminatory ability and looks nice.

A bit of background on the current default background. This background is also around 20 years old. A little bit of color was added to a neutral gray to keep flat surfaces from disappearing as they are rotated using our lighting equations. An example of the problem is Sources/ Cube on a gray background. You can make planes fade into the background. An issue with our current background is that it doesn’t have enough contrast with the Cool to Warm color map. Another issue is many people like a warmer background.

The goal of the new default color map is to increase discriminatory ability by adding more colors to the map (more hues) and more brightness changes (value) while staying linear and color blind friendly. We also wanted to keep the min and max from being too dark. We consider dark maps to not be as aesthetically pleasing.

The goal of the new default color palette is to not distract from the main color map but to maintain contrast with same.

The proposed default background is: 98, 93, 90. This is what I am using in the following images on the top row.

The proposed color map is:

Here are the old and new color maps on disk_out_ref.exo, clipped and then painted by Temp. The right images have contours drawn at 400 degrees and 625 degrees.

Here are two views of Wavelet, contoured and then clipped:

And finally, here is can.exo, painted by cell data (EQPS) and point data (VEL).

6 Likes

By the way, my working name for this color map is FAST.

@dcthomp @utkarsh.ayachit @mwestphal

Colormap:

On a first look I like the new color map, but I think further analysis and feedback from user from different workfield would be appreciated.

Has it been added to ParaView yet ? It could be added without being the default so people can try playing around with it.

Is this color map used somewhere else ? Was it created by someone specific ?

It looks similar to some of the divergent colormap from sciviscolor, which is a good thing:
https://sciviscolor.org/colormaps/divergent/

Background:

Not a big fan of the new color but it is still better than the current one imo. That being said, I always find slight gradient to be more aesthetic.

@Kenneth_Moreland FYI

Here is an XML file you can import into ParaView to try out the the Fast colormap for yourself:
Fast.xml (899 Bytes).

The reason why the colors look similar to those posted to sciviscolor is that they are both designed by Francesca Samsel. Fast is a modification of a blue - orange map that was a top performer for discrimination in a user study.

@wascott has already surveyed users at Sandia about the new color map. A wide majority of the participants preferred the new color map.

I think it’s safe to say that the proposed color map is objectively better than our current default.

3 Likes

Is it just me or does the sample color map look different than what it looks like in the sample ParaView screenshots? It the sample color map image (the one with 18 in it) it seems like there is a fast transition in the middle. In the sample ParaView images though it appears that transition is stretched out.

Any thoughts on using this color map with a white or black background? I’m thinking of its use in papers (white background) and presentations (black background may be a common background besides a white background).

Both the color map and proposed PV background look to be a strong improvement to PV though.

I can’t speak too much about why the sample bar image looks a bit more “pointed”. I do note that it is pretty typical of diverging color maps to sometimes look smooth and sometimes have a bright sharp spot in the middle depending on how compressed the colors are in space. This is less of a problem with the current default cool/warm because there is an exaggerated smooth top. But this is also a problem with the current cool/warm because it tends to wash out features in this range.

I expect the new map to work better against a white background than the current default. The new map has a yellow tinge in the middle that should help differentiate more in the middle range. There might be a bit less contrast against a black background because the ends of the new map are a little bit darker (to get more discrimination range). But they are still kept fairly bright to prevent issues with 3D shading so a dark background should be fine.

Hi @mwestphal. I believe Ken answered most of your questions. With regards to background, I always discourage gradient backgrounds, as I suspect any color expert will. The reason is the human eye is very attuned to contrast as opposed to color. By changing the background, you are changing the contrast. For a great example, see the Classroom Tutorials, Color Maps and Palettes, the chess board.

Also, I have created a composite email of what my users thought - I had something like 30 replies. Ask if interested, and I can send them to you next Monday when I am on my work computer. The vast majority liked the new default map and background better, a fairly large minority asked that we change the background default to white (which I don’t like), one asked that the default background and the screenshot background be different (not happening) and one or two said leave it as is.

@Andy_Bauer The color maps are all the same - map 18 (as per Francesca’s labels). I strongly suspect that your eye is being fooled by the width difference and/or the difference in background (white vs the new background). And as stated by Ken, the center point is not white - it is light yellow. With regards to transitions, this map only has 7 control points (which Ken requested, and was a brilliant comment). The center is light yellow - 1.0, 1.0, 0.83. Note that the center of cool to warm is actually a light gray, thus when impacted by the lighting equations, could fade into a white background.

I tested it with a white background, and I think it looks as good as any other map. (I dislike a white background). Attaching a screenshot from my personal laptop. Note the text is messed up, as I am changing background and not palette. As I have never seen anyone use a black background, I didn’t test it. I expect it would be at least as good as Cool to Warm.

1 Like

@mwestphal could you please make sure Kitware Europe and whomever else needs to know sees this thread? We don’t want to surprise anyone.

I talked to @cory.quammen today, and I would really like to get this changed before 5.12.0-RC1 comes out, so people will see it and give us feedback. Thus, unless I get pushback by early next week, I intend to make a feature request in git, and push the developers to get this change into 5.12.0-RC1.

2 Likes

FYI @Francois_Mazen @Charles_Gueunet @nicolas.vuaille

@wascott @Kenneth_Moreland : Indeed, looks like this is the result of a deep concerted effort and I like it!

Written up here, slated for 5.12.0-RC1.

https://gitlab.kitware.com/paraview/paraview/-/issues/22270

https://gitlab.kitware.com/paraview/paraview/-/issues/22271

My 2-cents as an end-user:

On new colormaps in general

I’d rather not have a new colormap and background become the new defaults so quickly / so late in the game. If a change in defaults is going to happen I’d rather be certain it’s a long-term change for stability. It just feels (to me) that there’s not been a lot of testing on a wide range of datasets, that this is a big UX change at the last minute, and if 5.12 changes to this colormap and suddenly 5.13 changes to a new colormap due to deficiencies that would be quite annoying to me.

On the FAST colormap

I personally don’t like the white band in the FAST colormap (see below image using FAST) – at least for as long as there’s not a persistent option to center a colormap around zero. I’m OK if we can set a colormap to center around zero, because zero is at least a reasonable value to highlight in datasets. But so many datasets (e.g. von Mises stress, velocity magnitude) are limited to \mathbb{R}^+ and a default colormap that puts a band at the central value is unfortunate. While the Cool to Warm is also a diverging colormap that’s also not optimal for such cases, at least there’s not such a sharp band. If ParaView adds an option to Center Colormap at Zero a colormap I can get onboard with FAST.

Regarding white backgrounds:

Paper is white and most (all?) peer-review journals and (printed) user manuals use white backgrounds – or rather “transparent background on white paper” – so it’s critical, IMO that whatever colormap is default in ParaView works on a white background.

Final thoughts

In general, I suppose the question is “what is the primary purpose of ParaView?” Is the primary purpose to make pretty pictures? If so, let’s go back to a rainbow. Is the primary purpose to support scientific inquiry of complex datasets? If so, we need a colormap that doesn’t lie to the user.

3 Likes

After discussing with the developers, and especially input from Ken, Matheu and Greg, we decided to split this rollout. The color map Fast and the new warm gray palette will be rolled out in 5.12.0 (release RSN (Real Soon Now)), but we will not make them defaults in 5.12.0. Barring issues and/or negative feedback, this new color combination will become default i 3.13.0.

https://gitlab.kitware.com/paraview/paraview/-/issues/22273

https://gitlab.kitware.com/paraview/paraview/-/issues/22274

Thanks everyone,

Alan

3 Likes

I just got the weekly digest of this forum and this thread caught my attention. I think it’s good that default are not changed last minute prior to 5.12.

Besides that, I will try the new color map myself next week, but my immediate impression from the images in this thread is that I am not sure if this will be my go-to primary colormap…

2 Likes

IMO that whatever colormap is default in ParaView works on a white background.

I’ll admit that I don’t use the current default nor would I use this default except in very limited circumstances. However, I use white backgrounds almost exclusively. That said, one might argue that this color map will work with a white background because the default ambient/diffuse lighting affects the white such that it will be distinct from the background. If one flips the defaults (ambient → 1 and diffuse → 0, which is what I do in most circumstances to ensure my legend maps directly to my data), then shadows will disappear and the white from the colormap will be indistinguishable from the background.

1 Like

FYI I have added to the VTK Examples two examples. One imports XML colormaps and the other JSON ones.

Please see VTK Examples - Some ColorMap to LookupTable tools.

1 Like

Not quite on topic, but I have been searching for any information on the parameters used in the XML colormap files. Is there a specification somewhere?

For example in Fast.xml refered to above a point is specified as:

<Point x="0" o="1" r="0.08800000000000002" g="0.18810000000000007" b="0.55" cms="1" isMoT="true"/>

I understand that “x” repfers to the point on the axis and “r,g,b” are obvious but what is “o”, “cms” and “isMoT”? I thought “o” might be opacity but I now doubt that because when looking at Accent:

<ColorMaps>
<ColorMap name="Accent" space="RGB">
<Point x="0.000000" o="0.000000" r="0.498039" g="0.788235" b="0.498039"/>
<Point x="0.003922" o="0.003922" r="0.504821" g="0.785329" b="0.507190"/>
<Point x="0.007843" o="0.007843" r="0.511603" g="0.782422" b="0.516340"/>
...
<Point x="0.996078" o="0.996078" r="0.409581" g="0.398816" b="0.391496"/>
<Point x="1.000000" o="1.000000" r="0.400000" g="0.400000" b="0.400000"/>
</ColorMap>

it seems to be a duplicate of x. However in B-W_LINEAR:

<ColorMaps>
<ColorMap name="B-W_LINEAR" space="RGB">
<Point x="-1.000000" o="0.000000" r="0.000000" g="0.000000" b="0.000000"/>
<Point x="-0.992157" o="0.003922" r="0.003922" g="0.003922" b="0.003922"/>
<Point x="-0.984314" o="0.007843" r="0.007843" g="0.007843" b="0.007843"/>
...
<Point x="0.984314" o="0.992157" r="0.992157" g="0.992157" b="0.992157"/>
<Point x="0.992157" o="0.996078" r="0.996078" g="0.996078" b="0.996078"/>
<Point x="1.000000" o="1.000000" r="1.000000" g="1.000000" b="1.000000"/>
</ColorMap>

this is not the case at all.
These maps are found in Contributed Colormaps

Some colormaps, such as div5-asym-orange-blue.xml have extra sections at the end like this:

<ColorMaps>
<ColorMap space="Lab" indexedLookup="false" group="Interlinked" name="Divergent 1 / Divergent 1">
<Point x="0" o="1" r="0.4392156862745098" g="0.00784313725490196" b="0.09411764705882353"/>
<Point x="0" o="1" r="0.4392156862745098" g="0.00784313725490196" b="0.09411764705882353"/>
...
<Point x="0.9813086263340534" o="1" r="0.10196078431372549" g="0.011764705882352941" b="0.37254901960784315"/>
<Point x="1" o="1" r="0.0862745098039216" g="0.00392156862745098" b="0.298039215686275"/>
<Section colorMapName="Divergent 1" startIndex="0" endIndex="2" startPos="0" endPos="0.38380441069602966" startValue="-0.1008171162445716" endValue="2.1247415330501864" flipped="true" startAlpha="1" endAlpha="1"/>
<Section colorMapName="Divergent 1" startIndex="2" endIndex="1" startPos="0.38380441069602966" endPos="1" startValue="-1.0007971646287332" endValue="1" flipped="true" startAlpha="1" endAlpha="1"/>
</ColorMap>
</ColorMaps>

I am thinking of making the XML colormap reader in the VTK examples more able to parse/implement these features.

Thanks

@Andrew_Maclean I believe "o" is opacity. However, it (along with cms and isMoT) are ignored (see vtkSMTransferFunctionProxy).

Note that "x" is the scalar value associated with the color (specified by "r", "g", and "b"). However, by default ParaView rescales the colormap to fit the range of values present in the loaded datasets. You can prevent this automatic rescaling if the absolute values are significant (this might be relevant when physical values should be tied to specific colors – for instance a colormap showing mean sea level might want blue below 0 to indicate water and brown above to indicate land).

I don’t know about isMoT but cms probably stands for “color management system” (indicating the colors may have been corrected for display on a particular medium). See LittleCMS.

Sorry not to be of much help. A VTK reader/writer for colormaps (whether JSON or XML) would be great! Especially if ParaView was made to use it so they were consistent.

Thankyou for this. I’ll add some comments to the Python code in the VTK Examples. Much appreciated.

1 Like

Just a couple of notes on the proposed update to the default colormap.
The first goal was to get a map out for comments, which are coming in. Once we have sufficient feedback I will be going in and tweaking the specifics of the colormap. I notice several comments about the transition I the center. I agree, it is not ideal. The issue is that it becomes a trade-off between having a focal point at the center (if one uses a quick transition into more saturation) or smoothing that transition but loosing detail in that region because the lighter hues carry less information. Know we have looked at a couple dozen options and will be honing before it is final based on your comments. Thanks


An example of the range of adjustments being considered.

1 Like