/// <summary> /// Load the resources. /// </summary> /// <remarks>Remember to call the base implementation of this method.</remarks> protected override void LoadContent() { #region Setup Input Controls buttons = new Button[4]; // Create the virtual buttons to control the scene selection. buttons[0] = new Button { Name = "Attack", ButtonBehavior = Button.ButtonBehaviors.DigitalInput, KeyButton = new KeyButton(Keys.Space), }; buttons[1] = new Button { Name = "Attack", ButtonBehavior = Button.ButtonBehaviors.DigitalInput, KeyButton = new KeyButton(Buttons.RightTrigger), }; axis = new Axis { Name = "Walk", AnalogAxis = AnalogAxes.LeftStickY, AxisBehavior = Axis.AxisBehaviors.AnalogInput, }; buttons[2] = new Button { Name = "WalkPC", KeyButton = new KeyButton(Keys.W), ButtonBehavior = Button.ButtonBehaviors.DigitalInput }; buttons[3] = new Button { Name = "RunPC", KeyButton = new KeyButton(Keys.LeftShift), ButtonBehavior = Button.ButtonBehaviors.DigitalInput }; #endregion #region Camera camera = new GameObject3D(); camera.AddComponent <Camera>(); camera.AddComponent <SoundListener>(); camera.Camera.RenderTargetSize = Size.FullScreen; camera.Camera.FarPlane = 100; camera.Camera.NearPlane = 1f; camera.Transform.LookAt(new Vector3(-10, 10, 20), new Vector3(0, 5, 0), Vector3.Up); //ScriptCustomCameraScript script = (ScriptCustomCameraScript)camera.AddComponent<ScriptCustomCameraScript>(); //script.SetPosition(new Vector3(0, 10, 20), new Vector3(0, 5, 0)); camera.Camera.ClearColor = Color.Black; camera.Camera.FieldOfView = 180 / 6f; camera.Camera.PostProcess = new PostProcess(); camera.Camera.PostProcess.ToneMapping.AutoExposureEnabled = true; camera.Camera.PostProcess.MLAA.Enabled = true; camera.Camera.PostProcess.MLAA.EdgeDetection = MLAA.EdgeDetectionType.Color; camera.Camera.PostProcess.Bloom.Threshold = 3.5f; camera.Camera.AmbientLight = new AmbientLight { SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromCubeTexture(new TextureCube("FactoryCatwalkRGBM") { IsRgbm = true, RgbmMaxRange = 50, }), Color = new Color(10, 10, 10), Intensity = 5f, }; //camera.Camera.Sky = new Skybox { TextureCube = new TextureCube("FactoryCatwalkRGBM") { IsRgbm = true, RgbmMaxRange = 50, } }; #endregion #region Models dude = new GameObject3D(new FileModel("DudeWalk"), new BlinnPhong()); // One material for mesh part. dude.ModelRenderer.MeshMaterials = new Material[5]; dude.ModelRenderer.MeshMaterials[0] = new BlinnPhong { DiffuseTexture = new Texture("Dude\\head"), NormalTexture = new Texture("Dude\\headN"), SpecularTexture = new Texture("Dude\\headS"), SpecularPowerFromTexture = false, SpecularPower = 300 }; dude.ModelRenderer.MeshMaterials[2] = new BlinnPhong { DiffuseTexture = new Texture("Dude\\jacket"), NormalTexture = new Texture("Dude\\jacketN"), SpecularTexture = new Texture("Dude\\jacketS"), SpecularPowerFromTexture = false, SpecularPower = 300 }; dude.ModelRenderer.MeshMaterials[3] = new BlinnPhong { DiffuseTexture = new Texture("Dude\\pants"), NormalTexture = new Texture("Dude\\pantsN"), SpecularTexture = new Texture("Dude\\pantsS"), SpecularPowerFromTexture = false, SpecularPower = 300 }; dude.ModelRenderer.MeshMaterials[1] = new BlinnPhong { DiffuseTexture = new Texture("Dude\\upBodyC"), NormalTexture = new Texture("Dude\\upbodyN"), SpecularTexture = new Texture("Dude\\upbodyCS"), SpecularPowerFromTexture = false, SpecularPower = 300 }; dude.ModelRenderer.MeshMaterials[4] = new BlinnPhong { DiffuseTexture = new Texture("Dude\\upBodyC"), NormalTexture = new Texture("Dude\\upbodyN"), SpecularTexture = new Texture("Dude\\upbodyCS"), SpecularPowerFromTexture = false, SpecularPower = 300 }; dude.Transform.LocalScale = new Vector3(0.1f, 0.1f, 0.1f); // Add animations. dude.AddComponent <ModelAnimations>(); ModelAnimation modelAnimation; // First DudeAttack. #if XBOX modelAnimation = new ModelAnimation("DudeAttackXbox"); // Be aware to select the correct content processor when you add your fbx files on the solution. modelAnimation.WrapMode = WrapMode.ClampForever; dude.ModelAnimations.AddAnimationClip(modelAnimation); #else modelAnimation = new ModelAnimation("DudeAttack"); // Be aware to select the correct content processor when you add your fbx files on the solution. modelAnimation.WrapMode = WrapMode.ClampForever; dude.ModelAnimations.AddAnimationClip(modelAnimation); #endif // Then DudeRun. #if XBOX modelAnimation = new ModelAnimation("DudeRunXbox"); // Be aware to select the correct content processor when you add your fbx files on the solution. modelAnimation.WrapMode = WrapMode.Loop; dude.ModelAnimations.AddAnimationClip(modelAnimation); #else modelAnimation = new ModelAnimation("DudeRun"); // Be aware to select the correct content processor when you add your fbx files on the solution. modelAnimation.WrapMode = WrapMode.Loop; dude.ModelAnimations.AddAnimationClip(modelAnimation); #endif // Set the parameters from the animation that it is stored in DudeWalk (this animation is added automatically by the system). dude.ModelAnimations["Take 001"].WrapMode = WrapMode.Loop; // Load the rifle model. rifle = new GameObject3D(new FileModel("Rifle"), new BlinnPhong { DiffuseColor = new Color(15, 15, 15), SpecularPower = 100, SpecularIntensity = 0.01f }); // And a floor floor = new GameObject3D(new FileModel("Terrain/TerrainLOD0Grid"), new BlinnPhong { SpecularPower = 300, DiffuseColor = new Color(250, 250, 250), SpecularIntensity = 0.0f, }) { Transform = { LocalScale = new Vector3(5, 5, 5) } }; #endregion #region Shadows and Lights Shadow.DistributeShadowCalculationsBetweenFrames = true; directionalLight = new GameObject3D(); directionalLight.AddComponent <DirectionalLight>(); directionalLight.DirectionalLight.Color = new Color(250, 250, 140); directionalLight.DirectionalLight.Intensity = 25f; directionalLight.Transform.LookAt(new Vector3(-0.75f, 0.85f, -1.3f), Vector3.Zero, Vector3.Forward); directionalLight.DirectionalLight.Shadow = new CascadedShadow { Filter = Shadow.FilterType.PcfPosion, LightDepthTextureSize = Size.Square1024X1024, }; DirectionalLight.Sun = directionalLight.DirectionalLight; #endregion #region Dog Fight Studios // Dog Fight Studios share their animations and the scene logic. GameObject2D dogFightStudios = new GameObject2D(); dogFightStudios.AddComponent <HudTexture>(); dogFightStudios.HudTexture.Texture = new Texture("DogFightStudios"); dogFightStudios.Transform.Position = new Vector3(-55, -80, 0); #endregion } // Load
/// <summary> /// Load the resources. /// </summary> protected override void LoadContent() { #region Camera camera = new GameObject3D(); camera.AddComponent<Camera>(); camera.AddComponent<SoundListener>(); camera.Camera.RenderTargetSize = Size.FullScreen; camera.Camera.FarPlane = 300; camera.Camera.NearPlane = 1f; // Do not place a small value here, you can destroy performance, not just precision. camera.Transform.LookAt(new Vector3(0, 0, 15), Vector3.Zero, Vector3.Up); WarehouseCameraScript script = (WarehouseCameraScript)camera.AddComponent<WarehouseCameraScript>(); //script.SetPosition(new Vector3(0, 3, 18), new Vector3(0, 1.5f, 2.2f)); script.SetPosition(new Vector3(10, 3, 18), new Vector3(0, 1.5f, 3.2f)); camera.Camera.ClearColor = Color.Black; camera.Camera.FieldOfView = 180 / 7f; camera.Camera.PostProcess = new PostProcess(); camera.Camera.PostProcess.ToneMapping.AutoExposureEnabled = false; camera.Camera.PostProcess.ToneMapping.LensExposure = -0.5f; camera.Camera.PostProcess.ToneMapping.ToneMappingFunction = ToneMapping.ToneMappingFunctionEnumerate.FilmicALU; camera.Camera.PostProcess.MLAA.EdgeDetection = MLAA.EdgeDetectionType.Color; camera.Camera.PostProcess.MLAA.Enabled = true; camera.Camera.PostProcess.Bloom.Enabled = true; camera.Camera.PostProcess.Bloom.Threshold = 3f; camera.Camera.PostProcess.FilmGrain.Enabled = true; camera.Camera.PostProcess.FilmGrain.Strength = 0.15f; /*camera.Camera.PostProcess.AdjustLevels.Enabled = true; camera.Camera.PostProcess.AdjustLevels.InputGamma = 0.9f; camera.Camera.PostProcess.AdjustLevels.InputWhite = 0.95f;*/ camera.Camera.PostProcess.AnamorphicLensFlare.Enabled = false; camera.Camera.PostProcess.ColorCorrection.Enabled = true; camera.Camera.PostProcess.ColorCorrection.FirstLookupTable = new LookupTable("LookupTableWarehouse"); // A little more red and blue. camera.Camera.AmbientLight = new AmbientLight { SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromCubeTexture(new TextureCube("FactoryCatwalkRGBM") { IsRgbm = true, RgbmMaxRange = 50, }), Color = new Color(10, 10, 10), Intensity = 2f, AmbientOcclusionStrength = 1.5f }; //camera.Camera.Sky = new Skydome { Texture = new Texture("HotPursuitSkydome") }; //camera.Camera.Sky = new Skybox { TextureCube = new TextureCube("FactoryCatwalkRGBM") { IsRgbm = true, RgbmMaxRange = 50, } }; #if !XBOX camera.Camera.AmbientLight.AmbientOcclusion = new HorizonBasedAmbientOcclusion { NumberSteps = 12, NumberDirections = 12, Radius = 0.003f, // Bigger values produce more cache misses and you don’t want GPU cache misses, trust me. LineAttenuation = 1.0f, Contrast = 1.1f, AngleBias = 0.1f, Quality = HorizonBasedAmbientOcclusion.QualityType.HighQuality, TextureSize = Size.TextureSize.HalfSize, }; #endif #region Test Split Screen /* camera.Camera.NormalizedViewport = new RectangleF(0, 0, 1, 0.5f); camera2 = new GameObject3D(); camera2.AddComponent<Camera>(); camera2.Camera.MasterCamera = camera.Camera; camera2.Camera.ClearColor = Color.Black; camera2.Camera.FieldOfView = 180 / 8.0f; camera2.Camera.NormalizedViewport = new RectangleF(0, 0.5f, 1, 0.5f); camera2.Transform.LookAt(new Vector3(-5, 5, -15), new Vector3(0, 3, 0), Vector3.Up); camera2.Camera.AmbientLight = camera.Camera.AmbientLight; camera2.Camera.PostProcess = new PostProcess(); camera2.Camera.PostProcess.ToneMapping.AutoExposureEnabled = true; camera2.Camera.PostProcess.ToneMapping.LensExposure = 0.5f; camera2.Camera.PostProcess.ToneMapping.ToneMappingFunction = ToneMapping.ToneMappingFunctionEnumerate.FilmicALU; camera2.Camera.PostProcess.MLAA.EdgeDetection = MLAA.EdgeDetectionType.Color; camera2.Camera.PostProcess.MLAA.Enabled = true; camera2.Camera.PostProcess.Bloom.Enabled = true; camera2.Camera.PostProcess.Bloom.Threshold = 3f; camera2.Camera.PostProcess.FilmGrain.Enabled = true; camera2.Camera.PostProcess.FilmGrain.Strength = 0.15f; */ #endregion #endregion #region Models #if XBOX warehouseWalls = new GameObject3D(new FileModel("Warehouse\\WarehouseWallsXbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Warehouse-DiffuseXbox"), SpecularTexture = new Texture("Warehouse\\Warehouse-SpecularXbox"), SpecularIntensity = 3, SpecularPower = 30000, }); warehouseRoof = new GameObject3D(new FileModel("Warehouse\\WarehouseRoofXbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\MetalRoof-DiffuseXbox") }); warehouseRoof1 = new GameObject3D(new FileModel("Warehouse\\WarehouseRoof1Xbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\MetalRoof2-DiffuseXbox") }); warehouseWood = new GameObject3D(new FileModel("Warehouse\\WarehouseWoodXbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Wood-DiffuseXbox") }); warehouseWood2 = new GameObject3D(new FileModel("Warehouse\\WarehouseWood2Xbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Wood2-DiffuseXbox") }); warehouseBrokenWindow = new GameObject3D(new FileModel("Warehouse\\WarehouseBrokenWindowXbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Window-DiffuseXbox") }); warehouseWindow = new GameObject3D(new FileModel("Warehouse\\WarehouseWindowXbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Window-DiffuseXbox") }); warehouseGround = new GameObject3D(new FileModel("Warehouse\\WarehouseGroundXbox"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Ground-DiffuseXbox"), NormalTexture = new Texture("Warehouse\\Ground-NormalsXbox"), SpecularIntensity = 0.7f }); #else warehouseWalls = new GameObject3D(new FileModel("Warehouse\\WarehouseWalls"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Warehouse-Diffuse"), SpecularTexture = new Texture("Warehouse\\Warehouse-Specular"), SpecularIntensity = 3, SpecularPower = 30000, }); warehouseRoof = new GameObject3D(new FileModel("Warehouse\\WarehouseRoof"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\MetalRoof-Diffuse") }); warehouseRoof1 = new GameObject3D(new FileModel("Warehouse\\WarehouseRoof1"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\MetalRoof2-Diffuse") }); warehouseWood = new GameObject3D(new FileModel("Warehouse\\WarehouseWood"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Wood-Diffuse") }); warehouseWood2 = new GameObject3D(new FileModel("Warehouse\\WarehouseWood2"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Wood2-Diffuse") }); warehouseBrokenWindow = new GameObject3D(new FileModel("Warehouse\\WarehouseBrokenWindow"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Window-Diffuse") }); warehouseWindow = new GameObject3D(new FileModel("Warehouse\\WarehouseWindow"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Window-Diffuse") }); warehouseGround = new GameObject3D(new FileModel("Warehouse\\WarehouseGround"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Ground-Diffuse"), NormalTexture = new Texture("Warehouse\\Ground-Normals"), SpecularIntensity = 0.7f }); #endif #endregion #region Shadows and Lights Shadow.DistributeShadowCalculationsBetweenFrames = true; directionalLight = new GameObject3D(); directionalLight.AddComponent<DirectionalLight>(); directionalLight.DirectionalLight.Color = new Color(190, 190, 150); directionalLight.DirectionalLight.Intensity = 9.2f; directionalLight.Transform.LookAt(new Vector3(0.3f, 0.95f, -0.3f), Vector3.Zero, Vector3.Forward); DirectionalLight.Sun = directionalLight.DirectionalLight; directionalLight.DirectionalLight.Shadow = new CascadedShadow { Filter = Shadow.FilterType.PcfPosion, LightDepthTextureSize = Size.Square512X512, ShadowTextureSize = Size.TextureSize.FullSize, // Lower than this could produce artifacts if the light is too intense. DepthBias = 0.0025f, FarPlaneSplit1 = 15, FarPlaneSplit2 = 40, FarPlaneSplit3 = 100, //FarPlaneSplit4 = 150 }; /*directionalLight.DirectionalLight.Shadow = new BasicShadow { Filter = Shadow.FilterType.PcfPosion, LightDepthTextureSize = Size.Square512X512, ShadowTextureSize = Size.TextureSize.FullSize, // Lower than this could produce artifacts if the light is to intense. DepthBias = 0.0025f, Range = 100, };*/ pointLight = new GameObject3D(); pointLight.AddComponent<PointLight>(); pointLight.PointLight.Color = new Color(180, 190, 230); pointLight.PointLight.Intensity = 0.3f; pointLight.PointLight.Range = 60; pointLight.Transform.Position = new Vector3(4.8f, 1.5f, 10); //pointLight.PointLight.Shadow = new CubeShadow { LightDepthTextureSize = 512, }; pointLight = new GameObject3D(); pointLight.AddComponent<PointLight>(); pointLight.PointLight.Color = new Color(130, 130, 190); pointLight.PointLight.Intensity = 0.7f; pointLight.PointLight.Range = 60; pointLight.Transform.Position = new Vector3(-4.8f, 0, -4); /*pointLightClipVolumeTest = new GameObject3D(); pointLightClipVolumeTest.AddComponent<PointLight>(); pointLightClipVolumeTest.PointLight.Color = new Color(250, 20, 20); pointLightClipVolumeTest.PointLight.Intensity = 2f; pointLightClipVolumeTest.PointLight.Range = 60; pointLightClipVolumeTest.PointLight.ClipVolume = new FileModel("ClipVolume"); pointLightClipVolumeTest.PointLight.RenderClipVolumeInLocalSpace = true; pointLightClipVolumeTest.Transform.Position = new Vector3(26f, 7, 35);*/ spotLight = new GameObject3D(); spotLight.AddComponent<SpotLight>(); spotLight.SpotLight.Color = new Color(0, 250, 0); spotLight.SpotLight.Intensity = 0.5f; spotLight.SpotLight.Range = 40; // I always forget to set the light range lower than the camera far plane. spotLight.Transform.Position = new Vector3(0, 16, 15); spotLight.Transform.Rotate(new Vector3(-80, 0, 0)); spotLight.SpotLight.LightMaskTexture = new Texture("LightMasks\\TestLightMask"); /*spotLight.SpotLight.Shadow = new BasicShadow { Filter = Shadow.FilterType.PcfPosion, LightDepthTextureSize = Size.Square512X512, ShadowTextureSize = Size.TextureSize.FullSize, DepthBias = 0.0005f, };*/ #endregion #region Lamborghini Murcielago LP640 lamborghiniMurcielagoLoader = new LamborghiniMurcielagoLoader(); lamborghiniMurcielagoLoader.LoadContent(); lamborghiniMurcielagoLoader.LamborghiniMurcielago.Transform.LocalScale = new Vector3(1.2f, 1.2f, 1.2f); lamborghiniMurcielagoLoader.LamborghiniMurcielago.Transform.LocalPosition = new Vector3(0, 1.4f, 2.35f); lamborghiniMurcielagoLoader.TiresAngle = -40; #endregion #region Particles // Pit particles GameObject3D particles = new GameObject3D(); particles.AddComponent<ParticleEmitter>(); particles.AddComponent<ParticleRenderer>(); particles.ParticleEmitter.MaximumNumberParticles = 75; particles.Transform.LocalPosition = new Vector3(-1.2f, 0, -13); particles.ParticleEmitter.Duration = 50f; particles.ParticleEmitter.EmitterVelocitySensitivity = 1; particles.ParticleEmitter.MinimumHorizontalVelocity = 1; particles.ParticleEmitter.MaximumHorizontalVelocity = 2f; particles.ParticleEmitter.MinimumVerticalVelocity = 1; particles.ParticleEmitter.MaximumVerticalVelocity = 2; particles.ParticleRenderer.Texture = new Texture("Particles\\Smoke"); particles.ParticleRenderer.SoftParticles = true; particles.ParticleRenderer.FadeDistance = 25.0f; particles.ParticleRenderer.BlendState = BlendState.NonPremultiplied; particles.ParticleRenderer.DurationRandomness = 0.1f; particles.ParticleRenderer.Gravity = new Vector3(0, 1, 5); particles.ParticleRenderer.EndVelocity = 0.75f; particles.ParticleRenderer.MinimumColor = Color.Red; particles.ParticleRenderer.MaximumColor = Color.White; particles.ParticleRenderer.RotateSpeed = new Vector2(-0.3f, 0.25f); particles.ParticleRenderer.StartSize = new Vector2(25, 30); particles.ParticleRenderer.EndSize = new Vector2(75, 100); particles.ParticleRenderer.TilesX = 1; particles.ParticleRenderer.TilesY = 1; particles.ParticleRenderer.AnimationRepetition = 1; particles = new GameObject3D(); particles.AddComponent<ParticleEmitter>(); particles.AddComponent<ParticleRenderer>(); particles.ParticleEmitter.MaximumNumberParticles = 75; particles.Transform.LocalPosition = new Vector3(-3.2f, 0, 13); particles.ParticleEmitter.Duration = 50f; particles.ParticleEmitter.EmitterVelocitySensitivity = 1; particles.ParticleEmitter.MinimumHorizontalVelocity = 1; particles.ParticleEmitter.MaximumHorizontalVelocity = 2f; particles.ParticleEmitter.MinimumVerticalVelocity = 1; particles.ParticleEmitter.MaximumVerticalVelocity = 2; particles.ParticleRenderer.Texture = new Texture("Particles\\Smoke"); particles.ParticleRenderer.SoftParticles = true; particles.ParticleRenderer.FadeDistance = 25.0f; particles.ParticleRenderer.BlendState = BlendState.NonPremultiplied; particles.ParticleRenderer.DurationRandomness = 0.1f; particles.ParticleRenderer.Gravity = new Vector3(0, 1, -5); particles.ParticleRenderer.EndVelocity = 0.75f; particles.ParticleRenderer.MinimumColor = Color.Red; particles.ParticleRenderer.MaximumColor = Color.White; particles.ParticleRenderer.RotateSpeed = new Vector2(-0.2f, 0.2f); particles.ParticleRenderer.StartSize = new Vector2(25, 50); particles.ParticleRenderer.EndSize = new Vector2(75, 100); particles.ParticleRenderer.TilesX = 1; particles.ParticleRenderer.TilesY = 1; particles.ParticleRenderer.AnimationRepetition = 1; #endregion #region Statistics Layer.GetLayerByNumber(26).Name = "Statistics Layer"; GameObject2D statistics = new GameObject2D(); statistics.AddComponent<ScriptStatisticsDrawer>(); #endregion #region Legend /* demoLegend = new GameObject2D(); var legend = (HudText)demoLegend.AddComponent<HudText>(); legend.Color = new Color(0.1f, 0.1f, 0.1f, 1f); #if XBOX legend.Text.Append("A to open the doors\n"); legend.Text.Append("Left stick to rotate the wheels"); #else legend.Text.Append("Space or A to open the doors\n"); legend.Text.Append("Left and right cursors or left stick to rotate the wheels\n"); legend.Text.Append("Left mouse button or right stick to move the camera"); #endif*/ #endregion } // Load
/// <summary> /// Load the resources. /// </summary> protected override void LoadContent() { #region Camera camera = new GameObject3D(); camera.AddComponent<Camera>(); camera.AddComponent<SoundListener>(); camera.Camera.RenderTargetSize = Size.FullScreen; camera.Camera.FarPlane = 1000; camera.Camera.NearPlane = 1f; // Do not place a small value here, you can destroy performance, not just precision. camera.Transform.LookAt(new Vector3(0, 0, 15), Vector3.Zero, Vector3.Up); ScriptCustomCameraScript script = (ScriptCustomCameraScript)camera.AddComponent<ScriptCustomCameraScript>(); script.SetPosition(new Vector3(182, -85.47f, 150), new Vector3(0, 26f, 0)); camera.Camera.ClearColor = Color.Black; camera.Camera.FieldOfView = 180 / 7f; camera.Camera.PostProcess = new PostProcess(); camera.Camera.PostProcess.ToneMapping.AutoExposureEnabled = true; camera.Camera.PostProcess.ToneMapping.LensExposure = -1.5f; camera.Camera.PostProcess.ToneMapping.ToneMappingFunction = ToneMapping.ToneMappingFunctionEnumerate.FilmicALU; camera.Camera.PostProcess.MLAA.EdgeDetection = MLAA.EdgeDetectionType.Both; camera.Camera.PostProcess.MLAA.ThresholdColor = 0.1f; camera.Camera.PostProcess.MLAA.ThresholdDepth = 0.03f; camera.Camera.PostProcess.MLAA.Enabled = true; camera.Camera.PostProcess.Bloom.Enabled = true; camera.Camera.PostProcess.Bloom.Threshold = 3f; camera.Camera.PostProcess.FilmGrain.Enabled = true; camera.Camera.PostProcess.FilmGrain.Strength = 0.1f; camera.Camera.PostProcess.AnamorphicLensFlare.Enabled = false; camera.Camera.PostProcess.ColorCorrection.Enabled = true; camera.Camera.PostProcess.ColorCorrection.FirstLookupTable = new LookupTable("LookupTableWarehouse"); // A little more red and blue. camera.Camera.AmbientLight = new AmbientLight { //SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromCubeTexture(new TextureCube("FactoryCatwalkRGBM") { IsRgbm = true, RgbmMaxRange = 50, }), //SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromLatLongTexture(new Texture("CubeTextures\\Arches_E_PineTree_3k")), SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromLatLongTexture(new Texture("CubeTextures\\Desert-15_XXLResize")), //SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromLatLongTexture(new Texture("CubeTextures\\DH102LL")), //SphericalHarmonicLighting = SphericalHarmonicL2.GenerateSphericalHarmonicFromLatLongTexture(new Texture("CubeTextures\\Factory_Catwalk_2k")), Color = new Color(0, 0, 0), Intensity = 5f, AmbientOcclusionStrength = 2.5f }; camera.Camera.Sky = new Skydome { Texture = new Texture("HotPursuitSkydome") }; //camera.Camera.Sky = new Skybox { TextureCube = new TextureCube("FactoryCatwalkRGBM") { IsRgbm = true, RgbmMaxRange = 50, }, ColorIntensity = 15 }; #if !XBOX camera.Camera.AmbientLight.AmbientOcclusion = new HorizonBasedAmbientOcclusion { NumberSteps = 12, NumberDirections = 12, Radius = 0.003f, // Bigger values produce more cache misses and you don’t want GPU cache misses, trust me. LineAttenuation = 1.0f, Contrast = 1.1f, AngleBias = 0.1f, Quality = HorizonBasedAmbientOcclusion.QualityType.HighQuality, TextureSize = Size.TextureSize.HalfSize, }; #endif #endregion #region Models warehouseGround = new GameObject3D(new FileModel("Warehouse\\WarehouseGround"), new BlinnPhong { DiffuseTexture = new Texture("Warehouse\\Ground-Diffuse"), NormalTexture = new Texture("Warehouse\\Ground-Normals"), SpecularIntensity = 0.7f }); warehouseGround.Transform.LocalScale = new Vector3(10, 10, 10); warehouseGround.Transform.Translate(0, -35.5f, 0); float specularIntensity = 2; float specularPower = 500; townhall = new GameObject3D(new FileModel("Tech Demo\\XNA_TownHall"), new BlinnPhong { DiffuseColor = Color.White, SpecularIntensity = 3, SpecularPower = 300, }); townhall.Transform.Rotate(new Vector3(-90, -90, 0)); townhall.Transform.Translate(40, -26f, -260, Space.World); townhall.ModelRenderer.MeshMaterials = new Material[5]; townhall.ModelRenderer.MeshMaterials[0] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\XNA_building02_wall04"), NormalTexture = new Texture("Tech Demo\\XNA_building02_wall04_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; townhall.ModelRenderer.MeshMaterials[1] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\XNA_building02_roff02"), NormalTexture = new Texture("Tech Demo\\XNA_building02_roff02_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; townhall.ModelRenderer.MeshMaterials[2] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\XNA_building02_wall03"), NormalTexture = new Texture("Tech Demo\\XNA_building02_wall03_N"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; townhall.ModelRenderer.MeshMaterials[3] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\XNA_building02_wall05"), NormalTexture = new Texture("Tech Demo\\XNA_building02_wall05_N"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; townhall.ModelRenderer.MeshMaterials[4] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\XNA_building02_window01"), NormalTexture = new Texture("Tech Demo\\XNA_building02_window01_N"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01 = new GameObject3D(new FileModel("Tech Demo\\building01"), new BlinnPhong { DiffuseColor = Color.White, SpecularIntensity = 3, SpecularPower = 300, }); building01.Transform.Rotate(new Vector3(-90, 0, 0)); building01.ModelRenderer.MeshMaterials = new Material[23]; building01.ModelRenderer.MeshMaterials[0] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_groundfloor01_D"), NormalTexture = new Texture("Tech Demo\\building01_groundfloor01_N"), SpecularTexture = new Texture("Tech Demo\\building01_groundfloor01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[1] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_groundfloor02_D"), NormalTexture = new Texture("Tech Demo\\building01_groundfloor02_N"), SpecularTexture = new Texture("Tech Demo\\building01_groundfloor02_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[2] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_wall01_D"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[3] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_brick02_D"), NormalTexture = new Texture("Tech Demo\\building01_brick02_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[4] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_brick03_D"), NormalTexture = new Texture("Tech Demo\\building01_brick03_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[5] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_brick01_D"), NormalTexture = new Texture("Tech Demo\\building01_brick01_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[6] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_brick04_D"), NormalTexture = new Texture("Tech Demo\\building01_brick01_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[7] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_window03_D"), NormalTexture = new Texture("Tech Demo\\building01_window03_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[8] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_window02_D"), NormalTexture = new Texture("Tech Demo\\building01_window02_N"), SpecularTexture = new Texture("Tech Demo\\building01_window02_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[9] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_shop01_D"), NormalTexture = new Texture("Tech Demo\\building01_shop01_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[10] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_window01_D"), NormalTexture = new Texture("Tech Demo\\building01_window01_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[11] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_shop01_D"), NormalTexture = new Texture("Tech Demo\\building01_shop01_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[12] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_Shutter-doors01_D"), NormalTexture = new Texture("Tech Demo\\building01_Shutter-doors01_N"), SpecularTexture = new Texture("Tech Demo\\building01_Shutter-doors01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[13] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_Shutter-doors03_D"), NormalTexture = new Texture("Tech Demo\\building01_Shutter-doors03_N"), SpecularTexture = new Texture("Tech Demo\\building01_Shutter-doors03_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[14] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_Shutter-doors02_D"), NormalTexture = new Texture("Tech Demo\\building01_Shutter-doors02_N"), SpecularTexture = new Texture("Tech Demo\\building01_Shutter-doors02_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[15] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_bill01_D"), SpecularTexture = new Texture("Tech Demo\\building01_bill01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[16] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_Watertower01_D"), NormalTexture = new Texture("Tech Demo\\building01_Watertower01_N"), SpecularTexture = new Texture("Tech Demo\\building01_Watertower01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[17] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_Shutter-doors01_D"), NormalTexture = new Texture("Tech Demo\\building01_Shutter-doors01_N"), SpecularTexture = new Texture("Tech Demo\\building01_Shutter-doors01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[18] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_AirCondition01_D"), NormalTexture = new Texture("Tech Demo\\building01_AirCondition01_N"), SpecularTexture = new Texture("Tech Demo\\building01_AirCondition01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[19] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_flaps01_D"), NormalTexture = new Texture("Tech Demo\\building01_flaps01_N"), SpecularTexture = new Texture("Tech Demo\\building01_flaps01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[20] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_rainshed01_D"), NormalTexture = new Texture("Tech Demo\\building01_rainshed01_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[21] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_iron01_D"), NormalTexture = new Texture("Tech Demo\\building01_iron01_N"), SpecularTexture = new Texture("Tech Demo\\building01_iron01_S"), SpecularPowerFromTexture = false, SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; building01.ModelRenderer.MeshMaterials[22] = new BlinnPhong { DiffuseTexture = new Texture("Tech Demo\\building01_rainshed02_D"), NormalTexture = new Texture("Tech Demo\\building01_rainshed02_N"), SpecularIntensity = specularIntensity, SpecularPower = specularPower, }; #endregion #region Statistics //GameObject2D statistics = new GameObject2D(); //statistics.AddComponent<ScriptStatisticsDrawer>(); #endregion #region Shadows and Lights Shadow.DistributeShadowCalculationsBetweenFrames = true; directionalLight = new GameObject3D(); directionalLight.AddComponent<DirectionalLight>(); directionalLight.DirectionalLight.Color = new Color(190, 190, 150); directionalLight.DirectionalLight.Intensity = 25.2f; directionalLight.Transform.LookAt(new Vector3(0.3f, 0.5f, -0.5f), Vector3.Zero, Vector3.Forward); DirectionalLight.Sun = directionalLight.DirectionalLight; directionalLight.DirectionalLight.Shadow = new CascadedShadow { Filter = Shadow.FilterType.Pcf7X7, LightDepthTextureSize = Size.Square1024X1024, ShadowTextureSize = Size.TextureSize.FullSize, // Lower than this could produce artifacts if the light is too intense. DepthBias = 0.0025f, FarPlaneSplit1 = 200, FarPlaneSplit2 = 300, FarPlaneSplit3 = 500, FarPlaneSplit4 = 800 }; #endregion #region Particles /* // Pit particles GameObject3D particles = new GameObject3D(); particles.AddComponent<ParticleEmitter>(); particles.AddComponent<ParticleRenderer>(); particles.ParticleEmitter.MaximumNumberParticles = 75; particles.Transform.LocalPosition = new Vector3(-1.2f, 0, -13); particles.ParticleEmitter.Duration = 50f; particles.ParticleEmitter.EmitterVelocitySensitivity = 1; particles.ParticleEmitter.MinimumHorizontalVelocity = 1; particles.ParticleEmitter.MaximumHorizontalVelocity = 2f; particles.ParticleEmitter.MinimumVerticalVelocity = 1; particles.ParticleEmitter.MaximumVerticalVelocity = 2; particles.ParticleRenderer.Texture = new Texture("Particles\\Smoke"); particles.ParticleRenderer.SoftParticles = true; particles.ParticleRenderer.FadeDistance = 25.0f; particles.ParticleRenderer.BlendState = BlendState.NonPremultiplied; particles.ParticleRenderer.DurationRandomness = 0.1f; particles.ParticleRenderer.Gravity = new Vector3(0, 1, 5); particles.ParticleRenderer.EndVelocity = 0.75f; particles.ParticleRenderer.MinimumColor = Color.White; particles.ParticleRenderer.MaximumColor = Color.White; particles.ParticleRenderer.RotateSpeed = new Vector2(-0.3f, 0.25f); particles.ParticleRenderer.StartSize = new Vector2(150, 300); particles.ParticleRenderer.EndSize = new Vector2(500, 750); particles.ParticleRenderer.TilesX = 1; particles.ParticleRenderer.TilesY = 1; particles.ParticleRenderer.AnimationRepetition = 1; particles = new GameObject3D(); particles.AddComponent<ParticleEmitter>(); particles.AddComponent<ParticleRenderer>(); particles.ParticleEmitter.MaximumNumberParticles = 75; particles.Transform.LocalPosition = new Vector3(-3.2f, 0, 13); particles.ParticleEmitter.Duration = 50f; particles.ParticleEmitter.EmitterVelocitySensitivity = 1; particles.ParticleEmitter.MinimumHorizontalVelocity = 1; particles.ParticleEmitter.MaximumHorizontalVelocity = 2f; particles.ParticleEmitter.MinimumVerticalVelocity = 1; particles.ParticleEmitter.MaximumVerticalVelocity = 2; particles.ParticleRenderer.Texture = new Texture("Particles\\Smoke"); particles.ParticleRenderer.SoftParticles = true; particles.ParticleRenderer.FadeDistance = 25.0f; particles.ParticleRenderer.BlendState = BlendState.NonPremultiplied; particles.ParticleRenderer.DurationRandomness = 0.1f; particles.ParticleRenderer.Gravity = new Vector3(0, 1, -25); particles.ParticleRenderer.EndVelocity = 0.75f; particles.ParticleRenderer.MinimumColor = Color.White; particles.ParticleRenderer.MaximumColor = Color.White; particles.ParticleRenderer.RotateSpeed = new Vector2(-0.2f, 0.2f); particles.ParticleRenderer.StartSize = new Vector2(150, 500); particles.ParticleRenderer.EndSize = new Vector2(500, 750); particles.ParticleRenderer.TilesX = 1; particles.ParticleRenderer.TilesY = 1; particles.ParticleRenderer.AnimationRepetition = 1; */ #endregion } // Load