What I learned through this project:
The number of polygons in a model has a significant impact
Especially if you want the application to work on mobile devices. In the initial version, the tree models were extremely detailed. Given the number of trees in the park, this led to the app crashing on lower-end devices due to the high polygon count.
Enhancing 3D graphics and performance through texture baking
Using built-in Three.js materials, light sources, and shadows can be very resource-intensive. By switching to baked textures, I achieved rich colors, realistic static lighting, and soft shadows, which significantly improved both performance and visual quality.
How to implement camera animation on scroll without using external libraries
This involved creating a map of camera and target positions, then interpolating these values based on scroll offset.
How to create CSS animations for text and images triggered by page scroll without external libraries
I developed a complex CSS animation that calculates the visible area of an element as a percentage and triggers the animation accordingly.
Building a custom hook for audio control
An essential feature for me was adding smooth fade-in/fade-out effects for audio elements.
Animating props in the scene’s environment to toggle between dark/light mode
This was aimed at providing a smoother visual transition when switching between park views in both modes.