public void UpdateBackgroundLight() { if (!bgLightPoked) { CyclesLight bgLight = new CyclesLight() { Id = BackgroundLightGuid, UseMis = true, Strength = 1.0f, Type = ccl.LightType.Background, }; AddLight(bgLight); bgLightPoked = true; } }
public RhinoLight(Client client, CyclesLight intermediate, Shader existing, string name) : base(client, intermediate) { if (existing != null) { m_shader = existing; m_shader.Recreate(); } else { m_shader = new Shader(m_client, Shader.ShaderType.Material) { UseMis = true, UseTransparentShadow = true, HeterogeneousVolume = false, Name = name }; } }
public RhinoLight(Client client, CyclesLight intermediate, Shader existing, string name) : base(client, intermediate, name, existing) { }
public RhinoLight(Client client, CyclesLight intermediate, Shader existing) : this(client, intermediate, existing, "light") { }
public LightShaderUpdatedEventArgs(CyclesLight rcLightShader, CclShader cclShader) { RcLightShader = rcLightShader; CclShader = cclShader; }
/// <summary> /// Record light changes /// </summary> /// <param name="light"></param> public void AddLight(CyclesLight light) { _cqLightChanges.Add(light); }
/// <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 * _engineSettings.PointlightFactor * enabled); var axisu = new float4(0.0f); var axisv = new float4(0.0f); var useMis = false; 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 * _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 * _engineSettings.SpotlightFactor * enabled); } else if (lg.IsRectangularLight) { lt = LightType.Area; strength = (float)(lg.Intensity * _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 = true, Gamma = gamma, Id = lg.Id }; return clight; }
public static RhinoShader CreateRhinoLightShader(Client client, CyclesLight intermediateLight, Shader existingShader) { RhinoShader shader = new RhinoLight(client, intermediateLight, existingShader); return shader; }
protected RhinoShader(Client client, CyclesLight intermediateLight) { m_client = client; m_original_light = intermediateLight; }
protected RhinoShader(Client client, CyclesLight intermediateLight, string name, Shader existing) { m_client = client; m_original_light = intermediateLight; InitShader(name, existing, Shader.ShaderType.Material); }
public static RhinoShader CreateRhinoLightShader(Client client, CyclesLight intermediateLight, Shader existingShader) { RhinoShader shader = new RhinoLight(client, intermediateLight, existingShader); return(shader); }
/// <summary> /// Add a CyclesLight and its shader /// </summary> /// <param name="l"></param> /// <param name="shader"></param> public void Add(CyclesLight l, CclShader shader) { _allShaders.Add(new Tuple <object, CclShader>(l, shader)); }
/// <summary> /// Add a CyclesLight and its shader /// </summary> /// <param name="l"></param> /// <param name="shader"></param> public void Add(CyclesLight l, CclShader shader) { _allShaders.Add(new Tuple<object, CclShader>(l, 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); }
internal void TriggerLightShaderChanged(CyclesLight rcLightShader, Shader cclShader) { LightShaderChanged?.Invoke(this, new LightShaderUpdatedEventArgs(rcLightShader, cclShader)); }