Submission
Required evidence for the 3D App assignment, as listed in the brief.
1. About page
See About for development decisions, accessibility statement, and testing log.
2. 3D App — ITS Web Server URL
https://users.sussex.ac.uk/~ab2429/3dapp/assignment/
3. GitHub — 3D App codebase URL
https://github.com/Behram484/3D-Web
4. GitHub — 3D models repository URL
https://github.com/Behram484/3D-Web/tree/main/plane
(the plane/ folder containing all .blend source files and .glb exports).
Note: the assignment brief lists VRML / X3D Models. This project uses
glTF 2.0 (.glb) as the modern open-standard equivalent, supported
natively by Three.js. The original editable Blender source files (.blend) are
included alongside the .glb exports in the same folder.
5. Deeper-understanding statement (with feedback from testing)
The project goes beyond the lab tutorials in five concrete ways:
- Custom GLSL shader — a Fresnel + scrolling scan-line
ShaderMaterialthat can be toggled per-model. The shader uses auTimeuniform updated every frame, and re-uses theuBaseColor,uRimColoranduRimPoweruniforms for tuning. - Post-processing pipeline —
EffectComposerwithUnrealBloomPassandOutputPass, allowing a stylised glow to be toggled at runtime. - Sophisticated Blender animations — each model ships two named animations
(e.g.
flap+spiral,tail+Screw rotation.) authored in Blender and driven at runtime by Three.js'sAnimationMixer— beyond the simple object rotation shown in the labs. - Bootstrap 5 + jQuery are used together with Three.js — Bootstrap for the responsive grid and component styling, jQuery for content swapping on the Story / Image / Sound info-panel tabs.
- Asset pipeline —
plane1.glbwas 5.7 MB on first export; using@gltf-transform/clithe embedded PNG was converted to WebP and resized to 1024², bringing the file down to 334 KB — a 94 % reduction with no visible quality loss.
Testing feedback (browser-matrix in About) showed three issues fixed during the development cycle: load-time stall caused by the original uncompressed texture (now <500 ms), wireframe state lost on plane-switch (now persisted), and a missing spotlight-target add to the scene (now correctly aimed).