hairparticle simulation rewrite and multisegment fix; added indirect debug draw features; added custom lod selection for shadow maps;

This commit is contained in:
Turánszki János
2025-02-15 18:34:21 +01:00
committed by GitHub
parent 1bc427d4d0
commit bee1d11567
19 changed files with 446 additions and 195 deletions
+41 -19
View File
@@ -114,7 +114,7 @@ void HairParticleWindow::Create(EditorComponent* _editor)
widthSlider.SetTooltip("Set hair strand width multiplier. This only scales the hair particles horizontally.");
AddWidget(&widthSlider);
stiffnessSlider.Create(0, 20, 5, 1000, "Stiffness: ");
stiffnessSlider.Create(0, 10, 0.5f, 100, "Stiffness: ");
stiffnessSlider.SetSize(XMFLOAT2(wid, hei));
stiffnessSlider.SetPos(XMFLOAT2(x, y += step));
stiffnessSlider.OnSlide([&](wi::gui::EventArgs args) {
@@ -127,11 +127,29 @@ void HairParticleWindow::Create(EditorComponent* _editor)
hair->stiffness = args.fValue;
hair->SetDirty();
}
});
});
stiffnessSlider.SetEnabled(false);
stiffnessSlider.SetTooltip("Set hair strand stiffness, how much it tries to get back to rest position.");
AddWidget(&stiffnessSlider);
dragSlider.Create(0, 1, 0.5f, 100, "Drag: ");
dragSlider.SetSize(XMFLOAT2(wid, hei));
dragSlider.SetPos(XMFLOAT2(x, y += step));
dragSlider.OnSlide([&](wi::gui::EventArgs args) {
wi::scene::Scene& scene = editor->GetCurrentScene();
for (auto& x : editor->translator.selected)
{
wi::HairParticleSystem* hair = scene.hairs.GetComponent(x.entity);
if (hair == nullptr)
continue;
hair->drag = args.fValue;
hair->SetDirty();
}
});
dragSlider.SetEnabled(false);
dragSlider.SetTooltip("Set hair strand drag, how much its movement slows down over time.");
AddWidget(&dragSlider);
randomnessSlider.Create(0, 1, 0.2f, 1000, "Randomness: ");
randomnessSlider.SetSize(XMFLOAT2(wid, hei));
randomnessSlider.SetPos(XMFLOAT2(x, y += step));
@@ -150,22 +168,23 @@ void HairParticleWindow::Create(EditorComponent* _editor)
randomnessSlider.SetTooltip("Set hair length randomization factor. This will affect randomness of hair lengths.");
AddWidget(&randomnessSlider);
//segmentcountSlider.Create(1, 10, 1, 9, "Segment Count: ");
//segmentcountSlider.SetSize(XMFLOAT2(wid, hei));
//segmentcountSlider.SetPos(XMFLOAT2(x, y += step));
//segmentcountSlider.OnSlide([&](wi::gui::EventArgs args) {
// wi::scene::Scene& scene = editor->GetCurrentScene();
// for (auto& x : editor->translator.selected)
// {
// wi::HairParticleSystem* hair = scene.hairs.GetComponent(x.entity);
// if (hair == nullptr)
// continue;
// hair->segmentCount = (uint32_t)args.iValue;
// }
//});
//segmentcountSlider.SetEnabled(false);
//segmentcountSlider.SetTooltip("Set hair strand segment count. This will affect simulation quality and performance.");
//AddWidget(&segmentcountSlider);
segmentcountSlider.Create(1, 10, 1, 9, "Segments: ");
segmentcountSlider.SetSize(XMFLOAT2(wid, hei));
segmentcountSlider.SetPos(XMFLOAT2(x, y += step));
segmentcountSlider.OnSlide([&](wi::gui::EventArgs args) {
wi::scene::Scene& scene = editor->GetCurrentScene();
for (auto& x : editor->translator.selected)
{
wi::HairParticleSystem* hair = scene.hairs.GetComponent(x.entity);
if (hair == nullptr)
continue;
hair->segmentCount = (uint32_t)args.iValue;
hair->SetDirty();
}
});
segmentcountSlider.SetEnabled(false);
segmentcountSlider.SetTooltip("Set the number of segments that make up one strand.");
AddWidget(&segmentcountSlider);
randomSeedSlider.Create(1, 12345, 1, 12344, "Random seed: ");
randomSeedSlider.SetSize(XMFLOAT2(wid, hei));
@@ -384,9 +403,10 @@ void HairParticleWindow::SetEntity(Entity entity)
lengthSlider.SetValue(hair->length);
widthSlider.SetValue(hair->width);
stiffnessSlider.SetValue(hair->stiffness);
dragSlider.SetValue(hair->drag);
randomnessSlider.SetValue(hair->randomness);
countSlider.SetValue((float)hair->strandCount);
//segmentcountSlider.SetValue((float)hair->segmentCount);
segmentcountSlider.SetValue((float)hair->segmentCount);
randomSeedSlider.SetValue((float)hair->randomSeed);
viewDistanceSlider.SetValue(hair->viewDistance);
uniformitySlider.SetValue(hair->uniformity);
@@ -503,9 +523,11 @@ void HairParticleWindow::ResizeLayout()
add_fullwidth(infoLabel);
add(meshComboBox);
add(countSlider);
add(segmentcountSlider);
add(lengthSlider);
add(widthSlider);
add(stiffnessSlider);
add(dragSlider);
add(randomnessSlider);
add(randomSeedSlider);
add(viewDistanceSlider);