I am interstring in the creation 3D wind field for my falling snow scene using DirectX. After learning different approaches, I came to a conclusion to use the following method because of the detailed description and good computational complexity as well. The study is quite big, but actually, looking upon sections 2.3, 2.4, 3.5, and 5.4 may be enough.
The bottom line is to construct wind power spectrums for each wind direction and apply inverse Fourier transform based on the dimension of the simulated wind field for each wind component: diagram.
Implementation steps:
- Step 1: Determine characteristics of wind fields by defining wind parameters such as mean wind speed $U(z)$ at the given height $z$ and the terrain roughness $z_0$.
- Step 2: Calculate friction force using Equation 3.2.
- Step 3: Calculate parameter values of $A_u$, $A_v$, and $A_w$, as defined in Chapter 5.4.2, for each wind velocity component.
- Step 4: Select parameter $\beta$ as $5.0/3.0$ according to Kolmogorov’s law applied in the along-mean-wind direction.
- Step 5: Construct wind power spectrums $S_u$, $S_v$, $S_w$ for each wind direction according to Equations 5.6, 5.8, and 5.9.
- Step 6: Apply inverse Fourier transform based on the dimension of thesimulated wind field for each wind component: $IFFTnD(S_u)$, $IFFTnD(S_v)$, $IFFTnD(S_w)$
Despite the in-depth description of the model, I am not sure that understand some fundamental ideas:
Question 1
According to diagram, we got a 3D wind field for the giving height ($z$, $U(z)$). Does it mean that I can choose some base height $z_{base}$ and construct the frozen-wind model once only for my scene?
Question 2
What is the output of the $IFFT$ operation? Am I right that $IFFTnD(S_u)$ gives a function that returns a velocity value along the $u$ axis for point coordinate?
Question 3
In this paper, $1/f^{\beta}$ noise is generated using "Fourier filtering". In fairness, I have not learned this part of study properly yet, so answer me just if it's obvious for you:
- How the $1/f^{\beta}$ function will look like?
- Is it possible to use another implementation of $1/f^{\beta}$, for example, based on Simplex Noise?
Thanks a lot in advance for your response.
Ok, I've learned the issue and going to try to answer myself. Still glad to get your comments.
Question 1
You (me) totally missed the key idea. Equations 5.9 is evaluating for each point in the N-space. Eventually, you got an nD float array which is input for inverse fast Fourier transform operation.
Question 2
No. The iFFT's input/output is the discrete sets. And yes, every set's value describes turbulence speed components.
Question 3
Actually, no difference in how to implement fBm noise generator.