CLI, along with several examples, plus model downloading
This commit is contained in:
1 parent
4f9e73a418
commit
51ace681a7
22 files changed
+1804
-18
No files matched your search
+35
-2
@@ -371,6 +371,28 @@ its triangles. That is what M5's ray tracer does, because following rays
|
||||
gives exact shadows and light bouncing between surfaces. Rasterization can
|
||||
only approximate those, for example with the shadow maps planned for M2.
|
||||
|
||||
### One sample per pixel
|
||||
|
||||
Both techniques decide each pixel's value from one point, the pixel's
|
||||
center. A real pixel collects light over its whole area, about 5.5 um
|
||||
square on the detector. Where a pixel straddles an edge, say half on a
|
||||
sunlit panel and half on dark space, the real pixel reads about half the
|
||||
panel's value. The renderer reads either the full value or none, depending
|
||||
on which side the center falls.
|
||||
|
||||
This shows in two ways. Edges are stair-stepped instead of graded. And
|
||||
anything thinner than a pixel, like the booms of the example satellite seen
|
||||
from 40 m, breaks into dashes, because only some pixel centers land on it.
|
||||
For an algorithm that finds edges or measures brightness at sub-pixel
|
||||
precision, the graded edge is the signal, so this matters for limb
|
||||
navigation and pose estimation.
|
||||
|
||||
The usual fix is supersampling: shading several points inside each pixel
|
||||
and averaging. The GPU's multisampling hardware does this cheaply for
|
||||
rasterized edges. Sampling the bodies' limbs needs it in the ray casting
|
||||
shader. The lens blur that comes with the point spread function (M3) also
|
||||
spreads every edge over a few pixels.
|
||||
|
||||
## Earth, Moon and Sun
|
||||
|
||||
Code: `bodies.rs`, `gpu/bodies.rs`, `shaders/bodies.wgsl`.
|
||||
@@ -453,8 +475,18 @@ or for anything in the near infrared, where the red value simply continues.
|
||||
For absolute radiometry of a real spacecraft, give the important materials
|
||||
measured reflectance spectra (M4 adds those, and BRDFs).
|
||||
|
||||
Texture images are not used yet; each material renders with its base color
|
||||
value alone. The loader removes textures before reading a glTF file, so a
|
||||
model still loads when its textures are in a format or file the loader cannot
|
||||
read. A model that relies on textures for its colors (one material with a
|
||||
painted image) renders in that material's flat base color, often gray.
|
||||
|
||||
STL has no units. CAD tools usually export millimeters, so loading a CAD
|
||||
model usually needs `scale: 0.001`. glTF is always meters.
|
||||
model usually needs `scale: 0.001`. glTF is meters by its specification, but
|
||||
models in the wild do not always follow it: of the NASA example models,
|
||||
Landsat 8 and ICESat-2 are in meters, while the SSL-1300 needs a scale of 0.1
|
||||
and ACE about 0.005. Checking a model's size against the real spacecraft's is
|
||||
worth the minute it takes.
|
||||
|
||||
## Drawing the target
|
||||
|
||||
@@ -535,6 +567,7 @@ velocity as an input, which the scene does not carry yet.
|
||||
| Earthshine on the Moon's night side | M4 |
|
||||
| Shadows the target casts on itself | M2 |
|
||||
| The Sun as a disk that is darker toward its edge (limb darkening) | M2 |
|
||||
| Pixel-area sampling (anti-aliasing): graded edges, thin parts | M2 |
|
||||
| Lens distortion | M3 |
|
||||
| Blur from diffraction and lens imperfections (point spread function) | M3 |
|
||||
| Noise: photon shot noise, read noise, dark current, pixel-to-pixel variation | M3 |
|
||||
@@ -543,4 +576,4 @@ velocity as an input, which the scene does not carry yet.
|
||||
| Earth and Moon albedo maps | M2 |
|
||||
| Earth's atmosphere: scattering, the bright limb | M4 |
|
||||
| Motion blur, rolling shutter, stray light | M6 |
|
||||
| Apparent positions: light time and aberration | not yet planned |
|
||||
| Apparent positions: light time and aberration | M3 |
|
||||
Reference in new issue
Block a user