public void GenerateWorldLayerZooplanktonGenomeMutationOptions() { for (int j = 0; j < zooplanktonSlotGenomeMutations.Length; j++) { float jLerp = Mathf.Clamp01((float)j / 3f + 0.015f); jLerp = jLerp * jLerp; WorldLayerZooplanktonGenome mutatedGenome = new WorldLayerZooplanktonGenome(); Vector4 randColor = Random.ColorHSV(); Vector4 col = zooplanktonSlotGenomeCurrent.representativeData.color; col = Vector4.Lerp(col, randColor, jLerp); mutatedGenome.representativeData = zooplanktonSlotGenomeCurrent.representativeData; mutatedGenome.representativeData.color = col; mutatedGenome.swimSpeed01 = Mathf.Lerp(0f, 1f, Random.Range(0f, 1f)); mutatedGenome.swimSpeed01 = Mathf.Lerp(zooplanktonSlotGenomeCurrent.swimSpeed01, mutatedGenome.swimSpeed01, jLerp); mutatedGenome.agingRate01 = Mathf.Lerp(0f, 1f, Random.Range(0f, 1f)); mutatedGenome.agingRate01 = Mathf.Lerp(zooplanktonSlotGenomeCurrent.agingRate01, mutatedGenome.agingRate01, jLerp); mutatedGenome.attractForce01 = Mathf.Lerp(0f, 1f, Random.Range(0f, 1f)); mutatedGenome.attractForce01 = Mathf.Lerp(zooplanktonSlotGenomeCurrent.attractForce01, mutatedGenome.attractForce01, jLerp); mutatedGenome.name = zooplanktonSlotGenomeCurrent.name; mutatedGenome.textDescriptionMutation = "Swim Speed: " + mutatedGenome.swimSpeed01.ToString("F2") + "\nAging Rate: " + mutatedGenome.agingRate01.ToString("F2") + "\nAttraction: " + mutatedGenome.attractForce01.ToString("F2"); zooplanktonSlotGenomeMutations[j] = mutatedGenome; } }
public void InitializeAnimalParticles(int numAgents, ComputeShader computeShader) { //float startTime = Time.realtimeSinceStartup; //Debug.Log((Time.realtimeSinceStartup - startTime).ToString()); computeShaderAnimalParticles = computeShader; animalParticlesCBuffer = new ComputeBuffer(numAnimalParticles, GetAnimalParticleDataSize()); animalParticlesCBufferSwap = new ComputeBuffer(numAnimalParticles, GetAnimalParticleDataSize()); AnimalParticleData[] animalParticlesArray = new AnimalParticleData[numAnimalParticles]; float minParticleSize = 1f; // settingsRef.avgAnimalParticleRadius / settingsRef.animalParticleRadiusVariance; float maxParticleSize = 2f; // settingsRef.avgAnimalParticleRadius * settingsRef.animalParticleRadiusVariance; for (int i = 0; i < animalParticlesCBuffer.count; i++) { AnimalParticleData data = new AnimalParticleData(); data.index = i; data.worldPos = Vector3.zero; // new Vector3(UnityEngine.Random.Range(0f, SimulationManager._MapSize), UnityEngine.Random.Range(0f, SimulationManager._MapSize), 0f); data.radius = Random.Range(minParticleSize, maxParticleSize); // obsolete! data.biomass = 0.001f; // data.radius * data.radius * Mathf.PI; // * settingsRef.animalParticleNutrientDensity; data.isActive = 0f; data.isDecaying = 0f; data.age = 0f; // UnityEngine.Random.Range(1f, 2f); data.color = Random.ColorHSV(); data.genomeVector = Vector4.zero; data.extra0 = 0f; data.energy = 0f; animalParticlesArray[i] = data; } //Debug.Log("Fill Initial Particle Array Data CPU: " + (Time.realtimeSinceStartup - startTime).ToString()); animalParticlesCBuffer.SetData(animalParticlesArray); animalParticlesCBufferSwap.SetData(animalParticlesArray); //Debug.Log("Set Data GPU: " + (Time.realtimeSinceStartup - startTime).ToString()); /* * animalParticlesNearestCritters1024 = new RenderTexture(numAnimalParticles, numAgents, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); * animalParticlesNearestCritters1024.wrapMode = TextureWrapMode.Clamp; * animalParticlesNearestCritters1024.filterMode = FilterMode.Point; * animalParticlesNearestCritters1024.enableRandomWrite = true; * animalParticlesNearestCritters1024.Create(); // actually creates the renderTexture -- don't forget this!!!!! *** * //Debug.Log("Create RT 1024: " + (Time.realtimeSinceStartup - startTime).ToString()); * animalParticlesNearestCritters32 = new RenderTexture(32, numAgents, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); * animalParticlesNearestCritters32.wrapMode = TextureWrapMode.Clamp; * animalParticlesNearestCritters32.filterMode = FilterMode.Point; * animalParticlesNearestCritters32.enableRandomWrite = true; * animalParticlesNearestCritters32.Create(); // actually creates the renderTexture -- don't forget this!!!!! *** * //Debug.Log("Create RT 32: " + (Time.realtimeSinceStartup - startTime).ToString()); * animalParticlesNearestCritters1 = new RenderTexture(1, numAgents, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); * animalParticlesNearestCritters1.wrapMode = TextureWrapMode.Clamp; * animalParticlesNearestCritters1.filterMode = FilterMode.Point; * animalParticlesNearestCritters1.enableRandomWrite = true; * animalParticlesNearestCritters1.Create(); // actually creates the renderTexture -- don't forget this!!!!! *** */ //Debug.Log("Pre Buffer Creation: " + (Time.realtimeSinceStartup - startTime).ToString()); closestAnimalParticlesDataArray = new AnimalParticleData[numAgents]; closestAnimalParticlesDataCBuffer = new ComputeBuffer(numAgents, GetAnimalParticleDataSize()); animalParticlesEatAmountsCBuffer = new ComputeBuffer(numAgents, sizeof(float) * 1); animalParticlesEatAmountsArray = new float[numAgents]; animalParticleMeasurementTotalsData = new AnimalParticleData[1]; animalParticlesMeasure32 = new ComputeBuffer(32, GetAnimalParticleDataSize()); animalParticlesMeasure1 = new ComputeBuffer(1, GetAnimalParticleDataSize()); //Debug.Log("End: " + (Time.realtimeSinceStartup - startTime).ToString()); critterNearestZooplankton32 = new RenderTexture(32, numAgents, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); critterNearestZooplankton32.wrapMode = TextureWrapMode.Clamp; critterNearestZooplankton32.filterMode = FilterMode.Point; critterNearestZooplankton32.enableRandomWrite = true; critterNearestZooplankton32.Create(); closestZooplanktonDistancesCBuffer = new ComputeBuffer(numAgents, sizeof(float) * 4); closestZooplanktonArray = new Vector4[numAgents]; cursorClosestParticleDataCBuffer = new ComputeBuffer(2, GetAnimalParticleDataSize()); // 0 = selected, 1 = closest to cursor cursorParticleDataArray = new AnimalParticleData[2]; cursorDistances1024 = new ComputeBuffer(1024, sizeof(float) * 4); int numMutations = 4; // don't change this zooplanktonSlotGenomeCurrent = new WorldLayerZooplanktonGenome(); zooplanktonSlotGenomeCurrent.representativeData = animalParticlesArray[0]; zooplanktonSlotGenomeCurrent.swimSpeed01 = 0.5f; zooplanktonSlotGenomeCurrent.agingRate01 = 0.5f; zooplanktonSlotGenomeCurrent.attractForce01 = 0.5f; zooplanktonSlotGenomeCurrent.name = "Zooplankton, Bebe!"; zooplanktonSlotGenomeCurrent.textDescriptionMutation = "Swim Speed: " + zooplanktonSlotGenomeCurrent.swimSpeed01.ToString("F2") + "\nAging Rate: " + zooplanktonSlotGenomeCurrent.agingRate01.ToString("F2") + "\nAttraction: " + zooplanktonSlotGenomeCurrent.attractForce01.ToString("F2"); zooplanktonSlotGenomeMutations = new WorldLayerZooplanktonGenome[numMutations]; GenerateWorldLayerZooplanktonGenomeMutationOptions(); zooplanktonRepresentativeGenomeCBuffer = new ComputeBuffer(1, GetAnimalParticleDataSize()); AnimalParticleData[] zooplanktonRepresentativeGenomeArray = new AnimalParticleData[1]; zooplanktonRepresentativeGenomeArray[0] = zooplanktonSlotGenomeCurrent.representativeData; zooplanktonRepresentativeGenomeCBuffer.SetData(zooplanktonRepresentativeGenomeArray); }