Wednesday, 11 April 2018

Initial Text Support in Omber

I obviously use Omber for all my vector drawing needs. There's been a couple of times where I've had to make some graphics with some text in it though, and I had to use another tool because Omber didn't support text. I've also noticed that a lot of designers use vector drawing tools for making UI mock-ups, which also requires text support. So I decided to add some basic text support to Omber.

I was a bit torn about implementing it. A long time ago, when I was an intern at Sonic Foundry, one piece of advice they often gave was that if you can't implement a feature in an outstanding way, then don't bother implementing it. Reviewers and other users will see that one mediocre piece of the whole application, and instead of seeing it as a useful, free addition to the program for cost-conscious users who can't afford to buy another program just for that functionality, they'll instead seize on it as a weakness of the application that makes it inferior to others. This is especially true with Omber. Omber is a vector drawing tool for making drawings with advanced gradients and subtle shading. There are other vector drawing tools that are better for general purpose vector drawing tasks. If you need to make art with crazy gradients, then Omber is the better tool by far. I would argue that it even rivals tools like Illustrator. By adding text support, I would be making Omber look more like a conventional general purpose vector drawing tool, and users might get confused and think that it's worse than other programs when it's actually just used for different purposes. Would it be better for me to double-down, forget the text, and spend my time making the gradient support even stronger? In the end, I became annoyed that there are apps that are more popular than Omber but which are far worse than Omber at general purpose vector drawing tasks except that they support text, so I decided to spend some time implementing text to see what would happen.

It took me about a month and a half to implement very basic text support in Omber. Text support is a little strange in that it can be very quick and easy to implement or very long and hard to implement depending on what features you eventually want your text support to have. For example, if you only want to support English text in a text box and if you don't care if text is rendered slightly differently on different platforms, then you can just use the existing text input widgets and text drawing code to quickly implement support for that. Proper support for international text might involve huge lookup tables that would be too hard to download for a web app and custom text editing code while proper support for text transformations and kerning likely requires a custom font rendering engine.

In the end, I wanted to have the most flexibility in the underlying engine as possible, so I opted to do all the font rendering and display in Omber. This means that text in Omber will initially have fewer features and be rendered with lower quality than in other programs, but it will have consistent font rendering across platforms and the power to eventually have more interesting text effects. Right now, font rendering at small sizes isn't great, and very, very thin fonts don't quite render correctly, but with a custom font engine, I have a lot of knobs I can turn to improve things over time.

One surprisingly time-consuming aspect of doing your own font rendering is actually in font enumeration: finding out what fonts are on a system. Different platforms have different ways of listing their fonts and getting at font data, and often the documentation on them often isn't great or they use some ancient legacy approach to categorizing fonts that's really complicated. In many cases, the font information provided by the operating system isn't very good, so you have to open the font file yourself and read out extra information about the font directly. Then there's Android which doesn't even provide a way to find out what fonts are on a phone, so you just have to search around the filesystem for font files.

So in the end, I do have basic text support working in Omber. You can make some drawings with some simple text in them! Right now, I'm trying to figure out what to work on next: adding more features to the text support, better support for non-Western languages, improving the workflow for gradients some more, printing support, or something else entirely.

Wednesday, 7 February 2018

Wrinkle-Free Engine Preview for Omber

I've made some good progress on the new Wrinkle-Free gradient engine for Omber. There's still a lot more work to do, and it will take several months to stabilize it and to get rid of all the bugs. The results are so good, though, that I've decided to release a preview of the Wrinkle-Free engine in the latest version of Omber. The new engine can be enabled from the Options menu.

I'm a little embarrassed to say that I've always been a little unhappy with the images created in Omber. Although Omber was still a great improvement over other vector drawing tools, I've always been reluctant to evangelize it really hard. Every time I looked at images rendered in the old engine, all I could see were the minor visual artifacts at the seams between shapes. But no more! With the new Wrinkle-Free engine, those artifacts are gone, and I can whole-heartedly say that Omber is amazing and that everyone should use it.

Below is one of the old clipart images in Omber. By default, the shape segments in the drawing are not welded together. The Wrinkle-Free engine only comes into play for welded segments, so, by default, the drawing will be rendered with the old engine. The dog on the left is rendered with the old engine. There are subtle visual artifacts in the image that I've circled in red on the center dog. If you look in those places on the left dog, you'll see some strange lines or creases in the rendered image. In the right dog, I've welded the shapes together where the visual artifacts occurred. This allows the Wrinkle-Free engine to do its job. If you look in the same problem areas, you won't see any of those line artifacts. They've been all smoothed out by the Wrinkle-Free engine.


I'll be taking a small break from the Wrinkle-Free engine and working on other aspects of Omber for the next month. I may have to finally figure out how to get people to actually use Omber and how to monetize it.

Monday, 20 November 2017

Progress on the Wrinkle-Free Engine

I've had another busy month working on Omber. I know some users have wanted better tutorials showing how to get the most of out Omber, so I sponsored the creation of a new tutorial at Envato Tuts+, which should come out in the next couple of weeks. The tutorial writer pointed out some improvements that would make Omber easier to use, so I went and implemented those. I actually had all of those issues plus many more on my To Do list already, but I have workarounds for those problems when I use the software myself, so I never prioritized fixing them. It's good to have feedback from real users about what sort of improvements they need for their workflows because as the designer of the software, it's easy for me to be blinded about what's difficult to use for normal people.

The main things I've been working on though, is the new Wrinkle-Free gradient engine for Omber. This is the engine that does the actual shading and blending of colors across a shape. There's still a lot of work to go, but I now have an early version of the engine running. The new Wrinkle-Free engine uses a new mathematical model of how to blend colors that takes into account the psychology of how users perceive "smoothness."  It's endlessly complicated, but the new Wrinkle-Free engine should be able to make gradients that seem much smoother and easier to control than before.


The picture above is from Omber's Wrinkle-Free engine, and it shows the benefits that the Wrinkle-Free engine is able to bring. On the left, are the shapes that are being drawn. It is a circle that is split in half. The outside edge of the circle is a light grey, while the middle point of the circle is black. The middle picture shows how the current version of Omber will shade the shape. Although the shading is smooth, you can still sort of see the line where the circle is divided in half. On the right is the shading done by the new Wrinkle-Free engine. The Wrinkle-Free engine smudges the black color in the middle much further out from the center of the circle, making a smoother-looking gradient.

The old engine was already very complicated, but the new Wrinkle-Free engine is even more complex, so it might still be a while before it stabilizes enough that I'll be able to release it. The early results are so good that I'm really looking forward to getting it out there for you.



Thursday, 26 October 2017

Omber Adds glTF 2.0 Export


I wasn't planning on adding support for another file format for Omber, but I was so impressed with the new glTF 2.0 file format that I couldn't help myself. glTF 2.0 is a new format for 3d graphics. In the picture above, you can see an Omber drawing that I've imported into a web-based gltf viewer using the glTF format. Being able to export to glTF means that it's possible to export Omber data in a vector format to game engines or into 3d animation tools. For example, if you wanted to show a SVG drawing in a game but with no loss of detail on screens of different sizes, you could use Omber to convert the SVG drawing into a triangle mesh for the game using the glTF format. Although support for the glTF format isn't widespread yet, when glTF support is added to various 3d animation tools, it will be possible to take your Omber drawings and animated them using those tools.

I had previously added support for COLLADA export specifically for handling these use cases, but unfortunately, the support for importing COLLADA files in other programs was very unreliable and inconsistent, so it was never 100% certain whether the data exported by Omber would be imported fully by other programs. glTF is a much more straight-forward and well-specified format, so the glTF files created by Omber should import much more easily in other programs when glTF support becomes more widespread.

Tuesday, 12 September 2017

Introducing...Super Tools


Sometimes, you just need a specialized tool for a niche task. These tools can be incredibly powerful or really simple. The tool might do something that only that one tool can do, or you might be able to achieve the same effect without the tool if you're willing to spend hours of extra work. Sometimes, you can export things to another program that has the necessary functionality, or sometimes not. But when you need a specialized tool for your art workflow, then you really need it.

It's always hard to know where to stick these tools in a program. It's confusing to have a jumble of miscellaneous tools floating around the interface. How often do you actually need to use the "spiral" tool or "star" tool that's available in other programs? Do you really want to clutter up a clean interface with them? Some of these tools are very niche, but for those rare tasks that need them, they're real life-savers.

For this reason, I've created the new "Super Tools" feature to Omber. Basically, it'll be a place where I can stick some obscure, but potentially really useful, tools for use in Omber. It will be accessible from the "Options" menu. Currently, there are two tools: a posterization tool called the "Image Palette Reducer" and a tool for creating transparency called the "Transparent Overlay Maker." I believe these Super Tools will be really useful in creating gradient drawings. Above, you can see an animation of the Transparent Overlay Maker in action. I start with a black and white drawing of a hand that I made. Then, I subtract out the grey color from the drawing. That converts all the grey parts to be transparent, allowing the underlying pink color of the background to show through.

Hopefully, I'll be able to add new Super Tools to Omber in the future. Feel free to make suggestions for possible future Super Tools!

Thursday, 17 August 2017

What's Coming Next for Omber

Now that Omber has been released for the Mac, I have the time to add more features to Omber again. Currently, I'm working on lots of small bug fixes workflow improvements to the program. I've been working on lots of big, time-consuming features over the past year. While doing those big changes, I've often noticed little things that could be improved. I've always filed them away as things to work on later when I have more time. I recently hired some designers to do some testing on Omber, and they found these minor issues to be a bit problematic too. Like, I'm aware of them. I do use Omber myself. I do encounter these annoyances myself. But I have to trade-off spending time polishing Omber to have a smoother workflow or working on new features that can unlock new domains where Omber can be used. Given that there are vector design apps that have such horrible workflow that they are barely usable yet they are still very popular and widely downloaded, I've usually opted to work on new features. But I think Omber is now sufficiently powerful and useful that I can take a small pause to go in and try to fix a bunch of these minor issues.

After that, I'm still undecided as to what to work on next. There are three major features that I think would be worth exploring:

1. Support for Text and Shapes with Holes

Although Omber is a very powerful vector design tool, it is intended primarily for making drawings with soft shading and advanced gradients. To be useful for general vector design tasks though, Omber would need to have support for text, dashed lines, and shapes with holes in them. Support for these features are needed for making diagrams. Should I spend time on making Omber better at being a jack of all trades, or should I focus more on what makes Omber different from other general purpose drawing programs?

2. New Rendering Engine

Although Omber's gradients are incredibly powerful, when you put several gradients side-by-side, the resulting gradient is sometimes not as smooth as you expect it to be. It's possible for an artist to manually fix this up by adding in some more intermediate shapes to control how the gradient spreads, but it's difficult to explain and a little tricky to do. I'm thinking of creating a new rendering engine called the Wrinkle-Free engine that should fix this problem. It will require a rewrite of how major portions of the internals of how Omber works. It will also require some risky cutting edge research. Currently, Omber rides right on the limit of what scientists know about how to make gradients on computers. The extra-smooth gradients produced by the Wrinkle-Free engine will require the invention of new approaches.

3. Vector Asset Importer

Although Omber can be used to create infinitely scalable vector art, there aren't any file formats for actually storing and displaying the types of vector art that Omber is capable of creating. So if you want to display your Omber drawings on a web page, you either have to convert it to a bitmap like PNG, or you must use an inferior vector file format like SVG or PDF that can't recreate Omber's gradients. I could write some code that people could put on their web pages to allow people to use Omber drawings in them. I could also write similar code for mobile apps, so that instead of needing to include heavy hi-res bitmaps in the app, they could just include some lighter-weight Omber vector files, and then use the Omber code to decode them when the app is run.

Friday, 11 August 2017

Where's the Mac Version of Omber?

Short answer:
I will release it to the Mac App Store on Monday, August 14.

Long answer:
I sent the Mac version of Omber off for review on Sunday, and it was accepted on Monday. That was a lot faster than I expected. I thought the review process would take a few days and that I might need a few passes to get it through. In fact, the review process was so fast that it threw off my scheduling. I was expecting to use the time it was in review to work on a backlog of related tasks and to prepare for the release. Instead, I've had to rush the release preparations.

I've delayed the release for a week so that I can update the website and do some PR. This new Mac version is a major new undertaking for Omber, and I want people to know about it. It's weird. Even though I'm the creator of Omber, I still find myself instinctively reaching for CorelDraw when I want to edit some SVG icons. When I catch myself and use Omber instead, even I'm surprised by how well it works. I keep thinking to myself, "this program is so awesome, and it's free. Why aren't more people using it?" So I'm going to make a real effort to spread the word about Omber this time.

I'm really eager to let people get their hands on the Mac version of Omber. I know that Mac people are very picky about their user interfaces, so I put a lot of effort into integrating Omber into the Mac ecosystem. It makes use of Cocoa's document framework, so you get all the proper file menus and edit menus and saving and whatnot. I made an effort to "Macify" the drawing UI by using a Mac-like color scheme and moving all the close buttons to the upper-left of windows. I admit that the UI still exhibits a "house-style" rather than true "Apple-style." I'm a big believer of the old-school UI approach of trying to make interfaces readable and self-describing. As a result, the UI will seem more functional rather than artful. I consider that part of the indie, artisanal charm of using software developed by a single person. The only UI issue that I feel I wasn't able to come through on was support for the advanced features of Apple's peripheral devices. The prices of the Magic Mouse, Trackpad, and TouchBar really add up after a while, and I couldn't really justify buying them. So none of the special gestures and options of those devices are supported. Still, I think Mac users will be really satisfied with the experience of using Omber on macOS.