Yesterday I mentioned using images as a source for the points and orientations. And I managed to do something.
First, the original image (a South Park version of myself, before I lose some weight):
And here's the various mosaic:
I used various effects to control the orientation in the cell. Plus I tried a random point selection, except for the first output.
Which one do you prefer ?
Naturally, to produce the output, I'm still using CUDA. I didn't used any data structure to optimize, so it can be computed a bit faster.
I use this blog to share (presentable) results from my research as a PhD student in computer science.
2011/06/27
mosaic
Labels:
cuda,
mosaic,
nvidia,
orientation,
point,
South Park,
voronoi
More textures
In my research, I'm still working on my textures. Here's some results I produced today that I really like.
Those effects might be implemented in a next version of my live-wallpaper. I haven't decided yet. For the first two images, I put the orientation of the points right on the plane. Plus I tried a new function to compute the distance. This one allows some distance pixels to actually have a distance of zero when it's perfectly aligned with another points.
Next, I will try to use images as a source of points and orientations. To see if with this method it's possible to create mosaic from an image. Creating mosaic with the normal Voronoi diagram is something well known in the literature. But with this method of oriented points that creates cells that are not convex polygons might allow us to do something very unique.
Let me know what you think of these images.
Those effects might be implemented in a next version of my live-wallpaper. I haven't decided yet. For the first two images, I put the orientation of the points right on the plane. Plus I tried a new function to compute the distance. This one allows some distance pixels to actually have a distance of zero when it's perfectly aligned with another points.
Next, I will try to use images as a source of points and orientations. To see if with this method it's possible to create mosaic from an image. Creating mosaic with the normal Voronoi diagram is something well known in the literature. But with this method of oriented points that creates cells that are not convex polygons might allow us to do something very unique.
Let me know what you think of these images.
2011/06/26
Live-Wallpaper on the Market (feedbacks)
In three days, the number of download is already over 100. Which is a good news.
But, I was hoping for more ratings than that. But I checked other apps, and some with 250000+ downloads only have around 1000-2000 ratings. So, less than 1% of users take the time to rate.
Anyway, it's not a reason to stop. I will post an update version very soon because I found a better way to distribute the orientations and I might try a new way to distribute the points too.
But, I was hoping for more ratings than that. But I checked other apps, and some with 250000+ downloads only have around 1000-2000 ratings. So, less than 1% of users take the time to rate.
Anyway, it's not a reason to stop. I will post an update version very soon because I found a better way to distribute the orientations and I might try a new way to distribute the points too.
Labels:
Android,
animation,
download,
live-wallpaper,
market,
OpenGL ES,
rating,
voronoi,
Weird Voronoi
2011/06/23
Live-Wallpaper available on the Market
I finally managed to put a first version of my live-wallpaper on the market.
You can find it right here:
https://market.android.com/details?id=com.blogspot.widgg_research&feature=search_result
Post comment on this post to tell me what you think about it. It's a first version and there's a lot of work to do to create the professional version and also to improve this one.
For major problem, I will do my best to put a new version of the application on the Market as fast as possible.
The live-wallpaper is rough on the fragment shader that I created in OpenGL ES 2.0. So it's very important to control the execution of the application base on this. Fewer points and a lower FPS (frame per seconds) will give better results.
I'm also interested to know the performance of your Droid, particularly if they run on Honeycomb. So, I'd like you to post your device, version of Android, number of points and FPS that you used in your settings.
Here's some screenshots:
You can find it right here:
https://market.android.com/details?id=com.blogspot.widgg_research&feature=search_result
Post comment on this post to tell me what you think about it. It's a first version and there's a lot of work to do to create the professional version and also to improve this one.
For major problem, I will do my best to put a new version of the application on the Market as fast as possible.
The live-wallpaper is rough on the fragment shader that I created in OpenGL ES 2.0. So it's very important to control the execution of the application base on this. Fewer points and a lower FPS (frame per seconds) will give better results.
I'm also interested to know the performance of your Droid, particularly if they run on Honeycomb. So, I'd like you to post your device, version of Android, number of points and FPS that you used in your settings.
Here's some screenshots:
Labels:
Android,
animation,
fragment shader,
GLSL,
GPU,
live-wallpaper,
market,
OpenGL ES,
Weird Voronoi
2011/06/21
Yin Yang Texture
Here's a post on texture.
Previously, we were using a method to control images with points and normals. Alone, a point and a normal split the plane in two, a positive and negative part. But combined with other points and normals, we can actually control curve shapes. To visualize it, we assign white to the positive part and black for the other.
The textures proposed here are made by first splitting the plane in two parts. The two parts must be symmetrical just like the Yin Yang symbol.
We then distribute points and normals inside one of the part. We then reflect the point into the second part, but not the normal.
The method create a contrast and a perfect symmetry. Here's some results:
I won't describe the method to render those images because it's very complex. Also, the process is very slow. Unlike the live-wallpaper I'm working on, or the previous images I showed, we cannot compute those in real-time.
Unfortunately, we haven't implement this with CUDA. With CUDA, it wouldn't be in real-time, but it would be much faster. Specially the per-pixel rendering part. Let me know what you think about these Yin-Yang images.
Previously, we were using a method to control images with points and normals. Alone, a point and a normal split the plane in two, a positive and negative part. But combined with other points and normals, we can actually control curve shapes. To visualize it, we assign white to the positive part and black for the other.
The textures proposed here are made by first splitting the plane in two parts. The two parts must be symmetrical just like the Yin Yang symbol.
We then distribute points and normals inside one of the part. We then reflect the point into the second part, but not the normal.
The method create a contrast and a perfect symmetry. Here's some results:
I won't describe the method to render those images because it's very complex. Also, the process is very slow. Unlike the live-wallpaper I'm working on, or the previous images I showed, we cannot compute those in real-time.
Unfortunately, we haven't implement this with CUDA. With CUDA, it wouldn't be in real-time, but it would be much faster. Specially the per-pixel rendering part. Let me know what you think about these Yin-Yang images.
Labels:
color distribution,
cuda,
normal,
nvidia,
point,
reflection,
rendering,
symmetry,
synthesis,
texture,
Yang,
Yin
2011/06/20
Live Wallpaper (list of function)
I started to implement the settings and it's going well. Here, I will present a partial list of function use to compute the color of a particular pixel.
But first, the weird Voronoi diagram presented here are not so different from the original one. The cells and edges still have the same meaning. Therefore, when there's an edge, it means that points on this edge are equidistant from two sites. Even if the method used to compute the distance is not the Euclidean one.
The function that I present here all use value R, which is the ratio of d1 over d2. Where d1 is the distance to the closest point and d2 the distance to the second closest point. So if R = 0, it means it's directly on the site, and R = 1 is on an edge.
First, functions with exponent, there will be three models:
But first, the weird Voronoi diagram presented here are not so different from the original one. The cells and edges still have the same meaning. Therefore, when there's an edge, it means that points on this edge are equidistant from two sites. Even if the method used to compute the distance is not the Euclidean one.
The function that I present here all use value R, which is the ratio of d1 over d2. Where d1 is the distance to the closest point and d2 the distance to the second closest point. So if R = 0, it means it's directly on the site, and R = 1 is on an edge.
First, functions with exponent, there will be three models:
- R^n
- 1 - R^n
- (1-R)^n
where n is a value in {1/2, 1, 2, 10}.
The other possible functions are:
- sin(Pi * R)
- 1 - sin(Pi * R)
- 1 + log(R)
- -log(R)
In gray scale, a value from the function of 0 or less means black and a value of 1 or above means white.
In color, each site will have its color assigned. And that color will influence the color in the cell. The color will be randomly assigned to the points.
I hope to post a first version by the end of the week.
2011/06/16
Live Wallpaper (some progress)
So, I progressed a lot in developing my first Live Wallpaper for Android. For now, I call this app "Weird Voronoi" because it uses the concept of the Voronoi diagram with some tweaks to create various visual effects.
I had a bit of difficulties to convert directly my fragment shader used on my machine to a fragment shader that can be used on Android with OpenGL ES 2.0. There's some restriction over the language that requires a certain adaptation. But in the end, the result is mostly the same.
Other problem in development, the emulators available cannot run shaders. So I have to debug completely on my Galaxy S. This mean that I know it's working on my phone, but I don't know about any other. I suspect that any phones more recent than the Galaxy S won't have any problem running it.
For now, in the project, I made the majority of the test I wanted to do. To see what are the limits. And actually, compared to a desktop, it's very limited. On my phone, running more than 4 points can be tricky while on the desktop, hundred points is not really a problem. So the objective was also to use this limited amount of points to be able to create some nice effect and I think I managed to do this.
Here's a first images of what the Live Wallpaper will look like:
I took this images from an app I'm developing on my desktop, but the visual effect is mostly the same.
Now that I know the limitation and the possibilities, the main thing left to be able to produce a first version to put on the Android Market is the settings to control the Live Wallpaper.
For now, the common options would be to choose the number of points. Even if 4 on my phone is the limit, there's some benchmark showing that some phones might be able to handle 16 points without a problem. The users will be able to choose if the points are moving, and at which speed. Same thing of the spirals (or if they want a spiral or not).
A variety of functions will be available to choose the right distribution of color. And the possibility to choose between a colored version or a gray scale version.
When the app will be available on the Market, I will give more detail about the features.
Meanwhile, I might post other images of other functions to show other visual effects.
I had a bit of difficulties to convert directly my fragment shader used on my machine to a fragment shader that can be used on Android with OpenGL ES 2.0. There's some restriction over the language that requires a certain adaptation. But in the end, the result is mostly the same.
Other problem in development, the emulators available cannot run shaders. So I have to debug completely on my Galaxy S. This mean that I know it's working on my phone, but I don't know about any other. I suspect that any phones more recent than the Galaxy S won't have any problem running it.
For now, in the project, I made the majority of the test I wanted to do. To see what are the limits. And actually, compared to a desktop, it's very limited. On my phone, running more than 4 points can be tricky while on the desktop, hundred points is not really a problem. So the objective was also to use this limited amount of points to be able to create some nice effect and I think I managed to do this.
Here's a first images of what the Live Wallpaper will look like:
I took this images from an app I'm developing on my desktop, but the visual effect is mostly the same.
Now that I know the limitation and the possibilities, the main thing left to be able to produce a first version to put on the Android Market is the settings to control the Live Wallpaper.
For now, the common options would be to choose the number of points. Even if 4 on my phone is the limit, there's some benchmark showing that some phones might be able to handle 16 points without a problem. The users will be able to choose if the points are moving, and at which speed. Same thing of the spirals (or if they want a spiral or not).
A variety of functions will be available to choose the right distribution of color. And the possibility to choose between a colored version or a gray scale version.
When the app will be available on the Market, I will give more detail about the features.
Meanwhile, I might post other images of other functions to show other visual effects.
Subscribe to:
Posts (Atom)