Integrates PR #1 (Add Boundary Falloff / Live Preview) with additional
fixes and improvements:
- Boundary falloff with configurable distance slider
- Live preview with per-vertex and per-fragment falloff computation
- Smooth view-dependent shading for all mask types (exclude, include-only, angle)
- Mask-type-dependent falloff tinting (orange for user masks, grey for angle masks)
- Italian translations for Boundary Falloff
- Performance: skip falloff computation during active masking
- Fix: boundary vertices start at falloff factor 0
- Fix: trailing comma syntax errors in i18n.js
- Remove flat-shaded MeshLambertMaterial overlay that was covering the
custom shader output on user-masked faces (root cause of static shading)
- Pass smooth interpolated normal (vSmoothNormal) to fragment shader and
blend toward it on masked faces so they get smooth view-dependent
lighting instead of flat per-face shading
- Brighten user-mask color to warm orange (0.85, 0.40, 0.15) for better
visibility of lighting variation on masked surfaces
- Shader now handles all mask visualization consistently: exclude mode
(orange), include-only mode (orange for unselected), and angle mask
(grey) all receive identical smooth shading
- Track whether each boundary is from user masking or angle masking
via a new boundaryMaskTypeAttr vertex attribute (0=user, 1=angle)
- Pass vUserMask and vMaskType varyings to the fragment shader
- Use consistent teal base color for all surfaces so lighting is
uniform across masked and textured areas (fixes dark halo artifact)
- Tint the falloff gradient warm red-orange near user-painted masks
and neutral grey near angle-masked boundaries
Boundary vertices (shared between masked and unmasked faces) were
skipped during falloff computation, keeping their falloffAttr at 1.0.
This created a ring of full-intensity texture at the mask border before
the falloff gradient started. Now these vertices correctly get factor 0
(distance to boundary = 0), matching the export behavior.
- Added stripes.png and stripes_02.png with metadata from Adobe Photoshop.
- Included two new woodgrain textures (woodgrain_02.jpg and woodgrain_03.jpg) for enhanced visual variety.
- Renamed "Surface Mask" section to "Mask Angles" for clarity in index.html.
- Updated translation keys and tooltips to reflect the new terminology in i18n.js.
- Removed the erase toggle button from the exclusion panel and implemented Shift key functionality to toggle erase mode in main.js.
- Adjusted brush radius handling to improve user experience and updated related UI elements in index.html.
- Enhanced the subdivision process to track original face IDs for better masking accuracy in subdivision.js.
- Added CSS styles for new UI elements and improved layout in style.css.