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); }
/// <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); }
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); }