Jump to: navigation, search

Hi!

Maybe you already bumped into the problem of projecting a cubemap into spherical harmonics and found this page to help you out: http://www.rorydriscoll.com/2012/01/15/cubemap-texel-solid-angle/ ?

But maybe you need the solution to another, similar problem that consists in finding the solid angle of a pixel lying in the z=0 plane and orthogonally projected onto the hemisphere, but couldn't find a page with that computation?

Well let me help you with that!

First of all, the document that was used initially to do the computations, both in AMD's cube map generator, Rory Driscoll's summary and this page, is the very interesting thesis by Manne Öhrström.

## Cubemap Projection Configuration

The configuration for a cube map is that pixels are lying on a plane z=1 such as $\mathbf{p'}=(x,y,1), -1<x<1, -1<y<1$ and we project back onto the unit hemisphere by "normalizing" the vector $\mathbf{p}=\frac{\mathbf{p'}}{|\mathbf{p'}|}=\frac{(x,y,1)}{\sqrt{1+x^2+y^2}}$ as shown on the figure below:

The idea is to compute the area of a small element of surface on the hemisphere as we make it vary on the plane, we do that by computing the partial derivatives of $\mathbf{p}$ along x and y that give us the vectors $\frac{\partial \mathbf{p}}{\partial x}$ and $\frac{\partial \mathbf{p}}{\partial y}$.

As it is well-known to shader programmers, computing the cross product of these vectors gives us the normal to the sphere at this position $x, y$ on the plane, and the length of that normal is the tiny area element $dA$ on the hemisphere.

Integrating this operation (cross product and norm computation) over an interval $[a,b]\in\mathbb{R}$ yields:

$A(a,b) = \int_0^b{\int_0^a{ \left | \frac{\partial \mathbf{p}}{\partial x} \times \frac{\partial \mathbf{p}}{\partial y} \right | dx} dy} \quad = \int_0^b{\int_0^a{(1+x^2+y^2)^{-\frac{3}{2}} dx} dy} \quad = \left | atan( \frac{xy}{\sqrt{1+x^2+y^2}} ) \right |$