From Wakapon
Jump to: navigation, search
Line 18: Line 18:
  
 
==Cubemap Projection Configuration==
 
==Cubemap Projection Configuration==
The configuration for a cube map is that pixels are lying on a plane z=1 such as <math>p'=(x,y,1), -1<x<1, -1<y<1</math> and we project back onto the unit hemisphere by "normalizing" the vector <math>p=\frac{\mathbf{p'}}{|\mathbf{p'}|}=\frac{(x,y,1)}{\sqrt{1+x^2+y^2}}</math> as shown on the figure below:
+
The configuration for a cube map is that pixels are lying on a plane z=1 such as <math>\mathbf{p'}=(x,y,1), -1<x<1, -1<y<1</math> and we project back onto the unit hemisphere by "normalizing" the vector <math>\mathbf{p}=\frac{\mathbf{p'}}{|\mathbf{p'}|}=\frac{(x,y,1)}{\sqrt{1+x^2+y^2}}</math> 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 <math>\mathbf{p}</math> along x and y that give us the vectors <math>\frac{\partial \mathbf{p}}{\partial x}</math> and <math>\frac{\partial \mathbf{p}}{\partial y}</math>.
 
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 <math>\mathbf{p}</math> along x and y that give us the vectors <math>\frac{\partial \mathbf{p}}{\partial x}</math> and <math>\frac{\partial \mathbf{p}}{\partial y}</math>.
 +
 +
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 <math>x, y</math> on the plane, and the length of that normal is the tiny area element <math>dA</math> on the hemisphere.
 +
 +
Integrating this operation (cross product and norm computation) over an interval <math>[a,b]\in\mathbb{R}</math> yields:
 +
 +
<math>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 |
 +
</math>
  
  
 
==Our Projection Configuration==
 
==Our Projection Configuration==

Revision as of 18:11, 2 June 2017

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/ ?

Perspective projection of an area element on plane z=1 onto the hemisphere


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?

Orthographic projection of an area element on plane z=0 onto the hemisphere


Well let me help you with that! S1.gif


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 <math>\mathbf{p'}=(x,y,1), -1<x<1, -1<y<1</math> and we project back onto the unit hemisphere by "normalizing" the vector <math>\mathbf{p}=\frac{\mathbf{p'}}{|\mathbf{p'}|}=\frac{(x,y,1)}{\sqrt{1+x^2+y^2}}</math> 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 <math>\mathbf{p}</math> along x and y that give us the vectors <math>\frac{\partial \mathbf{p}}{\partial x}</math> and <math>\frac{\partial \mathbf{p}}{\partial y}</math>.

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 <math>x, y</math> on the plane, and the length of that normal is the tiny area element <math>dA</math> on the hemisphere.

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

<math>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 | </math>


Our Projection Configuration