{"author_link":"\/users\/andriybyelikov","author_name":"andriybyelikov","author_uid":1374028,"comments":[{"id":1162837,"author_name":"el-pepi","author_uid":"el-pepi","epoch":1759796002,"text":"It looks neat when you bring the light orbs close to the wall","format":"md","likes":1,"spam":"N"},{"id":1162842,"author_name":"Timo5034","author_uid":"timo5034","epoch":1759796032,"text":"That's so cool! I once also implemented ray tracing in WebGL, it's definitely not easy!\nI don't understand what's going on when I stand next to a wall (wall to my right\/left). What are those reflections? Do the balls have a spotlight?","format":"md","likes":1,"spam":"N"},{"id":1162844,"author_name":"Wishes","author_uid":"wishes","epoch":1759796090,"text":"this is so impresive in my opinion. Great job \n","format":"md","likes":1,"spam":"N"},{"id":1168257,"author_name":"LDJam user 374028","author_uid":"374028","epoch":1759861987,"text":"@timo5034 I assume that you are referring to the triple halo when you have collected all three pure wavelength lights. The balls are point lights. If you look to the right you see the blue light reflected a the center, followed by a cyan middle ring, followed by a turquoise outer ring. The color at each point is the sum of the colors of each light that arrive at that point attenuated by the inverse square of the distance between that point and the light source. So at the center you see blue because that's the closest light to the surface and the contribution by the green and red lights is occluded by it. At the point in which the contribution of the green light is no longer occluded by the blue light ball, the contribution of the blue light and green light combine to create cyan light, and finally at the point in which the red light is no longer occluded by the green and blue light balls, the red light combines with the green and blue lights to create turquoise light. The same happens with the reflections to the left, but it results in different colors because the blue light is now the farthest one and contributes less to the reflected color from the surface.","format":"md","likes":1,"spam":"N"},{"id":1168742,"author_name":"rubentipparach","author_uid":"rubentipparach","epoch":1759866419,"text":"I was expecting the world to explode when I collected all the dots lmao! Awesome renderer, hope you get to use this tech more in future jams!","format":"md","likes":1,"spam":"N"},{"id":1168830,"author_name":"LDJam user 356534","author_uid":"356534","epoch":1759867330,"text":"Very cool and very tech-demo-y, I really like the color combinations you can get while carrying one\/two of the orbs and then looking at the ones that are still there. Really cool implementation and an inspiration to take a look at ray-tracing at some point!","format":"md","likes":1,"spam":"N"},{"id":1173442,"author_name":"Roitchie","author_uid":"roitchie","epoch":1759944494,"text":"This might look simple but having tried to implement a recursive raytracer in the past I can appreciate how difficult this can be to get right. So it's really impressive you got the light and reflections working as good as you did. Especially under the time pressure of a game jam too. Well done! \n\nI'll have a look at the source code. I'm interested to see how you ended up implementing it. ","format":"md","likes":1,"spam":"N"},{"id":1177514,"author_name":"Shaggy","author_uid":"shaggy","epoch":1760038617,"text":"Neat, well done!","format":"md","likes":1,"spam":"N"},{"id":1178095,"author_name":"Coda Highland","author_uid":"coda-highland","epoch":1760059728,"text":"Shiny raytracing! You know, that's something I've never tried to build myself. I should try it one of these days.\n\nSide note: From a game perspective, it would have been nice if you didn't have to hold the mouse button down to move the camera.","format":"md","likes":1,"spam":"N"},{"id":1179658,"author_name":"Disvent","author_uid":"disvent","epoch":1760125403,"text":"I was honestly shocked that the game just started instantly. My pure programmer\u2019s respect to you for that - it\u2019s super cool!","format":"md","likes":2,"spam":"N"},{"id":1180301,"author_name":"LDJam user 384829","author_uid":"384829","epoch":1760158175,"text":"Nice game! The graphics look good, the sort of PS1 era vibes are great! Love the raytracing and the concept, it's really fun. And getting the colours to light up correctly is incredible. Well done!","format":"md","likes":1,"spam":"N"},{"id":1180790,"author_name":"Wouter52","author_uid":"wouter52","epoch":1760190934,"text":"Damn! Is this raytracing in Javascript? I'm impressed!","format":"md","likes":2,"spam":"N"},{"id":1180791,"author_name":"b0guslaw","author_uid":"b0guslaw","epoch":1760191010,"text":"Incredibly cool as a tech demo and proof of concept. The camera movement is a bit tough though","format":"md","likes":1,"spam":"N"},{"id":1182044,"author_name":"Conduit","author_uid":"conduit","epoch":1760266495,"text":"This is such a cool demo! I really wonder where you could go with this concept, seems endless to me! Great work :)","format":"md","likes":1,"spam":"N"},{"id":1182370,"author_name":"Alex Mulkerrin","author_uid":"alex-mulkerrin","epoch":1760282780,"text":"Making a raytracer in pure JavaScript is very cool, you get some nice effects when you shine all three lights at the dome in the middle. I'll have to look at the code to work out what you did with the shaders.","format":"md","likes":1,"spam":"N"},{"id":1182436,"author_name":"WilloXs","author_uid":"willoxs","epoch":1760285792,"text":"I have no idea how you did this, and as someone with no idea how to implement this myself, chapeau.\n\nThough now i have to somehow rate this in a fair way with the other games and that's hard...","format":"md","likes":1,"spam":"N"},{"id":1183067,"author_name":"ChuChuGeralt","author_uid":"chuchugeralt","epoch":1760348952,"text":"A nice little vignette! I really like the underlying concept, even though I'd love to see it developed into a game with more of a defined loop.\n\nIt would be especially fun if you introduced interactive objects that required specific lighting or shadow manipulation to solve, such as needing to light up or hide one of the three colored dots. This kind of mechanic would really elevate the gameplay!","format":"md","likes":1,"spam":"N"},{"id":1183071,"author_name":"Bumble","author_uid":"bumble","epoch":1760349153,"text":"Nice tech demo, but I agree with @willoxs. It is difficult to give a fair rating in the game category. There is a demo category that would have been more fitting, I think.","format":"md","likes":1,"spam":"N"},{"id":1183341,"author_name":"Koolruz","author_uid":"koolruz","epoch":1760374211,"text":"Woah, very cool rendering technology here!  I definitely struggled with the camera controls being inverted, but because this was a tech demo with no fine-grained movement required, it wasn't a huge problem.  I loved seeing the way the different wavelengths cast light and shadow across the world (the attached screenshot just looks *so* cool to me)\n\n![light-reflections.PNG](\/\/\/raw\/dec\/c2\/z\/6f5c1.png)\n\nI am super curious how the R+G+B light emitters work, and if the white light that they create is happening naturally as the scene is rendered by three different pure-color light sources (and thus has all the strange quirks of non-full-spectrum white light), or if you have any logic in place to additively combine the multiple colors.\n\nIn case you're not familiar with what I mean by the quirks of non-full-spectrum light, there is a really interesting Technology Connections video on this subject, where he lights a variety of scenes with RGB and full-spectrum white light, and the differences are really astounding:  https:\/\/www.youtube.com\/watch?v=uYbdx4I7STg\n\nAgain, there is some very cool stuff here, and I'm excited to see your next jam project to see if this gets expanded upon!  Well done!","format":"md","likes":2,"spam":"N"},{"id":1183387,"author_name":"LDJam user 374028","author_uid":"374028","epoch":1760378034,"text":"@koolruz Hey, thanks for sharing the video, it was very interesting.\n\nAll lights in my game are monochromatic, event the white light at the ceiling in the middle of the room. I define my lights' emitted colors and my objects' reflected colors in the three pure wavelengths only, as linear RGB. I think it can be done to store entire emitted and reflected spectra functions per material instead of just three values for each pure red, green and blue wavelengths. In that case, instead of multiplying emitted and reflected RGB color vectors component-wise to obtain the final color, you would have to integrate the products of each wavelength across both spectra, and I think like that you can obtain what would be the equivalent color in real life. Then of course, this final color would still be converted to display encoded RGB, but it would be more accurate than illuminating an object with just three monochromatic lights. The problem with this approach is that it is too expensive to store and compute for real-time applications but I think that 3D animated films actually do this offline. I'm not sure if there's a way to accurately approximate or precompute any of the computations for videogame applications.","format":"md","likes":2,"spam":"N"},{"id":1185624,"author_name":"YibiRabbit007","author_uid":"yibirabbit007","epoch":1760752281,"text":"Yo-ho, I quickly got all the colors, but why doesn't this perspective rotation directly follow the mouse position? Dragging to move is really counterintuitive! I thought you had to click to collect colors, but it turns out you just have to move close. Every time a color is collected, the room's color also changes\u2014nice idea!\n\n![\u5c4f\u5e55\u622a\u56fe 2025-10-18 094738.png](\/\/\/raw\/afd\/36\/z\/6f74d.png)\n\n*This is a very good optical demonstration device; perhaps refine it further!*","format":"md","likes":2,"spam":"N"},{"id":1186833,"author_name":"ColeSlaughter","author_uid":"coleslaughter","epoch":1760986703,"text":"[Thanks for submitting your game to stream!](https:\/\/www.twitch.tv\/videos\/2589159756?t=02h15m04s)\n\nI'm jealous of the tech you manage to create here.  Well done!","format":"md","likes":1,"spam":"N"}],"format":"md","images":["ld58\/wayback-placeholder.png"],"links":[{"url":"https:\/\/github.com\/andriybyelikov\/ludumdare58","text":"Link"}],"metadata":{"g_key":"68747","g_author":"1374028","g_event":"LD58","g_eventkey":"112","g_subevent":"JAM","g_urlkey":"292494","g_title":"Wavelength Collector","g_status":"WAYBACK","g_place":"762","g_commentcount":"22","g_site2_node_id":"415806","g_hide":"N","g_has_icon":"Y","g_rqueue":"0","g_random":"0"},"nds":{"n_key":"415806","n_urlkey":"292494","n_parent":"415614","n_path":"\/events\/ludum-dare\/58\/wavelength-collector","n_slug":"wavelength-collector","n_type":"item","n_subtype":"game","n_subsubtype":"jam","n_author":"374028","n_created":"0","n_modified":"0","n_version":"1336373","n_status":"WAYBACK"},"node":{"id":415806,"parent":415614,"_superparent":9,"author":374028,"type":"item","subtype":"game","subsubtype":"jam","published":"2025-10-06T22:48:09Z","created":"2025-09-21T15:14:58Z","modified":"2026-02-08T08:54:18Z","_trust":1,"version":1336373,"slug":"wavelength-collector","name":"Wavelength Collector","body":"## Controls\n\n- WASD to move\n- Click and drag to move camera\n- Walk into items to collect them\n- Step on buttons to activate them\n\n## List of tools\n\n- **Programming Languages:** JavaScript, GLSL\n- **APIs:** WebGL2 (OpenGL ES 3.0)\n- **Development Server and Resource Bundler:** Vite","scope":"public","node-timestamp":"2025-10-07T21:39:03Z","meta":{"author":[374028],"grade-07-out":"1","grade-06-out":"1","link-01-tag":[50],"cover":"\/\/\/content\/c05\/b5\/z\/6e5d3.png","allow-anonymous-comments":"1","link-01":"https:\/\/github.com\/andriybyelikov\/ludumdare58"},"meta-timestamp":"2026-02-08T08:54:18Z","path":"\/events\/ludum-dare\/58\/wavelength-collector","parents":[1,5,9,415614],"files":[{"id":45062,"author":374028,"node":415806,"tag":0,"name":"$$embed-45062.zip","size":16095,"timestamp":"2025-10-06T22:46:39Z","status":64},{"id":45167,"author":374028,"node":415806,"tag":0,"name":"$$embed-45167.zip","size":16072,"timestamp":"2025-10-06T22:55:30Z","status":73}],"files-timestamp":"2025-10-06T22:55:30Z","love":0,"comments":22,"comments-timestamp":"2025-10-20T18:58:23Z","grade":{"grade-01":30,"grade-02":30,"grade-03":30,"grade-04":30,"grade-05":30,"grade-08":30},"magic":{"cool":116.88794077096,"feedback":33,"given":29.375,"grade":30,"grade-01-average":2.589,"grade-01-result":762,"grade-02-average":1.982,"grade-02-result":783,"grade-03-average":3.268,"grade-03-result":381,"grade-04-average":2.964,"grade-04-result":703,"grade-05-average":3.589,"grade-05-result":425,"grade-08-average":2.411,"grade-08-result":760,"smart":-0.78432583507785},"_wayback":{"timestamp":"20260223231245","url":"https:\/\/api.ldjam.com\/vx\/node2\/get\/423627+423620+423577+423547+423513+423508+423505+423504+423495+423490?author&parent&superparent","source":"global-node-catalog"}},"text":"## Controls\n\n- WASD to move\n- Click and drag to move camera\n- Walk into items to collect them\n- Step on buttons to activate them\n\n## List of tools\n\n- **Programming Languages:** JavaScript, GLSL\n- **APIs:** WebGL2 (OpenGL ES 3.0)\n- **Development Server and Resource Bundler:** Vite","title":"Wavelength Collector","wayback_recovered":true,"wayback_source":{"timestamp":"20260223231245","url":"https:\/\/api.ldjam.com\/vx\/node2\/get\/423627+423620+423577+423547+423513+423508+423505+423504+423495+423490?author&parent&superparent","source":"global-node-catalog"}}