protected override void InitNode() { base.InitNode(); if (FourierGridSize > 256) { Debug.Log("OceanFFT: fourier grid size must not be greater than 256, changing to 256..."); FourierGridSize = 256; } if (!Mathf.IsPowerOfTwo(FourierGridSize)) { Debug.Log("OceanFFT: fourier grid size must be pow2 number, changing to nearest pow2 number..."); FourierGridSize = Mathf.NextPowerOfTwo(FourierGridSize); } if (FourierShader == null) { Debug.Log("OceanFFT: fourier shader is null!"); FourierShader = Shader.Find("Math/Fourier"); } FloatSize = (float)FourierGridSize; Offset = new Vector4(1.0f + 0.5f / FloatSize, 1.0f + 0.5f / FloatSize, 0, 0); float factor = 2.0f * Mathf.PI * FloatSize; InverseGridSizes = new Vector4(factor / GridSizes.x, factor / GridSizes.y, factor / GridSizes.z, factor / GridSizes.w); Fourier = new FourierGPU(FourierGridSize, FourierShader); //Create the data needed to make the waves each frame CreateRenderTextures(); GenerateWavesSpectrum(); CreateWTable(); InitSpectrumMat.SetTexture("_Spectrum01", Spectrum01); InitSpectrumMat.SetTexture("_Spectrum23", Spectrum23); InitSpectrumMat.SetTexture("_WTable", WTable); InitSpectrumMat.SetVector("_Offset", Offset); InitSpectrumMat.SetVector("_InverseGridSizes", InverseGridSizes); InitDisplacementMat.SetVector("_InverseGridSizes", InverseGridSizes); }
public WaveSpectrumGPU(int size, float windSpeed, float waveAmp, float omega, int ansio, Vector4 gridSzes) { if (size > 256) { Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - fourier grid size must not be greater than 256, changing to 256"); size = 256; } if (!Mathf.IsPowerOfTwo(size)) { Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - 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 = gridSzes; m_fsize = (float)m_size; m_mipMapLevels = Mathf.Log(m_fsize) / Mathf.Log(2.0f); m_offset = new Vector4(1.0f + 0.5f / m_fsize, 1.0f + 0.5f / m_fsize, 0, 0); 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_fourier = new FourierGPU(m_size); CreateRenderTextures(ansio); Shader initSpectrumShader = Shader.Find("Ocean/InitSpectrum"); if (initSpectrumShader == null) { Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - Could not find shader Ocean/InitSpectrum"); } m_initSpectrumMat = new Material(initSpectrumShader); }
public override void InitNode() { base.InitNode(); if (InitSpectrumMaterial == null) { Debug.Log("OceanFFT: Init spectrum material is null! Trying to find it out..."); InitSpectrumMaterial = MaterialHelper.CreateTemp(Shader.Find("SpaceEngine/Ocean/InitSpectrum"), "InitSpectrum"); } if (InitDisplacementMaterial == null) { Debug.Log("OceanFFT: Init displacement material is null! Trying to find it out.."); InitDisplacementMaterial = MaterialHelper.CreateTemp(Shader.Find("SpaceEngine/Ocean/InitDisplacement"), "InitDisplacement"); } MapSize = (float)FourierGridSize; Offset = new Vector4(1.0f + 0.5f / MapSize, 1.0f + 0.5f / MapSize, 0, 0); float factor = 2.0f * Mathf.PI * MapSize; InverseGridSizes = new Vector4(factor / GridSizes.x, factor / GridSizes.y, factor / GridSizes.z, factor / GridSizes.w); Fourier = new FourierGPU(FourierGridSize, FourierShader); //Create the data needed to make the waves each frame CreateRenderTextures(); GenerateWavesSpectrum(); CreateWTable(); InitSpectrumMaterial.SetTexture("_Spectrum01", Spectrum01); InitSpectrumMaterial.SetTexture("_Spectrum23", Spectrum23); InitSpectrumMaterial.SetTexture("_WTable", WTable); InitSpectrumMaterial.SetVector("_Offset", Offset); InitSpectrumMaterial.SetVector("_InverseGridSizes", InverseGridSizes); InitDisplacementMaterial.SetVector("_InverseGridSizes", InverseGridSizes); }
public WaveSpectrumGPU(Param param) { if(param.varianceShader == null) { Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - variance compute shader is null"); return; } if(param.size > 256) { Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - fourier grid size must not be greater than 256, changing to 256"); param.size = 256; } if(!Mathf.IsPowerOfTwo(param.size)) { Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - fourier grid size must be pow2 number, changing to nearest pow2 number"); param.size = Mathf.NextPowerOfTwo(param.size); } m_size = param.size; m_waveAmp = param.waveAmp; m_windSpeed = param.windSpeed; m_omega = param.omega; m_varianceShader = param.varianceShader; m_gridSizes = param.gridSizes; m_choppyness = param.choppyness; m_writeData = param.writeData; m_fsize = (float)m_size; m_mipMapLevels = Mathf.Log(m_fsize)/Mathf.Log(2.0f); m_offset = new Vector4(1.0f + 0.5f / m_fsize, 1.0f + 0.5f / m_fsize, 0, 0); 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_fourier = new FourierGPU(m_size); CreateRenderTextures(param.ansio, param.foamAnsio); GenerateWavesSpectrum(); CreateWTable(); Shader initSpectrumShader = Shader.Find("Ocean/InitSpectrum"); if(initSpectrumShader == null) Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - Could not find shader Ocean/InitSpectrum"); m_initSpectrumMat = new Material(initSpectrumShader); Shader initDisplacementShader = Shader.Find("Ocean/InitDisplacement"); if(initDisplacementShader == null) Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - Could not find shader Ocean/InitDisplacement"); m_initDisplacementMat = new Material(initDisplacementShader); Shader initJacobiansShader = Shader.Find("Ocean/InitJacobians"); if(initJacobiansShader == null) Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - Could not find shader Ocean/InitJacobians"); m_initJacobiansMat = new Material(initJacobiansShader); Shader whiteCapsPrecomputeShader = Shader.Find("Ocean/WhiteCapsPrecompute"); if(whiteCapsPrecomputeShader == null) Debug.Log("WaveSpectrumGPU::WaveSpectrumGPU - Could not find shader Ocean/WhiteCapsPrecompute"); m_whiteCapsPrecomputeMat = new Material(whiteCapsPrecomputeShader); m_initSpectrumMat.SetTexture("_Spectrum01", m_spectrum01); m_initSpectrumMat.SetTexture("_Spectrum23", m_spectrum23); m_initSpectrumMat.SetTexture("_WTable", m_WTable); m_initSpectrumMat.SetVector("_Offset", m_offset); m_initSpectrumMat.SetVector("_InverseGridSizes", m_inverseGridSizes); m_initDisplacementMat.SetVector("_InverseGridSizes", m_inverseGridSizes); m_initJacobiansMat.SetTexture("_Spectrum01", m_spectrum01); m_initJacobiansMat.SetTexture("_Spectrum23", m_spectrum23); m_initJacobiansMat.SetTexture("_WTable", m_WTable); m_initJacobiansMat.SetVector("_Offset", m_offset); m_initJacobiansMat.SetVector("_InverseGridSizes", m_inverseGridSizes); }