August 03, 2025
felt incredibly nauseous today but i had to roll out an update... soooooooooooooo i fixed the camera system to allow the player to look up smoothly. i also changed a few configs to make my pc's fan not scream too much. tomorrow im adding glide movement and testing object movement
also, 4 days till exams, and my payout for my voxel renderer still isnt here...
gday! exams in 6 days and my birthday is tomorrow! today i fixed a small problem with the right eye (drawing extending past left boundary, i positioned the camera so that this isnt obvious in my ladt devlog), made the grain darker so theres more contrast, added back in the stats hud as a floating hud when viewed through stereoscopy, and also bought back the gay lighting from the og 3d renderer!! thanks for the free stickerzz
for today's HEIDI STICKER HELL YEAAAA!! i made the background more colorful, adjusted lighting calculations (small adjustments to paste back the corners i cut during the turtle time), and improved screen clipping to use our good friend Sutherland–Hodgman polygon clipping (which you might remember from my voxel renderer :3)
i also have due homework and its 12:41am so... welp...
hello!! good morning!! pre-exam-preparation kaemori here at 2am to get the silly sticker from an event... so now im basically forced to write some devlog for something im not ready to devlog yet, but here goes:
i copied most of my code from my original 3d renderer, changed it to use tkinter instead of stupid turtle, added a second camera, made a Head object as a base for the two eyes (2 cameras) for the image below. i know its kinda hard to cross your eye and visualize the 3d-ness of the image... but trust me its there :3
i'll add some noise to the background to make it easier for your eyes to snap and adjust tomorrow for the next sticker!! gn sillies!
plans for the future: make the drawings not overlap and instead cut off where its supposed to
last devlog of this project!
alright! ive cleaned up the code a bit, removed legacy functions and some memory optimizations (and bugfixes of things ive overlooked)
thats the script done! i will update github... and then profit >:3
this has been an... interesting experience, to say the least, but my next project would be way more fun! i cannot wait... shameless ad https://summer.hackclub.com/projects/13124
HOLY MEOWZERS I GOT MOUSE AND KEYBOARD CONTROLS WORKING ON ALL OSES!! THIS TOOK TOO LONG, WAYLAND IS ACTUALLY STUPID QWQWQWQ
welp thats 4 hours of my life gone, but at least i can continue developing the script now
also no mouse lock for you since i cant get it working on wayland so you all will suffer
ya gurl is back at it again with a 3d project with an even longer title somehow! this project is 100% a proof of concept! dont track me down if it dont work uwu. most of tis code will be taken from my previous project, the 3D renderer using nothing but turtle (for rendering) and math (for computing), but since i have to compute twice as many scenes at once, i'll be using tkinter for faster performance so i dont get overhead from all the turtle.goto operations...
was coding at 2 in the morning when fire got her macbook!! congrats! anyways as i was checking my own balance, I REALISED MY PROJECT PAID OUT. 24.6X MULT. I HAVE NEVER EVEN SNIFFED 20X BEFORE AND NOW I GOT ALMOST 25!!??!?!? IM SO THANKFUL TO EVERY SINGLE ONE OF YOU!! THANKYOUTHANKYOU MWAMWAMWAAA!!
anyways, i switched over to arch linux, and found my code doesnt work there. im working on a non-platform specific input capturer thingy! also some tkinter optimizations whatever. thank yalls so much for the support, i can never thank yall enough!!! mwaaaa!!
UPDATE!: im now switching over to tkinter, which is what turtle uses behind the scenes. yes this is clickbait BUT BUT BUT HEAR ME OUT, they're the same thing, turtle's just a wrapper to make it easier for beginners (source: turtle.pen.screen.getcanvas() returns a tkinter canvas object). i WILL include the original turtle renderer in the git, but that WILL be deprecated in favour of the newer tkinter renderer. the main principal is STILL UNCHANGED! this also means my releases from now on WLLL BE THE TKINTER VERSION OF THE RENDERER! below i attached all the imports my program uses now, for transparency.
psst im switching over to arch linux today
this is such a cool app u deserve 3 billion shells :pray:
silly little game thing (placeholder)
IVE GOT SHIT DONE!!! after mountains of stuff i tried to add and stuff i scrapped, ive perfected the cave algorithm and added a 5fps boost (sometimes its a 5fps loss but companies lie to you in the same way, no?)
anyways will be researching mountains more ig :p
you can now cycle through items!! some other misc computational savings too! now just to put instructions for the game, and then upload it to gibbyhubz!! 2036 lines and almost 18 hours, when my initial target was just 10..!!!! this is crazy!!!! now, only one thing left to do... ship and then reap my rpi5!!!!! >:3c
you can build stuffes now!!! yippeeeeeeee!!
selection... thing... i just noticed i didnt have a crosshair...
also some memory leak fixes, better cave generation, MULTIPLE (failed) attempts at making mountains (i gave up), making this game mac/linux compatible... small QOL fixes that would probably make your memory thank you <3
anyways i'm gonna make a crosshair and a janked up break/place blocks system
p.s. wow cant believe all this took me 2.5 hours
i got a cave system working!! its kinda spacious but thats kinda da vibe ykykykyk?? >:3c welp thats 2 hours of my life im not getting back
HOLY MEOWZERS IVE BEEN RIPPING MY HAIR OUT BECAUSE OF A PROBLEM AND THIS RANDOM SILLY SOLVES LIKE 99% OF IT HOLY MRROWWZERSSSS o7 orz I LOVE YOU RANDOM PERSON FOR THIS
good meowning at 12:50am as of writing this devlog! im sick with sore throat the cold and sore joints!!! anyways did some QOL movement changes
11 hour mark passed! im supposed to end the project by now but i wanna work on terraforming, mountains and caves first before i end this!!
gn!! and wm gws! (no devlog art today, so tired... sorry!!)
some optimizations and player movement! still some bugs to work out tmr though...
next up, mountains! and player bugs but thats not important
when the convo is so good you start doing this: (i wanted an excuse to draw cars :3)
banner art done! shipping now!!! certers have mercy
trees! (i swear they have randomness to it!!)
next on my todo:
watr, mountn, rivr, cav, PLAYER MOVEMENT!! (e.g. graveetee!!)
beeg update!! almost 4 hours since my last one!!!! anywaysies 10fps gayming on 20 render distance!!!! working on a modular debug menu <3
took some inspiration from my 3d renderer project, but then realised a texture system would be better. anyways heres my 0.2fps renderer!! now time for optimization. there wont be a light system cuz like, just no gang, just no.
ok well now theres BFC, this took no time cuz im good lidat... but the pawblem rn is neighbour culling... and the chunk system... well i forgot about that. oh well.
next up, chunk system.
psst if you noticed a decrease in lines, i removed a few obsolete functions carried over from my last renderer, and moved vectors.py back into its own file
as purr tradition, heres a wireframe cube
as NOT purr tradition, this is already like 1/4th of the work done
told you this project would be easy*
Forshadowing: (courtesy of Wikipedia)
Foreshadowing is a narrative device in which a storyteller gives an advance hint of an upcoming event later in the story. Foreshadowing often appears at the beginning of a story, and it helps develop or subvert the audience's expectations about upcoming events.
The writer may implement foreshadowing in many different ways such as character dialogues, plot events, and changes in setting. Even the title of a work or a chapter can act as a clue that suggests what is going to happen. Foreshadowing in fiction creates an atmosphere of suspense in a story so that the readers are interested and want to know more.
The literary device is generally used to build anticipation in the minds of readers about what might happen next to add dramatic tension to a story. Moreover, foreshadowing can make extraordinary and bizarre events appear credible, and some events are predicted so that the audience feels that it anticipated them.
Hints may be about future events, character revelations, and plot twists to create mood, convey theme, and build suspense, usually to hint at the good events that will likely cross paths with or happen to the main character later on.
as per tradition, heres the discord vc brainstorm session of me and the sillies! tysm, ilysm sillies!! dont worry if nothing makes sense, neither do i understand anything.
now i can get back onto work. 8 hours away from an rpi5
ai note: this is my first time doing something like this, so im not so confident. around 20% of the code is ai now, since i cant be arsed to read through the wiki page for perlin noise for then 60th time. yeah remember 3D renderer using nothing but turtle (for rendering) and math (for computing)? yeah now its gonna render voxels. yeah voxels are cool its gonna run 10 times faster now (120fps gayming incoming)
MORE PRECOMPUTATION, cut-throat optimizations, A LOT OF DOCSTRINGS, and a LOT MORE CRYING later, i actually managed to make a usable stdlib only 3d renderer!!
yap incoming!:
ok so like. imagine. lil baby me making a humble silly goofy 3d wireframe project, just lines zoomin everywhere like spaghetti code in motion. now fast forward to now and i got LIGHTING. WITH. SCATTER. running at SIXTY!! FPS!! (actually more than 60 but i gotta leash those frames like wild puppies or else they’ll run into traffic). like bro this project went from a scuffed lil v0.5 stick figure renderer to ✨v1 flat shading✨ to ✨v4 distance lighting✨ to ✨v5 real lights™✨ to ✨v6 optimization station✨ and then just me drowning in a SEA of bugfixes like i was swimming through spaghetti ocean.
and like… for WHAT. pls give me ONE real world use case for this qwq. like what am i gonna do, light up my blahaj shrine in realtime rendering?? (actually wait that sounds kinda hot).
anyway this is my 6th (SIXTH. 😭) attempt at this cursed passion project. the first two times were on SCRATCH (yes scratch. yes the cat one. yes i hate myself too). the third time i got funky with a scratch MOD and somehow birthed an actual renderer (with more bugs than my bathroom light). 4th & 5th were numpy vibes but i never got past wireframes. no lights. no shading. just sad triangle outlines. then attempt six rolled in, i saw SoM and went “heh… what if i cook again” and WHOOPS I COOKED TOO HARD.
bro i spent more hours on wikipedia than studying for my exams, more hours debugging than sleeping, and if hackatime actually counted all the minutes i was staring at code in despair with my debugger open, i’d probably have like 3000000h logged. like i basically gave my compiler ✨trauma✨.
but real talk… i made friends, i made memories, i made my compiler scream bloody murder at me, and i actually learned more from this than any math class ever. i’m so proud of myself. like 2 years ago i was asking “is a 60fps renderer even possible for me??” and today i can answer: yes past me, it’s possible, its possible with only things from the standard library, and it’s ✨beautiful✨.
also my brain is soup now. but soup that runs at 60fps. 60fps with scatter lighting.
enjoy my devlog art <3
thats it for the project, exams just about done too! i already have ideas for my next torturing metho- i mean project!! set sail and be free, my renderer!
this is optimized to the max. i optimized everything that can be controlled, and now it runs at 60fps roughly. i added docs and stuff, just needs some final polish before i upload the final demo, repo, and do a final ship. this is the end of the 3d renderer, with my next devlog my final thoughts or smth i dunno :3
ok exam revision time :p
beautifully optimized, runs at 60-80fps with a few single frame drops, probably due to turtle internal clock being over worked, which i have no control over.
this is going to be my second last devlog, with my final devlog being just some documentation. thanks to everyone who helped vote for me (mmm yummy 360 shells!!), i'll be working on a new project soon <3
made it so that lighting precomputation can be triggered by the user at any time. this makes it so that the game can pre-precompute the lighting before calling render(), making the first frame of rendering much faster. had to do like 4 structural changes to my code :sob:
all the main features done now, all thats left is micro-optimization (need to do stuff like making view frustrum culling work, microoptimize goto functions, stuff like that)
also, hitting 2k lines soon!
this project is reaching a close, im running out of things to add, any suggestions dm me on slack <3
was wondering why cache wasnt caching, since like caching on and caching off uses the same amount of memory and gives the same fps. found a bug that makes caching behave unpredictably. screenshot shows the fps with caching off
CACHING RUNS AT 60FPS, IT GIVES A 4X IMPROVEMENT LMFAO
new update on github finally, go wild!
https://github.com/CastyLoz17/turtle_3d_renderer/releases/tag/v7
fixed a shadow bug that caused self-shadowing. very stupid mistake, costed me HOURS of rolling back code to see what i changed, and fixing stuff caused by the issue...
added precomputation for light bouncing. this also took me WAYY TOO LONG... caching is a stupid thing to get right. but hey, now you can set light_bounces to 100 and still run at 80fps, for the price of 4 seconds of precomputation at the start of the program
also, everyone welcome back captain hajjy back to the devlogs! you've been missed
light reflection!!
you might notice theres a lack of blahajs in my recent devlogs, thats cuz i dont want my pc to blow up rendering that many faces. sorry :pensive:
SHADOWS WORK NOW!!!
okokokokokok gonna set up a showcase scene and then update this :3
was touching some late-night grass when explorpheus hit me with a bombardment of messages!! so many follows!!!! and yet no payout yet..
textures were impawsible but i did make an audio engine, maybe for 3d spacial audio?
nah i change my mind no texture rendering sorry peeps, apparently just averaging the colors is gonna make it look horrible
all that work for nothing...
thats 3 features i cancelled
I DONE IT!! AAHAHAHAHA HAHAHAHAHA BAHAHAHAHAH I WROTE MY OWN IMAGE READE R IN VANILAA PYTHON ABHAHFHAHF DUH ISHE UU SUF PEFHWHF
im going insane send help
FAFOd with some precision related settings, found a suitable rounding precision...
any more optimization and im gonna have to write my own garbage collector
caching... :drool:
well now lighting is baked, kinda, sorta, its precomputed whatever same thing
added togglable caching, made lighting easier to calculate, did some memory optimizations. this gayhaj is the result of all that. I'm running out of things to do...
made the material and object lists into classes!
its now updated on github!
https://github.com/CastyLoz17/turtle_3d_renderer/releases/tag/v3
hopefully i get the shells sooner...
added some emmisive objects! very proud :3c
lighting is done!!
ambient lighting is sightly purple
red point light source on top
blue point light source on bottom
(yes bisexual lighting)
pink directional light source on snoot
turquise spotlight on tail
<3
after some time of claude failing, i decided to do more wikipedia research, and lo and behold the goat newell saves the day again!!
the problem is fixed now, just need to see if theres a purrformance impact on larger stuff
was showing off my code to the silly council in discord vc
what is that hole in the stomach?
... fuuuuuuuuuuuuuuuuuuuuuuun welp time for more wikipediaing and debugging...
i did a thing.
well thats lighting. kinda. sorta. will update repos in a bit after i fix a few bugs...
this is going up onto iframe
made some lighting presets, so that everything dont just look flat (basically fancier fog)
made it so that all platforms can run this code (mouse dont work on mac)
technically should work now. i'll redo the repo later <3
made a renderer_mac.py that uses pynput instead of mouse, as mouse bugs out on mac. this STUPID MISTAKE delayed my cert, and i hate myself for not finding it. updated code on github now
oh yeah just realised i havent updated the git repo in a long time, here it is now
did some cprofiling, looks like im for once out of things to microoptimize... and now that skyboxes are cancelled time to make culling + lighting/shadows.
also im gonna be using the teapot model from now on
no skybox for you then... too buggy n laggy n stuff
welp thats two things down the drain today
... qwq
hi hi yeah so ok i made a texture engine and a skybox engine. its running at 2 frames per sometimes. i'll fix that. probably
paws at you paws at you paws at you paws at you
made some z buffering modes, but apparently turtle isnt the only bottleneck...
more info in image below, i'll research into other culling techniques that isnt cpu heavy <3
oh hi yeah cool thing, my script can actually render complex stuff now
reworked like half the code since i didnt like how everything was jank
time to do research on how im gonna make a skybox
after a bit of debugging and a bit more procrastination in #summer-of-making, ive finished the camera system with keyboard and mouse controls (WITH A LOT, by that i mean A LOT OF JANK)
i shall do more optimization tomorrow (as in when i wake up, because technically 12am is in 23 minutes as of writing this), but right now im so pumped and shocked that my scuffed script sorta kinda works
oh boy do i love wikipedia styled math equations...
p.s. used chatgpt for 10% of the script, cuz its too late fur me to be mathin. sorry.
guess what sillyheads, mountains of jank later (negating 27 sine functions so i dont have to write a mirror function, im definitely gonna feel the impact later), I GOT THE CAMERA WORKING
now, i just need to attach it to a keyboard and mouse like your normal first person view mode, and then its gonna be done
i also made a dynamic fps normalizer so my script always runs at 60fps (probably)
oh wow would you look at that, i have a cube and some simple functions for some movement now!!
left-right motion is by camera, the cube is moving up and down
oh yeah did i mention that the cube has color now? i made a function to load mtl files as well
hihihi well okay its out now yayy
anyways i added a obj file import thing
also added a drawing thing
i also just learnt that this has been done before... dam
oh well
some time in and im done with the camera system
wikipedia, math stackexchange and geeks4geeks boutta be my best friend when i get to the mathing part of this
AI note: used AI for writing math statements only! ~12% ai, but i enabled the flag just in case. everyone’s out here flexing “real-time” rendering. ray tracing. gpu accel. blah blah. me? i made a 3d renderer in… python turtle. yeah. the thing that drew squares in 5th grade. so, what if we gave the turtle a wheelchair with nitro fuel? no numpy. no c extensions. no mercy. still manages to run at 60fps at the strength of sheer willpower and hopes and dreams. this isn’t speed. this is vibes >:3c
This was widely regarded as a great move by everyone.