From 373fc30d56a6bbe6ce6fe8ca174d63e2a1f21a63 Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Mon, 21 Feb 2022 13:08:49 -0800 Subject: [PATCH] High-perf wireframe for planet. --- Cargo.lock | 46 ++++++++++++++++++++++++++++------------------ Cargo.toml | 3 +-- src/action.rs | 16 ++++++++-------- src/geometry.rs | 25 +++++++++++++------------ src/glamor.rs | 26 ++++++++++++++++---------- src/lights.rs | 2 +- src/main.rs | 4 +++- 7 files changed, 70 insertions(+), 52 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b7b4592..5615ba5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -73,9 +73,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "7a99269dff3bc004caa411f38845c20303f1e393ca2bd6581576fa3a7f59577d" [[package]] name = "approx" @@ -152,9 +152,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bevy" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b77ad2987710ed960746c43813ad8c103db5c4c090f5cbc9c32c0a90a91bc599" +checksum = "97342ea2f3bad36be2ded1d1fbd569ff83147b70697f12f1579e87a7480afa36" dependencies = [ "bevy_internal", ] @@ -523,7 +523,7 @@ dependencies = [ "downcast-rs", "futures-lite", "hex", - "hexasphere", + "hexasphere 6.1.0", "image", "naga", "once_cell", @@ -784,9 +784,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.72" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cfg-if" @@ -1066,7 +1066,7 @@ dependencies = [ "bevy", "bevy_polyline", "bevy_rapier3d", - "hexasphere", + "hexasphere 7.0.0", "noise", "rand 0.8.5", "wgpu", @@ -1460,9 +1460,19 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hexasphere" -version = "6.0.0" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dc62dcfd68ec810c4707804556f2e88655012b1a373b0e0bbbe88a9db366627" +checksum = "2b219bdb56b14905fa5429636bfc4df0043626642d4586d069a82019130846f5" +dependencies = [ + "glam", + "lazy_static", +] + +[[package]] +name = "hexasphere" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ab9d20ba513ff1582a7d885e91839f62cf28bef7c56b1b0428ca787315979b" dependencies = [ "glam", "lazy_static", @@ -1579,9 +1589,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.118" +version = "0.2.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e509672465a0504304aa87f9f176f2b2b716ed8fb105ebe5c02dc6dce96a94" +checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" [[package]] name = "libloading" @@ -2130,9 +2140,9 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro-crate" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +checksum = "9dada8c9981fcf32929c3c0f0cd796a9284aca335565227ed88c83babb1d43dc" dependencies = [ "thiserror", "toml", @@ -2674,9 +2684,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -2718,9 +2728,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74786ce43333fcf51efe947aed9718fbe46d5c7328ec3f1029e818083966d9aa" +checksum = "9e0ab7bdc962035a87fba73f3acca9b8a8d0034c2e6f60b84aeaaddddc155dce" dependencies = [ "ansi_term", "lazy_static", diff --git a/Cargo.toml b/Cargo.toml index 4be56ef..40aa44f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" rand = "0.8" bevy_polyline = "0.1" noise = { git = "https://github.com/Razaekel/noise-rs" } -hexasphere = "6.0.0" +hexasphere = "7" wgpu = "0.12.0" [dependencies.bevy] @@ -33,4 +33,3 @@ opt-level = 1 # Enable optimizations for dependencies (incl. Bevy), but not for our code: [profile.dev.package."*"] opt-level = 3 - diff --git a/src/action.rs b/src/action.rs index 39a4e2c..e6080db 100644 --- a/src/action.rs +++ b/src/action.rs @@ -34,8 +34,8 @@ fn setup_colliders( let pcollide = ColliderBundle { shape: ColliderShape::ball(PLANET_RADIUS).into(), material: ColliderMaterial { - friction: 0.1, - restitution: 0.05, + friction: 0.05, + restitution: 0.01, ..Default::default() } .into(), @@ -53,7 +53,7 @@ fn setup_colliders( fn setup_bike(bike: Entity, xform: &Transform, commands: &mut Commands) { let mut bbody = RigidBodyBundle::default(); - bbody.damping.angular_damping = 0.5; + bbody.damping.angular_damping = 0.7; bbody.damping.linear_damping = 0.3; bbody.forces = RigidBodyForces { torque: Vec3::ZERO.into(), @@ -65,8 +65,8 @@ fn setup_bike(bike: Entity, xform: &Transform, commands: &mut Commands) { ..Default::default() } .into(); - bbody.mass_properties = - MassProperties::new(Vec3::ZERO.into(), 0.5, Vec3::new(0.0, 0.01, 0.0).into()).into(); + // bbody.mass_properties = MassProperties::new(Vec3::ZERO.into(), 0.5, + // Vec3::new(0.0, 0.01, 0.0).into()).into(); let isometry = Isometry::from_parts(xform.translation.into(), xform.rotation.into()); bbody.position = isometry.into(); // collider @@ -77,7 +77,7 @@ fn setup_bike(bike: Entity, xform: &Transform, commands: &mut Commands) { ); let bcollide = ColliderBundle { shape: shape.into(), - mass_properties: ColliderMassProps::Density(0.3).into(), + mass_properties: ColliderMassProps::Density(0.2).into(), material: ColliderMaterial { friction: 0.0, restitution: 0.05, @@ -94,7 +94,7 @@ fn setup_bike(bike: Entity, xform: &Transform, commands: &mut Commands) { } fn gravity(xform: Query<&Transform, With>, mut config: ResMut) { - let gravity = xform.single().translation.normalize() * -8.0; + let gravity = xform.single().translation.normalize() * -6.0; config.gravity = gravity.into(); } @@ -107,7 +107,7 @@ fn falling_cat( let cos = up.dot(cam_up); let theta = cos.acos(); - let force_mag = if !theta.is_normal() { 0.0 } else { theta * 5.0 }; + let force_mag = if !theta.is_normal() { 0.0 } else { theta * 2.0 }; let torque = cam_up.cross(up).normalize() * force_mag; forces.torque = torque.into(); diff --git a/src/geometry.rs b/src/geometry.rs index a9ed7d8..5fc70fe 100644 --- a/src/geometry.rs +++ b/src/geometry.rs @@ -22,9 +22,7 @@ fn spawn_giant_sphere( mut meshes: ResMut>, mut materials: ResMut>, ) { - let mut color = Color::DARK_GRAY; - color.set_a(0.92); - + let color = Color::DARK_GRAY; let isphere = shape::Icosphere { radius: PLANET_RADIUS, subdivisions: 26, @@ -37,7 +35,7 @@ fn spawn_giant_sphere( mesh: meshes.add(pmesh), material: materials.add(StandardMaterial { base_color: color, - metallic: 0.65, + metallic: 0.1, perceptual_roughness: 0.3, alpha_mode: AlphaMode::Blend, ..Default::default() @@ -92,17 +90,20 @@ fn gen_planet(sphere: Icosphere) -> Mesh { // TODO: use displaced points for normals by replacing raw_points with // noise-displaced points. let noise = HybridMulti::::default(); - let raw_points = generated.raw_points(); + + let raw_points = generated + .raw_points() + .iter() + .map(|&p| { + let disp = noise.get(p.as_dvec3().into()) as f32 * 0.07; + let pt = p + disp; + pt.into() + }) + .collect::>(); let points = raw_points .iter() - .map(|&p| { - let pt = p * sphere.radius; - let disp = noise.get(pt.as_dvec3().into()) as f32; - let disp = p * disp * 20.0; - let pt = pt + disp; - pt.into() - }) + .map(|&p| (Vec3::from_slice(&p) * sphere.radius).into()) .collect::>(); let normals = raw_points diff --git a/src/glamor.rs b/src/glamor.rs index bb2b7cd..904da4a 100644 --- a/src/glamor.rs +++ b/src/glamor.rs @@ -38,17 +38,23 @@ fn wireframe_planet( } } - if !pts.is_empty() { - commands.spawn_bundle(PolylineBundle { - polyline: polylines.add(Polyline { vertices: pts }), - material: polymats.add(PolylineMaterial { - width: 101.0, - color: BISEXY_COLOR, - perspective: true, - }), - ..Default::default() - }); + let mut verts = Vec::with_capacity((pts.len() as f32 * 1.4) as usize); + for pts in pts.chunks(3) { + if pts.len() > 1 { + verts.extend_from_slice(pts); + verts.push(Vec3::NAN); + } } + + commands.spawn_bundle(PolylineBundle { + polyline: polylines.add(Polyline { vertices: verts }), + material: polymats.add(PolylineMaterial { + width: 101.0, + color: BISEXY_COLOR, + perspective: true, + }), + ..Default::default() + }); } fn wireframify_lights( diff --git a/src/lights.rs b/src/lights.rs index dc5d6d4..af8da28 100644 --- a/src/lights.rs +++ b/src/lights.rs @@ -113,7 +113,7 @@ fn spawn_static_lights( commands.insert_resource(AmbientLight { color: Color::WHITE, - brightness: 0.1, + brightness: 0.2, }); // up light diff --git a/src/main.rs b/src/main.rs index aad8dcc..58ff5cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,7 @@ use cyber_rider::{ const MOVEMENT_SETTINGS: MovementSettings = MovementSettings { sensitivity: 10.0, // default: 1.0 - accel: 20.0, // default: 40.0 + accel: 10.0, // default: 40.0 }; fn main() { @@ -20,6 +20,8 @@ fn main() { app.insert_resource(Msaa { samples: 4 }) .insert_resource(ClearColor(Color::rgb(0.07, 0.001, 0.02))) .add_plugins(DefaultPlugins) + //.add_plugin(LogDiagnosticsPlugin::default()) + //.add_plugin(FrameTimeDiagnosticsPlugin::default()) .add_plugin(CyberGeomPlugin) .add_plugin(CyberGlamorPlugin) .add_plugin(CyberInputPlugin)