raysetta 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +72 -0
- data/Rakefile +8 -0
- data/Steepfile +15 -0
- data/exe/raysetta +3 -0
- data/lib/raysetta/aabb.rb +116 -0
- data/lib/raysetta/background/base.rb +19 -0
- data/lib/raysetta/background/cube_map.rb +44 -0
- data/lib/raysetta/background/gradient.rb +28 -0
- data/lib/raysetta/background/solid.rb +24 -0
- data/lib/raysetta/background/sphere_map.rb +30 -0
- data/lib/raysetta/camera.rb +109 -0
- data/lib/raysetta/entity_base.rb +28 -0
- data/lib/raysetta/exe.rb +75 -0
- data/lib/raysetta/hit.rb +38 -0
- data/lib/raysetta/image.rb +46 -0
- data/lib/raysetta/interval.rb +63 -0
- data/lib/raysetta/material/base.rb +19 -0
- data/lib/raysetta/material/dielectric.rb +60 -0
- data/lib/raysetta/material/diffuse_light.rb +42 -0
- data/lib/raysetta/material/lambertian.rb +48 -0
- data/lib/raysetta/material/metal.rb +49 -0
- data/lib/raysetta/object/base.rb +23 -0
- data/lib/raysetta/object/box.rb +50 -0
- data/lib/raysetta/object/bvh.rb +81 -0
- data/lib/raysetta/object/group.rb +59 -0
- data/lib/raysetta/object/moving_sphere.rb +41 -0
- data/lib/raysetta/object/quad.rb +88 -0
- data/lib/raysetta/object/sphere.rb +68 -0
- data/lib/raysetta/object/tri.rb +46 -0
- data/lib/raysetta/output/base.rb +23 -0
- data/lib/raysetta/output/png.rb +26 -0
- data/lib/raysetta/output/ppm.rb +19 -0
- data/lib/raysetta/perlin.rb +91 -0
- data/lib/raysetta/ray.rb +28 -0
- data/lib/raysetta/runner/base.rb +28 -0
- data/lib/raysetta/runner/concurrent.rb +17 -0
- data/lib/raysetta/runner/processes.rb +26 -0
- data/lib/raysetta/runner/ractors.rb +32 -0
- data/lib/raysetta/runner/sync.rb +28 -0
- data/lib/raysetta/runner/threads.rb +26 -0
- data/lib/raysetta/runner.rb +45 -0
- data/lib/raysetta/scatter.rb +12 -0
- data/lib/raysetta/scene.rb +205 -0
- data/lib/raysetta/texture/base.rb +19 -0
- data/lib/raysetta/texture/checker.rb +55 -0
- data/lib/raysetta/texture/image.rb +57 -0
- data/lib/raysetta/texture/noise.rb +46 -0
- data/lib/raysetta/texture/solid_color.rb +36 -0
- data/lib/raysetta/tracer.rb +43 -0
- data/lib/raysetta/util.rb +38 -0
- data/lib/raysetta/vec2.rb +125 -0
- data/lib/raysetta/vec3.rb +214 -0
- data/lib/raysetta/version.rb +5 -0
- data/lib/raysetta.rb +44 -0
- data/mise.toml +2 -0
- data/scenes/box.json +26 -0
- data/scenes/cornell.json +108 -0
- data/scenes/cubemap.json +109 -0
- data/scenes/dumb.json +58 -0
- data/scenes/earth.json +79 -0
- data/scenes/example.json +11712 -0
- data/scenes/perlin.json +2126 -0
- data/scenes/quads.json +38 -0
- data/scenes/simple_light.json +2126 -0
- data/scenes/testcube.json +113 -0
- data/sig/raysetta/aabb.rbs +39 -0
- data/sig/raysetta/background/base.rbs +11 -0
- data/sig/raysetta/background/cube_map.rbs +9 -0
- data/sig/raysetta/background/gradient.rbs +10 -0
- data/sig/raysetta/background/solid.rbs +9 -0
- data/sig/raysetta/background/sphere_map.rbs +9 -0
- data/sig/raysetta/camera.rbs +41 -0
- data/sig/raysetta/entity_base.rbs +12 -0
- data/sig/raysetta/hit.rbs +21 -0
- data/sig/raysetta/image.rbs +13 -0
- data/sig/raysetta/interval.rbs +36 -0
- data/sig/raysetta/material/base.rbs +11 -0
- data/sig/raysetta/material/dielectric.rbs +15 -0
- data/sig/raysetta/material/diffuse_light.rbs +12 -0
- data/sig/raysetta/material/lambertian.rbs +10 -0
- data/sig/raysetta/material/metal.rbs +11 -0
- data/sig/raysetta/object/base.rbs +15 -0
- data/sig/raysetta/object/box.rbs +13 -0
- data/sig/raysetta/object/bvh.rbs +23 -0
- data/sig/raysetta/object/group.rbs +16 -0
- data/sig/raysetta/object/moving_sphere.rbs +15 -0
- data/sig/raysetta/object/quad.rbs +26 -0
- data/sig/raysetta/object/sphere.rbs +14 -0
- data/sig/raysetta/object/tri.rbs +15 -0
- data/sig/raysetta/output/base.rbs +15 -0
- data/sig/raysetta/output/png.rbs +8 -0
- data/sig/raysetta/output/ppm.rbs +7 -0
- data/sig/raysetta/perlin.rbs +19 -0
- data/sig/raysetta/ray.rbs +18 -0
- data/sig/raysetta/runner/base.rbs +15 -0
- data/sig/raysetta/runner/concurrent.rbs +10 -0
- data/sig/raysetta/runner/processes.rbs +9 -0
- data/sig/raysetta/runner/ractors.rbs +11 -0
- data/sig/raysetta/runner/sync.rbs +11 -0
- data/sig/raysetta/runner/threads.rbs +9 -0
- data/sig/raysetta/runner.rbs +5 -0
- data/sig/raysetta/scatter.rbs +8 -0
- data/sig/raysetta/scene.rbs +69 -0
- data/sig/raysetta/texture/base.rbs +11 -0
- data/sig/raysetta/texture/checker.rbs +15 -0
- data/sig/raysetta/texture/image.rbs +11 -0
- data/sig/raysetta/texture/noise.rbs +13 -0
- data/sig/raysetta/texture/solid_color.rbs +10 -0
- data/sig/raysetta/tracer.rbs +16 -0
- data/sig/raysetta/util.rbs +15 -0
- data/sig/raysetta/vec2.rbs +48 -0
- data/sig/raysetta/vec3.rbs +67 -0
- data/sig/raysetta.rbs +6 -0
- data/sig/stdlib/chunky_png.rbs +24 -0
- data/sig/stdlib/etc.rbs +3 -0
- data/sig/stdlib/json.rbs +3 -0
- data/sig/stdlib/optparse.rbs +4 -0
- data/sig/stdlib/parallel.rbs +5 -0
- data/sig/stdlib/progress.rbs +5 -0
- metadata +206 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
{
|
|
2
|
+
"world": {
|
|
3
|
+
"ball": {
|
|
4
|
+
"type": "Sphere",
|
|
5
|
+
"center": [
|
|
6
|
+
0.0,
|
|
7
|
+
0.0,
|
|
8
|
+
0.0
|
|
9
|
+
],
|
|
10
|
+
"radius": 4.0,
|
|
11
|
+
"material": "metal-e75a4"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"camera": {
|
|
15
|
+
"vfov": 80.0,
|
|
16
|
+
"lookfrom": [
|
|
17
|
+
4.5,
|
|
18
|
+
4.5,
|
|
19
|
+
-4.5
|
|
20
|
+
],
|
|
21
|
+
"lookat": [
|
|
22
|
+
0.0,
|
|
23
|
+
0.0,
|
|
24
|
+
0.0
|
|
25
|
+
],
|
|
26
|
+
"vup": [
|
|
27
|
+
0.0,
|
|
28
|
+
1.0,
|
|
29
|
+
0.0
|
|
30
|
+
],
|
|
31
|
+
"defocus_angle": 0.0,
|
|
32
|
+
"focus_dist": 10.0
|
|
33
|
+
},
|
|
34
|
+
"background": {
|
|
35
|
+
"type": "CubeMap",
|
|
36
|
+
"textures": [
|
|
37
|
+
"image-e75b8",
|
|
38
|
+
"image-e75cc",
|
|
39
|
+
"image-e75e0",
|
|
40
|
+
"image-e75f4",
|
|
41
|
+
"image-e7608",
|
|
42
|
+
"image-e761c"
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"materials": {
|
|
46
|
+
"metal-e75a4": {
|
|
47
|
+
"type": "Metal",
|
|
48
|
+
"texture": "solidcolor-e7630",
|
|
49
|
+
"fuzz": 0.0
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"textures": {
|
|
53
|
+
"solidcolor-e7630": {
|
|
54
|
+
"type": "SolidColor",
|
|
55
|
+
"albedo": [
|
|
56
|
+
1.0,
|
|
57
|
+
1.0,
|
|
58
|
+
1.0
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"image-e75b8": {
|
|
62
|
+
"type": "Image",
|
|
63
|
+
"image": "image-e7644"
|
|
64
|
+
},
|
|
65
|
+
"image-e75cc": {
|
|
66
|
+
"type": "Image",
|
|
67
|
+
"image": "image-e7658"
|
|
68
|
+
},
|
|
69
|
+
"image-e75e0": {
|
|
70
|
+
"type": "Image",
|
|
71
|
+
"image": "image-e766c"
|
|
72
|
+
},
|
|
73
|
+
"image-e75f4": {
|
|
74
|
+
"type": "Image",
|
|
75
|
+
"image": "image-e7680"
|
|
76
|
+
},
|
|
77
|
+
"image-e7608": {
|
|
78
|
+
"type": "Image",
|
|
79
|
+
"image": "image-e7694"
|
|
80
|
+
},
|
|
81
|
+
"image-e761c": {
|
|
82
|
+
"type": "Image",
|
|
83
|
+
"image": "image-e76a8"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"images": {
|
|
87
|
+
"image-e7644": {
|
|
88
|
+
"type": "Image",
|
|
89
|
+
"data": "data:image/png;base64,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"
|
|
90
|
+
},
|
|
91
|
+
"image-e7658": {
|
|
92
|
+
"type": "Image",
|
|
93
|
+
"data": "data:image/png;base64,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"
|
|
94
|
+
},
|
|
95
|
+
"image-e766c": {
|
|
96
|
+
"type": "Image",
|
|
97
|
+
"data": "data:image/png;base64,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"
|
|
98
|
+
},
|
|
99
|
+
"image-e7680": {
|
|
100
|
+
"type": "Image",
|
|
101
|
+
"data": "data:image/png;base64,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"
|
|
102
|
+
},
|
|
103
|
+
"image-e7694": {
|
|
104
|
+
"type": "Image",
|
|
105
|
+
"data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbQAAAG0CAIAAADVVkURAAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAAFq1JREFUeJzt3X2QnVV9B/BzF4uBJEBSKIK2tSo4jv5RbW1HqRZtAWlHx6qYRKcDvldBkaGWJEQ7giJgeVMQnVEB38E6tjOIWHTqKzo6ilMrJEoqdiS0ItX6rlVu78tmyd577mZfzuY5z/4+n3lm+bKzObl7ntyz5/nus3enDjplRzrlG+l5O/rHaN6xvPl5NeW5j+cvT37+QvP2xebt6ZLL08WX998Oj4v3+N+S+Yq95SuWkOcz/vJ8XsPwhveUOBcLP+/F/+3NfdTwfBzJy70WzV4DH/68W29MaeqHVx+drj4qXXV0/xjNRy9vvqqmPPfxzuXJ71xofvgi8/VHpyNOS0ee1n87PI7c439L5lP3lk9dQp7P+MvzeQ3DITsKnItFnPfi//bmPmp4Po7k5V6LZq+Bnfcf/eDe4pgIodv0A1gZTGMMP08di2MYnaYfwMpgGoPon2iLYwwduUTu2DkG0T/RFscYunKJ3LVzjKJrcQzDlqcI0xhCJ+kcA7HlKcI0hnCvzjGQSjq7tmedYwwdnWMglXR2bc86xzB0jnHY8hRhGqPQOcZhy1OEaQyhq3MMpJLOru1Z5xiFzjGOSjq7tmedYwzdwZdBi2MQtjxFmMYQpgZfBi2OQdjyFGEaQ9A5RlJJZ9f2rHOMQucYRyWdXduzzjEMnWMctjxFmMYQ/Gx1KLY8RZjGEH6tcwykks6u7VnnGMOUzjGQSjq7tmedYxg6xzhseYowjVHoHOOw5SnCNIbgPsdIKuns2p51jjF4PcdIKuns2p51jmHoHOOw5SnCNEahc4zDlqcI0xiEzjGOSjq7tmedYww6x0gq6ezannWOYegc47DlKcI0RqFzjMOWpwjTGIL7HCOppLNre9Y5RqFzjKOSzq7tWecYhs4xDlueIkxjCB2dYyS2PEWYxhB0jpFU0tm1PescY+jqHAOppLNre9Y5xtDROUZiy1OEaQxB5xiKLU8RpjGEe3WOgVTS2bU96xyj0DnGUUln1/asc4yio3OMw5anCNMYRFfnGIctTxGmMQT3OUZSSWfX9qxzjMHrOUZSSWfX9qxzjELnGIgtTxGmMQidYyC2PEWYxhB0jpFU0tm1PescY9A5RlJJZ9f2rHOMoatzjMSWpwjTGEJH5xiJLU8RpjEEnWMklXR2bc86x0gsjjFU0tm1PescY+gODotjDPd20/e3pe+/enBskxeZ//eopk8k+8KUzjGQ702ll56bXnrO4DhXXmTe/NdNn0j2BZ0jQIb7HAGy3OcIkKFzBBijcwSYyOIIMEvHfY4AOTpHgDE6R4CJLI4Ao3SOAKO8niNAhs4RYCKLI8AonSPAOJ0jwBidI8BEFkeAUTpHgFHucwTI0DkCTGRxBBilcwQYp3MEyNA5AkxgcQQYpXMEGOU+R4AM9zkCTGRxBBilcwQYp3MEGKNzBMjoDN5aHAFm6eocAXJ0jgBjdI4AGTpHgDydI8A4nSPAGJ0jQIbOESBP5wgwTucIMOZenSPAJBZHgFE6R4BRncFhcQSYpTt4a3EEyLA4AozSOQKM0jkCZOgcASayOAKM0jkCjNI5AmToHAEmsjgCjNI5AozSOQJk6BwBJrI4AozSOQJk6BwBRvkdMgBZ/W/JWBwBRukcAUa5zxEgo6tzBMjROQLk6BwBRukcATJ0jgBZOkeAMb2do84RYFxX5wgwSucIkNEZvLU4AszSdZ8jwLiOzhFgnM4RIEPnCJChcwTI0DkCZOgcATJ0jgAZOkeADJ0jQIbOESCjO3hrcQSYRecIkKFzBMjQOQJkuM8RIEPnCJChcwTI0DkCZOgcATJ0jgAZOkeADJ0jQIbOESBD5wiQpXMEGHOvzhFgEosjwCidI8Co6fscr0139Y4PpP/6wCBUmA9teqaAgk5O37skfWl4XJq+WGF+Vfry19K1U89O/947NqSvbRiECvOqps8lUNDvp2/9Rfqj4XFi+uMK84npWc9Kz3ZZDTSjW3FOg86xs8f/1pg7o48ZWAk6e6xHleX+f6fqWKbnyt1ZyyXQbp3p5/Uwpwpzcp8jsO91p68I71Nbntk5AjSglovTTL436RyBplTQLeZzR+cI7Hv1d45ezxFoQBs6xz6LI9CMWi5OcznpHIGmNN4tTso6R+rykpekbnflHPfc0/SE1krnCAvz0Ic2/QiKWr++6UdQK50jLEzHFUIwtVyc5nLSOVKPrvMcTOPd4qSsc6Qudo5B6BxhYewcg9A5wsLYOUZTy8VpLiedI/Wwc4ym8W5xUu7sfuGJGpZpnSN2jlHoHGFh7ByDaEPnOL1zhCrYOUZTy8VpLiedI/Wwc4ym8W5xUnafI3VZYTvHj3606UdQK50jLMxK2jn+8hfpvPOafhC1akPn+KtkcaQeK2nn+IIXpM9/vukHUb1aLk5zOekcqceK2Tm+613pPe9Nv/5104+jeo13i5PycA3SOVKL797d9CMo4c7vpJNPbvpB1K0NneP9kstq6nHN1ekJT0jHHrv7eNI+zd/8ZpnP4qlPKzPOCtaGzrHP4kgt7r47ffaz6VOf2n18ct/l4/4sHXVUgU/hhS9Mt9xSYJwgark4zeR+J6JzJLrHPS6dva3AOOeck97xjgLjxNF4tzgp+9lqSI96ZLr55gLjbN+e3vq2AuNE0IbO0X2OxPboR6frry8z1AXnp7t2lRlqxau/c5z5bjUr2ZYt8/pVebff3vQD3efWr+9fTf/ugwsMdc270tXXFBgnmlouTsfyMOgcV7hjnzSvD1thv/lvPl70ovTMZxQYZ8f2dPbWAuME1Hi3OCn72eoQzF3WIx+Zzj+/zFCnnpbuvLPMUEHoHKmDbXfOK15RZpwTn5I+8YkyQ8Whc6QOto5jXvzi/rF0J5+SbvxYgXHCquXidCzrHEMwdyN6y+LbStxz85WvpHf5JszSNN4tTso6xxDM3Z6e/OQyK2PP37+mzDgB6Rypg63jboccUuw+7YsvTh9XNS6WzpE62Druduml6aiHFRjnC19Ib31r+vnPCwwVXC0Xp2NZ5xiCuRvauKnYK4lt3FjsJXyCa7xbnJR1jiGYu5773z9dekmZoZ74xPTtb5cZKqw2dI7TiyMrmq1jSu9+dzr88ALjXHBB+sxnCowTXBs6R7+3OoLwW8dzz00nnVRgnJtvTps3FxiHGbVcnI7l7u7FsY6VenLWOS5F8Lk78cS0rcRrNfYcf3yZcZjReLc4Kc98t7rxZXovWee4FMHn7oYbyoxz5t+mn/ykzFC0oXN0n2MEUbeOhx3W/6ULRdzwkXTxRWWGIrWjc/y/ZHFc+UJuHdcdks46Kx1zTIGhfvXrdNrLC4zDuFouTjP5p0nnuOLFnLsn/mk688wyQ73wBelb3yozFCMa7xbnyEnnuOLFnLsrrig2zjXXlBmKGW3oHPtcVq908baOl1+eHvjAAuPcdFM67bQC4zCiDZ1jn8VxpQu2dTzhhHTqqQXG+e7dZV7zkTnUcnGay0nnuOKFmrsnPzndeGOZoZ721HTHHWWGYpIaukWdY1xx5u6YY9KHP1xmqKuuSl/9apmhGKdzpA4xto5HHJHOOScddFCBoXoX1FdemX7xiwJDkaVzZEle//r0ne+kn/50cPws/eyni8zHzfuH3pb+d/WOL35xOSdlspe9rH9NXcTWLelLXyozFHOr5eI0l5POsVrPeEb/W64HHDA4VqVVBywyz9/S/67e8djHLtuMTPYHf1jsB6hf97r0jneUGYq9qqFb1Dm2z+rVTT+C9th2dplxrr02XXBhmaGYQxs6x/7Tz2V1rSJulxfj3HPT059eYJyf/az/Et8//lGBoZhbGzrH/ZLFsV4Rt8sL9qpXFbugfsADyozD/NVycTqWZ75bXcdKPTnH7Bwjfs4L9LSnpQsLXQWf9/r0wx+WGYr5q6FbzOaZ71Y3vkzvJcfsHCN+zgvxoAeltxf6zsmOHel97y8zFPPRhs7RZXXNbB3ndNll6bBDywx15pnp618vMxTz0YbOsc/iWCtbx8le9OL+rU5FnH56+shHygzFQtVycTqWZ3aO9azU+axzZE+HHpqufEuZoT7+8fSmN5UZikVovFuclP3e6qpF/Jzn54MfTPvtV2CcX/4yHXdcgXFYqDZ0jv3/uqyula1jzuVvTsceW2aoE55SZhwWSufI0tg6jtm4MZ1a6NVnTz89ffJfywzFotVycTqW3edYtS9/pelHUJlDD03vL3TDzT/9s6qxCo13i5OyzrFqf/X01OkUOG66ab5/Y5G/rrM85+phR6VPf7rYaBdeUGwoFkHnSB3av+0+7LC0ZXN6xCPKjPaa16TPf77MUCyOzpE6tH/bffzx6fnPLzPUxz7Wf6EKKlHLxelY1jmGsALm7u1vLzPOPfekV55eZiiKaLxbnJR1jiG0fe7e/760alWZoU45JW3fUWYolkLnSB3avHXcuDFt3FRmqD85Jl1/fZmhWCKdI3Vo7dbxpJOK3bvz2nPS524uMxQF1XJxOpZ1jiG0dO5OOCFdd12ZoX78o3T1VWWGoqzGu8VJeWbn2PgyvZesc1yKNs7dQx6Szjuv2Ghbz0533FFsNJauDZ3j/ZLL6pWvhVvHl5+WHvOYMkP1Lszf+74yQ1FK/Z3jkMVxpWvb1vGYY9Irzygz1B3fTue/If3PPWVGo7haLk4z+VdJ57jitWvu1qwp9mthen7vwenfvlZsNIprvFuclN3nGEK75u6yy9LjH19mqGc+s8w4FNeGzrF/Se2yeqVrz9bxvPOK/Zhgz4c+lLrdJo9v/2exz2WFaUPn6BdsRdCSreNzn5u2bGn6QRT1O7/d9COoXi0Xp7mcdI4rXivm7mEPS+98Z9MPgn2u8W5xUtY5htCKuXvLW9L++zf9INhX2tA59v/rsnqlq37reMYZftFVLG3oHC2OEVS/dfzzP2/6EdCQWi5OM3l6caxhpdY5Lpf6584FdViNd4uT8nAN0jmucPXPXf3LN2XpHKlD9WtP/cs3ZbWhc+yzOK509a891S/fLJNaLk5zOekcV7zPfm5eH3bXXcv8OOZQ//LN8mi8W5yU3ecYwjmvndcvmz7yyMYeoS990egcYV586YtG5wjzY+sYVS0Xp7mcdI40z9Yxqsa7xUlZ50gVfOmLRucI8/KDHzT9CNi3dI4wL88+aV7fT2/jwdxquTjN5aRzBJrSeLc4KescgQa0oXP0axKAfa4NnaNvyADNqeXiNJeTzhFoSuPd4uSscwT2ufo7x+El9dR16VHXpkddt/uoMP98oXMPVOyW9JAb0hc/OjhuGBy15RvTdf+Yrp3akI7YmI7YsPuoMH+v6XMJFHRNOvSM9Nje8crB2wrzBemxj0obfUMGYJbehX/Hd6sBRvjZaoCJLI4Aswzv6bE4AswypXMEGKdzBMgY3gpucQSYpatzBBjnPkeADJ0jQIbOESBD5wiQoXMEyNA5AmToHAEydI4AGTpHgAydI0DGfoO3FkeAWXSOABk6R4AMnSNAhvscATJ0jgAZOkeADJ0jQIbOESBD5wiQoXMEyNA5AmToHAEydI4AGVM6R4AcnSNARu+q2uIIMEbnCDCqMzgsjgCzuM8RIEvnCJCjcwQYpXMEyNA5AmR0dI4AWTpHgFFTOkeAcd3BW4sjQIbFEWCUzhFglPscATJ0jgATWRwBRukcAUbpHAEydI4AE1kcAUbpHAFG6RwBMnSOABNZHAFG6RwBRukcATJ0jgAZncFbiyPALB2dI0BOV+cIMMrvrQbI0DkC5OkcAcbpHAHG6BwBMnSOAHk6R4BxOkeAMR2dI8AkFkeAWbo6R4BxHZ0jQI7OEWACiyPAKJ0jwDidI0CGzhFgAosjwCidI8Ao9zkCZHg9R4CJLI4Ao3SOAKN0jgAZOkeAiSyOAKN0jgCjdI4AWTpHgDGd/lW1xRFgVEfnCDBO5wgwxn2OABk6R4AsnSNAhs4RYIzOESBD5wiQpXMEyNA5AozROQJk6BwDOfRB3Stvec2VX331W295dT/Ii8rn/8t7mj6T7Bs6xzD226+77gHnrvut1x1y+OvWH36uvLh8yGE7mj6T7AtdnWMc3e7gQqGz+4JBXlQeVlEEoHOMY/D0Hj6/5SXkbtMnkn1B5xjJzNNbXlK2cwyhq3OMo9PpTu+Ahs90eVF5uKEgAJ1jGDrHIlnnGEb/RFscY1iuDi5atnMMQecYyczTW15StnMMQucYhs6xSNY5hqFzDEPnWCTrHIPws9WRLFcHFy3bOYagc4xk5uktLynbOQahcwxD51gk6xzD0DmGoXMsknWOYfRPtMUxhuXq4KJlO8cQdI6RzDy95SVlO8cgdI5h6ByLZJ1jGDrHMHSORbLOMQj3OUayXB1ctGznGILOMZKZp7e8pGznGEXX4hiEzrFI1jkGMbxgsDiGoHMsknWOQegcI1muDi5atnMMon+iLY4xzDy95SVlO8couhbHIHSORbLOMYipwem2OIagcyySdY5BDL8GWhxj2Bd9XIRs5xiIxTGGmae3vKRs5xjC8LRbHEPQORbJOsc4OhbHIHSORbLOMYz+ibY4xrBcHVy0bOcYQnfwZdHiGMPM01teUrZzDKHj9Rzj0DkWyTrHIDpezzEOnWORrHMM4t7BibY4xrBcHVy0bOcYRP9EWxxjmHl6y0vKdo4hDL8gWhxD0DkWyTrHIIYXDBbHEHSORbLOMQiv5xhJyd4tcrZzDKJ/oi2OMcw8veUlZTvHKLoWxyB0jkWyzjGOjsUxCJ1jkaxzDKN/oi2OMSxXBxct2zkG0T/RFscYZp7e8pKynWMUXYtjEDrHIlnnGITfIROIzrFI1jkG4WerI1muDi5atnMMYfhl0eIYw8zTW15StnOMomtxDELnWCTrHIMYXjBYHEPQORbJOscghl8DLY4xLFcHFy3bOQZicYxh5uktLynbOYYwPO1TB69La9alteu6a9d3B2F3Xr/7/ev67x/Paya8f75/9pA0OEbz6gn5vo85ZFYe+fjVe7x/Xvng3fngQT64FzJ5ELoHHpR6x+qDFpwPPGiQ16YDx/IBa1PvOHBt98BBmDv33q5a0z8OWNM9YM3e8uruqtVpeExN9c71mtRdm9Lafujn3tvV08de8oH9ozt4mw7oH93e21WdtCp1Vo3l+3fSb6TO/qm7f0r7z873S537Da9YFt73TQ3+7PiYM3nS4xnk/mOeefy9z2X1vD/31bPnbXo+75vbeZ6LNfM6v7Py5H8zi/532M9z/jvv5ennwkKfR7nn8qTn6Zq9fvweedIaMsz99Wr99Nq1gDVqJq+fXq/Wzl4D91vX7axbO7Vhy62btty6Ycv2jZu398LGQd5w1vZNm6ffv2Hw/k1bbpuVN09//DCPvn/uPzv8u7beunHrbRvH8nO23Hbf+/fMMx+zZXae/fGb9nj/wvLWQd66Y9Pk/Jyzb+sdi8lbd/Tztt5oo/m5/Y/ZvunsHZvO3r7X/Jyt25+7rX88Z1tvkL3mb/TDq/vHX/7NN3bdfuGunRf0j16Yzm/cdfvg2Ev+h/7RC/3jol6+a2fvfy+6s5e/edFYvvjOnZfuuv2Su3ZevGvnJbPzZbtuv+yunZff9R+X37nzil23X7GQ/ObBnx0fcyZPejyDfPtFez7+XTsvnPfn/sY95+37//2I4XzeN7fzPRfzOr/TedsgT/43s/h/h728l3/nezwXFvE8mvS83jL7eb311r18/B55Q3ad2f3+/nq1ebBezb1G3ffxe46z+89unl73Np41PeYT/27Hzt9c9/9Pu7CTysEzeAAAAABJRU5ErkJggg=="
|
|
106
|
+
},
|
|
107
|
+
"image-e76a8": {
|
|
108
|
+
"type": "Image",
|
|
109
|
+
"data": "data:image/png;base64,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"
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"noises": {}
|
|
113
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
class AABB
|
|
3
|
+
attr_accessor x: Interval
|
|
4
|
+
attr_accessor y: Interval
|
|
5
|
+
attr_accessor z: Interval
|
|
6
|
+
|
|
7
|
+
# The default AABB is empty, since intervals are empty by default.
|
|
8
|
+
def initialize: (?Interval x, ?Interval y, ?Interval z) -> void
|
|
9
|
+
|
|
10
|
+
# Treat the two points a and b as extrema for the bounding box, so we don't require a
|
|
11
|
+
# particular minimum/maximum coordinate order.
|
|
12
|
+
def self.from_points: (*Vec3 points) -> AABB
|
|
13
|
+
def self.from_aabbs: (AABB box0, ?AABB? box1, *AABB rest) -> AABB
|
|
14
|
+
|
|
15
|
+
def []: (Integer n) -> Interval
|
|
16
|
+
def []=: (Integer n, Interval v) -> void
|
|
17
|
+
def +: (AABB other) -> AABB
|
|
18
|
+
|
|
19
|
+
def hit: (Ray r, Range[Float] ray_t) -> bool
|
|
20
|
+
|
|
21
|
+
# Returns the index of the longest axis of the bounding box.
|
|
22
|
+
def longest_axis: () -> (0 | 1 | 2)
|
|
23
|
+
|
|
24
|
+
def dup: () -> AABB
|
|
25
|
+
|
|
26
|
+
def ==: (untyped box) -> bool
|
|
27
|
+
alias eql? ==
|
|
28
|
+
|
|
29
|
+
def hash: () -> Integer
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
# Adjust the AABB so that no side is narrower than some delta, padding if necessary.
|
|
34
|
+
def pad_to_minimums: () -> void
|
|
35
|
+
|
|
36
|
+
EMPTY: AABB
|
|
37
|
+
UNIVERSE: AABB
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
class Camera
|
|
3
|
+
attr_reader vfov: Float
|
|
4
|
+
attr_reader lookfrom: Vec3
|
|
5
|
+
attr_reader lookat: Vec3
|
|
6
|
+
attr_reader vup: Vec3
|
|
7
|
+
attr_reader defocus_angle: Float
|
|
8
|
+
attr_reader focus_dist: Float
|
|
9
|
+
|
|
10
|
+
def initialize: (?vfov: Float, ?lookfrom: Vec3, ?lookat: Vec3, ?vup: Vec3, ?defocus_angle: Float, ?focus_dist: Float) -> void
|
|
11
|
+
|
|
12
|
+
def viewport: (Integer image_width, Integer image_height) -> void
|
|
13
|
+
|
|
14
|
+
# Construct a camera ray originating from the defocus disk and directed at a randomly
|
|
15
|
+
# sampled point around the pixel location x, y.
|
|
16
|
+
def ray: (Integer x, Integer y) -> Ray
|
|
17
|
+
|
|
18
|
+
def export: () -> Hash[Symbol, untyped]
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
attr_reader image_height: Integer
|
|
23
|
+
attr_reader center: Vec3
|
|
24
|
+
|
|
25
|
+
# Calculate the horizontal and vertical delta vectors from pixel to pixel.
|
|
26
|
+
attr_reader pixel00_loc: Vec3
|
|
27
|
+
attr_reader pixel_delta_u: Vec3
|
|
28
|
+
attr_reader pixel_delta_v: Vec3
|
|
29
|
+
|
|
30
|
+
# Calculate the u,v,w unit basis vectors for the camera coordinate frame.
|
|
31
|
+
attr_reader u: Vec3
|
|
32
|
+
attr_reader v: Vec3
|
|
33
|
+
attr_reader w: Vec3
|
|
34
|
+
|
|
35
|
+
attr_reader defocus_disk_u: Vec3
|
|
36
|
+
attr_reader defocus_disk_v: Vec3
|
|
37
|
+
|
|
38
|
+
# Returns a random point in the camera defocus disk.
|
|
39
|
+
def defocus_disk_sample: () -> Vec3
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
class Hit
|
|
3
|
+
attr_accessor point: Vec3
|
|
4
|
+
attr_accessor normal: Vec3
|
|
5
|
+
attr_accessor t: Float
|
|
6
|
+
attr_accessor material: Material::Base
|
|
7
|
+
attr_accessor uv: Vec2
|
|
8
|
+
|
|
9
|
+
attr_writer front_face: bool
|
|
10
|
+
|
|
11
|
+
def initialize: (t: Float, normal: Vec3, material: Material::Base, r: Ray, point: Vec3, ?uv: Vec2) -> void
|
|
12
|
+
|
|
13
|
+
def front_face?: () -> bool
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
# Sets the hit's normal vector.
|
|
18
|
+
# NOTE: `@normal` is assumed to have unit length.
|
|
19
|
+
def set_face_normal: (Ray r) -> void
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
class Image < EntityBase
|
|
3
|
+
@image: ChunkyPNG::Canvas
|
|
4
|
+
attr_reader image: ChunkyPNG::Canvas
|
|
5
|
+
|
|
6
|
+
def initialize: (?path: String?, ?data_url: String?) -> void
|
|
7
|
+
|
|
8
|
+
def width: () -> Integer
|
|
9
|
+
def height: () -> Integer
|
|
10
|
+
|
|
11
|
+
def []: (Integer x, Integer y) -> Vec3
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
class Interval
|
|
3
|
+
@min: Float
|
|
4
|
+
@max: Float
|
|
5
|
+
|
|
6
|
+
attr_accessor min: Float
|
|
7
|
+
attr_accessor max: Float
|
|
8
|
+
|
|
9
|
+
# Default interval is empty
|
|
10
|
+
def initialize: (?Float min, ?Float max) -> void
|
|
11
|
+
|
|
12
|
+
def self.from_range: (Range[Float] r) -> Interval
|
|
13
|
+
|
|
14
|
+
# Create the interval tightly enclosing the two input intervals.
|
|
15
|
+
def self.from_intervals: (Interval a, Interval b) -> Interval
|
|
16
|
+
|
|
17
|
+
def size: () -> Float
|
|
18
|
+
|
|
19
|
+
def include?: (Float x) -> bool
|
|
20
|
+
def surround?: (Float x) -> bool
|
|
21
|
+
def clamp: (Float x) -> Float
|
|
22
|
+
|
|
23
|
+
def expand: (Float delta) -> instance
|
|
24
|
+
def expand!: (Float delta) -> self
|
|
25
|
+
|
|
26
|
+
def dup: () -> instance
|
|
27
|
+
|
|
28
|
+
def ==: (untyped i) -> bool
|
|
29
|
+
alias eql? ==
|
|
30
|
+
|
|
31
|
+
def hash: () -> Integer
|
|
32
|
+
|
|
33
|
+
EMPTY: Interval
|
|
34
|
+
UNIVERSE: Interval
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Material
|
|
3
|
+
class Dielectric < Base
|
|
4
|
+
# Refractive index in vacuum or air, or the ratio of the material's refractive index over
|
|
5
|
+
# the refractive index of the enclosing media
|
|
6
|
+
attr_accessor refraction_index: Float
|
|
7
|
+
|
|
8
|
+
def initialize: (Float refraction_index) -> void
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def reflectance: (Float cosine, Float ri) -> Float
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Material
|
|
3
|
+
class DiffuseLight < Base
|
|
4
|
+
attr_accessor texture: Texture::Base
|
|
5
|
+
|
|
6
|
+
def initialize: (Texture::Base texture) -> void
|
|
7
|
+
def self.solid: (Vec3 albedo) -> instance
|
|
8
|
+
|
|
9
|
+
def textures: () -> [Texture::Base]
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Material
|
|
3
|
+
class Metal < Base
|
|
4
|
+
attr_accessor texture: Texture::Base
|
|
5
|
+
attr_accessor fuzz: Float
|
|
6
|
+
|
|
7
|
+
def initialize: (Texture::Base texture, Float fuzz) -> void
|
|
8
|
+
def self.solid: (Vec3 albedo, Float fuzz) -> instance
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Object
|
|
3
|
+
class Base < EntityBase
|
|
4
|
+
def hit: (Ray r, Range[Float] ray_t) -> Hit?
|
|
5
|
+
|
|
6
|
+
def bounding_box: () -> AABB
|
|
7
|
+
|
|
8
|
+
def export: () -> Hash[Symbol, untyped]
|
|
9
|
+
def materials: () -> Array[Material::Base]
|
|
10
|
+
def objects: () -> Array[Object::Base]
|
|
11
|
+
|
|
12
|
+
def to_s: (?Integer depth) -> String
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Object
|
|
3
|
+
class BVH < Base
|
|
4
|
+
@left: Object::Base
|
|
5
|
+
@right: Object::Base
|
|
6
|
+
|
|
7
|
+
attr_reader bounding_box: AABB
|
|
8
|
+
|
|
9
|
+
def initialize: (Array[Object::Base] objects) -> void
|
|
10
|
+
|
|
11
|
+
def export: () -> Hash[String, Hash[Symbol, untyped]]
|
|
12
|
+
def materials: () -> Array[Material::Base]
|
|
13
|
+
def objects: () -> Array[Object::Base]
|
|
14
|
+
|
|
15
|
+
def objects=: (Array[Object::Base] objs) -> void
|
|
16
|
+
def add: (Object::Base object) -> void
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def export_bvh: (Object::Base obj) -> Hash[String, Hash[Symbol, untyped]]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Object
|
|
3
|
+
class Group < Base
|
|
4
|
+
attr_reader objects: Array[Object::Base]
|
|
5
|
+
attr_reader bounding_box: AABB
|
|
6
|
+
|
|
7
|
+
def initialize: (*Object::Base objects) -> void
|
|
8
|
+
|
|
9
|
+
def objects=: (Array[Object::Base] objs) -> void
|
|
10
|
+
|
|
11
|
+
def add: (Object::Base obj) -> void
|
|
12
|
+
|
|
13
|
+
def export: () -> Hash[Symbol, untyped]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Object
|
|
3
|
+
class MovingSphere < Sphere
|
|
4
|
+
@bounding_box: AABB
|
|
5
|
+
|
|
6
|
+
attr_accessor center_vec: Vec3
|
|
7
|
+
|
|
8
|
+
def initialize: (Vec3 center1, Vec3 center2, Float radius, Material::Base material) -> void
|
|
9
|
+
|
|
10
|
+
# Linearly interpolate from center1 to center2 according to time, where t=0 yields
|
|
11
|
+
# center1, and t=1 yields center2.
|
|
12
|
+
def center_at: (?Float time) -> Vec3
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Raysetta
|
|
2
|
+
module Object
|
|
3
|
+
class Quad < Base
|
|
4
|
+
attr_accessor q: Vec3
|
|
5
|
+
attr_accessor u: Vec3
|
|
6
|
+
attr_accessor v: Vec3
|
|
7
|
+
attr_accessor material: Material::Base
|
|
8
|
+
|
|
9
|
+
attr_reader bounding_box: AABB
|
|
10
|
+
|
|
11
|
+
def initialize: (Vec3 q, Vec3 u, Vec3 v, Material::Base material) -> void
|
|
12
|
+
|
|
13
|
+
def to_s: (?Integer depth) -> ::String
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
attr_accessor normal: Vec3
|
|
18
|
+
attr_accessor d: Float
|
|
19
|
+
attr_accessor w: Vec3
|
|
20
|
+
|
|
21
|
+
def interior?: (Float a, Float b) -> Vec2?
|
|
22
|
+
|
|
23
|
+
def compute_bounding_box: () -> AABB
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|