From f641de7158e268603c69785b45254390bd1503b4 Mon Sep 17 00:00:00 2001 From: danielbui78 Date: Tue, 27 Aug 2024 11:23:45 -0400 Subject: [PATCH] Remove Scalp (fix opaque scalp) --- DazStudioPlugin/DzRobloxAction.cpp | 2 ++ DazStudioPlugin/DzRobloxAction.h | 1 + DazStudioPlugin/DzRobloxDialog.cpp | 12 +++++-- DazStudioPlugin/DzRobloxDialog.h | 1 + DazStudioPlugin/Resources/plugindata.zip | Bin 6842635 -> 6842916 bytes DazStudioPlugin/real_version.h | 2 +- PluginData/blender_dtu_to_r15_accessories.py | 32 +++++++++++++++++++ 7 files changed, 46 insertions(+), 4 deletions(-) diff --git a/DazStudioPlugin/DzRobloxAction.cpp b/DazStudioPlugin/DzRobloxAction.cpp index 678ac46..6a23245 100644 --- a/DazStudioPlugin/DzRobloxAction.cpp +++ b/DazStudioPlugin/DzRobloxAction.cpp @@ -1404,6 +1404,7 @@ void DzRobloxAction::writeConfiguration() writer.addMember("Texture Size", m_nRobloxTextureSize); writer.addMember("Texture Bake Quality", m_nBlenderTextureBakeQuality); writer.addMember("Hidden Surface Removal", m_bHiddenSurfaceRemoval); + writer.addMember("Remove Scalp Material", m_bRemoveScalp); if (true) { @@ -1504,6 +1505,7 @@ bool DzRobloxAction::readGui(DZ_BRIDGE_NAMESPACE::DzBridgeDialog* BridgeDialog) m_bEnableBreastsGone = pRobloxDialog->m_wBreastsGoneCheckbox->isChecked(); m_bBakeSingleOutfit = pRobloxDialog->m_wBakeSingleOutfitCheckbox->isChecked(); m_bHiddenSurfaceRemoval = pRobloxDialog->m_wHiddenSurfaceRemovalCheckbox->isChecked(); + m_bRemoveScalp = pRobloxDialog->m_wRemoveScalpMaterialCheckbox->isChecked(); // modesty overlay QVariant vModestyData = pRobloxDialog->m_wModestyOverlayCombo->itemData(pRobloxDialog->m_wModestyOverlayCombo->currentIndex()); diff --git a/DazStudioPlugin/DzRobloxAction.h b/DazStudioPlugin/DzRobloxAction.h index c8c86d0..4cd5cf5 100644 --- a/DazStudioPlugin/DzRobloxAction.h +++ b/DazStudioPlugin/DzRobloxAction.h @@ -145,6 +145,7 @@ class DzRobloxAction : public DZ_BRIDGE_NAMESPACE::DzBridgeAction { int m_nReplaceEyebrows = 0; int m_nReplaceEyelashes = 0; bool m_bHiddenSurfaceRemoval = false; + bool m_bRemoveScalp = false; friend class DzRobloxUtils; diff --git a/DazStudioPlugin/DzRobloxDialog.cpp b/DazStudioPlugin/DzRobloxDialog.cpp index dbede48..84271ad 100644 --- a/DazStudioPlugin/DzRobloxDialog.cpp +++ b/DazStudioPlugin/DzRobloxDialog.cpp @@ -160,20 +160,26 @@ DzRobloxDialog::DzRobloxDialog(QWidget* parent) : QLabel* wReplacementPartsRowLabel = new QLabel(tr("Replacement Assets")); // Accessory Export Options - QHBoxLayout* wClothingOptionsLayout = new QHBoxLayout(); + QVBoxLayout* wClothingOptionsLayout = new QVBoxLayout(); m_wBakeSingleOutfitCheckbox = new QCheckBox(tr("Merge all clothing together")); QString sBakeSingleOutfit = tr("Merge all clothing and hair items togother so that they use a single Roblox clothing slot"); m_wBakeSingleOutfitCheckbox->setToolTip(sBakeSingleOutfit); m_wBakeSingleOutfitCheckbox->setWhatsThis(sBakeSingleOutfit); m_wBakeSingleOutfitCheckbox->setChecked(false); - m_wHiddenSurfaceRemovalCheckbox = new QCheckBox(tr("Hidden Geometry Removal")); + m_wHiddenSurfaceRemovalCheckbox = new QCheckBox(tr("Remove Hidden Geometry")); QString sHiddenSurfaceRemoval = tr("Remove unnecessary triangles which are hidden underneath other triangles and visible (Experimental)"); m_wHiddenSurfaceRemovalCheckbox->setToolTip(sHiddenSurfaceRemoval); m_wHiddenSurfaceRemovalCheckbox->setWhatsThis(sHiddenSurfaceRemoval); m_wHiddenSurfaceRemovalCheckbox->setChecked(false); + QString sRemoveScalp = tr("Remove scalp geometry from hair assets. May fix opaque scalp issues."); + m_wRemoveScalpMaterialCheckbox = new QCheckBox(tr("Remove Scalp")); + m_wRemoveScalpMaterialCheckbox->setToolTip(sRemoveScalp); + m_wRemoveScalpMaterialCheckbox->setToolTip(sRemoveScalp); + m_wRemoveScalpMaterialCheckbox->setChecked(true); wClothingOptionsLayout->addWidget(m_wBakeSingleOutfitCheckbox); wClothingOptionsLayout->addWidget(m_wHiddenSurfaceRemovalCheckbox); - QLabel* wLayeredClothingRowLabel = new QLabel(tr("Layered Clothing")); + wClothingOptionsLayout->addWidget(m_wRemoveScalpMaterialCheckbox); + QLabel* wLayeredClothingRowLabel = new QLabel(tr("Accessories")); // Add GUI to layout mainLayout->insertRow(1, "Roblox Output Folder", robloxOutputFolderLayout); diff --git a/DazStudioPlugin/DzRobloxDialog.h b/DazStudioPlugin/DzRobloxDialog.h index 50132c8..8cae963 100644 --- a/DazStudioPlugin/DzRobloxDialog.h +++ b/DazStudioPlugin/DzRobloxDialog.h @@ -129,6 +129,7 @@ protected slots: QComboBox* m_wEyelashReplacement; QCheckBox* m_wHiddenSurfaceRemovalCheckbox; + QCheckBox* m_wRemoveScalpMaterialCheckbox; virtual void refreshAsset() override; diff --git a/DazStudioPlugin/Resources/plugindata.zip b/DazStudioPlugin/Resources/plugindata.zip index e52156cc08e9b0dc624256b0c4eaebd4ce89e126..b60378039c0369ecfde5c1839df6016c09fec433 100644 GIT binary patch delta 8005 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 F{{#K!+F$?x delta 7881 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