New open source project: Common Lisp 3D graphics system
old.reddit.com
old.reddit.com
> • wrote 3D animation software used in “Jurassic Park” • software R&D lead on “Final Fantasy: The Spirits Within” movie • senior software developer on “The Hobbit” films
> But I don't consider myself an expert
Looks like a cool project though!
I know 3D graphics, but I realize there are folks out there who know a lot more than I do in their respective fields. And I hope to tap into that knowledge.
It's going to take a team to do this project.
I wanted a quick way of assigning some colors so I just made a rainbow color ramp. If you mean the red color for selection, then yes that was inspired by watching a Wings3D video.
which originally was a project for Nintendo..., IIRC
Mirai was a descendant of your work? Nice. It was a great (at the time) software. Too bad Izware has dissapeared!
Wish I still had the code, for sentimental reasons, but it all went up in a house fire.
Then I may "ship" a release (maybe purely REPL-based) and gather feedback.
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...
That instruction is indeed outdated. It is from before the system had ASDF.
I do need to update the Readme file.
I used to follow Joel's blog back in the day.
It will also serve as a starting point for design discussions.
Open is for others to be involved. In fact I am ok to play with Ccl and macOS.
Or the geometric code in Solvespace: https://solvespace.com/index.pl which is currently under 10,000 LoC: https://github.com/solvespace/solvespace/tree/master/src/srf This is far from perfect.
CAD systems use trimmed NURBS which have a lot of challenges. I wonder how choice of language would help to address some of the complexity. Addressing this is definitely a project unto itself, while having much narrower scope than a new Blender.
Later, at Square on the "Final Fantasy" movie, we were having trouble modeling our character models using NURBS due to continuity issues when more than four patches met at a corner. I resolved the issue by implementing a subdivision surface plugin for Maya. Overnight the workflow switched to polygons.
Would be great to have NURBS and other parametric representations as plugins in the system.
One of the most exciting things about this project will be seeing what gets developed on top of the system.
A truly new geometric kernel would be great, and it's been a dream of mine, but I have too many other things that need to be finished before I start writing one.
A solid modeler generally consists of a trimmed curve and surface library with lots of topological reasoning, to be able to represent closed regions of space and manipulate them by adding holes and rounding features and offsets. The idea is to be able to represent and operate on just about any 3d shape imaginable. Solid modelers of recent years have had support for nurbs surfaces and polygonal subdivision surfaces, but also include support for conic sections, beziers and other implicit or parametric curves or surfaces. Many of them, like OpenCascade are arranged in a logical object oriented fashion which abstracts the complexity. They have to be general, featureful and fast for anybody to want to use them. It's a whole heck or a lot of math and geometric reasoning (and debugging) which makes them valuable (and huge), and although you might want to talk about a "new" kernel you would never just want to chuck something like OpenCascade and start over. OpenCascade, ACIS, Parasolid, SMLib and others encapsulate a huge corpus of knowledge no matter what language they are written in. I have taken criticism from other Lisp hackers for writing Lisp bindings to OpenCascade instead of "starting over" in Lisp, but these people really have no idea what they are talking about.
P3D: a Lisp-based format for representing general 3D models https://dl.acm.org/doi/10.5555/110382.110608
P3D DESCRIPTION AND DEFINITIONS http://netghost.narod.ru/gff/vendspec/p3d/p3d_desc.txt
I remember those days. :)
Previously on hn: https://news.ycombinator.com/item?id=31115221
Can you make a tl;dw video? 1 minute, perhaps 3 minutes.
Some links to some arbitrarily selected parts of the video:
Something about (random?) particle flow: https://www.youtube.com/watch?v=NJe4isZ7NHI&t=1649s
A 3D graph a bull (and later the teapot): https://www.youtube.com/watch?v=NJe4isZ7NHI&t=2155s
I'll work on a promotional video.
I think that some computational geometry problems admit nice solutions using Projective Geometric Algebra. Using it is fairly intuitive: You have some elements of the algebra that represent Euclidean motions, and some other elements that represent flat objects like points, lines and planes; you can then intersect these objects, "join" them into larger objects, and apply transformations to them. If it looks to you like it could make some things you're doing easier, then you might try using it. I think there are already some Common Lisp implementations out there -- but if there aren't, then it shouldn't be difficult to make one from scratch.
There's also Conformal Geometric Algebra, which is notable for allowing you to represent circles and spheres as elements of the algebra. But efficiently implementing it appears to be harder than PGA.
I have not yet seen a system or UI that I am happy with.
Having a flexible enough GUI toolset to allow this sort of development is definitely on my mind.
Of course they can code when these details are fleshed out, but these traits in a project are what make it easier for more people to join and contribute.
My view is that there are more than enough people to make open source projects succeed, but trying to unravel and understand other peoples poorly documented architectural decisions and code is what make things difficult.
Looks cool, although I don't understand much of graphics, I always felt, with lisp macros you can probably do bunch of cool things around graphics.
There are many inspirations that we can take from CL development experience that might make for interesting directions to take 3D software systems. For example a live sharable image based environment would be sweet to allow artists to easily collaborate in real time.
I'll be keep an eye on this, I might have some time for CL projects in the future and would love to help out if possible.
I wrote about this in my blog a while back, if you can stomach the overthinking. :)
https://kaveh808.medium.com/15-interlude-musings-and-over-th...
Perhaps another way of putting it: This is what I want to spend my time doing.
A successful community project would benefit from a clear set of goals, which is oft times a matter of "software A in language L".
Working on a team with other Lisp-speaking aliens would be a dream.
That would be a dream. One I'm hoping to make happen here.
It's very difficult to justify the training effort and cost for non-mainstream technology, even if it is demonstrably more productive. Easier to just hire twice as many staff.
Another good example was while Midori was powering the Asian Bing infrastructure, Windows team was still asserting it wasn't production ready (see Joe Duffy keynot on RustConf).
Our industry needs more dreamers and less bean counters.
As I've probably made clear elsewhere in this posting, I can't make a business case for the project. Not one that an investor would buy.
If your employees are invested in Lisp rather than C++ how easy will it be for them to start up their own companies and compete with you if they need to hire an additional 10 C++ programmers rather than the 3 Lisp programmers they would require if you developed your product and thus their skillset in Lisp rather than C++?
After seeing very effective tools mothballed over the years this is the only reason I can come up with.
Just see how Javascript and HTML have been seen as the way of delivering program functionality to users over the last 25 years, and yet every two weeks a new Javascript framework is announced which promises to make web development easier.
I mean how many years does it take to develop effective frameworks for software development? 25 years is time enough for a people to develop from blobs in the parents bodies to university graduates and with families of their own, and yet there is no end to new frameworks which promise to solve all web software development issues.
In a particular year in the late 80s or 90s he was the UK's highest earner by dint of bringing his mathematical genius to bear on the trading activities of Tokai Bank.
You might tap your namesake for some funding.
* - almost anything
[1] https://lispcookbook.github.io/cl-cookbook/type.html#compile...
Common Lisp is also object-oriented with classes, generic functions and methods.
CL-USER 6 > (defclass foo ()
((bar :type number :initform 0)))
#<STANDARD-CLASS FOO 82200CF0DB>
CL-USER 7 > (defmethod add-number ((object foo) (n number))
(incf (slot-value object 'bar) n))
#<STANDARD-METHOD ADD-NUMBER NIL (FOO NUMBER) 80100E116B>
CL-USER 8 > (let ((foo1 (make-instance 'foo)))
(add-number foo1 10)
foo1)
#<FOO 80100E185B>
CL-USER 9 > (describe *)
#<FOO 80100E185B> is a FOO
BAR 10
Thus the source code will contain lots of class definitions, lots of methods with multiple argument dispatching over classes.Thus the source code will contain all the usual class and method declarations.
Common Lisp may also contain optional type declarations. For above example the slot BAR of the class FOO has a type NUMBER.