for (size_t i = 0; i < num_boxes; i++) {
physx::PxMaterial* material = physx_state->physics->createMaterial(0.5f, 0.5f, 1.0f);
physx::PxShape* shape = physx_state->physics->createShape(physx::PxSphereGeometry(halfExtent), *material);
vec3f position = vec3f{generate_random_f32(), generate_random_f32(), generate_random_f32()} * 64.0f;
vec3f velocity = vec3f::uniform_unit() * 20.0f;
PxTransform transform(PxVec3{position.x, position.y, position.z});
physx::PxRigidDynamic* actor = physx_state->physics->createRigidDynamic(transform);
actor->attachShape(*shape);
physx::PxRigidBodyExt::updateMassAndInertia(*actor, 10.0f);
actor->setLinearVelocity(PxVec3{velocity.x, velocity.y, velocity.z});
auto entity = update.new_entity_local();
auto physx = entity.create_component<c_physx>();
physx->add_actor(*actor);
physx->add_to_simulation();
auto trivial = entity.create_component<c_trivial>();
trivial->id = generate_random_u64();