public WaveSpectrumCPU(int size, float windSpeed, float waveAmp, float omega, int ansio, Vector4 gridSizes) { if (!Mathf.IsPowerOfTwo(size)) { Debug.Log("Fourier grid size must be pow2 number, changing to nearest pow2 number"); size = Mathf.NextPowerOfTwo(size); } m_size = size; m_waveAmp = waveAmp; m_windSpeed = windSpeed; m_omega = omega; m_gridSizes = gridSizes; m_fsize = (float)m_size; m_mipMapLevels = Mathf.Log(m_fsize) / Mathf.Log(2.0f); float factor = 2.0f * Mathf.PI * m_fsize; m_inverseGridSizes = new Vector4(factor / m_gridSizes.x, factor / m_gridSizes.y, factor / m_gridSizes.z, factor / m_gridSizes.w); m_fourierBuffer0 = new Vector2[2, m_size *m_size]; m_fourierBuffer1 = new Vector4[2, m_size *m_size]; m_fourierBuffer2 = new Vector4[2, m_size *m_size]; m_result0 = new Color[m_size * m_size]; m_result1 = new Color[m_size * m_size]; m_result2 = new Color[m_size * m_size]; m_fourier = new FourierCPU(m_size); m_map0 = new Texture2D(m_size, m_size, TextureFormat.RGBAFloat, true, true); m_map0.wrapMode = TextureWrapMode.Repeat; m_map0.filterMode = FilterMode.Trilinear; m_map0.anisoLevel = ansio; m_map1 = new Texture2D(m_size, m_size, TextureFormat.RGBAFloat, true, true); m_map1.wrapMode = TextureWrapMode.Repeat; m_map1.filterMode = FilterMode.Trilinear; m_map1.anisoLevel = ansio; m_map2 = new Texture2D(m_size, m_size, TextureFormat.RGBAFloat, true, true); m_map2.wrapMode = TextureWrapMode.Repeat; m_map2.filterMode = FilterMode.Trilinear; m_map2.anisoLevel = ansio; GenerateWavesSpectrum(); CreateWTabele(); }
public WaveSpectrumCPU(int size, float windSpeed, float waveAmp, float omega, int ansio, Vector4 gridSizes) { if (!Mathf.IsPowerOfTwo(size)) { Debug.Log("Fourier grid size must be pow2 number, changing to nearest pow2 number"); size = Mathf.NextPowerOfTwo(size); } //These are the recommend limits of wind speed and wave age. //If you exceed them you may see artifacts or objects not floating at wave height if (windSpeed > 8.0f) { Debug.Log("Wind speed must be <= 8.0, changing to 8.0"); windSpeed = 8.0f; } if (omega < 0.8f) { Debug.Log("Inverse wave age must be >= 0.8, changing to 0.8"); m_omega = 0.8f; } if (waveAmp < 0.0 || waveAmp > 1.0) { Debug.Log("Wave amp must be between 0 and 1, clamping"); Mathf.Clamp01(waveAmp); } m_size = size; m_waveAmp = waveAmp; m_windSpeed = windSpeed; m_omega = omega; m_gridSizes = gridSizes; m_fsize = (float)m_size; m_mipMapLevels = Mathf.Log(m_fsize) / Mathf.Log(2.0f); float factor = 2.0f * Mathf.PI * m_fsize; m_inverseGridSizes = new Vector4(factor / m_gridSizes.x, factor / m_gridSizes.y, factor / m_gridSizes.z, factor / m_gridSizes.w); m_fourierBuffer0 = new Vector2[2, m_size * m_size]; m_fourierBuffer1 = new Vector4[2, m_size * m_size]; m_fourierBuffer2 = new Vector4[2, m_size * m_size]; m_result0 = new Color[m_size * m_size]; m_result1 = new Color[m_size * m_size]; m_result2 = new Color[m_size * m_size]; m_fourier = new FourierCPU(m_size); m_map0 = new Texture2D(m_size, m_size, TextureFormat.RGB24, true, true); m_map0.wrapMode = TextureWrapMode.Repeat; m_map0.filterMode = FilterMode.Trilinear; m_map0.anisoLevel = ansio; m_map1 = new Texture2D(m_size, m_size, TextureFormat.ARGB32, true, true); m_map1.wrapMode = TextureWrapMode.Repeat; m_map1.filterMode = FilterMode.Trilinear; m_map1.anisoLevel = ansio; m_map2 = new Texture2D(m_size, m_size, TextureFormat.ARGB32, true, true); m_map2.wrapMode = TextureWrapMode.Repeat; m_map2.filterMode = FilterMode.Trilinear; m_map2.anisoLevel = ansio; GenerateWavesSpectrum(); CreateWTabele(); }
public WaveSpectrumCPU(int size, float windSpeed, float waveAmp, float omega, int ansio, Vector4 gridSizes) { if (!Mathf.IsPowerOfTwo(size)) { Debug.Log("Fourier grid size must be pow2 number, changing to nearest pow2 number"); size = Mathf.NextPowerOfTwo(size); } m_size = size; m_waveAmp = waveAmp; m_windSpeed = windSpeed; m_omega = omega; m_gridSizes = gridSizes; m_fsize = (float)m_size; m_mipMapLevels = Mathf.Log(m_fsize) / Mathf.Log(2.0f); float factor = 2.0f * Mathf.PI * m_fsize; m_inverseGridSizes = new Vector4(factor / m_gridSizes.x, factor / m_gridSizes.y, factor / m_gridSizes.z, factor / m_gridSizes.w); m_fourierBuffer0 = new Vector2[2, m_size * m_size]; m_fourierBuffer1 = new Vector4[2, m_size * m_size]; m_fourierBuffer2 = new Vector4[2, m_size * m_size]; m_result0 = new Color[m_size * m_size]; m_result1 = new Color[m_size * m_size]; m_result2 = new Color[m_size * m_size]; m_fourier = new FourierCPU(m_size); m_map0 = new Texture2D(m_size, m_size, TextureFormat.RGBAFloat, true, true); m_map0.wrapMode = TextureWrapMode.Repeat; m_map0.filterMode = FilterMode.Trilinear; m_map0.anisoLevel = ansio; m_map1 = new Texture2D(m_size, m_size, TextureFormat.RGBAFloat, true, true); m_map1.wrapMode = TextureWrapMode.Repeat; m_map1.filterMode = FilterMode.Trilinear; m_map1.anisoLevel = ansio; m_map2 = new Texture2D(m_size, m_size, TextureFormat.RGBAFloat, true, true); m_map2.wrapMode = TextureWrapMode.Repeat; m_map2.filterMode = FilterMode.Trilinear; m_map2.anisoLevel = ansio; GenerateWavesSpectrum(); CreateWTabele(); }