I'm Trying To Understand Tessendorf's Paper

Started by
5 comments, last by Bummel 7 years, 8 months ago
Hi at all! I'm struggling to understand Tessendorf's Paper. I have read it several times, but nothing. I have implemented FFT in my project (I know what is the FT and its uses), but now I don't know how to proceed.
I have never encountered so many problems problems understading math, given a good explanation.

This is what I have understood:
1) First we need to calculate the Phillips' Spectrum, in a frequency domain.
2) Then we use the inverse FFT to convert it into a spatial domain.

This is what I get once I merge h0(k) and k0(-k) into one texture.
2qci2cz.jpg

And then?? What I have to do??
Excuse me, I know I can appear as a complete n00b, but this is driving me crazy :(

OLD!!!

This is the equation to do the first step:
25h32q0.png
where k is the horizontal vector that points in the direction of travel of the wave, and ? is the frequency, but what is k (normal k, not bold k)? And L?

Then, the second step:
34s48ww.png
I need to generate random Guassian numbers...

Sincerely, I cannot see where parameters like choppyness, wave speed, etc... are located in these formulas.

I have read others explanations and slides. but they are all based on Tessendorf's, and they teach only the "theory".
I don't want to do voodoo programming. I want to understand what I have to do, the relation between these formulas and implement them on my own (the wave height field at least)!

I know you can't explain in depth every single step, but all I see is a bunch of math and succession of formulas.
I know I appear as a n00b, but I want to understand :(

I'd appreciate every help you can give me!
where

Advertisement

I have edited the first post, since no one has replied yet.

People would be better able to help if you linked to the paper and told us what you're trying to achieve, and what the problem is.

It looks really cool, whatever it is!

Do people really not know Tessendorf here, of all places? Jeez, I'm disappointed.

http://graphics.ucsd.edu/courses/rendering/2005/jdewall/tessendorf.pdf

I'd help but I got our Tessendorf code from someone else and never really had to dig into the details of the math.

SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.

People would be better able to help if you linked to the paper and told us what you're trying to achieve, and what the problem is.

Link:
http://graphics.ucsd.edu/courses/rendering/2005/jdewall/tessendorf.pdf

As I have understood, I should make the inverse FFT (FFT ^ -1) of this texture, which is the ocean in the frequency domain.
So, to obtain the displacement map, I should move this texture to a periodical ("tileable") space domain, via the FFT (also known as butterfly algorithm).
Right? or am I missing something? I see a lot of other math formulas... I don't know what to do now XD

Do people really not know Tessendorf here, of all places? Jeez, I'm disappointed.
[url=]http://graphics.ucsd.edu/courses/rendering/2005/jdewall/tessendorf.pdf]
I'd help but I got our Tessendorf code from someone else and never really had to dig into the details of the math.


I want to make this by myself, expecially because I'm writing the code in a compute shader.
Anyway, this ocean remembers me some kind of signal processing XD...
But in realty I am only trying to apply the math explained in that paper :P
I have implemented FFT in my project (I know what is the FT and its uses)

...

This is what I have understood:

1) First we need to calculate the Phillips' Spectrum, in a frequency domain.
2) Then we use the inverse FFT to convert it into a spatial domain.

I have trouble understanding where your problem lies then. You basically use the iFFT to efficiently sum a large amount of sine waves. That's it. The paper covers mainly how to calculate the complex coefficients of those waves.

The Phillips spectrum really only provides a weight for each wave depending on its frequency/wavelength. Therefore, you get a radially symmetric frequency space texture at this point (considering the weights/coefficients of the low-freq waves are towards the middle of the tex. A 1D slice of the Phillips spectrum looks something like this then: __...----==._.==----...__ ). Next you add some Gaussian noise since nature is never perfectly regular. You might also want to multiply with a directional weight to give the resulting waves a primary propagation direction. Up to this point you have calculated the magnitude of the complex coefficients - the height of each sine wave. But you also want the waves to actually move (I assume). For that you have to alter the phase of the wave by rotating its complex coefficient depending on a time variable. Here you want to consider that dispersion stuff which describes the relation of propagation speed to wavelength (low-freq waves travel faster). Also, adding a constant random offset to the phase angle might be a good idea (to break up regularities). Now perform an iFFT and you have got your height field.

If instead of just sine waves you want to to sum Gerstner waves (which you totally want) you have some extra work to do. Basically you need two more textures + iFFTs to compute a horizontal offset vector in addition to the scalar height offset you already calculated (if I remember correctly the paper mentions something of multiplication with i in this context - this is really just a 90° rotation of the phase angle, nothing fancy).

To ensure your FFT works correctly you could try to reproduce the low-pass filter results from the Fourier Transform section of this talk: http://www.slideshare.net/TexelTiny/phase-preserving-denoising-of-images

It might also help if you could show us your frequency space results.

This topic is closed to new replies.

Advertisement