Example #1
0
    private void CreateGuiControls()
    {
      var panel = SampleFramework.AddOptions("Batching");

      SampleHelper.AddDropDown(
        panel,
        "Batching method",
        EnumHelper.GetValues(typeof(BatchingType)),
        (int)_batchingType,
        batchingType => SetBatchingType((BatchingType)batchingType));

      SampleHelper.AddCheckBox(
        panel,
        "Draw debug info",
        _drawDebugInfo,
        isChecked => _drawDebugInfo = isChecked);

      SampleFramework.ShowOptionsWindow("Batching");
    }
Example #2
0
        private void CreateGuiControls()
        {
            var panel = SampleFramework.AddOptions("Shadows");

            // ----- Light node controls
            var lightNodePanel = SampleHelper.AddGroupBox(panel, "Light Nodes");

            SampleHelper.AddDropDown(
                lightNodePanel,
                "Light type",
                new[] { "Spotlight", "PointLight" },
                0,
                selectedItem =>
            {
                bool enableSpotlight      = (selectedItem == "Spotlight");
                _spotlightNode.IsEnabled  = enableSpotlight;
                _pointLightNode.IsEnabled = !enableSpotlight;
            });

            SampleHelper.AddSlider(
                lightNodePanel,
                "Range",
                "F2",
                1,
                30,
                10,
                value =>
            {
                _spotlight.Range  = value;
                _pointLight.Range = value;
            });

            SampleHelper.AddSlider(
                lightNodePanel,
                "Y position",
                "F2",
                0,
                10,
                1,
                value =>
            {
                foreach (var node in new[] { _spotlightNode, _pointLightNode })
                {
                    var pose        = node.PoseWorld;
                    pose.Position.Y = value;
                    node.PoseWorld  = pose;
                }
            });

            SampleHelper.AddSlider(
                lightNodePanel,
                "X rotation",
                "F0",
                -90,
                90,
                1,
                value =>
            {
                var pose                 = _spotlightNode.PoseWorld;
                pose.Orientation         = Matrix.CreateRotationX(MathHelper.ToRadians(value));
                _spotlightNode.PoseWorld = pose;
            });

            SampleHelper.AddSlider(
                lightNodePanel,
                "Spotlight angle",
                "F2",
                1,
                89,
                MathHelper.ToDegrees(_spotlight.CutoffAngle),
                value =>
            {
                float angle             = MathHelper.ToRadians(value);
                _spotlight.FalloffAngle = 0.8f * angle;
                _spotlight.CutoffAngle  = angle;
            });

            // ----- Shadow controls
            var shadowPanel = SampleHelper.AddGroupBox(panel, "Shadow");

            SampleHelper.AddSlider(
                shadowPanel,
                "Shadow map resolution",
                "F0",
                16,
                1024,
                _standardShadow.PreferredSize,
                value =>
            {
                _standardShadow.PreferredSize = (int)value;
                _cubeMapShadow.PreferredSize  = (int)value;
            });

            SampleHelper.AddCheckBox(
                shadowPanel,
                "Prefer 16 bit",
                _standardShadow.Prefer16Bit,
                isChecked =>
            {
                _standardShadow.Prefer16Bit = isChecked;
                _cubeMapShadow.Prefer16Bit  = isChecked;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Depth bias",
                "F2",
                0,
                10,
                _standardShadow.DepthBias,
                value =>
            {
                _standardShadow.DepthBias = value;
                _cubeMapShadow.DepthBias  = value;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Normal offset",
                "F2",
                0,
                10,
                _standardShadow.NormalOffset,
                value =>
            {
                _standardShadow.NormalOffset = value;
                _cubeMapShadow.NormalOffset  = value;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Number of samples",
                "F0",
                -1,
                32,
                _standardShadow.NumberOfSamples,
                value =>
            {
                _standardShadow.NumberOfSamples = (int)value;
                _cubeMapShadow.NumberOfSamples  = (int)value;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Filter radius",
                "F2",
                0,
                10,
                _standardShadow.FilterRadius,
                value =>
            {
                _standardShadow.FilterRadius = value;
                _cubeMapShadow.FilterRadius  = value;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Jitter resolution",
                "F0",
                1,
                10000,
                _standardShadow.JitterResolution,
                value =>
            {
                _standardShadow.JitterResolution = value;
                _cubeMapShadow.JitterResolution  = value;
            });

            SampleFramework.ShowOptionsWindow("Shadows");
        }
Example #3
0
    // Add GUI controls to the Options window.
    private void CreateGuiControls()
    {
      var sampleFramework = _services.GetInstance<SampleFramework>();
      var optionsPanel = sampleFramework.AddOptions("Game Objects");
      var panel = SampleHelper.AddGroupBox(optionsPanel, "TerrainObject");

      SampleHelper.AddCheckBox(
        panel,
        "Draw wireframe",
        _graphicsScreen.TerrainRenderer.DrawWireFrame,
        isChecked => _graphicsScreen.TerrainRenderer.DrawWireFrame = isChecked);

      SampleHelper.AddCheckBox(
        panel,
        "Show clipmaps",
        _showClipmaps,
        isChecked => _showClipmaps = isChecked);

      SampleHelper.AddSlider(
        panel,
        "Min height",
        null,
        -500,
        0,
        _minHeight,
        value =>
        {
          _minHeight = value;
          _updateGeometryTexture = true;
        });

      SampleHelper.AddSlider(
        panel,
        "Max height",
        null,
        0,
        2000,
        _maxHeight,
        value =>
        {
          _maxHeight = value;
          _updateGeometryTexture = true;
        });

      SampleHelper.AddCheckBox(
        panel,
        "Smooth height map",
        _smoothness > 0,
        isChecked =>
        {
          _smoothness = isChecked ? 1e6f : 0;
          _updateGeometryTexture = true;
        });

      SampleHelper.AddSlider(
        panel,
        "Height map cell size",
        null,
        0.5f,
        4f,
        TerrainNode.Terrain.Tiles[0].CellSize,
        value =>
        {
          foreach (var tile in TerrainNode.Terrain.Tiles)
            tile.CellSize = value;

          _updateGeometryTexture = true;
        });

      SampleHelper.AddCheckBox(
        panel,
        "Nearest neighbor mipmaps",
        _useNearestNeighborMipmaps,
        isChecked =>
        {
          _useNearestNeighborMipmaps = isChecked;
          _updateGeometryTexture = true;
        });

      var texelsPerLevelList = new List<int> { 64, 128, 256 };
      SampleHelper.AddDropDown(
        panel,
        "Cells per level",
        texelsPerLevelList,
        texelsPerLevelList.IndexOf(TerrainNode.BaseClipmap.CellsPerLevel),
        value => TerrainNode.BaseClipmap.CellsPerLevel = value);

      SampleHelper.AddSlider(
        panel,
        "Number of levels",
        "F0",
        1,
        6,
        TerrainNode.BaseClipmap.NumberOfLevels,
        value => TerrainNode.BaseClipmap.NumberOfLevels = (int)value);


      var detailTexelsPerLevelList = new List<int> { 512, 1024, 1365 };
#else
      var detailTexelsPerLevelList = new List<int> { 512, 1024, 1365, 2048 };

      SampleHelper.AddDropDown(
        panel,
        "Detail clipmap cells per level",
        detailTexelsPerLevelList,
        detailTexelsPerLevelList.IndexOf(TerrainNode.DetailClipmap.CellsPerLevel),
        value =>
        {
          TerrainNode.DetailClipmap.CellsPerLevel = value;
          _updateDetailClipmapCellSizes = true;
        });

      SampleHelper.AddSlider(
        panel,
        "Number of detail clipmap levels",
        "F0",
        1,
        9,
        TerrainNode.DetailClipmap.NumberOfLevels,
        value =>
        {
          TerrainNode.DetailClipmap.NumberOfLevels = (int)value;
          _updateDetailClipmapCellSizes = true;
        });

      SampleHelper.AddSlider(
        panel,
        "Mipmap bias",
        null,
        -10,
        10,
        TerrainNode.DetailClipmap.LevelBias,
        value => TerrainNode.DetailClipmap.LevelBias = value);

      SampleHelper.AddCheckBox(
       panel,
       "Enable mipmap",
       TerrainNode.DetailClipmap.EnableMipMap,
       isChecked => TerrainNode.DetailClipmap.EnableMipMap = isChecked);

      SampleHelper.AddCheckBox(
        panel,
        "Enable anisotropic filtering",
        TerrainNode.DetailClipmap.EnableAnisotropicFiltering,
        isChecked => TerrainNode.DetailClipmap.EnableAnisotropicFiltering = isChecked);
    }
Example #4
0
    private void CreateGuiControls()
    {
      var panel = SampleFramework.AddOptions("Vegetation");

      var swayPanel = SampleHelper.AddGroupBox(panel, "Swaying");

      SampleHelper.AddSlider(
        swayPanel,
        "Wind wave frequency",
        "F2",
        0,
        0.5f,
        _windWaveFrequency,
        value =>
        {
          _windWaveFrequency = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddSlider(
        swayPanel,
        "Wind wave randomness",
        "F2",
        0,
        1,
        _windWaveRandomness,
        value =>
        {
          _windWaveRandomness = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddSlider(
        swayPanel,
        "Trunk frequency multiplier",
        "F2",
        0,
        10,
        _trunkFrequencyMultiplier,
        value =>
        {
          _trunkFrequencyMultiplier = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddSlider(
        swayPanel,
        "Branch frequency multiplier",
        "F2",
        0,
        10,
        _branchFrequencyMultiplier,
        value =>
        {
          _branchFrequencyMultiplier = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddSlider(
        swayPanel,
        "Trunk scale multiplier",
        "F2",
        0,
        10,
        _trunkScaleMultiplier,
        value =>
        {
          _trunkScaleMultiplier = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddSlider(
        swayPanel,
        "Branch scale multiplier",
        "F2",
        0,
        10,
        _branchScaleMultiplier,
        value =>
        {
          _branchScaleMultiplier = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddSlider(
        swayPanel,
        "Leaf scale multiplier",
        "F2",
        0,
        10,
        _leafScaleMultiplier,
        value =>
        {
          _leafScaleMultiplier = value;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddDropDown(
        swayPanel,
        "Render vertex color",
        EnumHelper.GetValues(typeof(VertexColorChannel)),
        0,
        item =>
        {
          _vertexColorChannel = (VertexColorChannel)item;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddCheckBox(
        panel,
        "Enable translucency",
        true,
        isChecked =>
        {
          _enableTranslucency = isChecked;
          UpdateMaterialEffectParameters();
        });

      SampleHelper.AddCheckBox(
        panel,
        "Draw debug info",
        _drawDebugInfo,
        isChecked => _drawDebugInfo = isChecked);

      SampleFramework.ShowOptionsWindow("Vegetation");
    }
Example #5
0
        private void CreateGuiControls()
        {
            var optionsPanel = SampleFramework.AddOptions("Shadows");

            // ----- Shadow controls
            var shadowPanel = SampleHelper.AddGroupBox(optionsPanel, "Shadow");

            SampleHelper.AddSlider(
                shadowPanel,
                "Shadow map resolution",
                "F0",
                16,
                1024,
                _cascadedShadow.PreferredSize,
                value =>
            {
                _cascadedShadow.PreferredSize = (int)value;
                _cascadedShadow.ShadowMap.SafeDispose();
                _cascadedShadow.ShadowMap = null;
            });

            SampleHelper.AddCheckBox(
                shadowPanel,
                "Prefer 16 bit",
                _cascadedShadow.Prefer16Bit,
                isChecked =>
            {
                _cascadedShadow.Prefer16Bit = isChecked;
                _cascadedShadow.ShadowMap.SafeDispose();
                _cascadedShadow.ShadowMap = null;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Number of cascades",
                "F0",
                1,
                4,
                _cascadedShadow.NumberOfCascades,
                value =>
            {
                _cascadedShadow.NumberOfCascades = (int)value;
                switch ((int)value)
                {
                case 1: _cascadedShadow.Distances = new Vector4(80); break;

                case 2: _cascadedShadow.Distances = new Vector4(20, 80, 80, 80); break;

                case 3: _cascadedShadow.Distances = new Vector4(12, 20, 80, 80); break;

                case 4: _cascadedShadow.Distances = new Vector4(4, 12, 20, 80); break;
                }
                _cascadedShadow.ShadowMap.SafeDispose();
                _cascadedShadow.ShadowMap = null;
            });

            SampleHelper.AddSlider(
                shadowPanel,
                "Depth bias",
                "F2",
                0,
                10,
                _cascadedShadow.DepthBias.X,
                value => _cascadedShadow.DepthBias = new Vector4(value));

            SampleHelper.AddSlider(
                shadowPanel,
                "Normal offset",
                "F2",
                0,
                10,
                _cascadedShadow.NormalOffset.X,
                value => _cascadedShadow.NormalOffset = new Vector4(value));

            SampleHelper.AddSlider(
                shadowPanel,
                "Number of samples",
                "F0",
                -1,
                32,
                _cascadedShadow.NumberOfSamples,
                value => _cascadedShadow.NumberOfSamples = (int)value);

            SampleHelper.AddSlider(
                shadowPanel,
                "Filter radius",
                "F2",
                0,
                10,
                _cascadedShadow.FilterRadius,
                value => _cascadedShadow.FilterRadius = value);

            SampleHelper.AddSlider(
                shadowPanel,
                "Jitter resolution",
                "F0",
                1,
                10000,
                _cascadedShadow.JitterResolution,
                value => _cascadedShadow.JitterResolution = value);

            SampleHelper.AddSlider(
                shadowPanel,
                "Fade-out range",
                "F2",
                0,
                1,
                _cascadedShadow.FadeOutRange,
                value => _cascadedShadow.FadeOutRange = value);

            SampleHelper.AddSlider(
                shadowPanel,
                "Shadow fog",
                "F2",
                0,
                1,
                _cascadedShadow.ShadowFog,
                value => _cascadedShadow.ShadowFog = value);

            SampleHelper.AddDropDown(
                shadowPanel,
                "Cascade split selection",
                new[] { ShadowCascadeSelection.Fast, ShadowCascadeSelection.Best, ShadowCascadeSelection.BestDithered, },
                (int)_cascadedShadow.CascadeSelection,
                item => _cascadedShadow.CascadeSelection = item);

            SampleHelper.AddCheckBox(
                shadowPanel,
                "Visualize cascades",
                _cascadedShadow.VisualizeCascades,
                isChecked => _cascadedShadow.VisualizeCascades = isChecked);

            // ----- Shadow map caching
            var cachingPanel = SampleHelper.AddGroupBox(optionsPanel, "Shadow map caching");

            cachingPanel.Children.Add(new TextBlock
            {
                Text   = "Set a value > 0 to update shadow map less frequently.",
                Margin = new Vector4(0, 0, SampleHelper.Margin, 0),
            });

            SampleHelper.AddSlider(
                cachingPanel,
                "Cascade 0",
                "F0",
                0,
                10,
                _targetSkippedFrames[0],
                value => _targetSkippedFrames[0] = (int)value);

            SampleHelper.AddSlider(
                cachingPanel,
                "Cascade 1",
                "F0",
                0,
                10,
                _targetSkippedFrames[1],
                value => _targetSkippedFrames[1] = (int)value);

            SampleHelper.AddSlider(
                cachingPanel,
                "Cascade 2",
                "F0",
                0,
                10,
                _targetSkippedFrames[2],
                value => _targetSkippedFrames[2] = (int)value);

            SampleHelper.AddSlider(
                cachingPanel,
                "Cascade 3",
                "F0",
                0,
                10,
                _targetSkippedFrames[3],
                value => _targetSkippedFrames[3] = (int)value);

            SampleFramework.ShowOptionsWindow("Shadows");
        }