Integrated Sebastian Lague's Planet Generator Created Tour function in SectorRenderer which makes the camera follow each terrestrial planet in turn
78 lines
No EOL
2.5 KiB
C#
78 lines
No EOL
2.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
[System.Serializable]
|
|
public class CraterSettings {
|
|
|
|
// Exposed settings
|
|
public bool enabled = true;
|
|
public int craterSeed;
|
|
public int numCraters = 400;
|
|
public Vector2 craterSizeMinMax = new Vector2 (0.01f, 0.1f);
|
|
public float rimSteepness = 0.13f;
|
|
public float rimWidth = 1.6f;
|
|
public Vector2 smoothMinMax = new Vector2 (0.4f, 1.5f);
|
|
[Range (0, 1)]
|
|
public float sizeDistribution = 0.6f;
|
|
|
|
[HideInInspector]
|
|
public Crater[] cachedCraters;
|
|
|
|
// Private
|
|
ComputeBuffer craterBuffer;
|
|
|
|
// Set values using exposed settings
|
|
public void SetComputeValues (ComputeShader computeShader, int masterSeed) {
|
|
SetComputeValues (computeShader, masterSeed, numCraters, craterSizeMinMax, sizeDistribution);
|
|
}
|
|
|
|
// Set values using custom numCraters
|
|
public void SetComputeValues (ComputeShader computeShader, int masterSeed, int numCraters) {
|
|
SetComputeValues (computeShader, masterSeed, numCraters, craterSizeMinMax, sizeDistribution);
|
|
}
|
|
|
|
// Set values using custom numCraters and sizeMinMax
|
|
public void SetComputeValues (ComputeShader computeShader, int masterSeed, int numCraters, Vector2 craterSizeMinMax, float sizeDistribution) {
|
|
if (!enabled) {
|
|
numCraters = 1;
|
|
craterSizeMinMax = Vector2.zero;
|
|
}
|
|
|
|
Random.InitState (craterSeed + masterSeed);
|
|
Crater[] craters = new Crater[numCraters];
|
|
PRNG prng = new PRNG (masterSeed);
|
|
|
|
// Create craters
|
|
for (int i = 0; i < numCraters; i++) {
|
|
float t = prng.ValueBiasLower (sizeDistribution);
|
|
|
|
float size = Mathf.Lerp (craterSizeMinMax.x, craterSizeMinMax.y, t);
|
|
float floorHeight = Mathf.Lerp (-1.2f, -0.2f, t + prng.ValueBiasLower (0.3f));
|
|
float smooth = Mathf.Lerp (smoothMinMax.x, smoothMinMax.y, 1 - t);
|
|
craters[i] = new Crater () { centre = Random.onUnitSphere, size = size, floorHeight = floorHeight, smoothness = smooth };
|
|
}
|
|
cachedCraters = craters;
|
|
|
|
// Set shape data
|
|
ComputeHelper.CreateAndSetBuffer<Crater> (ref craterBuffer, craters, computeShader, "craters");
|
|
computeShader.SetInt ("numCraters", numCraters);
|
|
|
|
computeShader.SetFloat (nameof (rimSteepness), rimSteepness);
|
|
computeShader.SetFloat (nameof (rimWidth), rimWidth);
|
|
//computeShader.SetFloat (nameof (smoothFactor), smoothFactor);
|
|
}
|
|
|
|
public void ReleaseBuffers () {
|
|
ComputeHelper.Release (craterBuffer);
|
|
}
|
|
|
|
[System.Serializable]
|
|
public struct Crater {
|
|
public Vector3 centre;
|
|
public float size;
|
|
public float floorHeight;
|
|
public float smoothness;
|
|
}
|
|
|
|
} |