public void SetType(FbmType type) { switch (type) { case FbmType.None: CurrentTechnique = Techniques["Single"]; break; case FbmType.Normal: CurrentTechnique = Techniques["Fbm"]; break; case FbmType.Billowed: CurrentTechnique = Techniques["FbmBillow"]; break; case FbmType.Ridged: CurrentTechnique = Techniques["FbmRidged"]; break; case FbmType.IQ: CurrentTechnique = Techniques["FbmIQ"]; break; case FbmType.Swiss: CurrentTechnique = Techniques["FbmSwiss"]; break; case FbmType.Jordan: CurrentTechnique = Techniques["FbmJordan"]; break; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } }
float[] Get3DNoiseValue(int chanel) { ComputeShader shader; switch (_select3DNoise[chanel]) { case Noise3DType.PerlinNoise: shader = _perlinNoise3DShader; break; case Noise3DType.WorleyNoise: shader = _worleyNoise3DShader; break; case Noise3DType.Perlin_WorleyNoise: shader = _worleyPerlinNoise3DShader; break; default: throw new ArgumentOutOfRangeException(); } FbmType fbm = _selectFbm[chanel]; int size = 128; float[] noise = new float[size * size * size]; ComputeBuffer cb1 = new ComputeBuffer(noise.Length, 4); cb1.SetData(noise); shader.SetFloat("TextureSize", size); shader.SetFloat("NoiseScale", 2 * _noiseScale[chanel]); if (fbm != FbmType.dontuse) { SetFbmProperties(shader, chanel); } int threadGroupsX = Mathf.CeilToInt(size / 8.0f); int threadGroupsY = Mathf.CeilToInt(size / 8.0f); int threadGroupsZ = Mathf.CeilToInt(size / 8.0f); switch (fbm) { case FbmType.dontuse: shader.SetBuffer(0, "Result", cb1); shader.Dispatch(0, threadGroupsX, threadGroupsY, threadGroupsZ); break; case FbmType.standard: shader.SetBuffer(1, "Result", cb1); shader.Dispatch(1, threadGroupsX, threadGroupsY, threadGroupsZ); break; case FbmType.turbulence: shader.SetBuffer(2, "Result", cb1); shader.Dispatch(2, threadGroupsX, threadGroupsY, threadGroupsZ); break; case FbmType.ridge: shader.SetBuffer(3, "Result", cb1); shader.Dispatch(3, threadGroupsX, threadGroupsY, threadGroupsZ); break; default: throw new ArgumentOutOfRangeException("fbm", fbm, null); } cb1.GetData(noise); cb1.Release(); Update3DPerview(size, chanel, noise); return(noise); }