Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
	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);
				
	}