Example #1
0
        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 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();
        }
Example #3
0
        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();
        }
Example #4
0
        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);
        }
Example #5
0
 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));
 }
Example #8
0
        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);
        }
Example #9
0
        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();
        }