public void Apply(CloudsMaterial material, float radius, Transform parent) { Remove(); particleMaterial.MaxScale = size.y; particleMaterial.MaxTrans = maxTranslation; particleMaterial.NoiseScale = new Vector3(noiseScale.x, noiseScale.y, noiseScale.z / radius); ParticleMaterial = new Material(ParticleCloudShader); particleMaterial.ApplyMaterialProperties(ParticleMaterial); material.ApplyMaterialProperties(ParticleMaterial); ParticleMaterial.EnableKeyword("SOFT_DEPTH_ON"); volumeHolder = new GameObject(); //Add the renderer here so othe rentities (shadows) //can easily access it. Renderer r = volumeHolder.AddComponent <MeshRenderer>(); r.material = ParticleMaterial; ParticleMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); ParticleMaterial.renderQueue = (int)Tools.Queue.Transparent + 2; r.enabled = false; volumeHolder.transform.parent = parent; volumeHolder.transform.localPosition = Vector3.zero; volumeHolder.transform.localScale = Vector3.one; volumeHolder.transform.localRotation = Quaternion.identity; volumeHolder.layer = (int)Tools.Layer.Local; volumeManager = new VolumeManager(radius, size, ParticleMaterial, volumeHolder.transform, area.x, (int)area.y); }
public void Apply(CloudsMaterial material, float radius, Transform parent) { Remove(); particleMaterial.MaxScale = size.y; particleMaterial.MaxTrans = maxTranslation; particleMaterial.NoiseScale = new Vector3(noiseScale.x, noiseScale.y, noiseScale.z / radius); ParticleMaterial = new Material(ParticleCloudShader); particleMaterial.ApplyMaterialProperties(ParticleMaterial); material.ApplyMaterialProperties(ParticleMaterial); ParticleMaterial.EnableKeyword("SOFT_DEPTH_ON"); volumeHolder = new GameObject(); //Add the renderer here so othe rentities (shadows) //can easily access it. Renderer r = volumeHolder.AddComponent<MeshRenderer>(); r.material = ParticleMaterial; ParticleMaterial.SetMatrix(ShaderProperties._ShadowBodies_PROPERTY, Matrix4x4.zero); ParticleMaterial.renderQueue = (int)Tools.Queue.Transparent + 2; r.enabled = false; volumeHolder.transform.parent = parent; volumeHolder.transform.localPosition = Vector3.zero; volumeHolder.transform.localScale = Vector3.one; volumeHolder.transform.localRotation = Quaternion.identity; volumeHolder.layer = (int)Tools.Layer.Local; volumeManager = new VolumeManager(radius, size, ParticleMaterial, volumeHolder.transform, area.x, (int)area.y); }
public void Reassign(Tools.Layer layer, Transform parent, float worldScale) { CloudMesh.transform.parent = parent; CloudMesh.transform.localPosition = Vector3.zero; float localScale; if (isMainMenu) { localScale = worldScale * 10f; } else { localScale = (worldScale / parent.lossyScale.x); } CloudMesh.transform.localScale = (Vector3.one) * localScale; CloudMesh.layer = (int)layer; float radiusScaleWorld = radius * worldScale; radiusScaleLocal = radius * localScale; macroCloudMaterial.ApplyMaterialProperties(CloudMaterial, worldScale); cloudsMat.ApplyMaterialProperties(CloudMaterial, worldScale); if (layer == Tools.Layer.Local) { Sunlight = Sun.Instance.GetComponent <Light>(); CloudMaterial.SetFloat("_OceanRadius", (float)celestialBody.Radius * worldScale); CloudMaterial.EnableKeyword("WORLD_SPACE_ON"); CloudMaterial.EnableKeyword("SOFT_DEPTH_ON"); CloudMaterial.renderQueue = (int)Tools.Queue.Transparent + 2; } else { //hack to get protected variable FieldInfo field = typeof(Sun).GetFields(BindingFlags.Instance | BindingFlags.NonPublic).First( f => f.Name == "scaledSunLight"); Sunlight = (Light)field.GetValue(Sun.Instance); CloudMaterial.DisableKeyword("WORLD_SPACE_ON"); CloudMaterial.DisableKeyword("SOFT_DEPTH_ON"); CloudMaterial.renderQueue = (int)Tools.Queue.Transparent - 1; } if (isMainMenu) { try { Sunlight = GameObject.FindObjectsOfType <Light>().Last(l => l.isActiveAndEnabled); } catch { } } if (ShadowProjector != null) { float dist = (float)(2 * radiusScaleWorld); ShadowProjector.farClipPlane = dist; ShadowProjector.orthographicSize = radiusScaleWorld; macroCloudMaterial.ApplyMaterialProperties(ShadowProjector.material, worldScale); cloudsMat.ApplyMaterialProperties(ShadowProjector.material, worldScale); ShadowProjector.material.SetFloat("_Radius", (float)radiusScaleLocal); ShadowProjector.material.SetFloat("_PlanetRadius", (float)celestialBody.Radius * worldScale); ShadowProjector.transform.parent = parent; ShadowProjectorGO.layer = (int)layer; if (layer == Tools.Layer.Local) { ShadowProjector.ignoreLayers = ~(Tools.Layer.Default.Mask() | Tools.Layer.TransparentFX.Mask() | Tools.Layer.Water.Mask() | Tools.Layer.Local.Mask() | Tools.Layer.Kerbals.Mask() | Tools.Layer.Parts.Mask()); ShadowProjector.material.EnableKeyword("WORLD_SPACE_ON"); } else { ShadowProjector.ignoreLayers = ~layer.Mask(); ShadowProjector.material.DisableKeyword("WORLD_SPACE_ON"); } } }