Comments (2)
Some time ago, I had an idea how to perform the edge coloring in the (presumably) optimal way, although it would be very slow, therefore likely not worth the performance cost in most cases. However, in some circumstances, such as when distance field assets are being pre-generated in advance and quality has priority over everything else, this can be useful. The solution is the following.
- Adjacent edge segments that connect smoothly (based on angle threshold) would be aggregated into edge groups.
- The minimum (Euclidean unsigned) distance for all edge group pairs would be computed. - This is the very slow part; The distance between two Bézier curves has to be iteratively approximated, and there are n² pairs for n edge groups. (Not to mention that computing a single distance would involve all pairs of either group's members.)
- A graph optimization problem would be solved where edge groups are nodes, the graph is fully connected, and the distances are edge lengths. The task is to find a 3-coloring of the graph's nodes such that edge lengths between nodes of the same color are as high as possible. This is potentially another slow part as it's obviously an NP problem.
Notes:
- By using inverse distances as graph edge lengths, the problem can be thought of as partitioning the graph into 3 tight clusters.
- The specific formula to rate a graph coloring is not determined. For example, it is not clear which set of distances between same-colored edge groups is better: [2, 3, 1000] or [8, 10, 12].
- Since the distance between adjacent edge groups is 0, it should guarantee that they will have different colors, ensuring corner preservation implicitly. This property of the algorithm is actually what makes me believe it is the right approach.
- Contours with only one corner would be split into three groups as usual, but the middle group would be excluded from the algorithm and colored white implicitly.
- Contours that only contain one edge group (are smoothly connected) can be excluded from the algorithm and colored white as they are now, but including them may or may not yield better results - this needs to be tested.
from msdfgen.
An initial version of this has been implemented and can be applied by adding the option -coloringstrategy distance
, or using the new edgeColoringByDistance
function when used as a library. The current implementation is experimental and may be further worked on in the future.
from msdfgen.
Related Issues (20)
- Msdf generation fails on symbol with several nested holes HOT 4
- Alpha as input ? HOT 1
- Allow FT_LOAD_DEFAULT in import-font extension HOT 5
- Confusing SignedDistance calculation in QuadraticSegment::signedDistance
- Inverting Y Axis makes uneven baseline HOT 2
- Segfault on Empty Shape
- Chinese character rendering issues HOT 5
- The effect of render small character is not good HOT 2
- Outline effect is not good on some glphys HOT 4
- Failure to import SVG file with empty initial <g> element HOT 4
- Using vcpkg leads to compiler error in VS2022 HOT 4
- Incorrect rendering of SVG with internal path HOT 1
- New release soon? HOT 1
- Call project() after cmake_minimum_required() HOT 6
- Artifact on a certain glyph HOT 4
- SVG with Quadradic path commands generates an SDF instead of MSDF HOT 3
- Multiple character output HOT 1
- Render HOT 2
- SDF from glyph curves? HOT 2
- Cyrillic
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from msdfgen.