Пример #1
0
        public void UpdateMaterials()
        {
            CacheTransform();

            if (innerMaterial == null)
            {
                innerMaterial = SgtHelper.CreateTempMaterial("Atmosphere Inner (Generated)", SgtHelper.ShaderNamePrefix + "AtmosphereInner");

                CachedSharedMaterial.Material = innerMaterial;
            }

            if (outerMaterial == null)
            {
                outerMaterial = SgtHelper.CreateTempMaterial("Atmosphere Outer (Generated)", SgtHelper.ShaderNamePrefix + "AtmosphereOuter");

                if (model != null)
                {
                    model.SetMaterial(outerMaterial);
                }
            }

            var color      = SgtHelper.Brighten(Color, Brightness);
            var innerRatio = SgtHelper.Divide(InnerMeshRadius, OuterRadius);

            innerMaterial.renderQueue = outerMaterial.renderQueue = RenderQueue;

            innerMaterial.SetColor(SgtShader._Color, color);
            outerMaterial.SetColor(SgtShader._Color, color);

            innerMaterial.SetTexture(SgtShader._DepthTex, InnerDepthTex);
            outerMaterial.SetTexture(SgtShader._DepthTex, OuterDepthTex);

            innerMaterial.SetFloat(SgtShader._InnerRatio, innerRatio);
            innerMaterial.SetFloat(SgtShader._InnerScale, 1.0f / (1.0f - innerRatio));

            if (OuterSoftness > 0.0f)
            {
                SgtHelper.EnableKeyword("SGT_A", outerMaterial);                 // Softness

                outerMaterial.SetFloat(SgtShader._SoftParticlesFactor, SgtHelper.Reciprocal(OuterSoftness));
            }
            else
            {
                SgtHelper.DisableKeyword("SGT_A", outerMaterial);                 // Softness
            }

            if (Lit == true)
            {
                innerMaterial.SetColor(SgtShader._AmbientColor, AmbientColor);
                outerMaterial.SetColor(SgtShader._AmbientColor, AmbientColor);

                innerMaterial.SetTexture(SgtShader._LightingTex, LightingTex);
                outerMaterial.SetTexture(SgtShader._LightingTex, LightingTex);

                if (Scattering == true)
                {
                    outerMaterial.SetTexture(SgtShader._ScatteringTex, ScatteringTex);
                    outerMaterial.SetFloat(SgtShader._ScatteringMie, ScatteringMie);
                    outerMaterial.SetFloat(SgtShader._ScatteringRayleigh, ScatteringRayleigh);

                    SgtHelper.EnableKeyword("SGT_B", outerMaterial);                     // Scattering

                    if (GroundScattering == true)
                    {
                        innerMaterial.SetTexture(SgtShader._ScatteringTex, ScatteringTex);
                        innerMaterial.SetFloat(SgtShader._ScatteringMie, ScatteringMie);
                        innerMaterial.SetFloat(SgtShader._ScatteringRayleigh, ScatteringRayleigh);

                        SgtHelper.EnableKeyword("SGT_B", innerMaterial);                         // Scattering
                    }
                    else
                    {
                        SgtHelper.DisableKeyword("SGT_B", innerMaterial);                         // Scattering
                    }
                }
                else
                {
                    SgtHelper.DisableKeyword("SGT_B", innerMaterial);                     // Scattering
                    SgtHelper.DisableKeyword("SGT_B", outerMaterial);                     // Scattering
                }
            }
        }
Пример #2
0
        public void UpdateMaterials()
        {
            if (innerMaterial == null)
            {
                innerMaterial = SgtHelper.CreateTempMaterial("Atmosphere Inner (Generated)", SgtHelper.ShaderNamePrefix + "AtmosphereInner");

                CachedSharedMaterial.Material = innerMaterial;
            }

            if (outerMaterial == null)
            {
                outerMaterial = SgtHelper.CreateTempMaterial("Atmosphere Outer (Generated)", SgtHelper.ShaderNamePrefix + "AtmosphereOuter");

                if (model != null)
                {
                    model.SetMaterial(outerMaterial);
                }
            }

            var color = SgtHelper.Brighten(Color, Brightness);

            innerMaterial.renderQueue = outerMaterial.renderQueue = RenderQueue;

            innerMaterial.SetColor("_Color", color);
            outerMaterial.SetColor("_Color", color);

            innerMaterial.SetTexture("_DepthTex", InnerDepthTex);
            outerMaterial.SetTexture("_DepthTex", OuterDepthTex);

            if (Lit == true)
            {
                innerMaterial.SetTexture("_LightingTex", LightingTex);
                outerMaterial.SetTexture("_LightingTex", LightingTex);

                if (Scattering == true)
                {
                    outerMaterial.SetTexture("_ScatteringTex", ScatteringTex);
                    outerMaterial.SetFloat("_ScatteringMie", ScatteringMie);
                    outerMaterial.SetFloat("_ScatteringRayleigh", ScatteringRayleigh);

                    SgtHelper.EnableKeyword("SGT_B", outerMaterial);                     // Scattering

                    if (GroundScattering == true)
                    {
                        innerMaterial.SetTexture("_ScatteringTex", ScatteringTex);
                        innerMaterial.SetFloat("_ScatteringMie", ScatteringMie);
                        innerMaterial.SetFloat("_ScatteringRayleigh", ScatteringRayleigh);

                        SgtHelper.EnableKeyword("SGT_B", innerMaterial);                         // Scattering
                    }
                    else
                    {
                        SgtHelper.DisableKeyword("SGT_B", innerMaterial);                         // Scattering
                    }
                }
                else
                {
                    SgtHelper.DisableKeyword("SGT_B", innerMaterial);                     // Scattering
                    SgtHelper.DisableKeyword("SGT_B", outerMaterial);                     // Scattering
                }
            }

            UpdateMaterialNonSerialized();
        }