One possibility, a little backwards maybe, is to produce a discrete SDF from e.g. a mesh, by inserting it in an octree. The caching becomes the SDF itself, basically. This would let rendering be done via the SDF, but other logic could use the mesh (or other spatial data structure).
Or could the engine treat animated objects as traditional meshed objects (both rendering and interactions)? The author says all physics is done with meshes, so such objects could still interact with the game world seemingly easily. I imagine this would be limited to characters and such. I think they would look terrible using interpolation on a fixed grid anyways as a rotation would move the geometry around slightly, making these objects appear "blurry" in motion.
Sampling an implicit function on a grid shifts you to the world of voxel processing, which has its own strengths and weaknesses. Further processing is lossy (like with raster image processing), storage requirements go up, recovering sharp edges is harder...
But isn't this what the author is doing already? That's what I got from the video. SDF is sampled on a sparse grid (only cells that cross the level set 0) and then values are sampled by interpolating on the grid rather than full reevaluation.
I might be misreading your comment but it seems to me you're linking this too closely to AI, as I believe you'd see a similarly international makeup of researchers in any STEM field in the US. If I recall correctly, something like 20-30% of professors in the US are foreign born. This would probably be even more for younger researchers (PhD students, postdocs) as there's a greater proportion of people willing to spend a few years abroad than their whole adult life.
The US is the largest research hub in the world, and it offers (or offered) outstanding conditions for research. I believe this to be as old as WW2, and it certainly didn't start with AI. Higher salaries, more diverse career opportunities (academia is more porous to industry in the US than many other countries), and the ability to hire more and better candidates for the workhorses of a lab: PhD students, postdocs, technicians, research scientists.
Re: supply side, undergraduate education (including Master's in some countries) has become basic infrastructure in a developed (or developing) country, and countries like China, ex-USSR or the western European nations have solid traditions in this regard, with many offering comparable (or surpassing) education to the best US universities in specific STEM topics. However, save for China, I believe a majority of these countries have not invested in research to match their growing pool of Master's (or even PhD) graduates.
Wouldn't a decent compromise be to extend the capabilities of the C preprocessor, so that we could iterate over types at preprocessing time?
That way, we could instantiate for a great number of types more easily, while keeping implementations in source files. You can always do an instantiation macro, but it still becomes painful when the number of template arguments (and their possible values) increases.
I know there's the Boost PP library but I personally find it incomprehensible once you try to nest two+ loops.
What do you mean by this? I've been using those libraries on mac ARM and AMD processors, are you referring to intel-specific implementations? How about the sparse matrix solver, what do you use?
This all hinges on the fact the variance is homogeneous to X^2, not X. If we look at the standard deviation instead, we have the expect homogeneity: stddev(tX) = abs(t) stddev(X). However, it is *not linear*, rather stddev(sum t_i X_i) = sqrt(sum t_i stddev(X_i)) assuming independent variables.
Quantitatively speaking, t^2 and (1-t)^2 are always < 1 iff |t| < 1 and t != 0. As such, the standard deviation of a convex combination of variables is *always strictly smaller* than the convex combination of the standard deviations of the variables. In other words, stddev(sum_i t_i X_i) < sum_i t_i stddev(X_i) for all t != 0, |t|<1.
What this means in practice is that the convex combination (that is, with positive coeffs < 1) of any number of random variables is always smaller than the standard deviation of any of those variables.
Math isn't about memorizing closed-form solutions, but analyzing the behavior of mathematical objects.
That said, I mostly agree with you, and I thought I'd share an anecdote where a math result came from a premature implementation.
I was working on maximizing the minimum value of a set of functions f_i that depend on variables X. I.e., solve max_X min_i f_i(X).
The f_i were each cubic, so F(X) = min_i f_i(X) was piecewise cubic. X was dimension 3xN, N arbitrarily large. This is intractable to solve as, F being non-smooth (derivatives are discontinuous), you can't well throw it at Newton's method or a gradient descent. Non-differentiable optimization was out of the question due to cost.
To solve this, I'd implemented an optimizer that moved one variable at a time x, such that F(x) was now a 1d piecewise cubic function that I could globally maximize with analytical methods.
This was a simple algorithm where I intersected graphs of the f_i to figure out where they're minimal, then maximize the whole thing analytically section by section.
In debugging this, something jumped out: coefficients corresponding to second and third derivative were always zero. What the hell was wrong with my implementation?? Did I compute the coefficients wrong?
After a lot of head scratching and code back and forth, I went back to the scratchpad, looked at these functions more closely, and realized they're cubic of all variables, but linear of any given variable. This should have been obvious, as it was a determinant of a matrix whose columns or rows depended linearly on the variables. Noticing this would have been 1st year math curriculum.
This changed things radically as I could now recast my maxmin problem as a Linear Program, which has very efficient numerical solvers (e.g. Dantzig's simplex algorithm). These give you the global optimum to machine precision, and are very fast on small problems. As a bonus, I could actually move three variables at once --- not just one ---, as those were separate rows of the matrix. Or I could even move N at once, as those were separate columns. This could beat all the differentiable optimization based approaches that people had been doing on all counts (quality of the extrema and speed), using regularizations of F.
The end result is what I'd consider one of the few things not busy work in my PhD thesis, an actual novel result that brings something useful to the table. To say this has been adopted at all is a different matter, but I'm satisfied with my result which, in the end, is mathematical in nature. It still baffles me that no-one had stumbled on this simple property despite the compute cycles wasted on solving this problem, which coincidentally is often stated as one of the main reasons the overarching field is still not as popular as it could be.
From this episode, I deduced two things. Firstly, the right a priori mathematical insight can save a lot of time in designing misfit algorithms, and then implementing and debugging them. I don't recall exactly, but this took me about two months or so, as I tried different approaches. Secondly, the right mathematical insight can be easy to miss. I had been blinded by the fact no-one had solved this problem before, so I assumed it must have had a hard solution. Something as trivial as this was not even imaginable to me.
Now I try to be a little more careful and not jump into code right away when meeting a novel problem, and at least consider if there isn't a way it can be recast to a simpler problem. Recasting things to simpler or known problems is basically the essence of mathematics, isn't it?
While those are certainly indicators of interest, is their absence an indicator of lack of interest? In other words, "has side projects" is sufficient to prove "likes programming", but I don't think it's necessary.
There's only 24 hours in a day, and mastering any serious curriculum already takes the majority of those.
Then there's family: some have parents to support, and/or a spouse they can't just ignore all evening to sit in front of a terminal typing git push.
Lastly, plenty of people learn or tinker on their own, but they don't all have the (socioeconomically loaded) reflex of marketing themselves with a github repo.
Of my whole Bachelor's, Master's and PhD cohorts, I haven't known one person to have a github repo outside of employment. Some were building little things on the side but sharing them informally, never in public.
What you're looking for is people with no social life, no responsibilities towards anyone or anything (even just being an immigrant can be a huge time and energy sink), and with the social background to confidently market themselves by putting what's objectively noise online.
I happen to have kids and have always spent about 30 min a day, more like an hour, every day, looking at some side coding side projects. Being doing that before I was dad, now less since I am. But I still do. I'm past 50 now and I must admit the quantity of work I put out on side projects have decreased.
Side projects requires passion, not discipline, not effort, just passion. And that's what I'm looking for. When you like what you do you're generally good a it.
Now, I have hired people who don't have side projects, of course, they're not that common but not rare neither. And the side project question is sure not the main question. But that's a cool differentiator.
Moreover, questioning people on their side project is always more fun for them.
And of course, people with side project sometimes day dream so you have to keep them busy :-)
And having a github repo is a 15 minutes job. And most of the time, nobody will care about your side project. It's not like your marketing yourself. As I have said, I don't care about the stars. Just looking at what you do on the side, what interests you in a domain that is not far away from your job.
And side projects are always cool: I have interviewed people who were working on their game engine, planet trajectories, web sites for friends, playing with machine learning, writing little tools like Javadoc,...
I just wanted to comment on the "out of distribution" solution the author proposes, partly for the young grads on this forum.
Going "out of distribution" in abilities also means your job prospects go "out of distribution". When you specialize, so too does the kind of position you'd be the better fit for. This can mean radically fewer possibilities, and strong geographic restrictions.
To give an example, my PhD topic concerned something "that's everywhere" but, when you look at things more closely, there's only < 10 labs (by lab, I mean between 1 and 3 permanent researchers and their turnover staff) in the world working on it, and around that many companies requiring skills beyond gluing existing solutions together, in which case they'd just as well hire a cheaper (and more proficient) generalist with some basic notions.
This isn't even a very abstract, very academic field, it's something that gets attacked within academia for being too practical/engineering-like on occasion.
I understand the "belly of the curve" gets automated away, but consider that the tail end of the curve - producing knowledge and solutions to novel problems - has been for a long time, since Gutenberg's invention of the printing press, if not oral communication. The solutions scale very well.
A researcher's job is, almost by definition, to work themselves out of a job, and this has been the case since long before AI. Once the unknown has been known, a new unknown must be found and tackled. There's very, very few places in the world that truly innovate (not implementing a one-off novel solution produced in some academic lab) and value those skills.
I don't mean to be overly bleak, but it doesn't necessarily follow from this automation that the freed salary mass will go towards higher-level functions; just as likely (if not more), this goes towards profits first.
Seems like the hope, for OOD workers, is that matching weird employer needs with weird employee capabilities is a belly-of-the-curve problem that's about to get automated away.
Or could the engine treat animated objects as traditional meshed objects (both rendering and interactions)? The author says all physics is done with meshes, so such objects could still interact with the game world seemingly easily. I imagine this would be limited to characters and such. I think they would look terrible using interpolation on a fixed grid anyways as a rotation would move the geometry around slightly, making these objects appear "blurry" in motion.
reply