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:

  1. Custom GLSL shader — a Fresnel + scrolling scan-line ShaderMaterial that can be toggled per-model. The shader uses a uTime uniform updated every frame, and re-uses the uBaseColor, uRimColor and uRimPower uniforms for tuning.
  2. Post-processing pipelineEffectComposer with UnrealBloomPass and OutputPass, allowing a stylised glow to be toggled at runtime.
  3. 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's AnimationMixer — beyond the simple object rotation shown in the labs.
  4. 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.
  5. Asset pipelineplane1.glb was 5.7 MB on first export; using @gltf-transform/cli the 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).