[{"data":1,"prerenderedAt":1701},["ShallowReactive",2],{"\u002Fprojects\u002Fray-tracer":3},{"id":4,"title":5,"body":6,"date":1691,"description":1692,"draft":1693,"extension":1694,"meta":1695,"navigation":1693,"path":1696,"repository":45,"seo":1697,"stem":1698,"tags":1699,"toc":1693,"__hash__":1700},"projects\u002Fprojects\u002Fray-tracer.md","Ray Tracer",{"type":7,"value":8,"toc":1684},"minimark",[9,21,33,40,48,53,57,61,66,82,86,103,107,118,122,133,137,148,152,178,192,211,215,219,232,236,239,253,256,1438,1442,1526,1530,1533,1537,1566,1570,1680],[10,11,12,13,20],"p",{},"I wrote a Ray Tracer along reading the books ",[14,15,19],"a",{"href":16,"rel":17},"https:\u002F\u002Fraytracing.github.io\u002F",[18],"nofollow","Ray Tracing in One Weekend book series",".",[10,22,23,24,20],{},"I chose to write it in ",[14,25,29],{"href":26,"rel":27,"target":28},"https:\u002F\u002Frust-lang.org\u002F",[18],"_blank",[30,31,32],"em",{},"Rust",[10,34,35,36,39],{},"I added the possibiliy to load some scene configuration files and to convert\nsome ",[30,37,38],{},"STL"," file into those scene.",[10,41,42,43,20],{},"Sources are available on ",[14,44,47],{"href":45,"rel":46,"target":28},"https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Fray-tracer",[18],"GitHub",[49,50,52],"h2",{"id":51},"pictures","Pictures",[54,55],"ui-gallery",{":images":56},"[\"\u002Fpages\u002Fprojects\u002Fray-tracer\u002Fspheres.png\",\"\u002Fpages\u002Fprojects\u002Fray-tracer\u002Fearth.png\",\"\u002Fpages\u002Fprojects\u002Fray-tracer\u002Fnoise.png\",\"\u002Fpages\u002Fprojects\u002Fray-tracer\u002Fdog.png\",\"\u002Fpages\u002Fprojects\u002Fray-tracer\u002Ffox.png\",\"\u002Fpages\u002Fprojects\u002Fray-tracer\u002Fpokechess.png\"]",[49,58,60],{"id":59},"features","Features",[62,63,65],"h5",{"id":64},"materials","Materials",[67,68,69,73,76,79],"ul",{},[70,71,72],"li",{},"Glass",[70,74,75],{},"Lambertian",[70,77,78],{},"Metal",[70,80,81],{},"Light",[62,83,85],{"id":84},"textures","Textures",[67,87,88,91,94,97,100],{},[70,89,90],{},"Solid color",[70,92,93],{},"Checker",[70,95,96],{},"Image",[70,98,99],{},"Procedural noise",[70,101,102],{},"Marble",[62,104,106],{"id":105},"shapes","Shapes",[67,108,109,112,115],{},[70,110,111],{},"Sphere,",[70,113,114],{},"Quad",[70,116,117],{},"Triangle",[62,119,121],{"id":120},"transformations","Transformations",[67,123,124,127,130],{},[70,125,126],{},"Scale",[70,128,129],{},"Rotation",[70,131,132],{},"Translation",[62,134,136],{"id":135},"misc","Misc",[67,138,139,142,145],{},[70,140,141],{},"Load scene configuration",[70,143,144],{},"Create scene configuration",[70,146,147],{},"Convert STL files into scene configuration",[49,149,151],{"id":150},"setup","Setup",[153,154,159],"pre",{"className":155,"code":156,"language":157,"meta":158,"style":158},"language-sh shiki shiki-themes catppuccin-mocha","git clone https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Fray-tracer.git\n","sh","",[160,161,162],"code",{"__ignoreMap":158},[163,164,167,171,175],"span",{"class":165,"line":166},"line",1,[163,168,170],{"class":169},"sO0CG","git",[163,172,174],{"class":173},"sX9bP"," clone",[163,176,177],{"class":173}," https:\u002F\u002Fcodeberg.org\u002Fnull_dev\u002Fray-tracer.git\n",[153,179,181],{"className":155,"code":180,"language":157,"meta":158,"style":158},"cd ray-tracer\n",[160,182,183],{"__ignoreMap":158},[163,184,185,189],{"class":165,"line":166},[163,186,188],{"class":187},"sDSzL","cd",[163,190,191],{"class":173}," ray-tracer\n",[153,193,195],{"className":155,"code":194,"language":157,"meta":158,"style":158},"cargo install --path .\u002Fpackages\u002Fray-tracer\n",[160,196,197],{"__ignoreMap":158},[163,198,199,202,205,208],{"class":165,"line":166},[163,200,201],{"class":169},"cargo",[163,203,204],{"class":173}," install",[163,206,207],{"class":173}," --path",[163,209,210],{"class":173}," .\u002Fpackages\u002Fray-tracer\n",[49,212,214],{"id":213},"usage","Usage",[62,216,218],{"id":217},"get-help","Get help",[153,220,222],{"className":155,"code":221,"language":157,"meta":158,"style":158},"nd-ray-tracer help\n",[160,223,224],{"__ignoreMap":158},[163,225,226,229],{"class":165,"line":166},[163,227,228],{"class":169},"nd-ray-tracer",[163,230,231],{"class":173}," help\n",[62,233,235],{"id":234},"create-a-scene","Create a scene",[10,237,238],{},"You can obtain the list of available creation subcommands.",[153,240,242],{"className":155,"code":241,"language":157,"meta":158,"style":158},"nd-ray-tracer create help\n",[160,243,244],{"__ignoreMap":158},[163,245,246,248,251],{"class":165,"line":166},[163,247,228],{"class":169},[163,249,250],{"class":173}," create",[163,252,231],{"class":173},[10,254,255],{},"Let's create a scene with two boxes standing in a Cornell box.",[257,258,259,282,304],"ol",{},[70,260,261,262],{},"First, we need a cornell box model\n",[153,263,265],{"className":155,"code":264,"language":157,"meta":158,"style":158},"nd-ray-tracer create cornell-box --output cornell-box-model.json\n",[160,266,267],{"__ignoreMap":158},[163,268,269,271,273,276,279],{"class":165,"line":166},[163,270,228],{"class":169},[163,272,250],{"class":173},[163,274,275],{"class":173}," cornell-box",[163,277,278],{"class":173}," --output",[163,280,281],{"class":173}," cornell-box-model.json\n",[70,283,284,285],{},"then, we need a cube model\n",[153,286,288],{"className":155,"code":287,"language":157,"meta":158,"style":158},"nd-ray-tracer create cube --output cornell-box-model.toml\n",[160,289,290],{"__ignoreMap":158},[163,291,292,294,296,299,301],{"class":165,"line":166},[163,293,228],{"class":169},[163,295,250],{"class":173},[163,297,298],{"class":173}," cube",[163,300,278],{"class":173},[163,302,303],{"class":173}," cornell-box-model.toml\n",[70,305,306,307],{},"now we can a scene using these two models\n",[153,308,313],{"className":309,"code":310,"filename":311,"language":312,"meta":158,"style":158},"language-json shiki shiki-themes catppuccin-mocha","{\n    \"camera\": {\n        \"background_color\": [0, 0, 0],\n        \"look_at\": [0.5, 0.5, 0.5],\n        \"look_from\": [0.5, 0.5, -1.625],\n        \"field_of_view\": 35,\n        \"samples_per_pixel\": 200,\n        \"ray_max_bounces\": 50\n    },\n    \"textures\": [[\n        \"cube1\", { \"SolidColor\": {\n            \"color\": [0.9803921569, 0.7019607843, 0.5294117647]\n        }}\n    ], [\n        \"cube2\", { \"SolidColor\": {\n            \"color\": [0.537254902, 0.7058823529, 0.9803921569]\n        }}\n    ]],\n    \"materials\": [[\n        \"cube1\", { \"Lambertian\": { \"texture\": \"cube1\" }}\n    ], [\n        \"cube2\", { \"Metal\": {\n            \"fuzz\": 0.025,\n            \"texture\": \"cube2\"\n        }}\n    ]],\n    \"instances\": [[\n        \"cornell-box\", { \"Scene\": {\n            \"path\": \"cornell-box-model.json\"\n        }}\n    ], [\n        \"cube1\", { \"Scene\": {\n            \"path\": \"cube-model.toml\",\n            \"material\": \"cube1\"\n        }}\n    ], [\n        \"cube2\", { \"Scene\": {\n            \"path\": \"cube-model.toml\",\n            \"material\": \"cube2\"\n        }}\n    ]],\n    \"scene\": [{\n        \"Ref\": { \"id\": \"cornell-box\" }\n    }, {\n        \"Translate\": { \"offset\": [0.25, 0, 0.25], \"object\": {\n            \"RotateY\": { \"angle\": 0.7853981634, \"object\": {\n                \"ScaleU\": { \"factor\": 0.25, \"object\": {\n                    \"Translate\": { \"offset\": [-0.5, 0, -0.5], \"object\": {\n                        \"Ref\": { \"id\": \"cube1\" }\n                    }}\n                }}\n            }}\n        }}\n    }, {\n        \"Translate\": { \"offset\": [0.750, 0, 0.625], \"object\": {\n            \"RotateY\": { \"angle\": -1.0471975512, \"object\": {\n                \"ScaleV\": { \"scale\": [0.25, 0.75, 0.25], \"object\": {\n                    \"Translate\": { \"offset\": [-0.5, 0, -0.5], \"object\": {\n                        \"Ref\": { \"id\": \"cube2\" }\n                    }}\n                }}\n            }}\n        }}\n    }]\n}\n","cornell-box-scene.json","json",[160,314,315,321,340,373,401,428,446,463,478,484,498,521,552,558,567,587,615,620,626,639,673,680,699,716,730,735,740,754,775,790,795,802,821,837,852,857,864,883,898,911,916,921,936,965,973,1024,1062,1100,1148,1174,1180,1186,1192,1197,1204,1251,1287,1335,1380,1406,1411,1416,1421,1426,1432],{"__ignoreMap":158},[163,316,317],{"class":165,"line":166},[163,318,320],{"class":319},"sqv1J","{\n",[163,322,324,327,331,334,337],{"class":165,"line":323},2,[163,325,326],{"class":319},"    \"",[163,328,330],{"class":329},"skT5V","camera",[163,332,333],{"class":319},"\"",[163,335,336],{"class":319},":",[163,338,339],{"class":319}," {\n",[163,341,343,346,349,351,353,356,360,363,366,368,370],{"class":165,"line":342},3,[163,344,345],{"class":319},"        \"",[163,347,348],{"class":329},"background_color",[163,350,333],{"class":319},[163,352,336],{"class":319},[163,354,355],{"class":319}," [",[163,357,359],{"class":358},"sulG4","0",[163,361,362],{"class":319},",",[163,364,365],{"class":358}," 0",[163,367,362],{"class":319},[163,369,365],{"class":358},[163,371,372],{"class":319},"],\n",[163,374,376,378,381,383,385,387,390,392,395,397,399],{"class":165,"line":375},4,[163,377,345],{"class":319},[163,379,380],{"class":329},"look_at",[163,382,333],{"class":319},[163,384,336],{"class":319},[163,386,355],{"class":319},[163,388,389],{"class":358},"0.5",[163,391,362],{"class":319},[163,393,394],{"class":358}," 0.5",[163,396,362],{"class":319},[163,398,394],{"class":358},[163,400,372],{"class":319},[163,402,404,406,409,411,413,415,417,419,421,423,426],{"class":165,"line":403},5,[163,405,345],{"class":319},[163,407,408],{"class":329},"look_from",[163,410,333],{"class":319},[163,412,336],{"class":319},[163,414,355],{"class":319},[163,416,389],{"class":358},[163,418,362],{"class":319},[163,420,394],{"class":358},[163,422,362],{"class":319},[163,424,425],{"class":358}," -1.625",[163,427,372],{"class":319},[163,429,431,433,436,438,440,443],{"class":165,"line":430},6,[163,432,345],{"class":319},[163,434,435],{"class":329},"field_of_view",[163,437,333],{"class":319},[163,439,336],{"class":319},[163,441,442],{"class":358}," 35",[163,444,445],{"class":319},",\n",[163,447,449,451,454,456,458,461],{"class":165,"line":448},7,[163,450,345],{"class":319},[163,452,453],{"class":329},"samples_per_pixel",[163,455,333],{"class":319},[163,457,336],{"class":319},[163,459,460],{"class":358}," 200",[163,462,445],{"class":319},[163,464,466,468,471,473,475],{"class":165,"line":465},8,[163,467,345],{"class":319},[163,469,470],{"class":329},"ray_max_bounces",[163,472,333],{"class":319},[163,474,336],{"class":319},[163,476,477],{"class":358}," 50\n",[163,479,481],{"class":165,"line":480},9,[163,482,483],{"class":319},"    },\n",[163,485,487,489,491,493,495],{"class":165,"line":486},10,[163,488,326],{"class":319},[163,490,84],{"class":329},[163,492,333],{"class":319},[163,494,336],{"class":319},[163,496,497],{"class":319}," [[\n",[163,499,501,504,506,509,512,515,517,519],{"class":165,"line":500},11,[163,502,503],{"class":173},"        \"cube1\"",[163,505,362],{"class":319},[163,507,508],{"class":319}," {",[163,510,511],{"class":319}," \"",[163,513,514],{"class":329},"SolidColor",[163,516,333],{"class":319},[163,518,336],{"class":319},[163,520,339],{"class":319},[163,522,524,527,530,532,534,536,539,541,544,546,549],{"class":165,"line":523},12,[163,525,526],{"class":319},"            \"",[163,528,529],{"class":329},"color",[163,531,333],{"class":319},[163,533,336],{"class":319},[163,535,355],{"class":319},[163,537,538],{"class":358},"0.9803921569",[163,540,362],{"class":319},[163,542,543],{"class":358}," 0.7019607843",[163,545,362],{"class":319},[163,547,548],{"class":358}," 0.5294117647",[163,550,551],{"class":319},"]\n",[163,553,555],{"class":165,"line":554},13,[163,556,557],{"class":319},"        }}\n",[163,559,561,564],{"class":165,"line":560},14,[163,562,563],{"class":319},"    ],",[163,565,566],{"class":319}," [\n",[163,568,570,573,575,577,579,581,583,585],{"class":165,"line":569},15,[163,571,572],{"class":173},"        \"cube2\"",[163,574,362],{"class":319},[163,576,508],{"class":319},[163,578,511],{"class":319},[163,580,514],{"class":329},[163,582,333],{"class":319},[163,584,336],{"class":319},[163,586,339],{"class":319},[163,588,590,592,594,596,598,600,603,605,608,610,613],{"class":165,"line":589},16,[163,591,526],{"class":319},[163,593,529],{"class":329},[163,595,333],{"class":319},[163,597,336],{"class":319},[163,599,355],{"class":319},[163,601,602],{"class":358},"0.537254902",[163,604,362],{"class":319},[163,606,607],{"class":358}," 0.7058823529",[163,609,362],{"class":319},[163,611,612],{"class":358}," 0.9803921569",[163,614,551],{"class":319},[163,616,618],{"class":165,"line":617},17,[163,619,557],{"class":319},[163,621,623],{"class":165,"line":622},18,[163,624,625],{"class":319},"    ]],\n",[163,627,629,631,633,635,637],{"class":165,"line":628},19,[163,630,326],{"class":319},[163,632,64],{"class":329},[163,634,333],{"class":319},[163,636,336],{"class":319},[163,638,497],{"class":319},[163,640,642,644,646,648,650,652,654,656,658,660,663,665,667,670],{"class":165,"line":641},20,[163,643,503],{"class":173},[163,645,362],{"class":319},[163,647,508],{"class":319},[163,649,511],{"class":319},[163,651,75],{"class":329},[163,653,333],{"class":319},[163,655,336],{"class":319},[163,657,508],{"class":319},[163,659,511],{"class":319},[163,661,662],{"class":329},"texture",[163,664,333],{"class":319},[163,666,336],{"class":319},[163,668,669],{"class":173}," \"cube1\"",[163,671,672],{"class":319}," }}\n",[163,674,676,678],{"class":165,"line":675},21,[163,677,563],{"class":319},[163,679,566],{"class":319},[163,681,683,685,687,689,691,693,695,697],{"class":165,"line":682},22,[163,684,572],{"class":173},[163,686,362],{"class":319},[163,688,508],{"class":319},[163,690,511],{"class":319},[163,692,78],{"class":329},[163,694,333],{"class":319},[163,696,336],{"class":319},[163,698,339],{"class":319},[163,700,702,704,707,709,711,714],{"class":165,"line":701},23,[163,703,526],{"class":319},[163,705,706],{"class":329},"fuzz",[163,708,333],{"class":319},[163,710,336],{"class":319},[163,712,713],{"class":358}," 0.025",[163,715,445],{"class":319},[163,717,719,721,723,725,727],{"class":165,"line":718},24,[163,720,526],{"class":319},[163,722,662],{"class":329},[163,724,333],{"class":319},[163,726,336],{"class":319},[163,728,729],{"class":173}," \"cube2\"\n",[163,731,733],{"class":165,"line":732},25,[163,734,557],{"class":319},[163,736,738],{"class":165,"line":737},26,[163,739,625],{"class":319},[163,741,743,745,748,750,752],{"class":165,"line":742},27,[163,744,326],{"class":319},[163,746,747],{"class":329},"instances",[163,749,333],{"class":319},[163,751,336],{"class":319},[163,753,497],{"class":319},[163,755,757,760,762,764,766,769,771,773],{"class":165,"line":756},28,[163,758,759],{"class":173},"        \"cornell-box\"",[163,761,362],{"class":319},[163,763,508],{"class":319},[163,765,511],{"class":319},[163,767,768],{"class":329},"Scene",[163,770,333],{"class":319},[163,772,336],{"class":319},[163,774,339],{"class":319},[163,776,778,780,783,785,787],{"class":165,"line":777},29,[163,779,526],{"class":319},[163,781,782],{"class":329},"path",[163,784,333],{"class":319},[163,786,336],{"class":319},[163,788,789],{"class":173}," \"cornell-box-model.json\"\n",[163,791,793],{"class":165,"line":792},30,[163,794,557],{"class":319},[163,796,798,800],{"class":165,"line":797},31,[163,799,563],{"class":319},[163,801,566],{"class":319},[163,803,805,807,809,811,813,815,817,819],{"class":165,"line":804},32,[163,806,503],{"class":173},[163,808,362],{"class":319},[163,810,508],{"class":319},[163,812,511],{"class":319},[163,814,768],{"class":329},[163,816,333],{"class":319},[163,818,336],{"class":319},[163,820,339],{"class":319},[163,822,824,826,828,830,832,835],{"class":165,"line":823},33,[163,825,526],{"class":319},[163,827,782],{"class":329},[163,829,333],{"class":319},[163,831,336],{"class":319},[163,833,834],{"class":173}," \"cube-model.toml\"",[163,836,445],{"class":319},[163,838,840,842,845,847,849],{"class":165,"line":839},34,[163,841,526],{"class":319},[163,843,844],{"class":329},"material",[163,846,333],{"class":319},[163,848,336],{"class":319},[163,850,851],{"class":173}," \"cube1\"\n",[163,853,855],{"class":165,"line":854},35,[163,856,557],{"class":319},[163,858,860,862],{"class":165,"line":859},36,[163,861,563],{"class":319},[163,863,566],{"class":319},[163,865,867,869,871,873,875,877,879,881],{"class":165,"line":866},37,[163,868,572],{"class":173},[163,870,362],{"class":319},[163,872,508],{"class":319},[163,874,511],{"class":319},[163,876,768],{"class":329},[163,878,333],{"class":319},[163,880,336],{"class":319},[163,882,339],{"class":319},[163,884,886,888,890,892,894,896],{"class":165,"line":885},38,[163,887,526],{"class":319},[163,889,782],{"class":329},[163,891,333],{"class":319},[163,893,336],{"class":319},[163,895,834],{"class":173},[163,897,445],{"class":319},[163,899,901,903,905,907,909],{"class":165,"line":900},39,[163,902,526],{"class":319},[163,904,844],{"class":329},[163,906,333],{"class":319},[163,908,336],{"class":319},[163,910,729],{"class":173},[163,912,914],{"class":165,"line":913},40,[163,915,557],{"class":319},[163,917,919],{"class":165,"line":918},41,[163,920,625],{"class":319},[163,922,924,926,929,931,933],{"class":165,"line":923},42,[163,925,326],{"class":319},[163,927,928],{"class":329},"scene",[163,930,333],{"class":319},[163,932,336],{"class":319},[163,934,935],{"class":319}," [{\n",[163,937,939,941,944,946,948,950,952,955,957,959,962],{"class":165,"line":938},43,[163,940,345],{"class":319},[163,942,943],{"class":329},"Ref",[163,945,333],{"class":319},[163,947,336],{"class":319},[163,949,508],{"class":319},[163,951,511],{"class":319},[163,953,954],{"class":329},"id",[163,956,333],{"class":319},[163,958,336],{"class":319},[163,960,961],{"class":173}," \"cornell-box\"",[163,963,964],{"class":319}," }\n",[163,966,968,971],{"class":165,"line":967},44,[163,969,970],{"class":319},"    },",[163,972,339],{"class":319},[163,974,976,978,981,983,985,987,989,992,994,996,998,1001,1003,1005,1007,1010,1013,1015,1018,1020,1022],{"class":165,"line":975},45,[163,977,345],{"class":319},[163,979,980],{"class":329},"Translate",[163,982,333],{"class":319},[163,984,336],{"class":319},[163,986,508],{"class":319},[163,988,511],{"class":319},[163,990,991],{"class":329},"offset",[163,993,333],{"class":319},[163,995,336],{"class":319},[163,997,355],{"class":319},[163,999,1000],{"class":358},"0.25",[163,1002,362],{"class":319},[163,1004,365],{"class":358},[163,1006,362],{"class":319},[163,1008,1009],{"class":358}," 0.25",[163,1011,1012],{"class":319},"],",[163,1014,511],{"class":319},[163,1016,1017],{"class":329},"object",[163,1019,333],{"class":319},[163,1021,336],{"class":319},[163,1023,339],{"class":319},[163,1025,1027,1029,1032,1034,1036,1038,1040,1043,1045,1047,1050,1052,1054,1056,1058,1060],{"class":165,"line":1026},46,[163,1028,526],{"class":319},[163,1030,1031],{"class":329},"RotateY",[163,1033,333],{"class":319},[163,1035,336],{"class":319},[163,1037,508],{"class":319},[163,1039,511],{"class":319},[163,1041,1042],{"class":329},"angle",[163,1044,333],{"class":319},[163,1046,336],{"class":319},[163,1048,1049],{"class":358}," 0.7853981634",[163,1051,362],{"class":319},[163,1053,511],{"class":319},[163,1055,1017],{"class":329},[163,1057,333],{"class":319},[163,1059,336],{"class":319},[163,1061,339],{"class":319},[163,1063,1065,1068,1071,1073,1075,1077,1079,1082,1084,1086,1088,1090,1092,1094,1096,1098],{"class":165,"line":1064},47,[163,1066,1067],{"class":319},"                \"",[163,1069,1070],{"class":329},"ScaleU",[163,1072,333],{"class":319},[163,1074,336],{"class":319},[163,1076,508],{"class":319},[163,1078,511],{"class":319},[163,1080,1081],{"class":329},"factor",[163,1083,333],{"class":319},[163,1085,336],{"class":319},[163,1087,1009],{"class":358},[163,1089,362],{"class":319},[163,1091,511],{"class":319},[163,1093,1017],{"class":329},[163,1095,333],{"class":319},[163,1097,336],{"class":319},[163,1099,339],{"class":319},[163,1101,1103,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1127,1129,1131,1133,1136,1138,1140,1142,1144,1146],{"class":165,"line":1102},48,[163,1104,1105],{"class":319},"                    \"",[163,1107,980],{"class":329},[163,1109,333],{"class":319},[163,1111,336],{"class":319},[163,1113,508],{"class":319},[163,1115,511],{"class":319},[163,1117,991],{"class":329},[163,1119,333],{"class":319},[163,1121,336],{"class":319},[163,1123,355],{"class":319},[163,1125,1126],{"class":358},"-0.5",[163,1128,362],{"class":319},[163,1130,365],{"class":358},[163,1132,362],{"class":319},[163,1134,1135],{"class":358}," -0.5",[163,1137,1012],{"class":319},[163,1139,511],{"class":319},[163,1141,1017],{"class":329},[163,1143,333],{"class":319},[163,1145,336],{"class":319},[163,1147,339],{"class":319},[163,1149,1151,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172],{"class":165,"line":1150},49,[163,1152,1153],{"class":319},"                        \"",[163,1155,943],{"class":329},[163,1157,333],{"class":319},[163,1159,336],{"class":319},[163,1161,508],{"class":319},[163,1163,511],{"class":319},[163,1165,954],{"class":329},[163,1167,333],{"class":319},[163,1169,336],{"class":319},[163,1171,669],{"class":173},[163,1173,964],{"class":319},[163,1175,1177],{"class":165,"line":1176},50,[163,1178,1179],{"class":319},"                    }}\n",[163,1181,1183],{"class":165,"line":1182},51,[163,1184,1185],{"class":319},"                }}\n",[163,1187,1189],{"class":165,"line":1188},52,[163,1190,1191],{"class":319},"            }}\n",[163,1193,1195],{"class":165,"line":1194},53,[163,1196,557],{"class":319},[163,1198,1200,1202],{"class":165,"line":1199},54,[163,1201,970],{"class":319},[163,1203,339],{"class":319},[163,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1230,1232,1234,1236,1239,1241,1243,1245,1247,1249],{"class":165,"line":1206},55,[163,1208,345],{"class":319},[163,1210,980],{"class":329},[163,1212,333],{"class":319},[163,1214,336],{"class":319},[163,1216,508],{"class":319},[163,1218,511],{"class":319},[163,1220,991],{"class":329},[163,1222,333],{"class":319},[163,1224,336],{"class":319},[163,1226,355],{"class":319},[163,1228,1229],{"class":358},"0.750",[163,1231,362],{"class":319},[163,1233,365],{"class":358},[163,1235,362],{"class":319},[163,1237,1238],{"class":358}," 0.625",[163,1240,1012],{"class":319},[163,1242,511],{"class":319},[163,1244,1017],{"class":329},[163,1246,333],{"class":319},[163,1248,336],{"class":319},[163,1250,339],{"class":319},[163,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1275,1277,1279,1281,1283,1285],{"class":165,"line":1253},56,[163,1255,526],{"class":319},[163,1257,1031],{"class":329},[163,1259,333],{"class":319},[163,1261,336],{"class":319},[163,1263,508],{"class":319},[163,1265,511],{"class":319},[163,1267,1042],{"class":329},[163,1269,333],{"class":319},[163,1271,336],{"class":319},[163,1273,1274],{"class":358}," -1.0471975512",[163,1276,362],{"class":319},[163,1278,511],{"class":319},[163,1280,1017],{"class":329},[163,1282,333],{"class":319},[163,1284,336],{"class":319},[163,1286,339],{"class":319},[163,1288,1290,1292,1295,1297,1299,1301,1303,1306,1308,1310,1312,1314,1316,1319,1321,1323,1325,1327,1329,1331,1333],{"class":165,"line":1289},57,[163,1291,1067],{"class":319},[163,1293,1294],{"class":329},"ScaleV",[163,1296,333],{"class":319},[163,1298,336],{"class":319},[163,1300,508],{"class":319},[163,1302,511],{"class":319},[163,1304,1305],{"class":329},"scale",[163,1307,333],{"class":319},[163,1309,336],{"class":319},[163,1311,355],{"class":319},[163,1313,1000],{"class":358},[163,1315,362],{"class":319},[163,1317,1318],{"class":358}," 0.75",[163,1320,362],{"class":319},[163,1322,1009],{"class":358},[163,1324,1012],{"class":319},[163,1326,511],{"class":319},[163,1328,1017],{"class":329},[163,1330,333],{"class":319},[163,1332,336],{"class":319},[163,1334,339],{"class":319},[163,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378],{"class":165,"line":1337},58,[163,1339,1105],{"class":319},[163,1341,980],{"class":329},[163,1343,333],{"class":319},[163,1345,336],{"class":319},[163,1347,508],{"class":319},[163,1349,511],{"class":319},[163,1351,991],{"class":329},[163,1353,333],{"class":319},[163,1355,336],{"class":319},[163,1357,355],{"class":319},[163,1359,1126],{"class":358},[163,1361,362],{"class":319},[163,1363,365],{"class":358},[163,1365,362],{"class":319},[163,1367,1135],{"class":358},[163,1369,1012],{"class":319},[163,1371,511],{"class":319},[163,1373,1017],{"class":329},[163,1375,333],{"class":319},[163,1377,336],{"class":319},[163,1379,339],{"class":319},[163,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1404],{"class":165,"line":1382},59,[163,1384,1153],{"class":319},[163,1386,943],{"class":329},[163,1388,333],{"class":319},[163,1390,336],{"class":319},[163,1392,508],{"class":319},[163,1394,511],{"class":319},[163,1396,954],{"class":329},[163,1398,333],{"class":319},[163,1400,336],{"class":319},[163,1402,1403],{"class":173}," \"cube2\"",[163,1405,964],{"class":319},[163,1407,1409],{"class":165,"line":1408},60,[163,1410,1179],{"class":319},[163,1412,1414],{"class":165,"line":1413},61,[163,1415,1185],{"class":319},[163,1417,1419],{"class":165,"line":1418},62,[163,1420,1191],{"class":319},[163,1422,1424],{"class":165,"line":1423},63,[163,1425,557],{"class":319},[163,1427,1429],{"class":165,"line":1428},64,[163,1430,1431],{"class":319},"    }]\n",[163,1433,1435],{"class":165,"line":1434},65,[163,1436,1437],{"class":319},"}\n",[62,1439,1441],{"id":1440},"render-a-scene","Render a scene",[153,1443,1445],{"className":155,"code":1444,"language":157,"meta":158,"style":158},"nd-ray-tracer render                      \\\n        -fv                               \\\n        --width 800                       \\\n        --aspect-ratio 1                  \\\n        --samples-per-pixel 500           \\\n        --ray-max-bounces 50              \\\n        --output cornell-box-scene.png    \\\n    cornell-box-scene.json\n",[160,1446,1447,1458,1466,1477,1488,1499,1510,1521],{"__ignoreMap":158},[163,1448,1449,1451,1454],{"class":165,"line":166},[163,1450,228],{"class":169},[163,1452,1453],{"class":173}," render",[163,1455,1457],{"class":1456},"sik8b","                      \\\n",[163,1459,1460,1463],{"class":165,"line":323},[163,1461,1462],{"class":173},"        -fv",[163,1464,1465],{"class":1456},"                               \\\n",[163,1467,1468,1471,1474],{"class":165,"line":342},[163,1469,1470],{"class":173},"        --width",[163,1472,1473],{"class":358}," 800",[163,1475,1476],{"class":1456},"                       \\\n",[163,1478,1479,1482,1485],{"class":165,"line":375},[163,1480,1481],{"class":173},"        --aspect-ratio",[163,1483,1484],{"class":358}," 1",[163,1486,1487],{"class":1456},"                  \\\n",[163,1489,1490,1493,1496],{"class":165,"line":403},[163,1491,1492],{"class":173},"        --samples-per-pixel",[163,1494,1495],{"class":358}," 500",[163,1497,1498],{"class":1456},"           \\\n",[163,1500,1501,1504,1507],{"class":165,"line":430},[163,1502,1503],{"class":173},"        --ray-max-bounces",[163,1505,1506],{"class":358}," 50",[163,1508,1509],{"class":1456},"              \\\n",[163,1511,1512,1515,1518],{"class":165,"line":448},[163,1513,1514],{"class":173},"        --output",[163,1516,1517],{"class":173}," cornell-box-scene.png",[163,1519,1520],{"class":1456},"    \\\n",[163,1522,1523],{"class":165,"line":465},[163,1524,1525],{"class":173},"    cornell-box-scene.json\n",[49,1527,1529],{"id":1528},"credits","Credits",[10,1531,1532],{},"All textures and 3D STL models are licensed under Creative Commons 4.0 (CC BY 4.0).",[1534,1535,85],"h4",{"id":1536},"textures-1",[67,1538,1539,1554],{},[70,1540,1541,1546,1547],{},[14,1542,1545],{"href":1543,"rel":1544},"https:\u002F\u002Fwww.solarsystemscope.com\u002Ftextures\u002Fdownload\u002F2k_earth_daymap.jpg",[18],"Earth Texture"," from ",[14,1548,1551],{"href":1549,"rel":1550},"https:\u002F\u002Fwww.solarsystemscope.com\u002Ftextures\u002F",[18],[30,1552,1553],{},"Solar Textures",[70,1555,1556,1546,1561],{},[14,1557,1560],{"href":1558,"rel":1559},"https:\u002F\u002Fwww.solarsystemscope.com\u002Ftextures\u002Fdownload\u002F2k_moon.jpg",[18],"Moon Texture",[14,1562,1564],{"href":1549,"rel":1563},[18],[30,1565,1553],{},[1534,1567,1569],{"id":1568},"_3d-models","3D models",[67,1571,1572,1587,1601,1615,1628,1640,1652,1666],{},[70,1573,1574,1579,1580],{},[14,1575,1578],{"href":1576,"rel":1577},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F673064-cute-sitting-low-poly-dog-no-supports",[18],"Cute Sitting Low Poly Dog"," by ",[14,1581,1584],{"href":1582,"rel":1583},"https:\u002F\u002Fwww.printables.com\u002F@MatthiasL",[18],[30,1585,1586],{},"Matthias L",[70,1588,1589,1579,1594],{},[14,1590,1593],{"href":1591,"rel":1592},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F555920-low-poly-fennec-fox",[18],"Low Poly Fennec Fox",[14,1595,1598],{"href":1596,"rel":1597},"https:\u002F\u002Fwww.printables.com\u002F@FuzzyRaptor",[18],[30,1599,1600],{},"FuzzyRaptor",[70,1602,1603,1579,1608],{},[14,1604,1607],{"href":1605,"rel":1606},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F239-low-poly-bulbasaur",[18],"Low Poly Bulbasaur",[14,1609,1612],{"href":1610,"rel":1611},"https:\u002F\u002Fwww.printables.com\u002F@flowalistik",[18],[30,1613,1614],{},"Agustin Arroyo",[70,1616,1617,1622,1623],{},[14,1618,1621],{"href":1619,"rel":1620},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F284-low-poly-eevee",[18],"Low Poly Eevee","  by ",[14,1624,1626],{"href":1610,"rel":1625},[18],[30,1627,1614],{},[70,1629,1630,1579,1635],{},[14,1631,1634],{"href":1632,"rel":1633},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F237-low-poly-squirtle",[18],"Low Poly Squirtle",[14,1636,1638],{"href":1610,"rel":1637},[18],[30,1639,1614],{},[70,1641,1642,1579,1647],{},[14,1643,1646],{"href":1644,"rel":1645},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F243-low-poly-pikachu",[18],"Low Poly Pikachu",[14,1648,1650],{"href":1610,"rel":1649},[18],[30,1651,1614],{},[70,1653,1654,1579,1659],{},[14,1655,1658],{"href":1656,"rel":1657},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F776749-low-poly-mewtwo",[18],"Low poly Mewtwo",[14,1660,1663],{"href":1661,"rel":1662},"https:\u002F\u002Fwww.printables.com\u002F@driverhub_1604450",[18],[30,1664,1665],{},"driverhub",[70,1667,1668,1579,1673],{},[14,1669,1672],{"href":1670,"rel":1671},"https:\u002F\u002Fwww.printables.com\u002Fmodel\u002F344194-low-poly-charmander",[18],"Low Poly Charmander",[14,1674,1677],{"href":1675,"rel":1676},"https:\u002F\u002Fwww.printables.com\u002F@EthanCantPrin_477678",[18],[30,1678,1679],{},"EthanCan'tPrint",[1681,1682,1683],"style",{},"html pre.shiki code .sO0CG, html code.shiki .sO0CG{--shiki-default:#89B4FA;--shiki-default-font-style:italic}html pre.shiki code .sX9bP, html code.shiki .sX9bP{--shiki-default:#A6E3A1}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sDSzL, html code.shiki .sDSzL{--shiki-default:#F38BA8;--shiki-default-font-style:italic}html pre.shiki code .sik8b, html code.shiki .sik8b{--shiki-default:#F5C2E7}html pre.shiki code .sulG4, html code.shiki .sulG4{--shiki-default:#FAB387}html pre.shiki code .sqv1J, html code.shiki .sqv1J{--shiki-default:#9399B2}html pre.shiki code .skT5V, html code.shiki .skT5V{--shiki-default:#89B4FA}",{"title":158,"searchDepth":323,"depth":323,"links":1685},[1686,1687,1688,1689,1690],{"id":51,"depth":323,"text":52},{"id":59,"depth":323,"text":60},{"id":150,"depth":323,"text":151},{"id":213,"depth":323,"text":214},{"id":1528,"depth":323,"text":1529},"2026-03-03","I wrote a Ray Tracer in Rust.",true,"md",{},"\u002Fprojects\u002Fray-tracer",{"title":5,"description":1692},"projects\u002Fray-tracer",[32],"FZ3EcE116t9yEg1j_Zn9tS0RF6UzQubvaRNM7yM1O3M",1787695959005]