skye-adaire
Joined 7 years ago
Joined 7 years ago
Right, using a SDF as a boundary condition is to discretely check it as an indicator function (if negative do x else do y). You can use basically any SDF to bound your procedural medium, including a procedural boundary (via domain distortion).
You can also apply a continuous blend instead of the discrete check (smooth step the level curve). This is preferred since discrete checks will often result in popping.
Meshes and Bezier patches are parametric representations (defined over R^2, evaluated with vec2, output vec3). Implicit functions are volumetric representations of surfaces (defined over R^3, evaluated with vec3, output float). This is a key difference between parametric modelers like AutoCad and implicit modelers like nTopology.
>density grid instead of a SDF if you're dealing with anything volumetric, such as clouds or smoke.
These functions of time change every frame. In the implicit paradigm, it's not necessary to evaluate the smoke ahead of time since sphere tracing can reduce to marching adaptively when we are within smoke. Image quality will not be bound to any resource resolution other than the screen (a low res smoke grid would appear blocky).
I agree with you that the current triangle-based RT implementations have faster alternatives that accomplish similar things on the surface.
Thanks for the links!
Distance fields are a subset of implicit functions (see wikipedia). The use of level curves (which can be interpreted as "distance" for SDFs) is broad. You can dynamically and trivially thicken or shrink objects by adding or subtracting to the distance. Functions defined on the level curves output of an SDF can be used to map a volume to another implicit function (see nTopology). With implicit functions, the non-zero level sets are really just as important, but most focus on the zero level set in rendering.
>There's a subtle difference here because you actually need the closest point (not just the distance) so that you can look up a boundary condition.
Vector to Closest Point (VCP) is subtle but different in important ways. It is unsigned, and cannot indicate whether a position is inside or outside the object. Implicit modeling is not generally concerned with parameterizing the surface, since we can use volumetric, 3D procedural textures.
The distance to the surface is independent of direction, it is only a function of position (as all SDFs are).
The depth map is the distance from ray origin to intersection only, not how close that ray came to the surface at any point along it's segment.
Meshes and bezier patches are boundary representations with no information of the volume they enclose. Imagine you'd like to cut an object out of smoke or clouds. SDFs enable you to cut out arbitrary volumes from any material. This is more realistic than skinning a mesh object with textures, especially with translucent objects.
> So why do we need neural nets to represent them?
You don't. I didn't notice render times, but "interactive frame rates" would be lacking.
Most SDF primitives and their compositions are not analytic (from use of abs, fract, etc). Differentiation by finite differences is most common. Few are using automatic differentiation. I don't quite follow how back prop would produce the surface gradient, but I doubt it would be faster than these methods.
Also, their distance output will be an estimate, it won't be exact, which will cause render time to underperform vs exact representations. Worse, the NN could return a value greater than actual distance, which will cause artifacts.
If you need a desktop monitor, you can get an over-bed table and mount a small VESA mounting arm.
If you can spend 1k, the absolute best is to get a medical VESA arm and mount it to the wall. These can also have trays for keyboard and mouse.
https://products.multibrackets.com/en/wallmounts/flexarms-ve...