()
| 330 | // shadow resolution, PCF quality, contact shadows. |
| 331 | |
| 332 | function setupShadowTest(): void { |
| 333 | // Ground — bright warm-white floor, receive-only |
| 334 | const floor = placeCube(0, -0.05, 0, 50, 0.1, 50, 0.95, 0.93, 0.88, 0.85, 0.0); |
| 335 | setSceneNodeCastShadow(floor, false); |
| 336 | |
| 337 | // Central pillar — warm stone |
| 338 | placeCube(0, 4, 0, 1.5, 8, 1.5, 0.82, 0.78, 0.72, 0.5, 0.0); |
| 339 | |
| 340 | // Surrounding pillars at varying heights |
| 341 | placeCube(6, 2.5, 0, 1.0, 5, 1.0, 0.85, 0.8, 0.74, 0.4, 0.0); |
| 342 | placeCube(-5, 1.5, 3, 0.8, 3, 0.8, 0.78, 0.75, 0.7, 0.6, 0.0); |
| 343 | placeCube(3, 3, -5, 1.2, 6, 1.2, 0.8, 0.76, 0.7, 0.5, 0.0); |
| 344 | |
| 345 | // Spheres |
| 346 | placeSphere(-3, 1.2, -2, 1.2, 0.9, 0.82, 0.72, 0.3, 0.0); |
| 347 | placeSphere(4, 0.8, 4, 0.8, 0.95, 0.93, 0.88, 0.1, 1.0); |
| 348 | |
| 349 | // Low wall / bench — casts a long thin shadow |
| 350 | placeCube(0, 0.5, 7, 8, 1, 0.3, 0.75, 0.72, 0.68, 0.7, 0.0); |
| 351 | |
| 352 | // Fence posts |
| 353 | for (let i = -4; i <= 4; i = i + 1) { |
| 354 | placeCube(i * 2, 0.75, -8, 0.1, 1.5, 0.1, 0.6, 0.58, 0.55, 0.5, 1.0); |
| 355 | } |
| 356 | // Fence rail |
| 357 | placeCube(0, 1.4, -8, 8.1, 0.08, 0.08, 0.6, 0.58, 0.55, 0.5, 1.0); |
| 358 | } |
| 359 | |
| 360 | // ============================================================ |
| 361 | // Zone 4: Water Surface (centered at z=25) |
no test coverage detected