[HN Gopher] Introduction to spherical harmonics for graphics pro...
___________________________________________________________________
Introduction to spherical harmonics for graphics programmers
Author : luu
Score : 140 points
Date : 2026-04-13 09:05 UTC (3 days ago)
(HTM) web link (gpfault.net)
(TXT) w3m dump (gpfault.net)
| hackingonempty wrote:
| > spherical harmonics can have uses beyond lighting
|
| This math is also used in Ambisonic surround sound though newer
| techniques use planewave expansion.
|
| For games, the full-sphere encoding of Ambisonic B-format can be
| decoded for arbitrary speaker locations and the soundfield
| rotated around any axis. I'm not sure if its ever been used for a
| game though.
| analog31 wrote:
| ... also quantum mechanics. The textbook solution for the
| wavefunction of the hydrogen atom involves spherical harmonics.
| hackingonempty wrote:
| That fact is betrayed by the the similarity of the shapes of
| atomic orbitals and the sensitivity patterns of Abisonic
| B-format channels.
|
| https://en.wikipedia.org/wiki/Ambisonics#Higher-
| order_ambiso...
|
| https://en.wikipedia.org/wiki/Atomic_orbital#Orbitals_table
|
| ...and the same patterns appear on the unit disk with the
| Zernike polynomials, used to describe optical aberrations and
| more.
|
| https://en.wikipedia.org/wiki/Zernike_polynomials
| mcphage wrote:
| I noticed that (similarity between the graphs and the
| shapes of atomic orbitals), and assumed that was what the
| article was about. And it wasn't, and never brought it up,
| so I was thinking maybe I was confused about the
| similarity. So thank you for showing me I was not.
| alfiedotwtf wrote:
| lol, I was confused from the first imaging thinking this
| was going to be a tutorial on quantum physics then was
| confused even more as I scrolled
| vatsachak wrote:
| Ambisonics can give one end game audio
| bschwindHN wrote:
| end-game audio?
|
| Or it can give game audio to one end?
| hackingonempty wrote:
| A single Ambisonic B-format recording can be shipped and at
| runtime decoded into any coincident or near-coincident
| stereo pair pointing in any direction or into any surround
| sound format. It is a universal format that encodes the
| direction and intensity of arriving sound over a full
| sphere.
| vatsachak wrote:
| Awesome write up. Is the appeal of spherical harmonics in
| graphics compression?
|
| Like, if you know the third order harmonics that's only 16 values
| you have to pass around
| djmips wrote:
| For sure that's a big reason but it's also a useful basis for
| doing lighting calculations because of their sphere like
| nature. They are quite efficient in dynamic scenes and
| historically used in a lot of precalc to do something akin to
| real time Global Illumination
| maho wrote:
| +1 for introducing them as real-valued functions over cartesian
| coordinates!
|
| Typically, spherical harmonics are introduced as a complex
| function over spherical coordinates, which makes them much easier
| to derive, but imo hides their beauty.
|
| The real-valued, cartesian form of regular spherical harmonics is
| also called "solid harmonics" or "harmonic polynomials", in case
| you want to dig deeper.
| nice_byte wrote:
| Author here. Please let me know if the sample code doesn't work
| for you. It's all single threaded dumb JavaScript which makes it
| very easy to read, but definitely not performant. I decided to
| stick with it for didactic reasons, but still worried that it may
| hang someone's browser.
| geon wrote:
| Would it be practical to use high resolution spherical
| harmonics as a replacement for cube maps?
| nice_byte wrote:
| Not really. Besides the problems with ringing outlined in the
| post, the number of coefficients required to capture higher
| frequency detail grows quadratically, requiring not only more
| storage but also operations to evaluate. Which makes
| straightforward cubemap replacement impractical.
| lukko wrote:
| This is really great. I always saw those harmonic shapes as
| electron orbitals, I had no idea they could be used in lighting
| too - so cool.
|
| It made me wonder - why do the electron orbitals take those
| shapes in say a hydrogen atom? Is there a constraint on the
| electron and proton together that make it fit only to spherical
| harmonic functions?
| rsfern wrote:
| The reason is that electrons (like all quantum mechanical
| objects) are wavelike. In an isolated hydrogen atom, the
| electron is in a spherically symmetric environment, so the
| solutions to the wave equation have to be spherical standing
| waves, which are the spherical harmonics. The wave frequencies
| have to be integer divisions of 2pi or else they would
| destructively interfere. (Technically each solution is a
| product of a spherical harmonic function and a radial function
| that describes how fast the electron wave decays vs distance
| from the nucleus)
|
| What's interesting is if the environment is not spherically
| symmetric (consider an electron in a molecule) the solutions to
| the wave equation (the electronic wave functions) are no longer
| spherical harmonics, even though we like to approximate them
| with combinations of spherical harmonic basis functions
| centered on each nucleus. It's kind of like standing waves on a
| circular drum head (hydrogen atom) vs standing waves on an
| irregular shaped drum head
|
| Of course the nucleus also has a wave nature and in reality
| this interacts with the electrons, but in chemistry and
| materials we mostly ignore this and approximate the nucleus
| like a static point charge from the elctrons perspective
| because the electrons are so much lighter and faster
| lukko wrote:
| Ah amazing - thank you for the response! I have a couple of
| related questions - is it that the non 2 pi frequencies
| exist, but they destructively interfere so we can't see them?
| My understanding is that the radial function for the electron
| is zero at the nucleus - there is no possibility of it being
| found there - but why is that the case?
| rsfern wrote:
| Admittedly my understanding of QM is a bit vibey but I'll
| try to answer
|
| In an atom, angular wavefunctions with wavelengths non-
| integer divisions of 2pi can't exist because of the
| boundary conditions on the wave equation. A free electron
| can have any wavelength, but once you put it in a box
| (confine it to the potential around a proton in a Hydrogen
| atom) the non-integer wavelengths aren't allowed
|
| I think it's instructive to think about what the
| wavefunction represents. It's square is the electron
| probability density (technically the wavefunction is
| complex valued so it's the wavefunction times it's complex
| conjugate). If you have a non-integer multiple wavelength
| then the wavefunction goes out of phase with its complex
| conjugate after one period, and if you integrate over the
| angular domain the electron probability has to be zero
| everywhere.
|
| This also answers your second question. The radial solution
| to the wave equation for hydrogen gives you the Laguerre
| polynomials. They don't all go to zero at the nucleus
| though, actually the first one has a maximum at zero
| because it scales like exp(-r) (See fig 4.10.2 on
| chem.libretexts linked below). But when you do a volume
| integral to calculate the electron probability, the
| probability near the nucleus is low because the integration
| volume is small even though the wavefunction is large
|
| https://en.wikipedia.org/wiki/Laguerre_polynomials
|
| https://chem.libretexts.org/Courses/University_of_Californi
| a...
| crispyambulance wrote:
| Spherical harmonics are basically a fourier series. They're a
| complete orthonormal set of basis functions for functions for
| the unit sphere. Whereas the fourier series from calc 101 is a
| complete orthonormal set of basis functions on the unit
| interval (eg [0,1]).
|
| In other words you can express any reasonable function on the
| unit sphere as a series of spherical harmonic terms. That makes
| them ideal for working with differential equations (eg
| schrodinger's equation for the hydrogen atom, or, emission from
| an arbitrary light source).
| groundzeros2015 wrote:
| And the number of terms you need to get a good approximation
| is related to the frequency. Low frequency signals like
| lighting work well.
| lukko wrote:
| this is all so interesting.. Are there any particular
| functions / parameters that are typically used, that say
| replicates 3 point light setups?
|
| I guess at a certain point the number of terms becomes so
| large that it makes sense to just use a cube map?
| groundzeros2015 wrote:
| In the era im familiar with (ps3, 360) everyone used the
| first 9 coefficients. You can read the original
| Ramamoorthi paper for better theory applied to lighting.
|
| But yes it's an approximation. If you have a ton of terms
| it looks like a bitmap like you said.
| hasley wrote:
| If one needs to describe (and maybe compress) functions or data
| on a sphere, spherical harmonics are really a thing.
|
| An alternative would be to construct a new function (or matrix)
| that is not only periodic in azimuth, but also in elevation
| (i.e., extend elevation to a full circle -pi to +pi). Then, one
| can simply compute two independent Fourie r transforms: along
| azimuth and along elevation. [1] The same idea works on matrices
| using the Discrete Fourier transform (DFT/FFT). However, you then
| have to accept things like that your data points are all equal at
| the poles.
|
| [1] https://en.wikipedia.org/wiki/Double_Fourier_sphere_method
| evanb wrote:
| In case the author is reading this, if you're going to introduce
| the complex-valued harmonics you should be careful to put the
| complex conjugate in the inner product <f, g> =
| [?] f(o)^* g(o) do
|
| which does match the corresponding linear-algebra inner product
| if the vectors are over the complex numbers p .
| q = S_i p^*_i q_i
|
| which guarantees that p.p >= 0 even for complex p (and does not
| change the only-real case).
| luxuryballs wrote:
| what level of math do I need to understand this? or the rest of
| the math in the post, something I can catch up on in a weekend?
| barely remember the last math class I took seriously, trig like
| 18 years ago
| throwway120385 wrote:
| This is basic integral calculus, and the sigma symbol
| indicates discrete summation.
| yeoyeo42 wrote:
| I think the steps would be like this:
|
| - get understanding of ordinary vector linear algebra.
|
| - understand what vector dot product does and why
|
| - understand why an orthogonal set of basis vectors for the
| space you're working in is useful / what properties it has /
| how its used. like basic euclidean 3d space (1,0,0) (0,1,0)
| (0, 0, 1) basis vectors.
|
| - get a refresher on basic calculus, in particular integrals
|
| - understand this inner product, it's a generalization of dot
| product, except you can think of your vectors having infinite
| number of dimensions now.
|
| - the properties of the dot product you know (like that two
| vectors are perpendicular if their dot product is 0) work for
| the inner product too. or perhaps its better to say that the
| general inner product is defined to have similar properties
|
| - there are functions that are orthogonal to each other in
| the same way vectors can be orthogonal to each other, and you
| can use the inner product to tell which ones.
|
| - spherical harmonics are constructed / by design orthogonal
| to each other. how to show this and where the intuition for
| finding them could come from is a whole topic...
|
| - but once you have it, just like you can project vectors
| onto basis vectors (to essentially transform them into the
| coordinate system described by those basis vectors), you can
| project functions into the coordinate system represented by
| those orthogonal functions.
|
| - then you have to figure out why you would even want to do
| this. in short is has a lot of useful
| properties/applications. in the graphics case you can
| compress some quite complex functions into just a few
| coefficients using this (not perfectly, there is some
| 'information loss', but still). integrating over two
| functions becomes cheaper when they are projected to SH
| basis. it lets you do some unintuitive stuff like combine
| light that goes into different directions into one common set
| of coefficients.
| smath wrote:
| Loved the writeup.
|
| I'll just drop a note here to say that these spherical harmonics
| are also used in creating specialized neural network layers that
| are useful for modeling 3D objects like point clouds and
| moleculues, proteins, etc. Basically whenever we want to make
| sure that rotating / translating the object doesnt make a new
| object. [0] is a good reference for this.
|
| Even more interesting is that these are the same spherical
| harmonics that appear as solutions to Schrodinger's equation in
| quantum mechanics (s, p, d, f orbitals in an atom) [1]
|
| [0] https://arxiv.org/abs/2312.07511. [1]
| https://en.wikipedia.org/wiki/Atomic_orbital
___________________________________________________________________
(page generated 2026-04-16 23:02 UTC)