Work in progress on an IDE for 3D graphics written in Common Lisp.
Cheesy trailers:
Kind of like that description. I've been doing GL since before it was OpenGL.
In my Common Lisp 3D system [1], I've been happily using very simple immediate mode OpenGL calls, taking advantage of CAD-like features such as drawing wireframes of various thickness over shaded polygons. OpenGL provides specific Z-buffer API calls to facilitate such things.
Is there a simple way of doing such CAD-centric things in Vulkan?
We'll see what comes of it.
This speaks to me. As I get older, I am tempted to start curating a list of my "failed" (or abandoned) projects.
I have been fortunate enough to launch an open-source 3D graphics Lisp project late in life which has managed to keep my interest. Early on, I made a number of conscious decisions about how I would view this project and avoid some mistakes of my past.
- No comparing to existing 3D packages. It's evident that I can't compete with commercial packages with decades of programmer effort.
- No hunting for a "better" language (though this hasn't really been a problem). A goal of the project is to develop a system where I can bring the power of Common Lisp to bear on 3D graphics. In some ways this is a throwback of work I did developing 3D graphics on Symbolics Lisp Machines back at the MIT Media Lab [0]. Returning to my youth?
- Keep it simple. Or, does it need to be more complicated? Understandable code is a benefit, as is code you can (mostly) keep in your head. Avoid excessively clever code, which I have been guilty of in the past (macros, anyone?). Also (more controversially) avoid dependencies where possible; keep it in house.
- Build a community. Having others involved is the best way I have found for not running out of steam. My other projects have invariably been solo efforts. Now I am interested in creating something which will outlast me. Hence the decision to put the project on Github [1].
- This "thing" has value in and of itself, and doesn't need to be "better" than what is out there. By virtue of being different enough, it is a worthwhile project to bring into existence. The world probably doesn't need another browser-based JavaScript package.
- Keep the momentum going by working on whatever interests me at the time. Avoiding tedious development and yak shaving keeps me from losing motivation. I do realize the article touches on this as a weakness of the Lisp developer mindset, and I admit to not being motivated to build an industrial-strength system. E.g. my half-baked GUI built on top of raw OpenGL.
- Finally (have to stop sometime), don't overthink things. Enjoy the journey. I am enjoying enhancing the system while not fretting over who will use it or for what purpose. The journey is the destination.
[0] https://medium.com/@kaveh808/late-night-lisp-machine-hacking...
I also use the REPL for quick tests, and evaluate new code by writing it in emacs and compiling it one function at a time (C-c C-c).
Finally, I keep files of tutorial/demo/test cases which work a bit like a notebook, allowing me to quickly verify that existing 3D scenes still work.
It is not perfect by any means, and politics did play a large part in the 10-year ANSI standardization process.
At the end of the day, for me, what makes it my favorite language is the principle that the language should provide the maximum possible power to the programmer, boosting productivity of (most evidently) the individual developer.
It has served me well in my 3D graphics project [0], which is different enough from what is out there that it does feel like a worthwhile endeavor.
Quick demo:
https://www.youtube.com/watch?v=i0CwhEDAXB0
Repo:
The outstanding feature of the S-Graphics suite was the polygonal modeler which used a winged-edge structure that was far ahead of its time. It survives conceptually in the Wings3D system, which is a quite faithful copy of that modeler.
And of course you got the extensibility that came with the graphics system being built on Lisp.
But Symbolics was never, as far as I saw, a serious or popular contender in 3D production. Not only was the system expensive, but the hardware could not keep up with SGI's graphics abilities. Furthermore, the mass of CG developers at the time came from a C/Unix background, and rendering especially was so speed critical that C (and Fortran) resulted in faster systems.
Almost 40 years later, I have returned to the idea of developing a 3D system in Common Lisp [1]. We shall see where it leads.
[0] https://medium.com/@kaveh808/late-night-lisp-machine-hacking...
I recently spent a number of years in semi-retirement, concentrating on my photography [0] and filmmaking [1] and thinking I was done with (and too old for) software development.
Professional software development had lost its lure for me as the CG and VFX industry had grown into a massive factory-like industry. Though I had worked on some satisfying projects -- writing the animation code used in "Jurassic Park", leading the R&D team for "Final Fantasy: The Spirits Within", working on "The Hobbit" movies -- I had lost the desire to write software.
Then about a year ago a friend asked me to teach him some Common Lisp online. So I wrote some tutorials and as we did our sessions [2] I got increasingly enthusiastic about developing for fun, especially if I could use the tool of my choice (Common Lisp) for the domain of my choice (computer graphics). So I started a new 3D graphics project and made it open source [3]. Even started a blog about the journey [4].
Although I don't consider myself to be up on the latest buzzwords and web architectures and the only scrum I'm familiar with is from my rugby-playing days, I have found -- rediscovered -- the pleasure of designing and implementing software. Surprisingly (to me at least), I don't feel over the hill. Yes, I probably can't do the marathon programming sessions I used to do, and all-nighters are a thing of the past, but I don't find my mind being any less sharp than it used to be.
[0] https://www.kardanphotography.com
[1] https://vimeo.com/kavehkardan
[2] https://www.youtube.com/playlist?list=PLTA6M4yZF0MzsMlNL0N67...
[3] https://github.com/kaveh808/kons-9
[4] https://medium.com/@kaveh808/once-more-into-the-breach-a-new...
In my 3D CL system [0], I have so far kept all geometric data as naive CLOS classes as the intent of the system is to provide a sandbox for experimentation. I have thought of, perhaps one day, representing the geometry as a foreign library for efficient passing to the GPU.
Brief trailer: https://youtu.be/i0CwhEDAXB0
Some of the milestones along the way: - Developed 3D animation software used to animate the dinosaurs in “Jurassic Park”. - Software R&D lead for CGI feature “Final Fantasy: The Spirits Within”. - Senior Software Developer on “The Hobbit” films.
Now I have returned to Common Lisp with a new open source 3D system [2], and it feels really good. As I deliberate over innumerable design decisions, the one thing I have told myself I will not consider changing is the choice of language. New, popular, hot, trendy languages (Clojure, Julia) may monopolize the conversation, but I am content with what Common Lisp allows me to do.
[1]: https://kaveh808.medium.com/late-night-lisp-machine-hacking-... [2]: https://github.com/kaveh808/kons-9
I should re-read the Norvig paper...
But looking at the repo linked in the post https://github.com/kaveh808/kons-9 and the demo, it looks like you have something that is already working.
Also, what does this mean in the readme?
> If you're brave enough, change the pathnames in main.lisp and eval the buffer.
I see no pathnames in https://github.com/kaveh808/kons-9/blob/main/main.lisp I don't use CL, so perhaps I'm missing something, or it's an outdated instruction.
Another important thing to get users (and later contributor) is a complete idiot proof method to install the project and run the demo [1]. something like "git clone & make demo" or whatever is the correct syntax for that spell.
[1] I recommend to read an old post by Joel Spolsky https://www.joelonsoftware.com/2000/04/26/designing-for-peop...