15. Interlude: Musings And Over-Thinkings
When will I know why I am developing this software? Do I need to back it up with a purpose? They say the purpose of life is to live. I don’t know whether I should hope for a eureka moment when everything snaps into place, or just wake up one morning and everything will always appear to have been obvious in hindsight.
I have not only thought about what I am doing, but also about what I am not doing.
I am not making a traditional commercial software application. I am not making a game engine. There are plenty of those, and they do a fine job. They are also industrial in scale and scope. The Houdinis and Mayas and Unitys and Blenders of the world have had decades and countless thousands of person-years of work put into them. They have been thoroughly optimized using the latest in C++ features, and have been architected to make full use of modern GPU’s.
It is important for me not to think of this process as one of competition. I have not done (and, perhaps lacking imagination, cannot think of doing) anything which cannot be replicated much more easily, with more features and a proper GUI, using existing packages. Even the open source ones, of which there is no lack.
Perhaps the idea which I’m circling is this: what difference can one programmer make? Or maybe more narrowly, what do I hope to accomplish? Is this a question worth pondering, or will it lead to paralysis and self-doubt?
The history of computing is full of individuals who have made a difference. Even within the Lisp programming community, there have been many who have made a difference. Everyone from John McCarthy who invented the language itself, to Rich Hickey who has injected new energy into the ideas behind the language with Clojure.
There is one thing I do know I would like: to have people use my software. One of the greatest joys I have experienced as a CG developer has been seeing what artists can do with my software. And if I look at the people mentioned above, they both started communities which took their work and ran with it. So that is something I am keeping in mind as I go forward with this project.
One thing that soon becomes evident when you look at success stories in almost any field is that they are rarely linear progressions. They take unexpected turns (pivoting, I think is the current term in the startup world) and are far more chaotic than one would imagine from the exterior. McCarthy didn’t even want the language in his original paper implemented on a computer. Someone else took it upon themselves to do that.
This project began to a large extent as one of nostalgia. A throwback to my early formative days, shaped by hacking on a Lisp Machine at the MIT Media Lab. I knew that it would not have anything resembling a business plan, or even an elevator pitch, or even a clearly stated goal. The closest I can come to one is: what interesting things might happen if someone — me — tried to do 3D CG development in Common Lisp in today’s world?
And I need to remind myself of that, and to be patient and let the process take its course. Twists and turns and all. It is still early days.
Code & Design
I had originally intended to avoid any OpenGL rendering beyond simple wireframes, and use Blender as my renderer. To that effect I wrote a USD exporter which I used to import my models into Blender.
But as my models grew in geometric complexity, I felt wireframes might not be enough, so I decided to implement some minimal OpenGL shading. I decided to make the models look reminiscent of the 1980’s and display them as faceted quads.
The code snippet above should give any modern GPU programmer heart palpitations. It is making multiple OpenGL calls per vertex using deprecated API functions. Very early 1990’s at best.
But hey, that’s nostalgia for you.