Code Monkey home page Code Monkey logo

renderengine-basics's Introduction

Render Engine Basics - Series

Created by: Jernil - 3D Graphics Engineer & Enthusiast (https://www.linkedin.com/in/michael-jernil/)

Repo for LinkedIn Tutorial series - Creating 3D render engines on the Web for Real-time rendering of any dataset from Vector tiles, 3D maps to city-scale 3D meshes, point clouds & Gaussian Splats.

More than building a Render engine from scratch, this series is to help you understand the Core components / First principles of a Render engine so you can build your own Render engine pipelines for any application end-to-end!

๐ŸงŠ If you're interested in learning more about building Render Engines, Star โญ๏ธ / Follow this repository. I'll be updating this page starting from the next post in the series!!

Roadmap

  1. Creating a Web based 3D Viewer from Scratch (not so much, we'll be using libraries as this is not the focus of this series)
  2. Integrating a minimal GLTF asset viewer
  3. Building a Point cloud viewer that can stream and render large city-scale point clouds
  4. Building a 3D tiles viewer that can stream and render huge 3D textured meshes
  5. Building a 3D Gaussian Splat viewer that can render 3D Gaussian splats (generated by either Luma AI or Polycam)

For each of these steps, we will follow a step-by-step process of using the First principles approach to take each decision, from architectural to spatial data structures, rendering, cloud storage etc.

First Principles

1. Creating a Render Engine from Scratch

Screenshot 2023-10-03 at 4 24 13 PM

Source dataset

The dataset you want to visualize in Realtime in it's original form.

Could be Point Cloud(LAS/PLY..) format, Textured 3D mesh (OBJ/FBX..), Elevation Maps (TIFF) etc.

Exporter / Converter

Any tool or library that can convert your source 3D data to your required DS / Format.

Could be exporter of any 3D application like Blender, Maya etc. or converter libraries for specific Data structures, File formats.

Compatible Data Structure / Format

The right Data Structure / Format that would facilitate good Real-Time rendering of your source dataset.

Examples: File Formats - PLY, glTF, USD, SPLAT Data Structures - Potree (Octree based DS for Point clouds), 3D tiles (Tile based DS for 3D Meshed)

Storage

A place to store your dataset in the Data Structure or Format you have generated.

Could be Cloud Storage Solutions like AWS S3, GCP Storage etc. or Self-hosted (This is not mentioned in the diagram)

Content Delivery

How the content (in it's current form) can be delivered to the client from storage.

Could be CDN or cloud storage endpoints. Streaming support in this stage could be essential for On-Demand rendering using Byte Fetching (for large-scale Point clouds, 3D tiles or Geo Raster rendering).

Loader

The Loader prepares the Data Structure / Format so that it can be useful for the renderer to load and render the 3D data.

This preparation may include storage endpoint access, file read, decompression, loading data into geometry etc. Libraries like three.js offer Loader libraries for well-known data formats.

Renderer

This crucial part will render your 3D data as Pixels. For any 3D engine, making the right choice of a Renderer is essential to your application.

Could be Three.js, BabylonJS - 3D libraries that provide an abstraction layer to Web Graphics APIs like WebGL, WebGPU. In desktop applications, there are lower level APIs such as Metal, Vulkan, DirectX etc. You could choose to build your own renderer from scratch using any of the Graphics APIs mentioned above. But we would not be exploring about that in this series. Rather we will be using Three.js as the core library on which we build our Render engine.

First Principles - Building a PCLD viewer

3. Building a Point cloud viewer that can stream and render large city-scale point clouds

Screenshot 2023-10-12 at 4 56 04 PM

First Principles - Building a 3D Gaussian Splatting viewer

5. Building a 3D Gaussian Splat viewer that can render 3D Gaussian splats (generated by either Luma AI or Polycam)

Screenshot 2023-10-19 at 3 02 39 PM

We haven't spoken too much in detail about the rendering of 3D Gaussian Splats. But we'll get into that soon, once we start coding the sample viewers one by one.

More updates/ Actual code coming soon!

renderengine-basics's People

Contributors

mikejernil avatar

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.