private void SetWaves() { SetupWaves(surfaceData._customWaves); // set default resources Shader.SetGlobalTexture(FoamMap, resources.defaultFoamMap); Shader.SetGlobalTexture(SurfaceMap, resources.defaultSurfaceMap); _maxWaveHeight = 0f; foreach (var w in _waves) { _maxWaveHeight += w.amplitude; } _maxWaveHeight /= _waves.Length; _waveHeight = transform.position.y; Shader.SetGlobalFloat(WaveHeight, _waveHeight); Shader.SetGlobalFloat(MaxWaveHeight, _maxWaveHeight); Shader.SetGlobalFloat(MaxDepth, surfaceData._waterMaxVisibility); switch (settingsData.refType) { case ReflectionType.Cubemap: Shader.EnableKeyword("_REFLECTION_CUBEMAP"); Shader.DisableKeyword("_REFLECTION_PROBES"); Shader.DisableKeyword("_REFLECTION_PLANARREFLECTION"); Shader.SetGlobalTexture(CubemapTexture, settingsData.cubemapRefType); break; case ReflectionType.ReflectionProbe: Shader.DisableKeyword("_REFLECTION_CUBEMAP"); Shader.EnableKeyword("_REFLECTION_PROBES"); Shader.DisableKeyword("_REFLECTION_PLANARREFLECTION"); break; case ReflectionType.PlanarReflection: Shader.DisableKeyword("_REFLECTION_CUBEMAP"); Shader.DisableKeyword("_REFLECTION_PROBES"); Shader.EnableKeyword("_REFLECTION_PLANARREFLECTION"); break; default: throw new ArgumentOutOfRangeException(); } Shader.SetGlobalInt(WaveCount, _waves.Length); //GPU side if (_useComputeBuffer) { Shader.EnableKeyword("USE_STRUCTURED_BUFFER"); if (waveBuffer == null) { waveBuffer = new ComputeBuffer(10, (sizeof(float) * 6)); } waveBuffer.SetData(_waves); Shader.SetGlobalBuffer(WaveDataBuffer, waveBuffer); } else { Shader.DisableKeyword("USE_STRUCTURED_BUFFER"); Shader.SetGlobalVectorArray(WaveData, GetWaveData()); } //CPU side if (GerstnerWavesJobs.Initialized == false && Application.isPlaying) { GerstnerWavesJobs.Init(); } }
void SetWaves() { SetupWaves(surfaceData._customWaves); // set default resources Shader.SetGlobalTexture("_FoamMap", resources.defaultFoamMap); Shader.SetGlobalTexture("_SurfaceMap", resources.defaultSurfaceMap); _maxWaveHeight = 0f; foreach (Wave w in _waves) { _maxWaveHeight += w.amplitude; } _maxWaveHeight /= (float)_waves.Length; Shader.SetGlobalFloat("_MaxWaveHeight", _maxWaveHeight); Shader.SetGlobalFloat("_MaxDepth", surfaceData._waterMaxVisibility); switch (settingsData.refType) { case ReflectionType.Cubemap: Shader.EnableKeyword("_REFLECTION_CUBEMAP"); Shader.DisableKeyword("_REFLECTION_PROBES"); Shader.DisableKeyword("_REFLECTION_PLANARREFLECTION"); Shader.SetGlobalTexture("_CubemapTexture", settingsData.cubemapRefType); break; case ReflectionType.ReflectionProbe: Shader.DisableKeyword("_REFLECTION_CUBEMAP"); Shader.EnableKeyword("_REFLECTION_PROBES"); Shader.DisableKeyword("_REFLECTION_PLANARREFLECTION"); break; case ReflectionType.PlanarReflection: Shader.DisableKeyword("_REFLECTION_CUBEMAP"); Shader.DisableKeyword("_REFLECTION_PROBES"); Shader.EnableKeyword("_REFLECTION_PLANARREFLECTION"); break; } Shader.SetGlobalInt("_WaveCount", _waves.Length); //GPU side if (useComputeBuffer) { Shader.EnableKeyword("USE_STRUCTURED_BUFFER"); if (_waveBuffer == null) { _waveBuffer = new ComputeBuffer(10, (sizeof(float) * 6)); } _waveBuffer.SetData(_waves); Shader.SetGlobalBuffer("_WaveDataBuffer", _waveBuffer); } else { Shader.DisableKeyword("USE_STRUCTURED_BUFFER"); Shader.SetGlobalVectorArray("waveData", GetWaveData()); } //CPU side if (GerstnerWavesJobs.init == false && Application.isPlaying) { GerstnerWavesJobs.Init(); } }