Massive cleaning
This commit is contained in:
@@ -3,7 +3,7 @@ The previous chapter voluntarily remained vague about what \emph{3D data} actual
|
||||
This chapter presents in detail the 3D data we consider and how they are rendered.
|
||||
We also give insights about interaction and streaming by comparing the 3D setting to the video one.
|
||||
|
||||
= What is a 3D model?
|
||||
== What is a 3D model?
|
||||
|
||||
The 3D models we are interested in are sets of textured meshes, which can potentially be arranged in a scene graph.
|
||||
Such models can typically contain the following:
|
||||
@@ -76,7 +76,7 @@ An example of object file is visible on @cube.
|
||||
caption: [The OBJ representation of a cube and its render]
|
||||
)<cube>
|
||||
|
||||
== Rendering a 3D model
|
||||
=== Rendering a 3D model
|
||||
|
||||
A typical 3D renderer follows Algorithm X. // TODO
|
||||
// \begin{algorithm}[th]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
= Implementation details
|
||||
== Implementation details
|
||||
|
||||
During this thesis, a lot of software has been developed, and for this software to be successful and efficient, we chose appropriate languages.
|
||||
When it comes to 3D streaming systems, we need two kind of software.
|
||||
@@ -6,9 +6,9 @@ When it comes to 3D streaming systems, we need two kind of software.
|
||||
- *Interactive applications* which can run on as many devices as possible so we can easily conduct user studies. For this context, we chose the *JavaScript* language, since it can run on many devices and it has great support for WebGL.
|
||||
- *Native applications* which can run fast on desktop devices, in order to prepare data, run simulations and evaluate our ideas. For this context, we chose the *Rust* language, which is a somewhat recent language that provides both the efficiency of C and C++ and the safety of functional languages.
|
||||
|
||||
== JavaScript
|
||||
=== JavaScript
|
||||
|
||||
#heading(level: 3, numbering: none)[THREE.js]
|
||||
#heading(level: 4, numbering: none)[THREE.js]
|
||||
|
||||
On the web browser, it is now possible to perform 3D rendering by using WebGL.
|
||||
However, WebGL is very low level and it can be painful to write code, even to render a simple triangle.
|
||||
@@ -37,7 +37,7 @@ A snippet of the basic usage of these classes is given in @three-hello-world.
|
||||
caption: [A THREE.js _hello world_]
|
||||
)<three-hello-world>
|
||||
|
||||
#heading(level: 3, numbering: none)[Geometries]
|
||||
#heading(level: 4, numbering: none)[Geometries]
|
||||
|
||||
Geometries are the classes that hold the vertices, texture coordinates, normals and faces.
|
||||
THREE.js proposes two classes for handling geometries:
|
||||
@@ -45,11 +45,11 @@ THREE.js proposes two classes for handling geometries:
|
||||
- the *BufferGeometry* class, which is harder to use for a developer, but allows better performance since the developer controls how data is transmitted to the GPU.
|
||||
|
||||
|
||||
== Rust
|
||||
=== Rust
|
||||
|
||||
In this section, we explain the specificities of Rust and why it is an adequate language for writing efficient native software safely.
|
||||
|
||||
#heading(level: 3, numbering: none)[Borrow checker]
|
||||
#heading(level: 4, numbering: none)[Borrow checker]
|
||||
|
||||
Rust is a system programming language focused on safety.
|
||||
It is made to be efficient (and effectively has performances comparable to C // TODO \footnote{\url{https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust.html}} or C++\footnote{\url{https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/rust-gpp.html}})
|
||||
@@ -142,7 +142,7 @@ The borrow checker may seem like an enemy to newcomers because it often rejects
|
||||
It is probably for those reasons that Rust is the _most loved programming language_ according to the Stack Overflow
|
||||
Developer Survey // TODO in~\citeyear{so-survey-2016}, \citeyear{so-survey-2017}, \citeyear{so-survey-2018} and~\citeyear{so-survey-2019}.
|
||||
|
||||
#heading(level: 3, numbering: none)[Tooling]
|
||||
#heading(level: 4, numbering: none)[Tooling]
|
||||
|
||||
Moreover, Rust comes with many programs that help developers.
|
||||
- #link("https://github.com/rust-lang/rust")[*`rustc`*] is the Rust compiler. It is comfortable due to the clarity and precise explanations of its error messages.
|
||||
@@ -152,7 +152,7 @@ Moreover, Rust comes with many programs that help developers.
|
||||
- #link("https://github.com/rust-lang/rustfmt")[*`rustfmt`*] auto formats code.
|
||||
- #link("https://github.com/rust-lang/rust-clippy")[*`clippy`*] is a linter that detects unidiomatic code and suggests modifications.
|
||||
|
||||
#heading(level: 3, numbering: none)[Glium]
|
||||
#heading(level: 4, numbering: none)[Glium]
|
||||
|
||||
When we need to perform rendering for 3D content analysis or for evaluation, we use the #link("https://github.com/glium/glium")[*`glium`*] library.
|
||||
Glium has many advantages over using raw OpenGL calls.
|
||||
@@ -163,7 +163,7 @@ Its objectives are:
|
||||
- to be fast: the binary produced use optimized OpenGL functions calls;
|
||||
- to be compatible: glium seeks to support the latest versions of OpenGL functions and falls back to older functions if the most recent ones are not supported on the device.
|
||||
|
||||
#heading(level: 3, numbering: none)[Conclusion]
|
||||
#heading(level: 4, numbering: none)[Conclusion]
|
||||
|
||||
In our work, many tasks will consist in 3D content analysis, reorganization, rendering and evaluation.
|
||||
Many of these tasks require long computations, lasting from hours to entire days.
|
||||
|
||||
+2
-3
@@ -1,7 +1,6 @@
|
||||
#import "../chapter.typ"
|
||||
|
||||
#chapter.chapter[Foreword]
|
||||
= Foreword<f>
|
||||
|
||||
#include "3d-model.typ"
|
||||
#include "video-vs-3d.typ"
|
||||
#include "implementation.typ"
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
= Similarities and differences between video and 3D
|
||||
== Similarities and differences between video and 3D
|
||||
|
||||
The video streaming setting and the 3D streaming setting share many similarities: at a higher level of abstraction, both systems allow a user to access remote content without having to wait until everything is loaded.
|
||||
Analyzing similarities and differences between the video and the 3D scenarios as well as having knowledge about video streaming literature are the key to developing an efficient 3D streaming system.
|
||||
|
||||
== Chunks of data
|
||||
=== Chunks of data
|
||||
|
||||
In order to be able to perform streaming, data need to be segmented so that a client can request chunks of data and display it to the user while requesting another chunk.
|
||||
In video streaming, data chunks typically consist in a few seconds of video.
|
||||
In mesh streaming, some progressive mesh approaches encode a base mesh that contains low resolution geometry and textures and different chunks that increase the resolution of the base mesh.
|
||||
Otherwise, a mesh can also be segmented by separating geometry and textures, creating chunks that contain some faces of the model, or some other chunks containing textures.
|
||||
|
||||
== Data persistence
|
||||
=== Data persistence
|
||||
|
||||
One of the main differences between video and 3D streaming is data persistence.
|
||||
In video streaming, only one chunk of video is required at a time.
|
||||
@@ -20,7 +20,7 @@ Already a few problems appear here regarding 3D streaming:
|
||||
- depending on the user's field of view, many chunks may be required to perform a single rendering;
|
||||
- chunks do not become obsolete the way they do in video, a user navigating in a 3D scene may come back to a same spot after some time, or see the same objects but from elsewhere in the scene.
|
||||
|
||||
== Multiple representations
|
||||
=== Multiple representations
|
||||
|
||||
All major video streaming platforms support multi-resolution streaming.
|
||||
This means that a client can choose the quality at which it requests the content.
|
||||
@@ -34,7 +34,7 @@ It can be chosen directly by the user or automatically determined by analyzing t
|
||||
Similarly, recent work in 3D streaming have proposed different ways to progressively stream 3D models, displaying a low quality version of the model to the user without latency, and supporting interaction with the model while details are being downloaded.
|
||||
Such strategies are reviewed in Section X. // TODO
|
||||
|
||||
== Media types
|
||||
=== Media types
|
||||
|
||||
Just like a video, a 3D scene is composed of different media types.
|
||||
In video, those media are mostly images, sounds, and subtitles, whereas in 3D, those media are geometry or textures.
|
||||
@@ -45,7 +45,7 @@ Thus, the most important thing a video streaming system should do is to optimize
|
||||
That is why, on a video on Youtube for example, there may be 6 available qualities for images (144p, 240p, 320p, 480p, 720p and 1080p) but only 2 qualities for sound.
|
||||
This is one of the main differences between video and 3D streaming: in a 3D setting, the ratio between geometry and texture varies from one scene to another, and leveraging between those two types of content is a key problem.
|
||||
|
||||
== Interaction
|
||||
=== Interaction
|
||||
|
||||
The ways of interacting with content is another important difference between video and 3D.
|
||||
In a video interface, there is only one degree of freedom: time.
|
||||
@@ -304,7 +304,7 @@ These types of controls are notably used on the popular mesh editor #link("http:
|
||||
Another popular way of controlling a free camera in a virtual environment is the first person controls #link("https://threejs.org/examples/?q=controls#misc_controls_pointerlock")[(live example here)].
|
||||
These controls are typically used in shooting video games, the mouse rotates the camera and the keyboard translates it.
|
||||
|
||||
== Relationship between interface, interaction and streaming
|
||||
=== Relationship between interface, interaction and streaming
|
||||
|
||||
In both video and 3D systems, streaming affects interaction.
|
||||
For example, in a video streaming scenario, if a user sees that the video is fully loaded, they might start moving around on the timeline, but if they see that the streaming is just enough to not stall, they might prefer not interacting and just watch the video.
|
||||
|
||||
Reference in New Issue
Block a user