From 63574c539578dfc42986f54a3e504fcfcfe31516 Mon Sep 17 00:00:00 2001 From: Karol Zwolak Date: Fri, 7 Mar 2025 14:26:20 +0100 Subject: [PATCH] feat: add chapter scenes --- samples/chapters/cubes.yml | 184 +++++++++++++++++++++++++++ samples/chapters/cylinders.yml | 85 +++++++++++++ samples/chapters/groups.yml | 62 +++++++++ samples/chapters/making_patterns.yml | 40 ++++++ samples/chapters/making_scene.yml | 80 ++++++++++++ samples/chapters/planes.yml | 64 ++++++++++ samples/chapters/reflections.yml | 132 +++++++++++++++++++ samples/chapters/refractions.yml | 52 ++++++++ samples/chapters/shadows.yml | 80 ++++++++++++ samples/chapters/triangles.yml | 26 ++++ 10 files changed, 805 insertions(+) create mode 100644 samples/chapters/cubes.yml create mode 100644 samples/chapters/cylinders.yml create mode 100644 samples/chapters/groups.yml create mode 100644 samples/chapters/making_patterns.yml create mode 100644 samples/chapters/making_scene.yml create mode 100644 samples/chapters/planes.yml create mode 100644 samples/chapters/reflections.yml create mode 100644 samples/chapters/refractions.yml create mode 100644 samples/chapters/shadows.yml create mode 100644 samples/chapters/triangles.yml diff --git a/samples/chapters/cubes.yml b/samples/chapters/cubes.yml new file mode 100644 index 0000000..e5765dc --- /dev/null +++ b/samples/chapters/cubes.yml @@ -0,0 +1,184 @@ +- add: world + max-reflective-depth: 8 + +- define: sky-blue + value: [0.2, 0.35, 0.78] +- define: dark-gray + value: [0.25, 0.25, 0.25] +- define: light-gray + value: [0.7, 0.7, 0.7] +- define: brown + value: [0.4, 0.2, 0.1] +- define: green1 + value: [0.42, 0.55, 0.42] +- define: green2 + value: [0.32, 0.55, 0.42] +- define: purple + value: [0.4, 0.2, 0.3] +- define: blue + value: [0.2, 0.3, 0.4] + +- define: wood-material + value: + color: brown + reflectivity: 0.0 + +- define: checkered_floor + value: + pattern: + type: checkers + colors: + - dark-gray + - light-gray + transform: + - [rotate-y, FRAC_PI_4] + - [scale-uniform, 0.75] + reflectivity: 0.05 + +- define: striped_walls + value: + pattern: + type: stripe + colors: + - green1 + - green2 + transform: + - [scale-uniform, 0.03125] # 0.125 / 4 + - [rotate-z, FRAC_PI_4] + +- add: light + intensity: WHITE + at: [-3, 5, 3] + +- add: SCENE_CAMERA + from: [-1, 2.6, 4.75] + to: [0, 1, 0] + up: [0, 1, 0] + fov: 0.885 + +# Skybox +- add: cube + material: + color: sky-blue + transform: + - [scale-uniform, 10] + +# Floor +- add: plane + material: checkered_floor + +# Table legs +- add: cube + material: wood-material + transform: + - [scale, 0.08, 1, 0.08] + - [translate, 1, 0.5, 1] + +- add: cube + material: wood-material + transform: + - [scale, 0.08, 1, 0.08] + - [translate, -1, 0.5, 1] + +- add: cube + material: wood-material + transform: + - [scale, 0.08, 1, 0.08] + - [translate, 1, 0.5, -1] + +- add: cube + material: wood-material + transform: + - [scale, 0.08, 1, 0.08] + - [translate, -1, 0.5, -1] + +# Table top +- add: cube + material: + extend: wood-material + value: + reflectivity: 0.05 + transform: + - [scale, 1.5, 0.05, 1.25] + - [translate, 0, 1.5, 0] + +# Walls +- add: cube + material: striped_walls + transform: + - [scale-uniform, 5] + +# Mirror frame +- add: cube + material: wood-material + transform: + - [scale, 0.05, 1.55, 0.01] + - [translate, 2.5, 2.25, -5] + +- add: cube + material: wood-material + transform: + - [scale, 0.05, 1.55, 0.01] + - [translate, -2.5, 2.25, -5] + +- add: cube + material: wood-material + transform: + - [scale, 0.05, 2.55, 0.01] + - [rotate-z, FRAC_PI_2] + - [translate, 0, 3.75, -5] + +- add: cube + material: wood-material + transform: + - [scale, 0.05, 2.55, 0.01] + - [rotate-z, FRAC_PI_2] + - [translate, 0, 0.75, -5] + +# Mirror +- add: cube + material: MIRROR_MATERIAL + transform: + - [scale, 2.5, 1.5, 0.01] + - [translate, 0, 2.25, -5] + - [translate, 0, 0, 0.005] + +# Glass cube +- add: cube + material: GLASS_MATERIAL + transform: + - [scale-uniform, 0.125] + - [translate, 0.1, 1.65, -0.1] + +# Tinted cube +- add: cube + material: + color: purple + extend: GLASS_MATERIAL + transform: + - [scale, 0.2, 0.05, 0.075] + - [rotate-y, 0.70685835] # FRAC_PI_4 * 0.9 + - [translate, -0.4, 1.6, 0.4] + +# Pattern cube +- add: cube + material: + pattern: + type: checkers + colors: + - purple + - blue + transform: + - [scale-uniform, 0.05] + transform: + - [scale-uniform, 0.15] + - [rotate-y, -0.39269908] # -FRAC_PI_6 * 0.75 + - [translate, 0.5, 1.7, 0.6] + +# Mirror cube +- add: cube + material: MIRROR_MATERIAL + transform: + - [scale-uniform, 0.15] + - [rotate-y, 0.39269908] # FRAC_PI_6 * 0.75 + - [translate, -0.75, 1.7, 0.1] diff --git a/samples/chapters/cylinders.yml b/samples/chapters/cylinders.yml new file mode 100644 index 0000000..4056cb2 --- /dev/null +++ b/samples/chapters/cylinders.yml @@ -0,0 +1,85 @@ +- add: world + +- define: sky-blue + value: [0.2, 0.35, 0.78] +- define: red + value: [0.8, 0.2, 0.2] +- define: brown + value: [0.67, 0.57, 0.38] +- define: vanilla + value: [0.95, 0.89, 0.67] +- define: chocolate + value: [0.48, 0.24, 0.0] + +- add: light + intensity: WHITE + at: [-10, 10, -10] + +- add: SCENE_CAMERA + from: [0, 1.5, -5] + to: [0, 1, 0] + up: [0, 1, 0] + fov: FRAC_PI_3 + +# Skybox +- add: cube + material: + color: sky-blue + transform: + - [scale-uniform, 10] + +- define: arrow-transform + value: + - [rotate-z, -FRAC_PI_4] + - [translate, -0.5, 0, 0] + +# Arrow body +- add: cylinder + min: -0.5 + max: 0.5 + closed: true + material: + color: red + transform: + - [scale, 0.1, 1, 0.1] + - arrow-transform + +# Arrow head +- add: cone + min: -1 + max: 0 + closed: true + material: + color: red + transform: + - [scale, 0.2, 0.5, 0.2] + - [translate, 0, 1, 0] + - arrow-transform + +# Ice cream cone +- add: cone + min: 0 + max: 1 + closed: false + + material: + color: brown + transform: + - [scale, 0.5, 1, 0.5] + - [translate, 1, -0.15, 0] + +# Vanilla scoop +- add: sphere + material: + color: vanilla + transform: + - [scale-uniform, 0.5] + - [translate, 1, 1, 0] + +# Chocolate scoop +- add: sphere + material: + color: chocolate + transform: + - [scale-uniform, 0.5] + - [translate, 1, 1.75, 0] diff --git a/samples/chapters/groups.yml b/samples/chapters/groups.yml new file mode 100644 index 0000000..48a7c5c --- /dev/null +++ b/samples/chapters/groups.yml @@ -0,0 +1,62 @@ +- add: light + intensity: WHITE + at: [-10, 10, 10] + +# Hexagon part (cylinder + corner sphere) +- define: hexagon-part + value: + add: group + children: + - add: cylinder + min: 0 + max: 1 + closed: false + transform: + - [scale, 0.25, 1, 0.25] + - [rotate-z, -FRAC_PI_2] + - [rotate-y, -FRAC_PI_6] + - [translate, 0, 0, -1] + - add: sphere + transform: + - [scale-uniform, 0.25] + - [translate, 0, 0, -1] + +# Complete hexagon (6 rotated parts) +- add: group + transform: + - [rotate-x, FRAC_PI_3] + - [rotate-z, -FRAC_PI_6] + - [translate, 0, 0, -3] + children: + - add: group + transform: + - [rotate-y, FRAC_PI_3] + children: + - add: hexagon-part + - add: group + transform: + - [rotate-y, FRAC_PI_3] + children: + - add: hexagon-part + material: + value: GREEN + - add: group + transform: + - [rotate-y, FRAC_PI_3] + children: + - add: hexagon-part + - add: group + transform: + - [rotate-y, FRAC_PI_3] + children: + - add: hexagon-part + - add: group + transform: + - [rotate-y, FRAC_PI_3] + children: + - add: hexagon-part + - add: group + transform: + - [rotate-y, FRAC_PI_3] + children: + - add: hexagon-part diff --git a/samples/chapters/making_patterns.yml b/samples/chapters/making_patterns.yml new file mode 100644 index 0000000..683f429 --- /dev/null +++ b/samples/chapters/making_patterns.yml @@ -0,0 +1,40 @@ +- add: world + +- define: cyan + value: [0.15, 0.6, 0.7] +- define: magenta + value: [0.5, 0.1, 0.4] +- define: white + value: [1.0, 1.0, 1.0] +- define: red + value: [1.0, 0.0, 0.0] + +- add: light + intensity: white + at: [-10, 10, -10] + +- add: SCENE_CAMERA + +# Floor plane with ring pattern +- add: plane + material: + pattern: + type: ring + colors: + - cyan + - magenta + transform: + - [scale-uniform, 0.25] + +# Sphere with checkered pattern +- add: sphere + material: + pattern: + type: checkers + colors: + - white + - red + transform: + - [scale-uniform, 0.5] + transform: + - [translate, 0, 1, 0] diff --git a/samples/chapters/making_scene.yml b/samples/chapters/making_scene.yml new file mode 100644 index 0000000..be641b1 --- /dev/null +++ b/samples/chapters/making_scene.yml @@ -0,0 +1,80 @@ +- add: world + max-reflective-depth: 5 + +- define: green1 + value: [0.1, 1.0, 0.5] +- define: green2 + value: [0.5, 1.0, 0.1] +- define: yellow + value: [1.0, 0.8, 0.1] +- define: light-pink + value: [1.0, 0.9, 0.9] + +- add: light + intensity: [1, 1, 1] + at: [-10, 10, -10] + +- add: SCENE_CAMERA + from: [0, 1.5, -5] + to: [0, 1, 0] + up: [0, 1, 0] + fov: FRAC_PI_3 + +# Floor +- add: sphere + material: + color: light-pink + specular: 0 + transform: + - [scale, 10, 0.01, 10] + +# Left wall +- add: sphere + material: + color: light-pink + specular: 0 + transform: + - [scale, 10, 0.01, 10] + - [rotate-x, FRAC_PI_2] + - [rotate-y, -FRAC_PI_4] + - [translate, 0, 0, 5] + +# Right wall +- add: sphere + material: + color: light-pink + specular: 0 + transform: + - [scale, 10, 0.01, 10] + - [rotate-x, FRAC_PI_2] + - [rotate-y, FRAC_PI_4] + - [translate, 0, 0, 5] + +# Middle sphere +- add: sphere + material: + color: green1 + diffuse: 0.7 + specular: 0.3 + transform: + - [translate, -0.5, 1, 0.5] + +# Right sphere +- add: sphere + material: + color: green2 + diffuse: 0.7 + specular: 0.3 + transform: + - [scale-uniform, 0.5] + - [translate, 1.5, 0.5, -0.5] + +# Left sphere +- add: sphere + material: + color: yellow + diffuse: 0.7 + specular: 0.3 + transform: + - [scale-uniform, 0.33] + - [translate, -1.5, 0.33, -0.75] diff --git a/samples/chapters/planes.yml b/samples/chapters/planes.yml new file mode 100644 index 0000000..58db8c8 --- /dev/null +++ b/samples/chapters/planes.yml @@ -0,0 +1,64 @@ +- add: world + +- define: green1 + value: [0.1, 1.0, 0.5] +- define: green2 + value: [0.5, 1.0, 0.1] +- define: yellow + value: [1.0, 0.8, 0.1] +- define: light-pink + value: [1.0, 0.9, 0.9] + +- add: light + intensity: WHITE + at: [-10, 10, -10] + +- add: SCENE_CAMERA + from: [0, 1.5, -5] + to: [0, 1, 0] + up: [0, 1, 0] + fov: FRAC_PI_3 + +# Floor plane +- add: plane + material: + color: light-pink + specular: 0 + +# Wall plane +- add: plane + material: + color: light-pink + specular: 0 + transform: + - [rotate-x, FRAC_PI_2] + - [translate, 0, 0, 5] + +# Middle sphere +- add: sphere + material: + color: green1 + diffuse: 0.7 + specular: 0.3 + transform: + - [translate, -0.5, 1, 0.5] + +# Right sphere +- add: sphere + material: + color: green2 + diffuse: 0.7 + specular: 0.3 + transform: + - [scale-uniform, 0.5] + - [translate, 1.5, 0.5, -0.5] + +# Left sphere +- add: sphere + material: + color: yellow + diffuse: 0.7 + specular: 0.3 + transform: + - [scale-uniform, 0.33] + - [translate, -1.5, 0.33, -0.75] diff --git a/samples/chapters/reflections.yml b/samples/chapters/reflections.yml new file mode 100644 index 0000000..0909fe2 --- /dev/null +++ b/samples/chapters/reflections.yml @@ -0,0 +1,132 @@ +- add: world + max-reflective-depth: 8 + +- define: gray + value: [0.6, 0.6, 0.6] +- define: green1 + value: [0.1, 1.0, 0.5] +- define: green2 + value: [0.5, 1.0, 0.1] +- define: yellow + value: [1.0, 0.8, 0.1] +- define: light-pink + value: [1.0, 0.9, 0.9] + +- add: light + intensity: WHITE + at: [-10, 10, -10] + +- add: SCENE_CAMERA + from: [0, 1.5, -5] + to: [0, 1, 0] + up: [0, 1, 0] + fov: FRAC_PI_3 + +# Floor +- add: plane + material: + pattern: + type: checkers + colors: + - gray + - BLACK + reflectivity: 0.4 + +# Left wall +- add: plane + material: + pattern: + type: checkers + colors: + - gray + - BLACK + transform: + - [rotate-x, FRAC_PI_2] + - [rotate-y, -FRAC_PI_4] + - [translate, 0, 0, 12] + +# Right wall +- add: plane + material: + pattern: + type: checkers + colors: + - gray + - BLACK + transform: + - [rotate-x, FRAC_PI_2] + - [rotate-y, FRAC_PI_4] + - [translate, 0, 0, 12] + +# Mirrored left wall +- add: plane + material: + pattern: + type: checkers + colors: + - gray + - BLACK + transform: + - [rotate-x, FRAC_PI_2] + - [rotate-y, -FRAC_PI_4] + - [translate, 0, -24, 12] + +# Mirrored right wall +- add: plane + material: + pattern: + type: checkers + colors: + - gray + - BLACK + transform: + - [rotate-x, FRAC_PI_2] + - [rotate-y, FRAC_PI_4] + - [translate, 0, -24, 12] + +# Middle sphere (mirror) +- add: sphere + material: + color: BLACK + reflectivity: 1.0 + transform: + - [translate, -0.5, 1, 0.5] + +# Right sphere (mirror) +- add: sphere + material: + color: BLACK + reflectivity: 1.0 + transform: + - [scale-uniform, 0.5] + - [translate, 1.5, 0.5, -0.5] + +# Left sphere +- add: sphere + material: + color: yellow + diffuse: 0.7 + specular: 0.3 + transform: + - [scale-uniform, 0.33] + - [translate, -1.5, 0.33, -0.75] + +# Mirror wall 1 +- add: plane + material: + color: BLACK + reflectivity: 1.0 + transform: + - [rotate-x, FRAC_PI_2] + - [rotate-y, FRAC_PI_4] + - [translate, 0, 0, 3] + +# Mirror wall 2 +- add: plane + material: + color: BLACK + reflectivity: 1.0 + transform: + - [rotate-x, FRAC_PI_2] + - [rotate-y, -FRAC_PI_4] + - [translate, 0, 0, 3] diff --git a/samples/chapters/refractions.yml b/samples/chapters/refractions.yml new file mode 100644 index 0000000..ba7f96c --- /dev/null +++ b/samples/chapters/refractions.yml @@ -0,0 +1,52 @@ +- add: world + max-reflective-depth: 8 + +- define: cyan + value: [0.21, 0.42, 0.35] +- define: beige + value: [0.82, 0.72, 0.61] +- define: tinted-glass + extend: GLASS_MATERIAL + value: + color: [0.08, 0.2, 0.5] +- define: checkered-material + value: + pattern: + type: checkers + colors: + - cyan + - beige + transform: + - [translate, 0.5, 0.5, 0.5] + - [rotate-y, FRAC_PI_4] + - [scale-uniform, 0.5] + + +- add: SCENE_LIGHT +- add: SCENE_CAMERA +# floor +- add: plane + material: checkered-material +# wall +- add: plane + material: checkered-material + transform: + - [rotate-x, FRAC_PI_2] + - [translate, 0, 0, 5] +# small sphere +- add: sphere + material: tinted-glass + transform: + - [translate, -1, 1, -5.5] + - [scale-uniform, 0.5] +# mid sphere +- add: sphere + material: GLASS_MATERIAL + transform: + - [translate, 0, 1, -1.5] +# mid sphere air pocket +- add: sphere + material: AIR_MATERIAL + transform: + - [scale-uniform, 0.6] + - [translate, 0, 1, -1.5] diff --git a/samples/chapters/shadows.yml b/samples/chapters/shadows.yml new file mode 100644 index 0000000..14b8b31 --- /dev/null +++ b/samples/chapters/shadows.yml @@ -0,0 +1,80 @@ +- define: gray + value: [0.8, 0.8, 0.8] +- define: black + value: [0.2, 0.2, 0.2] +- define: orange + value: [0.7, 0.3, 0.3] +- define: blue + value: [0.4, 0.7, 0.9] + +- add: light + intensity: WHITE + at: [3, 1, 4] + +# TODO: fix this +# right now camera needs other fields +- add: camera + fov: FRAC_PI_4 + +# Background wall +- add: sphere + material: + color: blue + transform: + - [scale, 50, 50, 0.1] + - [translate, 0, 0, -80] + +# Snowman base +- add: sphere + material: + color: gray + transform: + - [translate, 1.5, 0, -8] + +# Snowman middle +- add: sphere + material: + color: gray + transform: + - [scale-uniform, 0.7] + - [translate, 1.5, 1, -8] + +# Snowman head +- add: sphere + material: + color: gray + transform: + - [scale-uniform, 0.4] + - [translate, 1.5, 1.8, -8] + +# Carrot nose +- add: sphere + material: + color: orange + transform: + - [scale, 0.4, 0.1, 0.1] + - [translate, 1.25, 1.8, -8] + +# Hat brim +- add: sphere + material: + color: black + transform: + - [scale, 0.4, 0.05, 0.4] + - [translate, 1.5, 2.1, -8] + +# Hat cylinder +- add: sphere + material: + color: black + transform: + - [scale, 0.25, 0.55, 0.25] + - [translate, 1.5, 2.1, -8] + +# Hat top +- add: sphere + material: + color: black + transform: + - [scale, 0.15, 0.085, 0.15] + - [translate, 1.5, 2.65, -8] diff --git a/samples/chapters/triangles.yml b/samples/chapters/triangles.yml new file mode 100644 index 0000000..0d36945 --- /dev/null +++ b/samples/chapters/triangles.yml @@ -0,0 +1,26 @@ +- add: light + at: [1, 3, 1] + intensity: WHITE + +# background +- add: cube + transform: + - [scale-uniform, 5 ] + - [translate, 0, 4, -4] + material: + pattern: + type: checkers + colors: + - [0.62, 0.62, 0.62] + - [0.7, 0.7, 0.7] + transform: + - [scale-uniform, 0.125] + +- add: obj + file: samples/obj/dragon.obj + transform: + # TODO: + - [normalize] + - [center_above_oy] + - [scale-uniform, 0.1] + - [translate, 0, 1, 3]