San Base And Dynamic Painting, Continued
Tom's Hardware: What makes Dynamic Pictures unique when compared to other generative art forms?
San Base: The Dynamic Paintings I'm designing are examples of generative art - an art that has been generated algorithmically by a computer system. There have been many attempts at producing generative art; the history of it goes back to the early days of computer development. Many of these works have used fractals (geometric shapes that at different scales repeat themselves, at least to some degree) and pretty much none of them accounted for more than just basic artistic principles. This is not the case for my Dynamic Paintings. I'm a strong believer that innovation is often born when several drastically different disciplines come together, and I think that being an experienced programmer and an artist gives me an edge.
Another big challenge with dynamic pictures has been the inadequate computing power of personal computers to handle advanced algorithms that describe artistic principles of a computer generated painting. My technology uses powerful video cards to generate real-time images that rival most of the conventional contemporary paintings that cost thousands of dollars. This is not something that has been attempted before. Also, being able to generate images in real time enables me to set paintings in motion and create a new experience never seen before.
Courtesy: San Base
Tom's Hardware: You use graphics cards in your work. Can you tell us what cards you utilize and why?
San Base: Many of the modern CPUs are still not powerful enough to generate these images in real time; only the latest developments in programmable video cards (GPUs) have made this technology possible. Instead of using video cards for rendering 3D images like video games do, my technology taps into the video card's raw computing power. Painting algorithms, translated into pixel shaders - programs used by GPUs - painstakingly construct paintings pixel by pixel at any desired resolution with an unprecedented level of detail. This is an example of using video cards for what is called general purpose computing on GPU (GPGPU). The rendering engine is constructed in such a way that we are not limited by the video card's native resolution, so I am able to produce images as big as 80 to 100 Mpixels for printing on a real canvas.
Tom's Hardware: What graphics API are you using, and why did you choose to ship screensavers on your website with the DirectX 9 version of the engine?
San Base: Currently I use DirectX 9 for the screensavers, but I try to stay API agnostic. In fact, my Dynamic Picture engine supports OpenGL as well. I originally developed an engine using OpenGL and planned to ship it in the screensavers, however I encountered several compatibility problems with it over a wide range of video cards. First of all, OpenGL shading language (GLSL) is slightly differently implemented on Nvidia and ATI (AMD) cards, which caused me some amount of grief to get shaders working equally well on cards from both vendors.
The bigger problem was trying to get shaders to run on slightly older shader model 2.x cards. In many cases OpenGL would just switch to software rendering instead of complaining about supported shader capabilities. This wasn't the case for DirectX 9 - it has fairly tight shader specifications and allows you to see shader assembly, which is helpful when you're trying to squeeze every bit of performance and functionality out of shader model 2.x and some lower-end 3.0 cards. In the end, DirectX 9 turned out to be the better choice in terms of broad compatibility and ease of shader development for my screensavers. However, we still keep the OpenGL version around for future cross-platform developments. I use standard C/C++ for the engine and HLSL or GLSL for shader development.
Tom's Hardware: You mentioned a GPGPU approach is at the heart of your technology. Are you using any special GPGPU languages, like Brook or CUDA, or some other software developer kit (SDK)?
San Base: No, I don't use anything specific to GPGPU implementations in my paintings. The GPGPU is a trend to use GPUs for all kinds of computations and it can be implemented on top of any graphics API that exposes shaders, not just using special GPGPU toolkits. Because my problem is somewhat unique, none of the GPGPU solutions provided a 100% match, which is exactly the reason I decided to write my own engine.