diff --git a/Editor/MaterialWindow.cpp b/Editor/MaterialWindow.cpp index 1d93d5c93..8b2ea338f 100644 --- a/Editor/MaterialWindow.cpp +++ b/Editor/MaterialWindow.cpp @@ -13,22 +13,10 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) assert(GUI && "Invalid GUI!"); materialWindow = new wiWindow(GUI, "Material Window"); - materialWindow->SetSize(XMFLOAT2(760, 890)); + materialWindow->SetSize(XMFLOAT2(700, 760)); GUI->AddWidget(materialWindow); - materialNameField = new wiTextInputField("MaterialName"); - materialNameField->SetPos(XMFLOAT2(10, 60)); - materialNameField->SetSize(XMFLOAT2(300, 20)); - materialNameField->OnInputAccepted([&](wiEventArgs args) { - NameComponent* name = wiScene::GetScene().names.GetComponent(entity); - if (name != nullptr) - { - *name = args.sValue; - } - }); - materialWindow->AddWidget(materialNameField); - - float x = 540, y = 30; + float x = 540, y = 0; float step = 25; waterCheckBox = new wiCheckBox("Water: "); @@ -112,11 +100,12 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) materialWindow->AddWidget(occlusionSecondaryCheckBox); - step = 35; + step = 30; + float hei = 25; normalMapSlider = new wiSlider(0, 4, 1, 4000, "Normalmap: "); normalMapSlider->SetTooltip("How much the normal map should distort the face normals (bumpiness)."); - normalMapSlider->SetSize(XMFLOAT2(100, 30)); + normalMapSlider->SetSize(XMFLOAT2(100, hei)); normalMapSlider->SetPos(XMFLOAT2(x, y += step)); normalMapSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -127,7 +116,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) roughnessSlider = new wiSlider(0, 1, 0.5f, 1000, "Roughness: "); roughnessSlider->SetTooltip("Adjust the surface roughness. Rough surfaces are less shiny, more matte."); - roughnessSlider->SetSize(XMFLOAT2(100, 30)); + roughnessSlider->SetSize(XMFLOAT2(100, hei)); roughnessSlider->SetPos(XMFLOAT2(x, y += step)); roughnessSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -138,7 +127,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) reflectanceSlider = new wiSlider(0, 1, 0.5f, 1000, "Reflectance: "); reflectanceSlider->SetTooltip("Adjust the overall surface reflectivity."); - reflectanceSlider->SetSize(XMFLOAT2(100, 30)); + reflectanceSlider->SetSize(XMFLOAT2(100, hei)); reflectanceSlider->SetPos(XMFLOAT2(x, y += step)); reflectanceSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -149,7 +138,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) metalnessSlider = new wiSlider(0, 1, 0.0f, 1000, "Metalness: "); metalnessSlider->SetTooltip("The more metal-like the surface is, the more the its color will contribute to the reflection color."); - metalnessSlider->SetSize(XMFLOAT2(100, 30)); + metalnessSlider->SetSize(XMFLOAT2(100, hei)); metalnessSlider->SetPos(XMFLOAT2(x, y += step)); metalnessSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -160,7 +149,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) alphaRefSlider = new wiSlider(0, 1, 1.0f, 1000, "AlphaRef: "); alphaRefSlider->SetTooltip("Adjust the alpha cutoff threshold. Some performance optimizations will be disabled."); - alphaRefSlider->SetSize(XMFLOAT2(100, 30)); + alphaRefSlider->SetSize(XMFLOAT2(100, hei)); alphaRefSlider->SetPos(XMFLOAT2(x, y += step)); alphaRefSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -171,7 +160,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) refractionIndexSlider = new wiSlider(0, 1.0f, 0.02f, 1000, "Refraction Index: "); refractionIndexSlider->SetTooltip("Adjust the IOR (index of refraction). It controls the amount of distortion of the scene visible through the transparent object. No effect when BlendMode is set to OPAQUE."); - refractionIndexSlider->SetSize(XMFLOAT2(100, 30)); + refractionIndexSlider->SetSize(XMFLOAT2(100, hei)); refractionIndexSlider->SetPos(XMFLOAT2(x, y += step)); refractionIndexSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -182,7 +171,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) emissiveSlider = new wiSlider(0, 1, 0.0f, 1000, "Emissive: "); emissiveSlider->SetTooltip("Adjust the light emission of the surface. The color of the light emitted is that of the color of the material."); - emissiveSlider->SetSize(XMFLOAT2(100, 30)); + emissiveSlider->SetSize(XMFLOAT2(100, hei)); emissiveSlider->SetPos(XMFLOAT2(x, y += step)); emissiveSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -193,7 +182,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) sssSlider = new wiSlider(0, 1, 0.0f, 1000, "Subsurface Scattering: "); sssSlider->SetTooltip("Adjust how much the light is scattered when entered inside the surface of the object. (SSS postprocess must be enabled)"); - sssSlider->SetSize(XMFLOAT2(100, 30)); + sssSlider->SetSize(XMFLOAT2(100, hei)); sssSlider->SetPos(XMFLOAT2(x, y += step)); sssSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -204,7 +193,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) pomSlider = new wiSlider(0, 0.1f, 0.0f, 1000, "Parallax Occlusion Mapping: "); pomSlider->SetTooltip("Adjust how much the bump map should modulate the surface parallax effect."); - pomSlider->SetSize(XMFLOAT2(100, 30)); + pomSlider->SetSize(XMFLOAT2(100, hei)); pomSlider->SetPos(XMFLOAT2(x, y += step)); pomSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -215,7 +204,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) displacementMappingSlider = new wiSlider(0, 0.1f, 0.0f, 1000, "Displacement Mapping: "); displacementMappingSlider->SetTooltip("Adjust how much the bump map should modulate the geometry when using tessellation."); - displacementMappingSlider->SetSize(XMFLOAT2(100, 30)); + displacementMappingSlider->SetSize(XMFLOAT2(100, hei)); displacementMappingSlider->SetPos(XMFLOAT2(x, y += step)); displacementMappingSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -226,7 +215,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texAnimFrameRateSlider = new wiSlider(0, 60, 0, 60, "Texcoord anim FPS: "); texAnimFrameRateSlider->SetTooltip("Adjust the texture animation frame rate (frames per second). Any value above 0 will make the material dynamic."); - texAnimFrameRateSlider->SetSize(XMFLOAT2(100, 30)); + texAnimFrameRateSlider->SetSize(XMFLOAT2(100, hei)); texAnimFrameRateSlider->SetPos(XMFLOAT2(x, y += step)); texAnimFrameRateSlider->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -239,7 +228,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texAnimDirectionSliderU = new wiSlider(-0.05f, 0.05f, 0, 1000, "Texcoord anim U: "); texAnimDirectionSliderU->SetTooltip("Adjust the texture animation speed along the U direction in texture space."); - texAnimDirectionSliderU->SetSize(XMFLOAT2(100, 30)); + texAnimDirectionSliderU->SetSize(XMFLOAT2(100, hei)); texAnimDirectionSliderU->SetPos(XMFLOAT2(x, y += step)); texAnimDirectionSliderU->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -252,7 +241,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texAnimDirectionSliderV = new wiSlider(-0.05f, 0.05f, 0, 1000, "Texcoord anim V: "); texAnimDirectionSliderV->SetTooltip("Adjust the texture animation speed along the V direction in texture space."); - texAnimDirectionSliderV->SetSize(XMFLOAT2(100, 30)); + texAnimDirectionSliderV->SetSize(XMFLOAT2(100, hei)); texAnimDirectionSliderV->SetPos(XMFLOAT2(x, y += step)); texAnimDirectionSliderV->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -265,7 +254,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texMulSliderX = new wiSlider(0.01f, 10.0f, 0, 1000, "Texture TileSize X: "); texMulSliderX->SetTooltip("Adjust the texture mapping size."); - texMulSliderX->SetSize(XMFLOAT2(100, 30)); + texMulSliderX->SetSize(XMFLOAT2(100, hei)); texMulSliderX->SetPos(XMFLOAT2(x, y += step)); texMulSliderX->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -279,7 +268,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) texMulSliderY = new wiSlider(0.01f, 10.0f, 0, 1000, "Texture TileSize Y: "); texMulSliderY->SetTooltip("Adjust the texture mapping size."); - texMulSliderY->SetSize(XMFLOAT2(100, 30)); + texMulSliderY->SetSize(XMFLOAT2(100, hei)); texMulSliderY->SetPos(XMFLOAT2(x, y += step)); texMulSliderY->OnSlide([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); @@ -293,7 +282,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) baseColorPicker = new wiColorPicker(GUI, "Base Color", false); - baseColorPicker->SetPos(XMFLOAT2(10, 300)); + baseColorPicker->SetPos(XMFLOAT2(10, 240)); baseColorPicker->SetVisible(true); baseColorPicker->SetEnabled(true); baseColorPicker->OnColorChanged([&](wiEventArgs args) { @@ -307,7 +296,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) emissiveColorPicker = new wiColorPicker(GUI, "Emissive Color", false); - emissiveColorPicker->SetPos(XMFLOAT2(10, 570)); + emissiveColorPicker->SetPos(XMFLOAT2(10, 500)); emissiveColorPicker->SetVisible(true); emissiveColorPicker->SetEnabled(true); emissiveColorPicker->OnColorChanged([&](wiEventArgs args) { @@ -323,7 +312,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) blendModeComboBox = new wiComboBox("Blend mode: "); blendModeComboBox->SetPos(XMFLOAT2(x, y += step)); - blendModeComboBox->SetSize(XMFLOAT2(100, 25)); + blendModeComboBox->SetSize(XMFLOAT2(100, hei)); blendModeComboBox->OnSelect([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr && args.iValue >= 0) @@ -343,7 +332,7 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) shaderTypeComboBox = new wiComboBox("Custom Shader: "); shaderTypeComboBox->SetTooltip("Select a custom shader for his material. See wiRenderer:RegisterCustomShader() for more info."); shaderTypeComboBox->SetPos(XMFLOAT2(x, y += step)); - shaderTypeComboBox->SetSize(XMFLOAT2(100, 25)); + shaderTypeComboBox->SetSize(XMFLOAT2(100, hei)); shaderTypeComboBox->OnSelect([&](wiEventArgs args) { MaterialComponent* material = wiScene::GetScene().materials.GetComponent(entity); if (material != nullptr) @@ -364,7 +353,19 @@ MaterialWindow::MaterialWindow(wiGUI* gui) : GUI(gui) // Textures: x = 10; - y = 60; + y = 0; + + materialNameField = new wiTextInputField("MaterialName"); + materialNameField->SetPos(XMFLOAT2(10, y += step)); + materialNameField->SetSize(XMFLOAT2(300, 25)); + materialNameField->OnInputAccepted([&](wiEventArgs args) { + NameComponent* name = wiScene::GetScene().names.GetComponent(entity); + if (name != nullptr) + { + *name = args.sValue; + } + }); + materialWindow->AddWidget(materialNameField); texture_baseColor_Label = new wiLabel("BaseColorMap: "); texture_baseColor_Label->SetPos(XMFLOAT2(x, y += step)); diff --git a/Editor/WeatherWindow.cpp b/Editor/WeatherWindow.cpp index 4ae39176f..0fedd9816 100644 --- a/Editor/WeatherWindow.cpp +++ b/Editor/WeatherWindow.cpp @@ -68,14 +68,22 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) }); weatherWindow->AddWidget(cloudSpeedSlider); - windSpeedSlider = new wiSlider(0.0f, 0.2f, 0.0f, 10000, "Wind Speed: "); + windSpeedSlider = new wiSlider(0.0f, 4.0f, 1.0f, 10000, "Wind Speed: "); windSpeedSlider->SetSize(XMFLOAT2(100, 30)); windSpeedSlider->SetPos(XMFLOAT2(x, y += step)); windSpeedSlider->OnSlide([&](wiEventArgs args) { - UpdateWind(); + GetWeather().windSpeed = args.fValue; }); weatherWindow->AddWidget(windSpeedSlider); + windMagnitudeSlider = new wiSlider(0.0f, 0.2f, 0.0f, 10000, "Wind Magnitude: "); + windMagnitudeSlider->SetSize(XMFLOAT2(100, 30)); + windMagnitudeSlider->SetPos(XMFLOAT2(x, y += step)); + windMagnitudeSlider->OnSlide([&](wiEventArgs args) { + UpdateWind(); + }); + weatherWindow->AddWidget(windMagnitudeSlider); + windDirectionSlider = new wiSlider(0, 1, 0, 10000, "Wind Direction: "); windDirectionSlider->SetSize(XMFLOAT2(100, 30)); windDirectionSlider->SetPos(XMFLOAT2(x, y += step)); @@ -92,7 +100,7 @@ WeatherWindow::WeatherWindow(wiGUI* gui) : GUI(gui) }); weatherWindow->AddWidget(windWaveSizeSlider); - windRandomnessSlider = new wiSlider(0, 1, 0, 10000, "Wind Randomness: "); + windRandomnessSlider = new wiSlider(0, 10, 5, 10000, "Wind Randomness: "); windRandomnessSlider->SetSize(XMFLOAT2(100, 30)); windRandomnessSlider->SetPos(XMFLOAT2(x, y += step)); windRandomnessSlider->OnSlide([&](wiEventArgs args) { @@ -484,6 +492,10 @@ void WeatherWindow::Update() cloudinessSlider->SetValue(weather.cloudiness); cloudScaleSlider->SetValue(weather.cloudScale); cloudSpeedSlider->SetValue(weather.cloudSpeed); + windSpeedSlider->SetValue(weather.windSpeed); + windWaveSizeSlider->SetValue(weather.windWaveSize); + windRandomnessSlider->SetValue(weather.windRandomness); + windMagnitudeSlider->SetValue(XMVectorGetX(XMVector3Length(XMLoadFloat3(&weather.windDirection)))); ambientColorPicker->SetPickColor(wiColor::fromFloat3(weather.ambient)); horizonColorPicker->SetPickColor(wiColor::fromFloat3(weather.horizon)); @@ -529,6 +541,6 @@ void WeatherWindow::UpdateWind() XMMATRIX rot = XMMatrixRotationY(windDirectionSlider->GetValue() * XM_PI * 2); XMVECTOR dir = XMVectorSet(1, 0, 0, 0); dir = XMVector3TransformNormal(dir, rot); - dir *= windSpeedSlider->GetValue(); + dir *= windMagnitudeSlider->GetValue(); XMStoreFloat3(&GetWeather().windDirection, dir); } diff --git a/Editor/WeatherWindow.h b/Editor/WeatherWindow.h index 2d318061f..d2af01b7b 100644 --- a/Editor/WeatherWindow.h +++ b/Editor/WeatherWindow.h @@ -30,6 +30,7 @@ public: wiSlider* cloudScaleSlider; wiSlider* cloudSpeedSlider; wiSlider* windSpeedSlider; + wiSlider* windMagnitudeSlider; wiSlider* windDirectionSlider; wiSlider* windWaveSizeSlider; wiSlider* windRandomnessSlider; diff --git a/WickedEngine/ArchiveVersionHistory.txt b/WickedEngine/ArchiveVersionHistory.txt index d9e68124a..2bd6265e3 100644 --- a/WickedEngine/ArchiveVersionHistory.txt +++ b/WickedEngine/ArchiveVersionHistory.txt @@ -1,5 +1,6 @@ This file contains changelog of wiArchive versions +40: Serialized WeatherComponent::windSpeed 39: Serialized indices and weights for Hair Particle 38: Serialized SpringComponent 37: Serialized InverseKinematicsComponent diff --git a/WickedEngine/ShaderInterop_Renderer.h b/WickedEngine/ShaderInterop_Renderer.h index 38a8da9e5..f66ff80e1 100644 --- a/WickedEngine/ShaderInterop_Renderer.h +++ b/WickedEngine/ShaderInterop_Renderer.h @@ -207,7 +207,8 @@ CBUFFER(FrameCB, CBSLOT_RENDERER_FRAME) float g_xFrame_Time; float g_xFrame_TimePrev; - float2 _padding0_frameCB; + float _padding0_frameCB; + float g_xFrame_WindSpeed; float g_xFrame_DeltaTime; uint g_xFrame_FrameCount; diff --git a/WickedEngine/hairparticleVS.hlsl b/WickedEngine/hairparticleVS.hlsl index a16da9182..73bcd55fb 100644 --- a/WickedEngine/hairparticleVS.hlsl +++ b/WickedEngine/hairparticleVS.hlsl @@ -30,8 +30,8 @@ VertexToPixel main(uint fakeIndex : SV_VERTEXID) const uint segmentID = (fakeIndex / 12) % xHairSegmentCount; const uint particleID = fakeIndex / 12; - float3 position = particleBuffer[particleID].position; - Out.fade = saturate(distance(position.xyz, g_xCamera_CamPos.xyz) / xHairViewDistance); + float3 rootposition = particleBuffer[particleID - segmentID].position; + Out.fade = saturate(distance(rootposition.xyz, g_xCamera_CamPos.xyz) / xHairViewDistance); Out.fade = saturate(Out.fade - 0.8f) * 5.0f; // fade will be on edge and inwards 20% [branch] @@ -74,15 +74,17 @@ VertexToPixel main(uint fakeIndex : SV_VERTEXID) patchPos.xyz *= frame.xyx * 0.5f; // simplistic wind effect only affects the top, but leaves the base as is: - const float3 posrand = (position.x + position.y + position.z) * g_xFrame_WindRandomness; - float3 wind = sin(g_xFrame_Time * (1 + g_xFrame_WindWaveSize) + posrand) * g_xFrame_WindDirection * patchPos.y; - float3 windPrev = sin(g_xFrame_TimePrev * (1 + g_xFrame_WindWaveSize) + posrand) * g_xFrame_WindDirection * patchPos.y; + const float waveoffset = dot(rootposition, g_xFrame_WindDirection) * g_xFrame_WindWaveSize + rand / 255.0f * g_xFrame_WindRandomness; + const float3 wavedir = g_xFrame_WindDirection * (segmentID + patchPos.y); + const float3 wind = sin(g_xFrame_Time * g_xFrame_WindSpeed + waveoffset) * wavedir; + const float3 windPrev = sin(g_xFrame_TimePrev * g_xFrame_WindSpeed + waveoffset) * wavedir; // rotate the patch into the tangent space of the emitting triangle: float3x3 TBN = float3x3(tangent, normal, binormal); // don't derive binormal, because we want the shear! patchPos = mul(patchPos, TBN); // inset to the emitter a bit, to avoid disconnect: + float3 position = particleBuffer[particleID].position; position.xyz -= normal * 0.1 * len; @@ -94,7 +96,7 @@ VertexToPixel main(uint fakeIndex : SV_VERTEXID) Out.pos3D = Out.pos.xyz; Out.pos = mul(g_xCamera_VP, Out.pos); - Out.nor = normal; + Out.nor = normalize(normal + wind); Out.tex = uv; Out.pos2D = Out.pos; diff --git a/WickedEngine/objectPS_paintradius.hlsl b/WickedEngine/objectPS_paintradius.hlsl index 751539f96..e124d8e10 100644 --- a/WickedEngine/objectPS_paintradius.hlsl +++ b/WickedEngine/objectPS_paintradius.hlsl @@ -3,7 +3,7 @@ float4 main(PixelInputType_Simple PSIn) : SV_TARGET { - const uint2 pixel = (xPaintRadUVSET == 0 ? PSIn.uvsets.xy : PSIn.uvsets.zw) * xPaintRadResolution; + const float2 pixel = (xPaintRadUVSET == 0 ? PSIn.uvsets.xy : PSIn.uvsets.zw) * xPaintRadResolution; const float dist = distance(pixel, xPaintRadCenter); float circle = dist - xPaintRadRadius; float3 color = circle < 0 ? float3(0, 0, 0) : float3(1, 1, 1); diff --git a/WickedEngine/wiArchive.cpp b/WickedEngine/wiArchive.cpp index 377a5384e..c5a4df46e 100644 --- a/WickedEngine/wiArchive.cpp +++ b/WickedEngine/wiArchive.cpp @@ -7,7 +7,7 @@ using namespace std; // this should always be only INCREMENTED and only if a new serialization is implemeted somewhere! -uint64_t __archiveVersion = 39; +uint64_t __archiveVersion = 40; // this is the version number of which below the archive is not compatible with the current version uint64_t __archiveVersionBarrier = 22; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 07ab1d01d..8e40d3b62 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -8437,6 +8437,7 @@ void UpdateFrameCB(CommandList cmd) cb.g_xFrame_ForceFieldArrayCount = entityArrayCount_ForceFields; cb.g_xFrame_EnvProbeArrayOffset = entityArrayOffset_EnvProbes; cb.g_xFrame_EnvProbeArrayCount = entityArrayCount_EnvProbes; + cb.g_xFrame_WindSpeed = scene.weather.windSpeed; cb.g_xFrame_WindRandomness = scene.weather.windRandomness; cb.g_xFrame_WindWaveSize = scene.weather.windWaveSize; cb.g_xFrame_WindDirection = scene.weather.windDirection; diff --git a/WickedEngine/wiScene.h b/WickedEngine/wiScene.h index c9cdea7d1..e42d03458 100644 --- a/WickedEngine/wiScene.h +++ b/WickedEngine/wiScene.h @@ -935,6 +935,7 @@ namespace wiScene XMFLOAT3 windDirection = XMFLOAT3(0, 0, 0); float windRandomness = 5; float windWaveSize = 1; + float windSpeed = 1; struct OceanParameters { diff --git a/WickedEngine/wiScene_Serializers.cpp b/WickedEngine/wiScene_Serializers.cpp index 843645a1f..b8c08ea03 100644 --- a/WickedEngine/wiScene_Serializers.cpp +++ b/WickedEngine/wiScene_Serializers.cpp @@ -701,6 +701,10 @@ namespace wiScene archive >> skyMapName; skyMap = wiResourceManager::Load(dir + skyMapName); } + if (archive.GetVersion() >= 40) + { + archive >> windSpeed; + } } else @@ -747,6 +751,10 @@ namespace wiScene } archive << skyMapName; } + if (archive.GetVersion() >= 40) + { + archive << windSpeed; + } } } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 2cfc98ff6..c990a5fb4 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 39; // minor bug fixes, alterations, refactors, updates - const int revision = 39; + const int revision = 40; long GetVersion() diff --git a/models/girl.wiscene b/models/girl.wiscene index dacb7fcce..026dd2864 100644 Binary files a/models/girl.wiscene and b/models/girl.wiscene differ