//Initialization public void Start() { m_radius = m_manager.GetRadius(); Rt = (Rt / Rg) * m_radius; RL = (RL / Rg) * m_radius; Rg = m_radius; m_mesh = MeshFactory.MakePlane(2, 2, MeshFactory.PLANE.XY, false, false); m_mesh.bounds = new Bounds(parentCelestialBody.transform.position, new Vector3(1e8f, 1e8f, 1e8f)); //Inscatter is responsible for the change in the sky color as the sun moves //The raw file is a 4D array of 32 bit floats with a range of 0 to 1.589844 //As there is not such thing as a 4D texture the data is packed into a 3D texture //and the shader manually performs the sample for the 4th dimension m_inscatter = new RenderTexture(RES_MU_S * RES_NU, RES_MU * RES_R, 0, RenderTextureFormat.ARGBHalf); m_inscatter.wrapMode = TextureWrapMode.Clamp; m_inscatter.filterMode = FilterMode.Bilinear; //Transmittance is responsible for the change in the sun color as it moves //The raw file is a 2D array of 32 bit floats with a range of 0 to 1 m_transmit = new RenderTexture(TRANSMITTANCE_W, TRANSMITTANCE_H, 0, RenderTextureFormat.ARGBHalf); m_transmit.wrapMode = TextureWrapMode.Clamp; m_transmit.filterMode = FilterMode.Bilinear; //Irradiance is responsible for the change in the sky color as the sun moves //The raw file is a 2D array of 32 bit floats with a range of 0 to 1 m_irradiance = new RenderTexture(SKY_W, SKY_H, 0, RenderTextureFormat.ARGBHalf); m_irradiance.wrapMode = TextureWrapMode.Clamp; m_irradiance.filterMode = FilterMode.Bilinear; initiateOrRestart(); m_skyMaterialScaled = new Material(ShaderTool.GetMatFromShader2("CompiledSkyScaled.shader")); m_skyMaterialScaled.renderQueue = 2004; m_skyExtinction = new Material(ShaderTool.GetMatFromShader2("CompiledSkyExtinction.shader")); m_skyExtinction.renderQueue = 2002; sunGlare = new Texture2D(512, 512); black = new Texture2D(512, 512); // string codeBase = Assembly.GetExecutingAssembly().CodeBase; // UriBuilder uri = new UriBuilder(codeBase); // path = Uri.UnescapeDataString(uri.Path); // path=Path.GetDirectoryName (path); path = m_manager.GetCore().path; sunGlare.LoadImage(System.IO.File.ReadAllBytes(String.Format("{0}/{1}", path + "/config/" + parentCelestialBody.name + m_filePath, "sunglare.png"))); black.LoadImage(System.IO.File.ReadAllBytes(String.Format("{0}/{1}", path + "/config/" + parentCelestialBody.name + m_filePath, "black.png"))); sunGlare.wrapMode = TextureWrapMode.Clamp; m_skyMaterialScaled.SetTexture("_Sun_Glare", sunGlare); InitUniforms(m_skyMaterialScaled); InitUniforms(m_skyExtinction); m_atmosphereMaterial = ShaderTool.GetMatFromShader2("CompiledAtmosphericScatter.shader"); CurrentPQS = parentCelestialBody.pqsController; testPQS = parentCelestialBody.pqsController; for (int j = 0; j < 10; j++) { debugSettings[j] = true; } for (int j = 0; j < 10; j++) { additionalScales[j] = 1f; } skyObject = new GameObject(); skyMF = skyObject.AddComponent < MeshFilter > (); Mesh idmesh = skyMF.mesh; idmesh.Clear(); idmesh = m_mesh; // skyObject.layer = layer; // celestialTransform = ScaledSpace.Instance.scaledSpaceTransforms.Single(t => t.name == parentCelestialBody.name); celestialTransform = ParentPlanetTransform; // skyObject.transform.parent = parentCelestialBody.transform; skyObject.transform.parent = celestialTransform; skyMR = skyObject.AddComponent < MeshRenderer > (); skyMR.sharedMaterial = m_skyMaterialScaled; skyMR.material = m_skyMaterialScaled; skyMR.castShadows = false; skyMR.receiveShadows = false; ///same for skyextinct skyExtinctObject = new GameObject(); skyExtinctMF = skyExtinctObject.AddComponent < MeshFilter > (); idmesh = skyExtinctMF.mesh; idmesh.Clear(); idmesh = m_mesh; // skyExtinctObject.layer = layer; skyExtinctObject.transform.parent = celestialTransform; skyExtinctMR = skyExtinctObject.AddComponent < MeshRenderer > (); skyExtinctMR.sharedMaterial = m_skyExtinction; skyExtinctMR.material = m_skyExtinction; skyExtinctMR.castShadows = false; skyExtinctMR.receiveShadows = false; hp = new SimplePostProcessCube(10000, m_atmosphereMaterial); atmosphereMesh = hp.GameObject; atmosphereMesh.layer = 15; atmosphereMeshrenderer = hp.GameObject.GetComponent < MeshRenderer > (); atmosphereMeshrenderer.material = m_atmosphereMaterial; celestialBodies = (CelestialBody[]) CelestialBody.FindObjectsOfType(typeof(CelestialBody)); }
//Initialization public void Start() { m_radius=m_manager.GetRadius(); Rt = (Rt / Rg) * m_radius; RL = (RL / Rg) * m_radius; Rg = m_radius; // old mesh, causes artifacts with aniso in dx9 // m_mesh = MeshFactory.MakePlane(2, 2, MeshFactory.PLANE.XY, false,false); // m_mesh.bounds = new Bounds(parentCelestialBody.transform.position, new Vector3(1e8f,1e8f, 1e8f)); m_mesh = isoSphere.Create (); m_mesh.bounds = new Bounds(parentCelestialBody.transform.position, new Vector3(1e8f,1e8f, 1e8f)); //The sky map is used to create a reflection of the sky for objects that need it (like the ocean) // m_skyMap = new RenderTexture(512, 512, 0, RenderTextureFormat.ARGBHalf); // m_skyMap.filterMode = FilterMode.Trilinear; // m_skyMap.wrapMode = TextureWrapMode.Clamp; // m_skyMap.anisoLevel = 9; // m_skyMap.useMipMap = true; // //m_skyMap.mipMapBias = -0.5f; // m_skyMap.Create(); //Inscatter is responsible for the change in the sky color as the sun moves //The raw file is a 4D array of 32 bit floats with a range of 0 to 1.589844 //As there is not such thing as a 4D texture the data is packed into a 3D texture //and the shader manually performs the sample for the 4th dimension m_inscatter = new RenderTexture(RES_MU_S * RES_NU, RES_MU * RES_R, 0, RenderTextureFormat.ARGBHalf); m_inscatter.wrapMode = TextureWrapMode.Clamp; m_inscatter.filterMode = FilterMode.Bilinear; //Transmittance is responsible for the change in the sun color as it moves //The raw file is a 2D array of 32 bit floats with a range of 0 to 1 m_transmit = new RenderTexture(TRANSMITTANCE_W, TRANSMITTANCE_H, 0, RenderTextureFormat.ARGBHalf); m_transmit.wrapMode = TextureWrapMode.Clamp; m_transmit.filterMode = FilterMode.Bilinear; //Irradiance is responsible for the change in the sky color as the sun moves //The raw file is a 2D array of 32 bit floats with a range of 0 to 1 m_irradiance = new RenderTexture(SKY_W, SKY_H, 0, RenderTextureFormat.ARGBHalf); m_irradiance.wrapMode = TextureWrapMode.Clamp; m_irradiance.filterMode = FilterMode.Bilinear; initiateOrRestart (); m_skyMaterialScaled=new Material(ShaderTool.GetMatFromShader2("CompiledSkyScaled.shader")); m_skyMaterialScaled.renderQueue = 2003; sunGlare = new Texture2D (512, 512); black = new Texture2D (512, 512); string codeBase = Assembly.GetExecutingAssembly().CodeBase; UriBuilder uri = new UriBuilder(codeBase); path = Uri.UnescapeDataString(uri.Path); path=Path.GetDirectoryName (path); sunGlare.LoadImage(System.IO.File.ReadAllBytes(String.Format("{0}/{1}", path + m_filePath, "sunglare.png"))); black.LoadImage(System.IO.File.ReadAllBytes(String.Format("{0}/{1}", path + m_filePath, "black.png"))); sunGlare.wrapMode = TextureWrapMode.Clamp; m_skyMaterialScaled.SetTexture("_Sun_Glare", sunGlare); InitUniforms(m_skyMaterialScaled); // InitUniforms(m_skyMapMaterial); m_atmosphereMaterial = ShaderTool.GetMatFromShader2 ("CompiledAtmosphericScatter.shader"); if (forceOFFaniso) { QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable; } else { QualitySettings.anisotropicFiltering = AnisotropicFiltering.ForceEnable; } CurrentPQS = parentCelestialBody.pqsController; testPQS = parentCelestialBody.pqsController; for (int j=0; j<10; j++) { debugSettings[j]=true; } for (int j=0; j<10; j++) { additionalScales[j]=1f; } tester = new GameObject (); MF = tester.AddComponent<MeshFilter>(); Mesh idmesh = MF.mesh; idmesh.Clear (); idmesh = m_mesh; // tester.layer = layer; celestialTransform = ScaledSpace.Instance.scaledSpaceTransforms.Single(t => t.name == parentCelestialBody.name); // tester.transform.parent = parentCelestialBody.transform; tester.transform.parent = celestialTransform; MR = tester.AddComponent<MeshRenderer>(); MR.sharedMaterial = m_skyMaterialScaled; MR.material =m_skyMaterialScaled; MR.castShadows = false; MR.receiveShadows = false; // tester.transform.localPosition = Vector3.zero; // tester.transform.localRotation = Quaternion.identity; // tester.transform.localScale = Vector3.one; // MR.enabled = true; // pSystemBodies = (PSystemBody[])UnityEngine.Object.FindObjectsOfType(typeof(PSystemBody)); // print ("NUMBER FOUND"); // print (pSystemBodies.Length); // // kerbinPsystemBody=ScaledSpace.Instance.transform.FindChild("Kerbin").gameObject.GetComponentInChildren<ScaledSpaceFader>(); // // if (kerbinPsystemBody == null) { // print ("NULL"); // } // else{ // print ("NOT NULL"); // print("fadeStart"); // // print(kerbinPsystemBody.fadeStart); // // print("fadeEnd"); // // print(kerbinPsystemBody.fadeEnd); // // // } hp = new SimplePostProcessCube (1000, m_atmosphereMaterial); atmosphereMesh = hp.GameObject; atmosphereMesh.layer = 15; atmosphereMeshrenderer = hp.GameObject.GetComponent<MeshRenderer>(); atmosphereMeshrenderer.material = m_atmosphereMaterial; celestialBodies = (CelestialBody[])CelestialBody.FindObjectsOfType(typeof(CelestialBody)); }