Seven is the number.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

73 lines
2.6 KiB

using UnityEngine;
using System.Collections;
public class PlanetInit : MonoBehaviour
{
public GameObject m_sun;
public Material m_groundMaterial;
public Material m_skyMaterial;
public float m_hdrExposure = 0.8f;
public Vector3 m_waveLength = new Vector3(0.65f,0.57f,0.475f); // Wave length of sun light
public float m_ESun = 20.0f; // Sun brightness constant
public float m_kr = 0.0025f; // Rayleigh scattering constant
public float m_km = 0.0010f; // Mie scattering constant
public float m_g = -0.990f; // The Mie phase asymmetry factor, must be between 0.999 to -0.999
//Dont change these
private const float m_outerScaleFactor = 1.025f; // Difference between inner and ounter radius. Must be 2.5%
private float m_innerRadius; // Radius of the ground sphere
private float m_outerRadius; // Radius of the sky sphere
private float m_scaleDepth = 0.25f; // The scale depth (i.e. the altitude at which the atmosphere's average density is found)
void Start ()
{
//Get the radius of the sphere. This presumes that the sphere mesh is a unit sphere (radius of 1)
//that has been scaled uniformly on the x, y and z axis
float radius = transform.lossyScale.x;
m_innerRadius = radius;
//The outer sphere must be 2.5% larger that the inner sphere
m_outerRadius = m_outerScaleFactor * radius;
InitMaterial(m_groundMaterial);
InitMaterial(m_skyMaterial);
}
void Update ()
{
InitMaterial(m_groundMaterial);
InitMaterial(m_skyMaterial);
}
void InitMaterial(Material mat)
{
Vector3 invWaveLength4 = new Vector3(1.0f / Mathf.Pow(m_waveLength.x, 4.0f), 1.0f / Mathf.Pow(m_waveLength.y, 4.0f), 1.0f / Mathf.Pow(m_waveLength.z, 4.0f));
float scale = 1.0f / (m_outerRadius - m_innerRadius);
mat.SetVector("v3LightPos", m_sun.transform.forward*-1.0f);
mat.SetVector("v3InvWavelength", invWaveLength4);
mat.SetFloat("fOuterRadius", m_outerRadius);
mat.SetFloat("fOuterRadius2", m_outerRadius*m_outerRadius);
mat.SetFloat("fInnerRadius", m_innerRadius);
mat.SetFloat("fInnerRadius2", m_innerRadius*m_innerRadius);
mat.SetFloat("fKrESun", m_kr*m_ESun);
mat.SetFloat("fKmESun", m_km*m_ESun);
mat.SetFloat("fKr4PI", m_kr*4.0f*Mathf.PI);
mat.SetFloat("fKm4PI", m_km*4.0f*Mathf.PI);
mat.SetFloat("fScale", scale);
mat.SetFloat("fScaleDepth", m_scaleDepth);
mat.SetFloat("fScaleOverScaleDepth", scale/m_scaleDepth);
mat.SetFloat("fHdrExposure", m_hdrExposure);
mat.SetFloat("g", m_g);
mat.SetFloat("g2", m_g*m_g);
mat.SetVector("v3LightPos", m_sun.transform.forward*-1.0f);
mat.SetVector("v3Translate", transform.position);
}
}