3D Model Previewer with Animated Camera/Light and Denoiser (A-Trous filter)
by abasilak
Description
3D Model Previewer with animated camera and light and fast denoiser Edge-Avoiding À-Trous Wavelet Transform (single iteration so far). The scene contains (a) Red, green and blue spheres (in the back) are rendered with Toon Shading, (b) Diffuse Teapot (c) Cube, in the left, has a procedural material, (d) Metal Sphere in the left, (e) Glass sphere in front of the camera and (f) Line-coded plane.
Rayground API Reference
Scene Description
Scene structure is given in JSON format
Settings
Type | Name | Description |
---|---|---|
uint | depth | recursion depth of the simulation. |
bool | save_first_bounce | enable the storing of first bounce intersection data and providing them in the Post Processing shader. |
Objects
zero or more objects with a combination of the following properties
Type | Name | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
string | type |
| ||||||||
float[16] | model | model transformation (overrides other transformations). | ||||||||
float[4] | rotate | object rotation. (XYZ rotation axis, rotation angle in degrees). | ||||||||
float[3] | translate | object translation. | ||||||||
float[3] | scale | object scale. | ||||||||
float | radius | sphere radius (only valid for spheres). | ||||||||
float[] | vertices | an array of vertices in XYZ float format (only valid for triangles). | ||||||||
float[4] | material_property0 .. 7 | user specified material properties for the object. |
Shader Stages Constants
Shader stages constants
Type | Name | Description |
---|---|---|
vec2 | rg_Canvas | canvas resolution in pixels. |
vec2 | rg_Pixel | pixel coordinates relative to the lower left corner of the canvas. |
float | rg_Time | fractional time in seconds since simulation start. Updates in every frame. |
int | rg_Frame | current frame counter from previous compile. Updates in every frame. |
ivec4 | rg_Mouse | .xy current mouse position if clicked, else (-1, -1), .zw previous click position. Updates on mouse press. |
int | rg_Depth | current ray depth iteration. Starts at 0 and gets incremented after each ray intersection wave. |
uvec4 | rg_Seed | cpu generated seed values. Updated for each stage. |
float | RG_RAY_MAX_DISTANCE | 1.e27 |
float | RG_RAY_ACTIVE_FLAG | 1.0 |
float | RG_RAY_INACTIVE_FLAG | 0.0 |
float | RG_PI | 3.14159265359 |
float | RG_TWO_PI | 6.28318530718 |
float | RG_FOUR_PI | 12.5663706144 |
float | RG_INV_PI | 0.31830988618 |
float | RG_INV_TWO_PI | 0.15915494309 |
float | RG_INV_FOUR_PI | 0.07957747154 |
Ray Hit/Miss Stage Inputs
Ray data that triggered the hit or miss shader
Type | Name | Description |
---|---|---|
in vec3 | rg_PrevRayDirection | previous ray direction. |
in vec3 | rg_PrevRayOrigin | previous ray origin. |
in vec4 | rg_PrevAccumulation | previous accumulation color values. |
in vec4 | rg_PrevPayload0 .. 3 | previous ray payload values. |
Ray Gen/Hit/Miss Stage Outputs
Output variables that specify and pass a ray to the next stage of the pipeline
Type | Name | Description |
---|---|---|
out vec4 | rg_Accumulation | output accumulation color values (.rgb values, .a additive blending factor). |
out vec4 | rg_Payload0 .. 3 | output ray payload values. |
out vec4 | rg_RayDirection | output ray direction (.xyz direction, .w max travel distance). |
out vec4 | rg_RayOrigin | output ray origin (.xyz origin, .w RG_RAY_ACTIVE_FLAG or RG_RAY_INACTIVE_FLAG). |
func vec4 | rg_Random(uint index, uint seed0, uint seed1) | Obtain 4 random values from a counter-based pseudo-random sequence. |
func bool | rg_TraceOcclusion (vec3 origin, vec3 direction, float length) | Trace the given ray segment against the scene and test for intersections. |
Ray Generation Stage
Ray generation shader stage input/output variables and functions
Type | Name | Description |
---|---|---|
void | rg_generate ( ) | entry point signature. |
Ray Hit Stage
Ray hit shader stage input/output variables and functions
Type | Name | Description |
---|---|---|
void | rg_hit ( ) | entry point signature. |
in vec3 | rg_Normal | geometric normal of the intersected primitive. |
in vec3 | rg_Hitpoint | ray hit position in world space coordinates. |
in vec3 | rg_BaryCoords | the barycentric coordinates on the intersection with the primitive. |
in vec2 | rg_TexCoords | the interpolated texture coordinates of the intersected primitive. |
in int | rg_MaterialID | the primitive's material ID. |
in int | rg_ShapeID | the primitive's shape ID. |
in int | rg_PrimitiveID | the primitive ID. |
in float | rg_RayDistance | the ray segment length. |
func vec4 | rg_MaterialProperty0 .. 7(int materialID) | the material properties, as specified in the scene description for the given material ID. |
Ray Miss Stage
Ray miss shader stage input/output variables and functions
Type | Name | Description |
---|---|---|
void | rg_miss ( ) | entry point signature. |
Post Processing Stage
Post processing stage input/output variables and functions
Type | Name | Description |
---|---|---|
void | rg_post_process ( ) | entry point signature. |
out vec4 | rg_PixelColor | final pixel color to be presented. |
in rg_Image2D | rg_AccumulatedImage | a 2D image buffer with the accumulated values (after blending operation). |
in rg_Image2D | rg_Payload0Image | a 2D image buffer with the payload0 values from the previous stage. |
in rg_Image2D | rg_Payload1Image | a 2D image buffer with the payload1 values from the previous stage. |
in rg_Image2D | rg_Payload2Image | a 2D image buffer with the payload2 values from the previous stage. |
in rg_Image2D | rg_Payload3Image | a 2D image buffer with the payload3 values from the previous stage. |
in rg_Image2D | rg_FirstBounceRayOriginImage | a 2D image buffer with the first generated ray origin. These values are provided by the backend if specified in the scene description. |
in rg_Image2D | rg_FirstBounceRayDirectionImage | a 2D image buffer with the first generated ray direction. These values are provided by the backend if specified in the scene description. |
in rg_Image2D | rg_FirstBounceRayDepthImage | a 2D image buffer with the first bounce depth (distance to the closest intersected primitive). These values are provided by the backend if specified in the scene description. |
in rg_Image2D | rg_FirstBounceNormalsImage | a 2D image buffer with the first bounce normals (the normal of the closest intersected primitive). These values are provided by the backend if specified in the scene description. |
in rg_Image2Di | rg_FirstBounceMaterialID | a 2D image buffer with the first bounce material ID (the material ID of the closest intersected primitive) stored in the R channel. These values are provided by the backend if specified in the scene description. |
in rg_Image2Di | rg_FirstBounceTriangleID | a 2D image buffer with the first bounce triangle ID (the triangle ID of the closest intersected primitive) stored in the R channel. These values are provided by the backend if specified in the scene description. |
func vec4 | rg_ImageFetch2D(rg_Image2D image, ivec2 coords) | a 2D image fetch from the specified pixel coordinates. |
func ivec4 | rg_ImageFetch2Di(rg_Image2Di image, ivec2 coords) | a 2D image fetch of integer data from the specified pixel coordinates. |
Rayground IDE Reference
Keyboard Shortcuts
Hotkey | Action |
---|---|
Ctrl-S | Compile & Run source code |
Ctrl-Space | Upload Changes & Capture teaser image |
Ctrl-D | Download source code |
Ctrl-L | Export image (EXR format) |
Ctrl-F | Find |
Ctrl-G | Find next |
Shift-Ctrl-G | Find previous |
Shift-Ctrl-F | Replace |
Shift-Ctrl-R | Replace all |
Alt-G | Go to line |
F11 | Toggle full screen editing |
Esc | Exit full screen editing |