Beispiel #1
0
        public override Shader GetShader()
        {
            if (!string.IsNullOrEmpty(m_original_background.Xml))
            {
                var xml = m_original_background.Xml;
                Shader.ShaderFromXml(ref m_shader, xml);
            }
            else
            {
                var black = new float4(0.0f);
                var tst   = new float4(1.0f, 0.5f, 0.25f);

                var color1    = (m_original_background.color1.IsEmpty ? tst : RenderEngine.CreateFloat4(m_original_background.color1)) ^ m_original_background.Gamma;
                var color2    = (m_original_background.color2.IsEmpty ? tst : RenderEngine.CreateFloat4(m_original_background.color2)) ^ m_original_background.Gamma;
                var bgcolor   = (m_original_background.bg_color.IsEmpty ? black : RenderEngine.CreateFloat4(m_original_background.bg_color)) ^ m_original_background.Gamma;
                var skycolor  = (m_original_background.sky_color.IsEmpty ? black : RenderEngine.CreateFloat4(m_original_background.sky_color)) ^ m_original_background.Gamma;
                var reflcolor = (m_original_background.refl_color.IsEmpty ? black : RenderEngine.CreateFloat4(m_original_background.refl_color)) ^ m_original_background.Gamma;

                // our main background shader. With just this, and some color != black set we should get skylighting
                // use the bgcolor from the background (360deg) environment if it is specified, instead.
                _backgroundNode.ins.Strength.Value = 1.0f;
                _backgroundNode.ins.Color.Value    = (m_original_background.background_environment != null && m_original_background.background_fill == BackgroundStyle.Environment? bgcolor : color1);

                #region skylight disabler/enabler nodes

                // node to give highest value (used for light path checks)
                _max.ins.Value1.Value = 0.0f;
                _max.ins.Value2.Value = 0.0f;

                #endregion

                #region gradient bg nodes


                // just simple linear gradient
                _colorramp.ColorBand.Interpolation = ColorBand.Interpolations.Linear;
                // bottom color on 0.0f
                _colorramp.ColorBand.InsertColorStop(color2, 0.0f);
                // top color on 1.0f
                _colorramp.ColorBand.InsertColorStop(color1, 1.0f);

                #endregion

                #region nodes for environment textures on bg/refl/skylight

                if (m_original_background.wallpaper.HasTextureImage && m_original_background.background_fill == BackgroundStyle.WallpaperImage)
                {
                    RenderEngine.SetTextureImage(_bgEnvTexture, m_original_background.wallpaper);
                }
                else if (m_original_background.bg.HasTextureImage)
                {
                    RenderEngine.SetTextureImage(_bgEnvTexture, m_original_background.bg);
                }

                if (m_original_background.refl.HasTextureImage)
                {
                    RenderEngine.SetTextureImage(_reflEnvTexture, m_original_background.refl);
                }

                if (m_original_background.sky.HasTextureImage)
                {
                    RenderEngine.SetTextureImage(_skyEnvTexture, m_original_background.sky);
                }

                _skyBg.ins.Color.Value    = skycolor;
                _skyBg.ins.Strength.Value = 1.0f;

                _reflBg.ins.Color.Value    = reflcolor;
                _reflBg.ins.Strength.Value = 1.0f;

                #endregion

                // add background nodes
                m_shader.AddNode(_backgroundNode);
                m_shader.AddNode(_reflBg);
                m_shader.AddNode(_skyBg);
                // add environment texture nodes
                m_shader.AddNode(_bgEnvTexture);
                m_shader.AddNode(_reflEnvTexture);
                m_shader.AddNode(_skyEnvTexture);
                // add environment mapping nodes
                m_shader.AddNode(_mapBg);
                m_shader.AddNode(_mapRefl);
                m_shader.AddNode(_mapSky);


                // light paths
                m_shader.AddNode(_lightpath);
                // a max for skylight stuff
                m_shader.AddNode(_max);

                // two mixer nodes
                m_shader.AddNode(_mixBgAndRefl);
                m_shader.AddNode(_mixSkylightSwitch);


                // gradient bg nodes
                m_shader.AddNode(_textureCoordinates);
                m_shader.AddNode(_mapping);
                m_shader.AddNode(_gradient);
                m_shader.AddNode(_colorramp);

                // to control skylight influence, the trick is to only sample on camera ray and on
                // glossy rays. This way we can see the background in
                // reflections and when we're looking directly to it.
                // our max(v1,v2) will be 1.0 when either or both are set
                _lightpath.outs.IsCameraRay.Connect(_max.ins.Value1);
                _lightpath.outs.IsGlossyRay.Connect(_max.ins.Value2);
                // also connect glossy ray to mix_bg_refl, so we get refl_bg when glossy ray
                _lightpath.outs.IsGlossyRay.Connect(_mixBgAndRefl.ins.Fac);

                _max.outs.Value.Connect(_mixSkylightSwitch.ins.Fac);

                _textureCoordinates.outs.Generated.Connect(_mapBg.ins.Vector);
                _textureCoordinates.outs.Generated.Connect(_mapRefl.ins.Vector);
                _textureCoordinates.outs.Generated.Connect(_mapSky.ins.Vector);

                // if there is a bg texture, put that in bg color
                if (m_original_background.bg.HasTextureImage && m_original_background.background_fill == BackgroundStyle.Environment && !m_original_background.PlanarProjection)
                {
                    _mapBg.outs.Vector.Connect(_bgEnvTexture.ins.Vector);
                    _mapBg.Rotation = m_original_background.bg.Transform.z;
                    _bgEnvTexture.outs.Color.Connect(_backgroundNode.ins.Color);
                    _backgroundNode.ins.Strength.Value = m_original_background.bg.Strength;
                }
                // or if gradient fill is needed, so lets do that.
                else if (m_original_background.background_fill == BackgroundStyle.Gradient)
                {
                    // gradient is 'screen-based', so use window tex coordinates
                    _textureCoordinates.outs.Window.Connect(_mapping.ins.Vector);
                    // rotate those coords into gradient
                    _mapping.outs.Vector.Connect(_gradient.ins.Vector);

                    // and finally into our color ramp
                    _gradient.outs.Fac.Connect(_colorramp.ins.Fac);
                    // now use that as background input
                    _colorramp.outs.Color.Connect(_backgroundNode.ins.Color);
                }
                else if (m_original_background.PlanarProjection)
                {
                    _mapping.outs.Vector.Connect(_bgEnvTexture.ins.Vector);
                    _bgEnvTexture.outs.Color.Connect(_backgroundNode.ins.Color);
                    _bgEnvTexture.Projection = TextureNode.EnvironmentProjection.Wallpaper;
                }
                else if (m_original_background.background_fill == BackgroundStyle.WallpaperImage && m_original_background.wallpaper.HasTextureImage)
                {
                    _bgEnvTexture.outs.Color.Connect(_backgroundNode.ins.Color);
                    _bgEnvTexture.Projection = TextureNode.EnvironmentProjection.Wallpaper;
                }

                // connect refl env texture if texture exists
                if (m_original_background.refl.HasTextureImage)
                {
                    _mapRefl.outs.Vector.Connect(_reflEnvTexture.ins.Vector);
                    _mapRefl.Rotation = m_original_background.refl.Transform.z;
                    _reflEnvTexture.outs.Color.Connect(_reflBg.ins.Color);
                    _reflBg.ins.Strength.Value = m_original_background.refl.Strength;
                }
                // connect sky env texture if texture exists
                if (m_original_background.sky.HasTextureImage)
                {
                    _mapSky.outs.Vector.Connect(_skyEnvTexture.ins.Vector);
                    _mapSky.Rotation = m_original_background.sky.Transform.z;
                    _skyEnvTexture.outs.Color.Connect(_skyBg.ins.Color);
                    _skyBg.ins.Strength.Value = m_original_background.sky.Strength;
                }

                if (m_original_background.HasSky && m_original_background.skylight_enabled)
                {
                    _skyBg.outs.Background.Connect(_mixSkylightSwitch.ins.Closure1);
                }
                else
                {
                    if (m_original_background.skylight_enabled)
                    {
                        _mixBgAndRefl.outs.Closure.Connect(_mixSkylightSwitch.ins.Closure1);
                    }
                }

                // background always goes into closure 1 for bg+refl mix
                _backgroundNode.outs.Background.Connect(_mixBgAndRefl.ins.Closure1);

                // if we have a reflection color or texture, use that in
                // background and reflection mixer.
                if (m_original_background.HasRefl)
                {
                    _reflBg.outs.Background.Connect(_mixBgAndRefl.ins.Closure2);
                }
                else                 // no color or texture for reflections, use regular background
                {
                    _backgroundNode.outs.Background.Connect(_mixBgAndRefl.ins.Closure2);
                }

                // the bakground and reflection should always be connected to skylight
                // switch in second closure slot. This is so that direct background ray
                // hit from camera shows background. Also glossy ray still should be evaluated
                // to this one.
                _mixBgAndRefl.outs.Closure.Connect(_mixSkylightSwitch.ins.Closure2);

                _mixSkylightSwitch.outs.Closure.Connect(m_shader.Output.ins.Surface);
            }

            // phew, done.
            m_shader.FinalizeGraph();
            m_shader.Tag();

            return(m_shader);
        }
Beispiel #2
0
        /// <summary>
        /// Convert a Rhino light into a <c>CyclesLight</c>.
        /// </summary>
        /// <param name="lg">The Rhino light to convert</param>
        /// <param name="gamma"></param>
        /// <returns><c>CyclesLight</c></returns>
        internal CyclesLight ConvertLight(Rhino.Geometry.Light lg, float gamma)
        {
            var enabled = lg.IsEnabled ? 1.0 : 0.0;

            var spotangle = 0.0;
            var smooth    = 0.0;
            var size      = 0.0f;
            var strength  = (float)(lg.Intensity * RcCore.It.EngineSettings.PointlightFactor * enabled);
            var axisu     = new float4(0.0f);
            var axisv     = new float4(0.0f);
            var useMis    = true;
            var sizeU     = 0.0f;
            var sizeV     = 0.0f;

            var co    = RenderEngine.CreateFloat4(lg.Location.X, lg.Location.Y, lg.Location.Z);
            var dir   = RenderEngine.CreateFloat4(lg.Direction.X, lg.Direction.Y, lg.Direction.Z);
            var color = RenderEngine.CreateFloat4(lg.Diffuse.R, lg.Diffuse.G, lg.Diffuse.B, lg.Diffuse.A);

            var lt = LightType.Point;

            if (lg.IsDirectionalLight)
            {
                lt       = LightType.Distant;
                strength = (float)(lg.Intensity * RcCore.It.EngineSettings.SunlightFactor * enabled);
                //size = 0.01f;
            }
            else if (lg.IsSpotLight)
            {
                lt        = LightType.Spot;
                spotangle = lg.SpotAngleRadians * 2;
                smooth    = 1.0 / Math.Max(lg.HotSpot, 0.001f) - 1.0;
                strength  = (float)(lg.Intensity * RcCore.It.EngineSettings.SpotlightFactor * enabled);
            }
            else if (lg.IsRectangularLight)
            {
                lt = LightType.Area;

                strength = (float)(lg.Intensity * RcCore.It.EngineSettings.ArealightFactor * enabled);

                var width  = lg.Width;
                var length = lg.Length;

                sizeU = (float)width.Length;
                sizeV = (float)length.Length;

                size = 1.0f;

                var rectLoc = lg.Location + (lg.Width * 0.5) + (lg.Length * 0.5);

                co = RenderEngine.CreateFloat4(rectLoc.X, rectLoc.Y, rectLoc.Z);

                width.Unitize();
                length.Unitize();

                axisu = RenderEngine.CreateFloat4(width.X, width.Y, width.Z);
                axisv = RenderEngine.CreateFloat4(length.X, length.Y, length.Z);

                useMis = true;
            }
            else if (lg.IsLinearLight)
            {
                throw new Exception("Linear light handled in wrong place. Contact developer [email protected]");
            }

            var clight = new CyclesLight
            {
                Type         = lt,
                Co           = co,
                Dir          = dir,
                DiffuseColor = color,
                Size         = size,

                SizeU = sizeU,
                SizeV = sizeV,

                AxisU = axisu,
                AxisV = axisv,

                UseMis = useMis,

                SpotAngle  = (float)spotangle,
                SpotSmooth = (float)smooth,

                Strength = strength,

                CastShadow = lg.ShadowIntensity > 0.0,

                Gamma = gamma,

                Id = lg.Id
            };

            return(clight);
        }
Beispiel #3
0
        public override Shader GetShader()
        {
            if (!string.IsNullOrEmpty(m_original_background.Xml))
            {
                var xml = m_original_background.Xml;
                Shader.ShaderFromXml(ref m_shader, xml);
            }
            else
            {
                var texcoord210 = new TextureCoordinateNode("texcoord");

                var bg_env_texture255 = new EnvironmentTextureNode("bg_env_texture");
                bg_env_texture255.Projection    = TextureNode.EnvironmentProjection.Equirectangular;
                bg_env_texture255.ColorSpace    = TextureNode.TextureColorSpace.None;
                bg_env_texture255.Extension     = TextureNode.TextureExtension.Repeat;
                bg_env_texture255.Interpolation = InterpolationType.Linear;
                bg_env_texture255.IsLinear      = false;

                var bg_color_or_texture259 = new MixNode("bg_color_or_texture");
                bg_color_or_texture259.ins.Color1.Value = m_original_background.Color1AsFloat4;
                bg_color_or_texture259.ins.Fac.Value    = m_original_background.HasBgEnvTextureAsFloat;
                bg_color_or_texture259.BlendType        = MixNode.BlendTypes.Mix;
                bg_color_or_texture259.UseClamp         = false;

                var separate_bg_color265 = new SeparateRgbNode("separate_bg_color");

                var skylight_strength_factor302 = new MathMultiply("skylight_strength_factor");
                skylight_strength_factor302.ins.Value1.Value = m_original_background.BgStrength;
                skylight_strength_factor302.ins.Value2.Value = m_original_background.NonSkyEnvStrengthFactor;
                skylight_strength_factor302.Operation        = MathNode.Operations.Multiply;
                skylight_strength_factor302.UseClamp         = false;

                var factor_r262 = new MathMultiply("factor_r");
                factor_r262.Operation = MathNode.Operations.Multiply;
                factor_r262.UseClamp  = false;

                var factor_g263 = new MathMultiply("factor_g");
                factor_g263.Operation = MathNode.Operations.Multiply;
                factor_g263.UseClamp  = false;

                var factor_b264 = new MathMultiply("factor_b");
                factor_b264.Operation = MathNode.Operations.Multiply;
                factor_b264.UseClamp  = false;

                var gradienttexture281 = new GradientTextureNode("gradienttexture");

                var factored_bg_color266 = new CombineRgbNode("factored_bg_color");

                var gradient_colorramp282 = new ColorRampNode("gradient_colorramp");
                gradient_colorramp282.ColorBand.Stops.Add(new ColorStop()
                {
                    Color = new ccl.float4(0.9411765f, 0.5803922f, 0.07843138f, 1f), Position = 0f
                });
                gradient_colorramp282.ColorBand.Stops.Add(new ColorStop()
                {
                    Color = new ccl.float4(0.5019608f, 0f, 0f, 1f), Position = 1f
                });

                var refl_env_texture256 = new EnvironmentTextureNode("refl_env_texture");
                refl_env_texture256.Projection    = TextureNode.EnvironmentProjection.Equirectangular;
                refl_env_texture256.ColorSpace    = TextureNode.TextureColorSpace.None;
                refl_env_texture256.Extension     = TextureNode.TextureExtension.Repeat;
                refl_env_texture256.Interpolation = InterpolationType.Linear;
                refl_env_texture256.IsLinear      = false;

                var refl_color_or_texture260 = new MixNode("refl_color_or_texture");
                refl_color_or_texture260.ins.Color1.Value = m_original_background.ReflectionColorAs4float;
                refl_color_or_texture260.ins.Fac.Value    = m_original_background.HasReflEnvTextureAsFloat;
                refl_color_or_texture260.BlendType        = MixNode.BlendTypes.Mix;
                refl_color_or_texture260.UseClamp         = false;

                var separate_refl_color270 = new SeparateRgbNode("separate_refl_color");

                var skylight_strength_factor303 = new MathMultiply("skylight_strength_factor");
                skylight_strength_factor303.ins.Value1.Value = m_original_background.ReflStrength;
                skylight_strength_factor303.ins.Value2.Value = m_original_background.NonSkyEnvStrengthFactor;
                skylight_strength_factor303.Operation        = MathNode.Operations.Multiply;
                skylight_strength_factor303.UseClamp         = false;

                var factor_refl_r267 = new MathMultiply("factor_refl_r");
                factor_refl_r267.Operation = MathNode.Operations.Multiply;
                factor_refl_r267.UseClamp  = false;

                var factor_refl_g268 = new MathMultiply("factor_refl_g");
                factor_refl_g268.Operation = MathNode.Operations.Multiply;
                factor_refl_g268.UseClamp  = false;

                var factor_refl_b269 = new MathMultiply("factor_refl_b");
                factor_refl_b269.Operation = MathNode.Operations.Multiply;
                factor_refl_b269.UseClamp  = false;

                var light_path235 = new LightPathNode("light_path");

                var use_reflect_refract_when_glossy_and_reflection285 = new MathMultiply("use_reflect_refract_when_glossy_and_reflection");
                use_reflect_refract_when_glossy_and_reflection285.Operation = MathNode.Operations.Multiply;
                use_reflect_refract_when_glossy_and_reflection285.UseClamp  = false;

                var gradient_or_other283 = new MixNode("gradient_or_other");
                gradient_or_other283.ins.Fac.Value = m_original_background.UseGradientAsFloat;
                gradient_or_other283.BlendType     = MixNode.BlendTypes.Mix;
                gradient_or_other283.UseClamp      = false;

                var factored_refl_color271 = new CombineRgbNode("factored_refl_color");

                var refl_env_when_enabled286 = new MathMultiply("refl_env_when_enabled");
                refl_env_when_enabled286.ins.Value1.Value = m_original_background.UseCustomReflectionEnvironmentAsFloat;
                refl_env_when_enabled286.Operation        = MathNode.Operations.Multiply;
                refl_env_when_enabled286.UseClamp         = false;

                var skycolor_or_final_bg284 = new MixNode("skycolor_or_final_bg");
                skycolor_or_final_bg284.ins.Color2.Value = m_original_background.SkyColorAs4float;
                skycolor_or_final_bg284.ins.Fac.Value    = m_original_background.UseSkyColorAsFloat;
                skycolor_or_final_bg284.BlendType        = MixNode.BlendTypes.Mix;
                skycolor_or_final_bg284.UseClamp         = false;

                var sky_env_texture257 = new EnvironmentTextureNode("sky_env_texture");
                sky_env_texture257.Projection    = TextureNode.EnvironmentProjection.Equirectangular;
                sky_env_texture257.ColorSpace    = TextureNode.TextureColorSpace.None;
                sky_env_texture257.Extension     = TextureNode.TextureExtension.Repeat;
                sky_env_texture257.Interpolation = InterpolationType.Linear;
                sky_env_texture257.IsLinear      = false;

                var sky_color_or_texture258 = new MixNode("sky_color_or_texture");
                sky_color_or_texture258.ins.Fac.Value = m_original_background.HasSkyEnvTextureAsFloat;
                sky_color_or_texture258.BlendType     = MixNode.BlendTypes.Mix;
                sky_color_or_texture258.UseClamp      = false;

                var separate_sky_color275 = new SeparateRgbNode("separate_sky_color");

                var sky_or_not261 = new MathMultiply("sky_or_not");
                sky_or_not261.ins.Value1.Value = m_original_background.SkyStrength;
                sky_or_not261.ins.Value2.Value = m_original_background.SkylightEnabledAsFloat;
                sky_or_not261.Operation        = MathNode.Operations.Multiply;
                sky_or_not261.UseClamp         = false;

                var factor_sky_r272 = new MathMultiply("factor_sky_r");
                factor_sky_r272.Operation = MathNode.Operations.Multiply;
                factor_sky_r272.UseClamp  = false;

                var factor_sky_g273 = new MathMultiply("factor_sky_g");
                factor_sky_g273.Operation = MathNode.Operations.Multiply;
                factor_sky_g273.UseClamp  = false;

                var factor_sky_b274 = new MathMultiply("factor_sky_b");
                factor_sky_b274.Operation = MathNode.Operations.Multiply;
                factor_sky_b274.UseClamp  = false;

                var factored_sky_color276 = new CombineRgbNode("factored_sky_color");

                var non_camera_rays290 = new MathSubtract("non_camera_rays");
                non_camera_rays290.ins.Value1.Value = 1f;
                non_camera_rays290.Operation        = MathNode.Operations.Subtract;
                non_camera_rays290.UseClamp         = false;

                var camera_and_transmission294 = new MathAdd("camera_and_transmission");
                camera_and_transmission294.Operation = MathNode.Operations.Add;
                camera_and_transmission294.UseClamp  = false;

                var invert_refl_switch300 = new MathSubtract("invert_refl_switch");
                invert_refl_switch300.ins.Value1.Value = 1f;
                invert_refl_switch300.Operation        = MathNode.Operations.Subtract;
                invert_refl_switch300.UseClamp         = false;

                var invert_cam_and_transm292 = new MathSubtract("invert_cam_and_transm");
                invert_cam_and_transm292.ins.Value1.Value = 1f;
                invert_cam_and_transm292.Operation        = MathNode.Operations.Subtract;
                invert_cam_and_transm292.UseClamp         = false;

                var refl_bg_or_custom_env291 = new MixNode("refl_bg_or_custom_env");
                refl_bg_or_custom_env291.BlendType = MixNode.BlendTypes.Mix;
                refl_bg_or_custom_env291.UseClamp  = false;

                var light_with_bg_or_sky289 = new MixNode("light_with_bg_or_sky");
                light_with_bg_or_sky289.BlendType = MixNode.BlendTypes.Mix;
                light_with_bg_or_sky289.UseClamp  = false;

                var if_not_cam_nor_transm_nor_glossyrefl301 = new MathMultiply("if_not_cam_nor_transm_nor_glossyrefl");
                if_not_cam_nor_transm_nor_glossyrefl301.Operation = MathNode.Operations.Multiply;
                if_not_cam_nor_transm_nor_glossyrefl301.UseClamp  = false;

                var mix295 = new MixNode("mix");
                mix295.BlendType = MixNode.BlendTypes.Mix;
                mix295.UseClamp  = false;

                var final_bg280 = new BackgroundNode("final_bg");
                final_bg280.ins.Strength.Value = 1f;


                m_shader.AddNode(texcoord210);
                m_shader.AddNode(bg_env_texture255);
                m_shader.AddNode(bg_color_or_texture259);
                m_shader.AddNode(separate_bg_color265);
                m_shader.AddNode(skylight_strength_factor302);
                m_shader.AddNode(factor_r262);
                m_shader.AddNode(factor_g263);
                m_shader.AddNode(factor_b264);
                m_shader.AddNode(gradienttexture281);
                m_shader.AddNode(factored_bg_color266);
                m_shader.AddNode(gradient_colorramp282);
                m_shader.AddNode(refl_env_texture256);
                m_shader.AddNode(refl_color_or_texture260);
                m_shader.AddNode(separate_refl_color270);
                m_shader.AddNode(skylight_strength_factor303);
                m_shader.AddNode(factor_refl_r267);
                m_shader.AddNode(factor_refl_g268);
                m_shader.AddNode(factor_refl_b269);
                m_shader.AddNode(light_path235);
                m_shader.AddNode(use_reflect_refract_when_glossy_and_reflection285);
                m_shader.AddNode(gradient_or_other283);
                m_shader.AddNode(factored_refl_color271);
                m_shader.AddNode(refl_env_when_enabled286);
                m_shader.AddNode(skycolor_or_final_bg284);
                m_shader.AddNode(sky_env_texture257);
                m_shader.AddNode(sky_color_or_texture258);
                m_shader.AddNode(separate_sky_color275);
                m_shader.AddNode(sky_or_not261);
                m_shader.AddNode(factor_sky_r272);
                m_shader.AddNode(factor_sky_g273);
                m_shader.AddNode(factor_sky_b274);
                m_shader.AddNode(factored_sky_color276);
                m_shader.AddNode(non_camera_rays290);
                m_shader.AddNode(camera_and_transmission294);
                m_shader.AddNode(invert_refl_switch300);
                m_shader.AddNode(invert_cam_and_transm292);
                m_shader.AddNode(refl_bg_or_custom_env291);
                m_shader.AddNode(light_with_bg_or_sky289);
                m_shader.AddNode(if_not_cam_nor_transm_nor_glossyrefl301);
                m_shader.AddNode(mix295);
                m_shader.AddNode(final_bg280);


                texcoord210.outs.Generated.Connect(bg_env_texture255.ins.Vector);
                bg_env_texture255.outs.Color.Connect(bg_color_or_texture259.ins.Color2);
                bg_color_or_texture259.outs.Color.Connect(separate_bg_color265.ins.Image);
                separate_bg_color265.outs.R.Connect(factor_r262.ins.Value1);
                skylight_strength_factor302.outs.Value.Connect(factor_r262.ins.Value2);
                separate_bg_color265.outs.G.Connect(factor_g263.ins.Value1);
                skylight_strength_factor302.outs.Value.Connect(factor_g263.ins.Value2);
                separate_bg_color265.outs.B.Connect(factor_b264.ins.Value1);
                skylight_strength_factor302.outs.Value.Connect(factor_b264.ins.Value2);
                texcoord210.outs.Window.Connect(gradienttexture281.ins.Vector);
                factor_r262.outs.Value.Connect(factored_bg_color266.ins.R);
                factor_g263.outs.Value.Connect(factored_bg_color266.ins.G);
                factor_b264.outs.Value.Connect(factored_bg_color266.ins.B);
                gradienttexture281.outs.Fac.Connect(gradient_colorramp282.ins.Fac);
                texcoord210.outs.Generated.Connect(refl_env_texture256.ins.Vector);
                refl_env_texture256.outs.Color.Connect(refl_color_or_texture260.ins.Color2);
                refl_color_or_texture260.outs.Color.Connect(separate_refl_color270.ins.Image);
                separate_refl_color270.outs.R.Connect(factor_refl_r267.ins.Value1);
                skylight_strength_factor303.outs.Value.Connect(factor_refl_r267.ins.Value2);
                separate_refl_color270.outs.G.Connect(factor_refl_g268.ins.Value1);
                skylight_strength_factor303.outs.Value.Connect(factor_refl_g268.ins.Value2);
                separate_refl_color270.outs.B.Connect(factor_refl_b269.ins.Value1);
                skylight_strength_factor303.outs.Value.Connect(factor_refl_b269.ins.Value2);
                light_path235.outs.IsGlossyRay.Connect(use_reflect_refract_when_glossy_and_reflection285.ins.Value1);
                light_path235.outs.IsReflectionRay.Connect(use_reflect_refract_when_glossy_and_reflection285.ins.Value2);
                factored_bg_color266.outs.Image.Connect(gradient_or_other283.ins.Color1);
                gradient_colorramp282.outs.Color.Connect(gradient_or_other283.ins.Color2);
                factor_refl_r267.outs.Value.Connect(factored_refl_color271.ins.R);
                factor_refl_g268.outs.Value.Connect(factored_refl_color271.ins.G);
                factor_refl_b269.outs.Value.Connect(factored_refl_color271.ins.B);
                use_reflect_refract_when_glossy_and_reflection285.outs.Value.Connect(refl_env_when_enabled286.ins.Value2);
                gradient_or_other283.outs.Color.Connect(skycolor_or_final_bg284.ins.Color1);
                texcoord210.outs.Generated.Connect(sky_env_texture257.ins.Vector);
                skycolor_or_final_bg284.outs.Color.Connect(sky_color_or_texture258.ins.Color1);
                sky_env_texture257.outs.Color.Connect(sky_color_or_texture258.ins.Color2);
                sky_color_or_texture258.outs.Color.Connect(separate_sky_color275.ins.Image);
                separate_sky_color275.outs.R.Connect(factor_sky_r272.ins.Value1);
                sky_or_not261.outs.Value.Connect(factor_sky_r272.ins.Value2);
                separate_sky_color275.outs.G.Connect(factor_sky_g273.ins.Value1);
                sky_or_not261.outs.Value.Connect(factor_sky_g273.ins.Value2);
                separate_sky_color275.outs.B.Connect(factor_sky_b274.ins.Value1);
                sky_or_not261.outs.Value.Connect(factor_sky_b274.ins.Value2);
                factor_sky_r272.outs.Value.Connect(factored_sky_color276.ins.R);
                factor_sky_g273.outs.Value.Connect(factored_sky_color276.ins.G);
                factor_sky_b274.outs.Value.Connect(factored_sky_color276.ins.B);
                light_path235.outs.IsCameraRay.Connect(non_camera_rays290.ins.Value2);
                light_path235.outs.IsCameraRay.Connect(camera_and_transmission294.ins.Value1);
                light_path235.outs.IsTransmissionRay.Connect(camera_and_transmission294.ins.Value2);
                refl_env_when_enabled286.outs.Value.Connect(invert_refl_switch300.ins.Value2);
                camera_and_transmission294.outs.Value.Connect(invert_cam_and_transm292.ins.Value2);
                gradient_or_other283.outs.Color.Connect(refl_bg_or_custom_env291.ins.Color1);
                factored_refl_color271.outs.Image.Connect(refl_bg_or_custom_env291.ins.Color2);
                refl_env_when_enabled286.outs.Value.Connect(refl_bg_or_custom_env291.ins.Fac);
                gradient_or_other283.outs.Color.Connect(light_with_bg_or_sky289.ins.Color1);
                factored_sky_color276.outs.Image.Connect(light_with_bg_or_sky289.ins.Color2);
                non_camera_rays290.outs.Value.Connect(light_with_bg_or_sky289.ins.Fac);
                invert_refl_switch300.outs.Value.Connect(if_not_cam_nor_transm_nor_glossyrefl301.ins.Value1);
                invert_cam_and_transm292.outs.Value.Connect(if_not_cam_nor_transm_nor_glossyrefl301.ins.Value2);
                refl_bg_or_custom_env291.outs.Color.Connect(mix295.ins.Color1);
                light_with_bg_or_sky289.outs.Color.Connect(mix295.ins.Color2);
                if_not_cam_nor_transm_nor_glossyrefl301.outs.Value.Connect(mix295.ins.Fac);
                mix295.outs.Color.Connect(final_bg280.ins.Color);

                // extra code

                gradient_colorramp282.ColorBand.Stops.Clear();
                // bottom color on 0.0f
                gradient_colorramp282.ColorBand.InsertColorStop(m_original_background.Color2AsFloat4, 0.0f);
                // top color on 1.0f
                gradient_colorramp282.ColorBand.InsertColorStop(m_original_background.Color1AsFloat4, 1.0f);

                // rotate the window vector
                gradienttexture281.Rotation = RenderEngine.CreateFloat4(0.0, 0.0, 1.570796);

                if (m_original_background.BackgroundFill == BackgroundStyle.Environment && m_original_background.HasBgEnvTexture)
                {
                    RenderEngine.SetTextureImage(bg_env_texture255, m_original_background.BgTexture);
                    _SetEnvironmentProjection(m_original_background.BgTexture, bg_env_texture255);
                    bg_env_texture255.Rotation = m_original_background.BgTexture.Transform.z;
                }
                if (m_original_background.BackgroundFill == BackgroundStyle.WallpaperImage && m_original_background.Wallpaper.HasTextureImage)
                {
                    RenderEngine.SetTextureImage(bg_env_texture255, m_original_background.Wallpaper);
                    bg_env_texture255.Projection = TextureNode.EnvironmentProjection.Wallpaper;
                }
                if (m_original_background.HasReflEnvTexture)
                {
                    RenderEngine.SetTextureImage(refl_env_texture256, m_original_background.ReflectionTexture);
                    _SetEnvironmentProjection(m_original_background.ReflectionTexture, refl_env_texture256);
                }
                if (m_original_background.HasSkyEnvTexture)
                {
                    RenderEngine.SetTextureImage(sky_env_texture257, m_original_background.SkyTexture);
                    _SetEnvironmentProjection(m_original_background.SkyTexture, sky_env_texture257);
                }

                final_bg280.outs.Background.Connect(m_shader.Output.ins.Surface);
            }

            // phew, done.
            m_shader.FinalizeGraph();
            m_shader.Tag();

            return(m_shader);
        }