Commit Graph

50 Commits

Author SHA1 Message Date
Danny McGee ce6db7fc3c Refactoring, reorganization and cleanup (#7)
### New `math` module
 * Traits for error-tolerant floating-point comparisons
 * Traits for interpolation and easing
 * Bevy plugin to manage 3D interpolations with ECS components

### `skybox` module refactor
 * ECS resource to enable external skybox selection/updates
 * System run conditions for more idiomatic/ECS-friendly control flow

### Camera controller refactor
 * Renamed from `orbit_cam` to `camera_controller`
 * Now delegates to the new interpolation plugin for WASD motion smoothing
 * Simple API for attaching the `CameraController` component to the camera from
   another module -- this resolves an awkward separation-of-concerns situation
	where we had to configure a bunch of render-quality settings in the camera
	controller module

### Scene module refactor
 * Renamed from `test_scene` to `scene`
 * This module is now responsible for configuring the skybox
 * This module is now responsible for spawning the camera and configuring the
   render settings
2023-10-31 16:39:10 -04:00
Danny McGee 4b9ea61495 New test scene, better render quality (#6)
* Updated test scene
* Adjusted lighting, tonemapping
* Replaced skybox
* Added bloom and FXAA
* [meta] Added assets folder to build dependencies
2023-10-25 17:45:24 -04:00
Danny McGee c84fd31387 UI infrastructure and simple "Help" dialog (#3)
Sets up some WIP infrastructure for building out the UI, and adds a simple popup
to show the navigation controls for the app.
2023-10-09 22:19:58 -04:00
Danny McGee 57d64f08f0 Touchpad-friendly controls (#2)
Adds `Shift` as an alternate modifier for FPS-style camera rotation, and binds
wheel events to camera zoom/dolly.

An attempt was made to translate 2D scroll events on a touchpad to camera
panning (this is what Blender does, and it's smooth as butter), but Bevy and/or
`winit` and/or the browser is doing some weird preprocessing of those events
before we're able to read them, which makes that unfeasible for now. That issue
has been documented with a `FIXME` comment.
2023-10-06 16:36:38 -04:00
Danny McGee 699c1baa4b Add WASD camera controls (#1)
This PR adds FPS-style controls to the camera in addition to the existing DCC-style pan/orbit/dolly controls. Additionally, some architectural changes have been made to facilitate this and pave the way toward making all of the app controls configurable in the future. Namely, a new `input` module has been added, loosely inspired by Unreal Engine's "Enhanced Input" system (and as I understand it, conceptually similar to Unity's "new" input system as well).

The basic idea is that raw device inputs (coming from `bevy::input`) are mapped to named, app-specific "input actions" before being consumed by other parts of the application. For example, in the camera motion system, instead of checking for mouse motion while the middle mouse button is pressed, we now check for a `CameraMotion::Pan` input action event.

Input actions carry information about their lifecycle phase (`Start`, `Ongoing`, and `Stop` — a stand-in for Bevy's `just_pressed`, `pressed`, and `just_released` methods) and some type of magnitude (`f32`, `Vec2`, or `Vec3` depending on the action).

At present, we've simply moved the hard-coded device input checks from the `orbit_cam` module to the new `input` module, but theoretically, this could eventually be refactored to read the mappings between device inputs and input actions from some kind of user configuration.
2023-10-05 22:29:01 -04:00
Danny McGee 05644b55bd Update page title 2023-10-04 19:24:48 -04:00
Danny McGee 37b24d489c Adjust Netlify build pipeline 2023-10-04 17:57:37 -04:00
Brandon Thomas 07fd600e4d mark executable 2023-10-04 17:45:55 -04:00
Danny McGee 28f034c670 Add Netlify build script 2023-10-04 17:38:10 -04:00
Danny McGee 5d8d9fe620 Split UI module 2023-10-04 16:05:34 -04:00
Danny McGee 90e504501d Load test model from glTF 2023-10-03 18:07:42 -04:00
Danny McGee 82157bd54a Document skybox generation process 2023-10-03 17:08:21 -04:00
Danny McGee ccf4d5945e Fix studio-frontend:preview configuration 2023-10-02 22:08:05 -04:00
Danny McGee bc0e81e2a0 Switch default skybox 2023-10-02 21:52:07 -04:00
Danny McGee 2273514fa6 Fix skybox for web 2023-10-02 21:51:45 -04:00
Danny McGee e97c14c5da Upgrade bevy to 0.11.3; Switch to WebGL backend 2023-10-02 21:51:05 -04:00
Danny McGee d396a45509 HDRI Skyboxes / Image-Based Lighting 2023-10-02 20:07:16 -04:00
Danny McGee 64133de881 Workflow fixes 2023-10-02 20:05:42 -04:00
Danny McGee 82e3d791bc Update @nxrs/cargo 2023-10-02 20:04:17 -04:00
Danny McGee f152706c29 Basic README 2023-09-30 00:17:20 -04:00
Danny McGee b11155c649 UX tuning + mini-refactor 2023-09-29 23:58:36 -04:00
Danny McGee 2e3979b336 Sync Bevy canvas size with browser viewport size 2023-09-29 22:15:18 -04:00
Danny McGee c1f92cc2d6 Spawn Bevy canvas at full viewport size 2023-09-29 20:36:23 -04:00
Danny McGee bed97cff47 Rename projects 2023-09-29 18:33:00 -04:00
Danny McGee 32057039b0 Fix cargo warning (duplicate target names) 2023-09-29 18:20:15 -04:00
Danny McGee ab380bc3da Restore procedural grid shader 2023-09-29 18:19:38 -04:00
Danny McGee fc66d2e1b3 Share assets between Bevy app and web frontend 2023-09-29 18:19:22 -04:00
Danny McGee 7cc20fa500 Fix issues with procedural grid shader 2023-09-29 18:15:53 -04:00
Danny McGee c05f341770 Add hello-world:build:web dependency to hello-web targets 2023-09-28 23:42:53 -04:00
Danny McGee bc8994a780 Get wasm build running in browser 2023-09-28 23:33:08 -04:00
Danny McGee 842f985c23 Document grid_lines function 2023-09-28 17:46:22 -04:00
Danny McGee 6030127f19 Add additional grid-lines layer 2023-09-28 17:46:07 -04:00
Danny McGee dd3b6b1346 Use Bevy's FrameTimeDiagnostics for FPS counter 2023-09-28 17:45:19 -04:00
Danny McGee a4dee10487 Move framerate counter to UI layer 2023-09-28 15:48:50 -04:00
Danny McGee 775c8e43f9 Tweak world-grid plane shader 2023-09-28 15:07:06 -04:00
Danny McGee 5414f9c944 Allow complex types 2023-09-28 15:06:23 -04:00
Danny McGee d70671aaac Only update plane location when camera has moved 2023-09-28 15:05:45 -04:00
Danny McGee 78303cd0b0 Make world-grid plane double-sided 2023-09-28 15:04:26 -04:00
Danny McGee bf6993a412 Monitor framerate 2023-09-28 15:02:05 -04:00
Danny McGee 9e3ce970e3 Remove tutorial stuff 2023-09-27 23:46:36 -04:00
Danny McGee 3dba0ee868 Perf improvement 2023-09-27 23:41:50 -04:00
Danny McGee a60d86f2d2 Camera controller, basic test scene 2023-09-27 23:15:19 -04:00
Danny McGee 9482cfb794 Setup wasm config for Bevy app 2023-09-27 15:33:55 -04:00
Danny McGee f85ead10b0 Update @nxrs/cargo 2023-09-27 12:27:31 -04:00
Danny McGee 9e66728597 Bevy Book: Resources 2023-09-27 11:46:02 -04:00
Danny McGee 4585fdec24 Bevy Book: Plugins 2023-09-27 11:33:55 -04:00
Danny McGee dbf00340ac Bevy Book: ECS 2023-09-27 11:15:59 -04:00
Danny McGee cf4c851ceb Add bevy, setup fast compiles 2023-09-27 11:04:23 -04:00
Danny McGee eb28b9bbad Bootstrap hello-world app 2023-09-27 10:48:41 -04:00
Danny McGee b2b74a936a Initial commit 2023-09-27 10:44:40 -04:00