public ThumbnailLighting() { Model = new LocalDataSource(); this.InitializeComponent(); // Get the current compositor _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; // // Create the lights // _ambientLight = _compositor.CreateAmbientLight(); _pointLight = _compositor.CreatePointLight(); _distantLight = _compositor.CreateDistantLight(); _spotLight = _compositor.CreateSpotLight(); }
public CompositionList() { this.InitializeComponent(); this.Loaded += CompositionList_Loaded; this.Unloaded += CompositionList_Unloaded; // Get the current compositor _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; SurfaceLoader.Initialize(_compositor); // // Create the lights // _ambientLight = _compositor.CreateAmbientLight(); _pointLight = _compositor.CreatePointLight(); _distantLight = _compositor.CreateDistantLight(); _spotLight = _compositor.CreateSpotLight(); }
public void CreateLight() { _compositor = ElementCompositionPreview.GetElementVisual(this).Compositor; _pointLight = _compositor.CreatePointLight(); _distantLight = _compositor.CreateDistantLight(); _spotLight = _compositor.CreateSpotLight(); _spotLight.InnerConeAngle = (float)(Math.PI / 4); _spotLight.OuterConeAngle = (float)(Math.PI / 3.5); //var amblighting = _compositor.CreateAmbientLight(); var lightRoot = ElementCompositionPreview.GetElementVisual(sample_img); //_distantLight.CoordinateSpace = lightRoot; //_distantLight.Targets.Add(lightRoot); //_spotLight.CoordinateSpace = lightRoot; //_spotLight.Targets.Add(lightRoot); //amblighting.Targets.Add(lightRoot); _pointLight.CoordinateSpace = lightRoot; _pointLight.Targets.Add(lightRoot); }
internal DistantLightReferenceNode(string paramName, DistantLight light = null) : base(paramName, light) { }
private void UpdateLight() { if (LightTypeSelection.SelectedValue != null) { ComboBoxItem item = LightTypeSelection.SelectedValue as ComboBoxItem; LightTypes lightType = (LightTypes)item.Tag; if (_light != null) { _light.Targets.RemoveAll(); } switch (lightType) { case LightTypes.PointLight: { PointLight light = _compositor.CreatePointLight(); light.CoordinateSpace = CoordinateSpace; light.Offset = new Vector3((float)XOffset.Value, (float)YOffset.Value, (float)ZOffset.Value); light.ConstantAttenuation = (float)ConstantAttenuation.Value / c_ConstantAttenRange; light.LinearAttenuation = (float)LinearAttenuation.Value / c_LinearAttenRange * .1f; light.QuadraticAttenuation = (float)QuadraticAttenuation.Value / c_QuadraticAttenRange * .01f; light.Color = LightColor.Color; _light = light; } break; case LightTypes.SpotLight: { SpotLight light = _compositor.CreateSpotLight(); light.CoordinateSpace = CoordinateSpace; light.Offset = new Vector3((float)XOffset.Value, (float)YOffset.Value, (float)ZOffset.Value); light.ConstantAttenuation = (float)ConstantAttenuation.Value / c_ConstantAttenRange; light.LinearAttenuation = (float)LinearAttenuation.Value / c_LinearAttenRange * .1f; light.QuadraticAttenuation = (float)QuadraticAttenuation.Value / c_QuadraticAttenRange * .01f; light.InnerConeAngleInDegrees = (float)InnerCone.Value; light.InnerConeColor = InnerConeColor.Color; light.OuterConeAngleInDegrees = (float)OuterCone.Value; light.OuterConeColor = OuterConeColor.Color; Vector3 lookAt = new Vector3((float)DirectionX.Value, (float)DirectionY.Value, 0); Vector3 direction = Vector3.Normalize(lookAt - new Vector3(300, 300, 300)); light.Direction = direction; _light = light; } break; case LightTypes.DistantLight: { DistantLight light = _compositor.CreateDistantLight(); light.CoordinateSpace = CoordinateSpace; light.Color = LightColor.Color; Vector3 lookAt = new Vector3((float)DirectionX.Value, (float)DirectionY.Value, 0); Vector3 offset = new Vector3(300, 300, 100); light.Direction = Vector3.Normalize(lookAt - offset); _light = light; } break; default: Debug.Assert(false, "Unexpected type"); break; } // Add the visual to the light target collection foreach (Visual target in _targetVisualList) { _light.Targets.Add(target); } } }
/// <summary> /// Create an ExpressionNode reference to this CompositionObject. /// </summary> /// <param name="compObj">The comp object.</param> /// <returns>DistantLightReferenceNode.</returns> public static DistantLightReferenceNode GetReference(this DistantLight compObj) { return(new DistantLightReferenceNode(null, compObj)); }
public static void RowTestByDelegate(int spp, string fileSuffix, Func <float, int, IMaterial> materialFunc) { var dx = 3.65f; var nX = 11; var delta = 1f / (nX - 1); var prims = new List <IPrimitive>(); for (var x = 0; x < nX; x++) { var s1t = Transform.Translate(x * dx, 0, 0); var s1 = new Sphere(s1t, Transform.Invert(s1t), false, 1.5f, -1.5f, 1.5f, 360); var s1g = new GeometricPrimitive(s1, materialFunc(delta * x, x + 1), null); prims.Add(s1g); } var slt = Transform.Translate(5, 2, -4); var slg = new Sphere(slt, Transform.Invert(slt), false, 0.5f, -0.5f, 0.5f, 360); var ls = Spectrum.FromBlackbodyT(7500); var dl = new DiffuseAreaLight(slt, null, ls * 100, 20, slg); var sg = new GeometricPrimitive(slg, new MatteMaterial(new ConstantTexture <Spectrum>(ls), new ConstantTexture <float>(0f), null), dl); prims.Add(sg); var bvh = new BVH(prims.ToArray(), SplitMethod.HLBVH); var mid = bvh.WorldBounds.Centroid; var width = 1200; var height = 140; var from = new Point(mid.X, 6f, -12f); var to = mid; var fov = 5.6f; var aspectRatio = (float)width / height; var transform = Transform.Translate(mid.X, 0f, -50f); var dist = Point.Distance(from, to); var filter = new MitchellFilter(new Vector2(2.5f, 2.5f), 0.7f, 0.15f); var film = new Film(new PixelVector(width, height), new Bounds2D(0, 0, 1, 1), filter, 20f, 1f); var camera = PerspectiveCamera.Create(transform, aspectRatio, 0.0f, dist, fov, film); //var integrator = new WhittedIntegrator(4, camera, new HaltonSampler(spp, film.GetSampleBounds()), // film.CroppedBounds); var integrator = new PathIntegrator(3, camera, new HaltonSampler(spp, film.GetSampleBounds()), film.CroppedBounds, 6f, LightSampleStrategy.Spatial); film.SetSink(new Sink(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "row_" + fileSuffix)); var lt = Transform.Translate(mid.X - 60, 200, -80); var s = Spectrum.FromBlackbodyT(4500) * 100000f; var pl1 = new PointLight(lt, null, s); lt = Transform.Translate(mid.X + 100, 100, -200); s = Spectrum.FromBlackbodyT(2200) * 50000f; var pl2 = new PointLight(lt, null, s); lt = Transform.Translate(mid.X, 1000f, 0); s = Spectrum.FromBlackbodyT(7000) * 5f; var pl3 = new DistantLight(lt, s, new Vector(0, -0.5f, 1)); lt = Transform.Translate(mid.X, 10, -300); s = Spectrum.FromBlackbodyT(5500) * 100000f; var pl4 = new PointLight(lt, null, s); var splt = Transform.RotateX(MathF.Rad(18f)).RotateY(MathF.Rad(75)).Translate(0, 10, -8); s = Spectrum.FromBlackbodyT(5500) * 100000f; var sl = new SpotLight(splt, null, s, 5f, 2f); var scene = new Scene(bvh, new ILight[] { pl1, pl2, pl3, pl4, dl, sl }); //var scene = new Scene(bvh, new ILight[] { dl }); Console.WriteLine("Rendering at {0}x{1}...", width, height); var stopwatch = new Stopwatch(); stopwatch.Start(); integrator.Render(scene); stopwatch.Stop(); Console.WriteLine("Done ({0})", stopwatch.Elapsed); }