MeteoLatvia It's not premature to start talking about the specifics of the operational color palette editor. I need to hit an ABSOLUTE home-run in this area as it is the most well-known, talked-about, and impactful visual customization.
First off let me announce that I have a goal where, with the new floating licensing system and everything revolving around data subscriptions, all user customizations can be automatically synchronized to your web subscription account and seamlessly synchronized on cross-device usage. So, perhaps a library of custom user palettes and specific maps. There can even be a Twitter-like "map share" global feed where users upload their content in a social-media-like fashion.
In order to build something like this, I have to keep things simple and compact. Starting with color palette customization only is a great idea. I will probably do the color palette editor, palette library, auto-synchronization, etc first and then only return very late in the project to do all other customizations. This can be the initial case for creating the general map customization system.
Now, I have to decide between various ways of organizing palettes and styles. What I want to do is get away from the old model:
- One big bucket of all color palettes, not organized by unit, associated parameter, or ranges
- A bunch of fractured, separate raster layers each having a text/string variable matching to the name of a color palette.
This is very bad. For starters, if I were to implement the videogame-like "fileshare" system I discussed above but with weather maps, this would require uploading and duplicating all user palettes.
Instead there should only be a narrow slot of active color palettes, or perhaps one fixed "palette set" object that contains up to 32 palettes, and the specific content of your map refers into "Palette 1", "Palette 2", etc as different slots in this "palette set". So the only thing that needs to be stored and uploaded with sharing your custom map is a temporary map of color palettes.
Then, there can be a large library of custom palettes on your disk that you use to insert into the current "active palette set". This removes the terrible aspect of having a text-based lookup for each layer into a large local database. I hope this makes sense. This could work a few different ways - maybe we separate the colors themselves, and the associated unit/range values/contour line settings, into different concepts/objects. After all, the same set of colors can be useful for very different products having very different numerical ranges. Have to think of a flexible, versatile, simple, user-friendly, and powerful logic for breaking down these options and concepts.
Here is how I described this idea in an email to a colleague:
Color palette data loss thoughts: My future remedy is the convenient restructuring of how the next-gen product handles resources/user files. I want one very lightweight directory that has only user customizations such as palettes, and another cross-user directory that stores static resources such as downloaded mapping data. I'm also moving towards embracing groups of things vs files in isolation, e.g., a file for "Paul's palette collection #1" which contains a group of palettes. Better organization like this will prevent such further occurrences.
In fact, with the floating cross-device licensing, my ambition is to make the user data so lightweight we can upload it automatically to a web account and give users seamless cross-device remote sync and backup of weather maps/views, including settings such a color palettes. I am inspired by what Bungie did with the Halo 3 video game in the 2007 - 2010 era with something called "theater mode". Players could record portions of multiplayer games and later render them on Bungie.net servers as video clips or screenshots. WSV3 could have a "saved maps" and "saved charts" system that unifies data appearance settings and loaded data layers, giving the option to share maps with others or keep them synced on your private account for cross-device usage. An enterprise service could eventually offer automated server-side rendering of saved maps for industrial automated graphics, similar in concept to the Halo 3 video game online fileshare/theater system.
All this is a little different from your comment on the editor itself, so let me progress to that.
So, I definitely think it's a great idea to have embedded functionality in the color palette editor to aid convenience beyond a general RGBA + numerical value list/array editor.
The way I want the color palette editor to work for both SDF graphical palettes (like text font colorization) and also weather data will likely require a built-in "contour" feature within the palette editor itself. So, you could specify that certain steps are hard or smooth like you say, but ideally the "smooth" option is defined as a normalized screenspace pixel width. This is ambitious and might be difficult to develop. I am starting to talk about things I haven't really done a lot of work researching yet, but let's think about ways like this to unify the contour and raster color palette rendering.
Question: would you ever need to have a separate color palette for the color fill and the contour lines? Maybe there could be two contour modes:
- Mode 1 - manual palette contours (contour levels and colors are manually determined by a palette specifying them)
- Made 2 - automatic palette contours (user specifies one fixed contour color and one "interval" parameter)
Maybe variations on Mode 2 could introduce a high and low color. I also want to have ability for dynamic scaling based on current map view dataset extrema values (first-generation does this in the terrain mapping hypsometric tinting - it scales the palette ranges according to changes in view max elevation). That is actually a really cool feature and shame it is confined to the terrain colors. It would be very useful as a general raster display ability. That is, by default, a dynamic scale color palette would get a basic visual going regardless of the values of the underlying dataset. This then facilitates interactive development of a fixed-range palette for the given data product.
This post is more of a stream of consciousness and less of a specific proposal, since I am still digesting these concepts. Let me know if anything I've said makes sense or causes you to opine one way or another. I will develop a really great solution around all these concepts.