Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
c4ee1af
feat(editor): dev-only window hook for deterministic camera poses
wass08 Jul 9, 2026
c51092a
feat(viewer): rendering pass — sun-dominant lighting, grade, gradient…
wass08 Jul 9, 2026
c48a37c
feat(viewer): shadow-caster-only cutaway, glass fresnel, ground fade,…
wass08 Jul 9, 2026
b0ff2ec
feat(viewer): PCSS contact-hardening sun shadows via LightShadow.filt…
wass08 Jul 9, 2026
8919dc0
feat(viewer): dark-theme recalibration for the new lighting pipeline
wass08 Jul 9, 2026
b41394a
feat(viewer): rendering-pass follow-ups — GI denoise, lighter interac…
wass08 Jul 9, 2026
fa449f1
feat(viewer): kill SSGI grain, real horizon — infinite ground disc fa…
wass08 Jul 10, 2026
86bc80f
feat(viewer): laptop-budget SSGI + seamless world-space horizon
wass08 Jul 10, 2026
84832c8
fix(viewer): kill shadow grain (PCSS opt-in only) and the inked horiz…
wass08 Jul 10, 2026
b71a6f4
feat(viewer): soft blue skies for light presets, slab coplanarity eps…
wass08 Jul 10, 2026
5009dc0
fix(viewer): walk back perf-costly rendering-pass pieces, soften dark…
wass08 Jul 13, 2026
5744937
feat(viewer,nodes): ground the scene — contact vignette + horizon haz…
wass08 Jul 13, 2026
9e50a81
fix(nodes): make the contact vignette read on bright themes
wass08 Jul 13, 2026
d29c1e0
fix(viewer): no more horizon line, sky gradient reaches the horizon
wass08 Jul 13, 2026
eb0c0d8
feat(viewer): three-stop sky — derived deep zenith, warm horizon haze
wass08 Jul 13, 2026
f2b7722
fix(viewer): horizon haze derives from the sky, hugs the horizon tighter
wass08 Jul 13, 2026
175bd61
Merge remote-tracking branch 'origin/main' into feat/rendering-lighti…
wass08 Jul 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 6 additions & 28 deletions packages/core/src/material-library.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/floor_plank_1/floor_plank-diffuse.webp',
aoMap: '/material/wood/floor_plank_1/floor_plank-ao.webp',
metalnessMap: '/material/wood/floor_plank_1/floor_plank-specular.webp',
normalMap: '/material/wood/floor_plank_1/floor_plank-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -169,7 +168,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
preset: {
maps: {
albedoMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_baseColor.webp',
metalnessMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_specularLevel.webp',
normalMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_normal.webp',
roughnessMap: '/material/wood/hungarian_parquet_10/Hungarian Parquet_10_roughness.webp',
},
Expand Down Expand Up @@ -207,7 +205,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
preset: {
maps: {
albedoMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_baseColor.webp',
metalnessMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_specularLevel.webp',
normalMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_normal.webp',
roughnessMap: '/material/wood/hungarian_parquet_2/Hungarian Parquet_2_roughness.webp',
},
Expand Down Expand Up @@ -246,8 +243,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
preset: {
maps: {
albedoMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_baseColor.webp',
metalnessMap:
'/material/wood/square_parquet_21/Square Pattern Parquet_21_specularLevel.webp',
normalMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_normal.webp',
roughnessMap: '/material/wood/square_parquet_21/Square Pattern Parquet_21_roughness.webp',
},
Expand Down Expand Up @@ -286,8 +281,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
preset: {
maps: {
albedoMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_baseColor.webp',
metalnessMap:
'/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_specularLevel.webp',
normalMap: '/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_normal.webp',
roughnessMap:
'/material/wood/square_wood_parquet_23/Square Pattern Parquet_23_roughness.webp',
Expand Down Expand Up @@ -327,7 +320,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/wood_fine/wood_fine_1-diffuse.webp',
aoMap: '/material/wood/wood_fine/wood_fine_1-ao.webp',
metalnessMap: '/material/wood/wood_fine/wood_fine_1-specular.webp',
normalMap: '/material/wood/wood_fine/wood_fine_1-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -365,7 +357,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/wood_fine_11/wood_fine_11-diffuse.webp',
aoMap: '/material/wood/wood_fine_11/wood_fine_11-ao.webp',
metalnessMap: '/material/wood/wood_fine_11/wood_fine_11-specular.webp',
normalMap: '/material/wood/wood_fine_11/wood_fine_11-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -403,7 +394,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/wood_fine_13/wood_fine_13-diffuse.webp',
aoMap: '/material/wood/wood_fine_13/wood_fine_13-ao.webp',
metalnessMap: '/material/wood/wood_fine_13/wood_fine_13-specular.webp',
normalMap: '/material/wood/wood_fine_13/wood_fine_13-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -441,7 +431,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/wood_fine_2/wood_fine_2-diffuse.webp',
aoMap: '/material/wood/wood_fine_2/wood_fine_2-ao.webp',
metalnessMap: '/material/wood/wood_fine_2/wood_fine_2-specular.webp',
normalMap: '/material/wood/wood_fine_2/wood_fine_2-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -479,7 +468,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/wood_fine_22/wood_fine_22-diffuse.webp',
aoMap: '/material/wood/wood_fine_22/wood_fine_22-ao.webp',
metalnessMap: '/material/wood/wood_fine_22/wood_fine_22-specular.webp',
normalMap: '/material/wood/wood_fine_22/wood_fine_22-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -517,7 +505,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/wood/wood_fine_24/wood_fine_24-diffuse.webp',
aoMap: '/material/wood/wood_fine_24/wood_fine_24-ao.webp',
metalnessMap: '/material/wood/wood_fine_24/wood_fine_24-specular.webp',
normalMap: '/material/wood/wood_fine_24/wood_fine_24-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -593,7 +580,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
preset: {
maps: {
albedoMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_baseColor.webp',
metalnessMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_specularLevel.webp',
normalMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_normal.webp',
roughnessMap: '/material/wood/wooden_parquet_11/Classic Parquet_11_roughness.webp',
},
Expand Down Expand Up @@ -1018,7 +1004,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/garage_panel/garage_panel_diffuse.jpg',
aoMap: '/material/flooring/garage_panel/garage_panel_ao.jpg',
metalnessMap: '/material/flooring/garage_panel/garage_panel_specular.jpg',
normalMap: '/material/flooring/garage_panel/garage_panel_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1056,7 +1041,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/green_labradorite/green_labradorite_diffuse.jpg',
aoMap: '/material/flooring/green_labradorite/green_labradorite_ao.jpg',
metalnessMap: '/material/flooring/green_labradorite/green_labradorite_specular.jpg',
normalMap: '/material/flooring/green_labradorite/green_labradorite_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1133,7 +1117,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/pool_tiles/pool_tiles_diffuse.jpg',
aoMap: '/material/flooring/pool_tiles/pool_tiles_ao.jpg',
metalnessMap: '/material/flooring/pool_tiles/pool_tiles_specular.jpg',
normalMap: '/material/flooring/pool_tiles/pool_tiles_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1171,7 +1154,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/tiles_checker/tiles_checker_diffuse.jpg',
aoMap: '/material/flooring/tiles_checker/tiles_checker_ao.jpg',
metalnessMap: '/material/flooring/tiles_checker/tiles_checker_specular.jpg',
normalMap: '/material/flooring/tiles_checker/tiles_checker_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1209,7 +1191,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/tiles_grid/tiles_grid_diffuse.jpg',
aoMap: '/material/flooring/tiles_grid/tiles_grid_ao.jpg',
metalnessMap: '/material/flooring/tiles_grid/tiles_grid_specular.jpg',
normalMap: '/material/flooring/tiles_grid/tiles_grid_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1247,7 +1228,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/stone_wall/stone_wall_diffuse.webp',
aoMap: '/material/flooring/stone_wall/stone_wall_ao.webp',
metalnessMap: '/material/flooring/stone_wall/stone_wall_specular.webp',
normalMap: '/material/flooring/stone_wall/stone_wall_normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -1285,7 +1265,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-diffuse.webp',
aoMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-ao.webp',
metalnessMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-specular.webp',
normalMap: '/material/flooring/wooden_ceramic_3/wooden_ceramic-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -1477,7 +1456,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_diffuse.jpg',
aoMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_ao.jpg',
metalnessMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_specular.jpg',
normalMap: '/material/flooring/green_glass_quartzite/green_glass_quartzite_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1594,7 +1572,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/statuaretto/statuaretto_diffuse.jpg',
aoMap: '/material/flooring/statuaretto/statuaretto_ao.jpg',
metalnessMap: '/material/flooring/statuaretto/statuaretto_specular.jpg',
normalMap: '/material/flooring/statuaretto/statuaretto_normal.jpg',
},
mapProperties: {
Expand Down Expand Up @@ -1710,7 +1687,6 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
maps: {
albedoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-diffuse.webp',
aoMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-ao.webp',
metalnessMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-specular.webp',
normalMap: '/material/flooring/wooden_ceramic_2/wooden_ceramic-normal.webp',
},
mapProperties: {
Expand Down Expand Up @@ -1948,11 +1924,13 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
label: 'White',
category: 'colors',
description: 'Clean painted finish',
previewColor: '#ffffff',
// Real white paint reflects ~80%; a literal #ffffff albedo kills GI/shadow
// contrast, so "white" is clamped to ≈0.83 linear.
previewColor: '#e9e9e9',
preset: {
maps: {},
mapProperties: {
color: '#ffffff',
color: '#e9e9e9',
roughness: 0.9,
metalness: 0,
repeatX: 1,
Expand Down Expand Up @@ -1980,11 +1958,11 @@ export const MATERIAL_CATALOG: MaterialCatalogItem[] = [
label: 'Soft White',
category: 'colors',
description: 'Warm off-white painted finish',
previewColor: '#f2eee6',
previewColor: '#ebe7df',
preset: {
maps: {},
mapProperties: {
color: '#f2eee6',
color: '#ebe7df',
roughness: 0.9,
metalness: 0,
repeatX: 1,
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/schema/material.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ export type MaterialPresetPayload = z.infer<typeof MaterialPresetPayloadSchema>

export const DEFAULT_MATERIALS: Record<MaterialPreset, MaterialProperties> = {
white: {
color: '#ffffff',
color: '#e9e9e9',
roughness: 0.9,
metalness: 0,
opacity: 1,
Expand Down Expand Up @@ -163,7 +163,7 @@ export const DEFAULT_MATERIALS: Record<MaterialPreset, MaterialProperties> = {
side: 'front',
},
plaster: {
color: '#f5f5dc',
color: '#ebebd3',
roughness: 0.95,
metalness: 0,
opacity: 1,
Expand All @@ -179,15 +179,15 @@ export const DEFAULT_MATERIALS: Record<MaterialPreset, MaterialProperties> = {
side: 'front',
},
marble: {
color: '#fafafa',
color: '#ebebeb',
roughness: 0.2,
metalness: 0.1,
opacity: 1,
transparent: false,
side: 'front',
},
custom: {
color: '#ffffff',
color: '#e9e9e9',
roughness: 0.5,
metalness: 0,
opacity: 1,
Expand Down
14 changes: 14 additions & 0 deletions packages/editor/src/components/editor/custom-camera-controls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,20 @@ export const CustomCameraControls = () => {
raycaster.layers.enable(ZONE_LAYER)
}, [camera, raycaster])

useEffect(() => {
// Dev-only: deterministic camera poses for screenshot/automation tooling.
// A getter, not a snapshot — drei recreates the impl when the default
// camera changes, so a captured instance goes stale.
if (process.env.NODE_ENV !== 'development') return
const w = window as typeof window & {
__pascalCameraControls?: (() => CameraControlsImpl | null) | null
}
w.__pascalCameraControls = () => controls.current
return () => {
w.__pascalCameraControls = null
}
}, [])

useEffect(() => {
if (isPreviewMode || isFirstPersonMode || isRestoringFirstPersonPose()) return
let targetY = 0
Expand Down
Loading
Loading