Fur als 4. Paint-Map + Ziel-Opacity-Blend

Fur wird die vierte kanonische Paint-Map (RGB=Farbe, A=Länge). Integration
über Seed (kahl), GPU/CPU-Paint, Undo, Netzwerk-Sync, Persistence (fur.png,
v6) und Live-RT-Hook im FurShellRenderer. HUD-Binding (Toggle/Picker/Alpha)
aktiviert. Fur-Alpha lerpt jetzt zu einer Ziel-Opacity (Slider_FurOpacity)
statt additiv Richtung 1 zu akkumulieren (zwei Brush-Passes: Fade + Deposit).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 4.8 committed 2026-07-03 21:35:53 +02:00
1 parent 43791abc79
commit 7536e8ec8b
11 files changed
+319 -20

No files matched your search

@@ -34,14 +34,17 @@ public partial class PaintHud : MonoBehaviour
private const string PanelEmission = "Panel_Emission";
private const string PanelBrushSize = "Panel_BrushSize";
private const string PanelPaintings = "Panel_Paintings";
private const string PanelFur = "Panel_Fur";
private const string ToggleAlbedo = "Toggle_Albedo";
private const string ToggleMetallicSmoothness = "Toggle_MetallicSmoothness";
private const string ToggleOcclusion = "Toggle_Occlusion";
private const string ToggleEmission = "Toggle_Emission";
private const string ToggleSpray = "Toggle_Spray";
private const string TogglePipette = "Toggle_Pipette";
private const string ToggleFur = "Toggle_Fur";
private const string PickerAlbedo = "Picker_Albedo";
private const string PickerEmission = "Picker_Emission";
private const string PickerFur = "Picker_Fur";
private const string SliderAlbedoAlpha = "Slider_AlbedoAlpha";
private const string SliderEmissionAlpha = "Slider_EmissionAlpha";
private const string SliderMetallic = "Slider_Metallic";
@@ -62,6 +65,8 @@ public partial class PaintHud : MonoBehaviour
private const string SliderOcclusionThreshold = "Slider_OcclusionThreshold";
private const string SliderNormalIntensity = "Slider_NormalIntensity";
private const string SliderParallaxIntensity = "Slider_ParallaxIntensity";
private const string SliderFurAlpha = "Slider_FurAlpha";
private const string SliderFurOpacity = "Slider_FurOpacity";
private const string MaskSelector = "MaskSelector";
private const string MaskSwatchPrefix = "MaskSwatch_";
@@ -75,7 +80,8 @@ public partial class PaintHud : MonoBehaviour
PanelBrushSize,
PanelSpray,
PanelGeneral,
PanelPaintings
PanelPaintings,
PanelFur
};
private GameObject _panel;
@@ -209,12 +215,14 @@ public partial class PaintHud : MonoBehaviour
WireToggle(panel, ToggleEmission, painter && painter.paintEmission, v => { if (painter) painter.paintEmission = v; });
WireToggle(panel, ToggleSpray, painter && painter.spray, v => { if (painter) painter.spray = v; });
WireToggle(panel, TogglePipette, painter && painter.pipette, v => { if (painter) painter.pipette = v; });
WireToggle(panel, ToggleFur, painter && painter.fur, v => { if (painter) painter.fur = v; });
WirePanelFade(panel, PanelAlbedo, ToggleAlbedo);
WirePanelFade(panel, PanelMetallicSmoothness, ToggleMetallicSmoothness);
WirePanelFade(panel, PanelOcclusion, ToggleOcclusion);
WirePanelFade(panel, PanelEmission, ToggleEmission);
WirePanelFade(panel, PanelSpray, ToggleSpray);
WirePanelFade(panel, PanelFur, ToggleFur);
// Picker drives only RGB (keeping the painter's current alpha); a standalone slider drives alpha.
WirePicker(panel, PickerAlbedo, painter ? painter.brushColor : Color.red,
@@ -255,6 +263,13 @@ public partial class PaintHud : MonoBehaviour
WireSlider(panel, SliderNormalIntensity, painter ? painter.HeightNormalIntensity : 1.4f, v => { if (painter) painter.HeightNormalIntensity = v; });
WireSlider(panel, SliderParallaxIntensity, painter ? painter.ParallaxIntensity : 1f, v => { if (painter) painter.ParallaxIntensity = v; });
WirePicker(panel, PickerFur, painter ? painter.furColor : Color.blue,
c => { if (painter) painter.furColor = WithRgb(painter.furColor, c); });
WireSlider(panel, SliderFurAlpha, painter ? painter.furColor.a : .6f,
v => { if (painter) painter.furColor = WithAlpha(painter.furColor, v); });
WireSlider(panel, SliderFurOpacity, painter ? painter.furOpacity : 1f,
v => { if (painter) painter.furOpacity = v; });
foreach (var name in DraggablePanels)
MakeDraggable(panel, name);
}
@@ -276,11 +291,15 @@ public partial class PaintHud : MonoBehaviour
SetToggle(panel, ToggleEmission, painter.paintEmission);
SetToggle(panel, ToggleSpray, painter.spray);
SetToggle(panel, TogglePipette, painter.pipette);
SetToggle(panel, ToggleFur, painter.fur);
SetPicker(panel, PickerAlbedo, painter.brushColor);
SetPicker(panel, PickerEmission, painter.emissionColor);
SetPicker(panel, PickerFur, painter.furColor);
SetSlider(panel, SliderAlbedoAlpha, painter.brushColor.a);
SetSlider(panel, SliderEmissionAlpha, painter.emissionColor.a);
SetSlider(panel, SliderFurAlpha, painter.furColor.a);
SetSlider(panel, SliderFurOpacity, painter.furOpacity);
SetSlider(panel, SliderMetallic, painter.metallic);
SetSlider(panel, SliderSmoothness, painter.smoothness);