GithubHelp home page GithubHelp logo

kurtlawrence / dirtvz Goto Github PK

View Code? Open in Web Editor NEW
2.0 4.0 0.0 8.59 MB

Web-based 3D rendering of large spatial data for the mining industry ๐Ÿ”Žโ›ฐ๐Ÿ”

Home Page: https://kurtlawrence.github.io/dirtvz/

License: MIT License

TypeScript 40.45% Elm 38.41% Rust 18.76% HTML 1.18% JavaScript 0.62% CSS 0.58%
3d-renderer mining-industry rust-wasm web-3d-viewer

dirtvz's Introduction

Chat on Matrix

dirtvz ๐Ÿ”Žโ›ฐ๐Ÿ”

Web-based, high performance 3D renderer for the mining industry.

Dirtvz is an experimental web-based 3D renderer targeted specifically at the dataset common within the mining industry. Dirtvz excels at rendering large, detailed surfaces using novel concepts of tiling and level of detail built first class into the API. Dirtvz consists of a library and an app, where the app is targeted as a 'batteries included' web app that can be included in user apps with low friction. The library is for inclusion in larger app stacks. Dirtvz aims to be both a utility and a practical research project. As web-based 3D rendering continues to improve, dirtvz aims to explore the practical challenges and present solutions which can be extended to other projects.

๐Ÿงช dirtvz is in a highly experimental stage, focused on prototyping technologies and techniques to enable high performance rendering of large mining datasets through the browser. Please note that dirtvz is is in very early stages of prototyping and there are no stability guarantees. The included app is still very rudimentary and support for various objects is limited. See Features Roadmap for checklist to MVP.

Features Roadmap

This is a quick list of items needing development. As the project matures, Github issues will be adopted more formally.

  • camera interactions
  • information about cursor location in world coords
  • alter lighting properties (UI picker)
  • two toned meshes
  • mesh textures
  • mesh aerial
  • mesh edge rendering
  • grid render
  • make gh repo
  • world axis (persistent and on rotate) -- needs UI toggle
  • background (UI chooser)
  • make axes not pickable
  • button to zoom data extents
  • p for plan view (top down), p again to north up, p again to reset view
  • UI toggle for invert mouse scroll
  • UI help for interactions
  • dynamic filtering tile/lod
  • apply pipeline optimisations and anti-aliasing
  • ? Load raw triangles at finest lod detail
  • world axis behaves poorly at zoom levels
  • world axis clips on edges
  • ? rework database to create a store per object
  • progress on preprocessing
  • ? support for large surfaces (progressive sampling?)
  • import preprocessing performance (parallelise or cache sampling points)
  • alert users when an object goes outside of the data extents

Developing commands

# Build Rust to WASM
#   use --debug for debugging, BUT IS VERY SLOW!
#   use --features=err-capture to get Rust stack trace printed to console
wasm-pack build --out-dir wasmpkg --out-name wasm --target bundler
# Builds Elm
elm make elm/ViewerUI.elm --output=js/viewer-ui.js
# Builds Typescript and bundles
npm run build
# Runs local dev server
npm start

dirtvz's People

Contributors

kurtlawrence avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dirtvz's Issues

Properties UI

Implement a UI to adjust properties.

There would be a panel for 'global' properties, and a panel per selected objects.

This will take some work to generate a UI that can handle 'changesets'.

Grid rendering

Can leverage the tiling system and just rendering a grid.

Two tone or colour palette support will be required (#20)

Implement the object list panel

ui2

  • Filter (fuzzy string search)
  • Filter (loaded/unloaded)
  • action bar is contextual on what is selected
  • Delete object action
  • Add new folder action
  • Load/unload on click
  • Load local file action
  • Move to action
  • Toggle collapsed (folder) (use folder icon)
  • Object selection (folders select descendants)
  • Bulk load action
  • Bulk unload action
  • Progress on preprocessing
  • Persist object tree

Mesh edge rendering

Apply edge rendering per mesh.

Since it is per mesh, this will have to work off the back of object properties rather than using the rendering settings.

UI Overview

Overarching guidance for UI development.

UI

Nav Bar

The nav bar lives on the left-hand side of the container, and is not collapsible.
The nav bar will house buttons for:

  • Objects

  • Settings

  • Help

  • #9

Each button would open/collapse Panel#1

Panel#1

This first panel is chosen by the nav bar.
This panel can house things like the object list, settings, help guides.
It is not intended for contextual things like object properties or selections.
Should likely be resizable horizontally.

Panel#2

This panel is contextual based on actions from panel#1

Tools Bar

This bar houses tooling for interacting with the renderer.
Things like zoom controls, measuring, etc.

Status Bar

This bar houses information such as hovering info and status messages.
It should be able to popup over the canvas with additional information if clicked.
This is useful for reviewing log events.

Implement nav bar

Implement nav bar with objects button.
Button toggles the panel display.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.