|
73789
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903797.6554134
|
1793767797.6554134
|
|
73790
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903798.513621
|
1793767798.513621
|
|
73791
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903799.3381178
|
1793767799.3381178
|
|
73792
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903802.4170601
|
1793767802.4170601
|
|
73793
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903803.2365327
|
1793767803.2365327
|
|
73794
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903804.0598319
|
1793767804.0598319
|
|
73795
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903805.3365974
|
1793767805.3365974
|
|
73796
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903806.214994
|
1793767806.214994
|
|
73797
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903807.0406127
|
1793767807.0406127
|
|
73798
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903807.8662777
|
1793767807.8662777
|
|
73799
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903808.6739082
|
1793767808.6739082
|
|
49574
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903809.4723113
|
1793767809.4723113
|
|
49580
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903811.108538
|
1793767811.108538
|
|
49588
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903812.4081461
|
1793767812.4081461
|
|
49591
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903813.334499
|
1793767813.334499
|
|
26680
|
An Awwwards-level portfolio website by @trung_nguy An Awwwards-level portfolio website by @trung_nguyen | Stardance...
|
trung_nguyen
|
0
|
67.05
|
0
|
[]
|
[{"post_id": 32378, "ts": "202 [{"post_id": 32378, "ts": "2026-07-21T14:47:36Z", "hours": 4.4678, "text": "it’s been a hot minute since the last log. i went home for the holidays and fully unplugged — didn’t touch the repo for like 1 week, so the portfolio just sat there gathering dust. anyway i’m back and i actually shipped a good chunk, so let me catch up. manifesto: a quiet moment on the site, no webgpu, just four lines of text. i split them with SplitText and clip a gray→ink gradient to the glyphs, then scroll slides the background so the dark ink fills each line in from the left. once they’re all dark the whole section fades to ink and the text flips to cream — it inverts into the footer palette right before it unpins. annoying bug: the pin adds 300% scroll and the footer triggers (created earlier) fired too early, so i sort into document order and refresh after the split. footer: classic big mailto headline with a hover underline wipe, socials, and a bottom bar. everything reveals on one timeline when it scrolls in. back-to-top routes through lenis for a smooth scroll with an instant fallback. footer image: the starry-night img has a tiny webgpu canvas on top that copies its object-cover crop, so mousing over it warps the pixels with a little chromatic aberration. the distortion is a cpu grid (base 15, capped 128) — splat pointer velocity into nearby cells, relax back to zero each frame, write it into an 8-bit RG DataTexture the shader samples. and it’s lazy: an IntersectionObserver only mounts the canvas near the viewport, frameloop off when it’s not on screen, plain as the fallback. costs nothing till you scroll to it."}, {"post_id": 27168, "ts": "2026-07-12T14:17:35Z", "hours": 5.2806, "text": "featured work section: the design is the classic table: four columns — website, category, services, year — with a massive “Featured Work” headline on top. i made the title do a little type trick: “Featured” is just an outline (transparent fill + text-stroke) and “Work” is solid, both bold and stretched to the full width of the screen. cheap to render, looks like i tried way harder than i did. the fun part is the hover. when you mouse over a row, a preview image of that project fades in and follows your cursor around. i used gsap quickTo for the x/y so the image trails the mouse with this smooth lag instead of being glued to it, and i feed the horizontal mouse velocity into a slight rotation so the card tilts in the direction you’re moving. tiny detail, sells the whole thing. also learned the hard way that you need to snap the preview to the cursor BEFORE the first fade-in, otherwise it flies in from wherever it was last time. one gsap.set and the jank is gone. the annoying part: this section doesn’t live on the page like a normal section. it sits inside the techstack pin from #4, behind that ink parabola that swallows the screen. so a regular scrolltrigger inside it just fires at the wrong time — the element is pinned at the top of the viewport the entire time, the trigger math is meaningless. took me a minute to accept that the reveal can’t belong to the section at all. it has to be part of the parent timeline. so right after the parabola covers everything, the same scrub that drove the logos now raises the title and cascades the rows in one by one. projects in the table are mock data with placeholder svgs for now. the site has a featured work section and no actual featured work. next step is filling it with real projects."}, {"post_id": 24696, "ts": "2026-07-08T13:49:21Z", "hours": 12.2989, "text": "so the face particles look great on my machine but the second i opened the site on a cheaper laptop my heart sank. it was chugging. like slideshow chugging. and this whole project has one rule i promised myself: silky on high-end, but still actually usable on low-end. so a section that only runs well on my own gpu is basically a broken section. i tried everything to save it. dropped the particle count way down, then dropped it again. wired up the frameloop so the canvas only renders when it’s actually on screen and pauses when you scroll away or tab out. all of that helped a bit but not enough — it was still the heaviest thing on the page by a mile and the low-end numbers barely moved. at some point you have to admit the effect just wants more gpu than i’m allowed to spend. so i’m parking the face for now (code’s still there, i’ll come back to it) and building out the tech stack section instead, something that leans on scroll and layout instead of the gpu. the idea: your logos stream across the screen as you scroll while a big “Techstack” headline sits locked in the center. but they don’t just slide past in a straight line — each card arcs above or below the center line and curves around the headline, like the text has gravity and the logos are in orbit around it. cards on even positions bend one way, odd ones bend the other, so it reads as this constant weave flowing past the title. the fun part is the math is all cpu, basically free. the row scrolls horizontally on a pinned scrolltrigger, and every frame i just measure where each card is relative to the headline. the closer a card gets to the title, the more it lifts off the center line to clear it (so nothing ever overlaps the text), and it eases back down as it leaves — that’s the orbit curve. i also give cards a little scale bump right as they cross the middle of the screen so there’s a soft focal point in the center. no shaders, no particles, no webgpu. runs smooth everywhere, which is the whole point."}, {"post_id": 20779, "ts": "2026-07-02T13:59:24Z", "hours": 6.3878, "text": "About me section time. I went looking at how other people do theirs and it’s always the same move: a nice portrait photo, big and confident. which is a problem for me because… I don’t have a single cool picture of myself lol. i’m a bit camera shy and every photo i have looks like a hostage situation. So instead of just taking a better photo like a normal person, my brain went “why not 3d scan your face?”. found out you can do it with just a phone camera, downloaded polycam, walked around my own head like an idiot for 10 minutes and… it looked TERRIBLE. like melted wax figure terrible. i felt genuinely bad about it ngl. So i did what i always do when i feel bad: dumb scrolling through awwwards sites of the day. and one of them saved me — a site with a 3d face made entirely of particles. no skin, no texture, just points floating in space. that was it. Plain particles were kinda monotonous though, everything just sat there dead still. so i ran curl noise over the cloud and now the whole surface drifts like it’s breathing. instant life. of course nothing works first try. my first version had a depth test problem where the BACK of my head was blending through my face, so i had eyes and hair occupying the same pixels :)). ended up going into blender and rendering out a depth image of just the front of my face, then rebuilt the 3d from that depth map instead of the raw scan. each particle samples the portrait for its position, brightness and size, and instead of a real depth-of-field pass i just fade particles the further they sit from a focus plane — looks like bokeh, costs nothing. The section hooks into the opening sequence from #2: the shutter bar squares up, expands out to the screen edges and opens straight onto the face. dither background fades itself out on the way so the particles get a clean dark void to float in."}, {"post_id": 20028, "ts": "2026-07-01T15:05:45Z", "hours": 16.0897, "text": "Ok so this section basically ate my whole week lol. like 15 hours for ONE page?? and the crazy part is i wasn’t even doing design, i just kept trying random ideas until one felt right. The whole thing is based on “The Creation of Adam” (that famous painting with the two hands almost touching). I thought it’d be sick to have two hands slide in from both sides while the hero closes, kinda like the split second before the fingers touch.i built the hands like 3 times ngl: first in 3d with three.js. looked cool but felt way too heavy and kinda too on the nose then i did an ascii version where the letters react to your mouse. way more my style but still not it and finally pixels, which is the one i kept. each hand is a grid of pixels that twinkle by themselves and light up when you hover, and the pixel sizes give it this little depth thing. This one just clickedalso threw in two lines of giant scrolling text with gsap, hellos on top and a lil manifesto on the bottom, they slide in when the shutter covers the hero. The one thing killing me rn is the colors. they’re just kinda mid honestly. so i think i’m gonna do some research, and repaint the whole site properly."}, {"post_id": 17597, "ts": "2026-06-28T13:46:47Z", "hours": 22.5236, "text": "I’ve been working on my portfolio for quite some time now. It’s not just about coding — it also involves design, research, and many other details. Choosing the right color palette, fonts, and sizes turned out to be much harder than I expected. Even though the planning phase took a while, I’ve finally started coding. So far, I’ve completed the preloader and the hero section. Preloader The preloader features a smooth loading bar. Once it fills up, it expands and fades out gracefully, revealing the hero section with a nice fade-in transition. Hero Section (My Favorite Part!) This is the section I’m most proud of. I used GSAP for all the text animations and Three.js for the interactive background. The background combines a dithered Bayer effect with a beautiful liquid flow simulation that reacts to mouse movement. The trailing effect feels incredibly smooth and immersive — it really makes the whole hero section feel special and unique. I already have plans for the upcoming sections and I’m really excited to bring them to life!"}]...
|
Title: An Awwwards-level portfolio website by @tru Title: An Awwwards-level portfolio website by @trung_nguyen | Stardance
Devlogs:
I’ve been working on my portfolio for quite some time now. It’s not just about coding — it also involves design, research, and many other details. Choosing the right color palette, fonts, and sizes turned out to be much harder than I expected. Even though the planning phase took a while, I’ve finally started coding. So far, I’ve completed the preloader and the hero section. Preloader The preloader features a smooth loading bar. Once it fills up, it expands and fades out gracefully, revealing the hero section with a nice fade-in transition. Hero Section (My Favorite Part!) This is the section I’m most proud of. I used GSAP for all the text animations and Three.js for the interactive background. The background combines a dithered Bayer effect with a beautiful liquid flow simulation that reacts to mouse movement. The trailing effect feels incredibly smooth and immersive — it really makes the whole hero section feel special and unique. I already have plans for the upcoming sections and I’m really excited to bring them to life!
Ok so this section basically ate my whole week lol. like 15 hours for ONE page?? and the crazy part is i wasn’t even doing design, i just kept trying random ideas until one felt right. The whole thing is based on “The Creation of Adam” (that famous painting with the two hands almost touching). I thought it’d be sick to have two hands slide in from both sides while the hero closes, kinda like the split second before the fingers touch.i built the hands like 3 times ngl: first in 3d with three.js. looked cool but felt way too heavy and kinda too on the nose then i did an ascii version where the letters react to your mouse. way more my style but still not it and finally pixels, which is the one i kept. each hand is a grid of pixels that twinkle by themselves and light up when you hover, and the pixel sizes give it this little depth thing. This one just clickedalso threw in two lines of giant scrolling text with gsap, hellos on top and a lil manifesto on the bottom, they slide in when the shutter covers the hero. The one thing killing me rn is the colors. they’re just kinda mid honestly. so i think i’m gonna do some research, and repaint the whole site properly.
About me section time. I went looking at how other people do theirs and it’s always the same move: a nice portrait photo, big and confident. which is a problem for me because… I don’t have a single cool picture of myself lol. i’m a bit camera shy and every photo i have looks like a hostage situation. So instead of just taking a better photo like a normal person, my brain went “why not 3d scan your face?”. found out you can do it with just a phone camera, downloaded polycam, walked around my own head like an idiot for 10 minutes and… it looked TERRIBLE. like melted wax figure terrible. i felt genuinely bad about it ngl. So i did what i always do when i feel bad: dumb scrolling through awwwards sites of the day. and one of them saved me — a site with a 3d face made entirely of particles. no skin, no texture, just points floating in space. that was it. Plain particles were kinda monotonous though, everything just sat there dead still. so i ran curl noise over the cloud and now the whole surface drifts like it’s breathing. instant life. of course nothing works first try. my first version had a depth test problem where the BACK of my head was blending through my face, so i had eyes and hair occupying the same pixels :)). ended up going into blender and rendering out a depth image of just the front of my face, then rebuilt the 3d from that depth map instead of the raw scan. each particle samples the portrait for its position, brightness and size, and instead of a real depth-of-field pass i just fade particles the further they sit from a focus plane — looks like bokeh, costs nothing. The section hooks into the opening sequence from #2: the shutter bar squares up, expands out to the screen edges and opens straight onto the face. dither background fades itself out on the way so the particles get a clean dark void to float in.
so the face particles look great on my machine but the second i opened the site on a cheaper laptop my heart sank. it was chugging. like slideshow chugging. and this whole project has one rule i promised myself: silky on high-end, but still actually usable on low-end. so a section that only runs well on my own gpu is basically a broken section. i tried everything to save it. dropped the particle count way down, then dropped it again. wired up the frameloop so the canvas only renders when it’s actually on screen and pauses when you scroll away or tab out. all of that helped a bit but not enough — it was still the heaviest thing on the page by a mile and the low-end numbers barely moved. at some point you have to admit the effect just wants more gpu than i’m allowed to spend. so i’m parking the face for now (code’s still there, i’ll come back to it) and building out the tech stack section instead, something that leans on scroll and layout instead of the gpu. the idea: your logos stream across the screen as you scroll while a big “Techstack” headline sits locked in the center. but they don’t just slide past in a straight line — each card arcs above or below the center line and curves around the headline, like the text has gravity and the logos are in orbit around it. cards on even positions bend one way, odd ones bend the other, so it reads as this constant weave flowing past the title. the fun part is the math is all cpu, basically free. the row scrolls horizontally on a pinned scrolltrigger, and every frame i just measure where each card is relative to the headline. the closer a card gets to the title, the more it lifts off the center line to clear it (so nothing ever overlaps the text), and it eases back down as it leaves — that’s the orbit curve. i also give cards a little scale bump right as they cross the middle of the screen so there’s a soft focal point in the center. no shaders, no particles, no webgpu. runs smooth everywhere, which is the whole point.
featured work section: the design is the classic table: four columns — website, category, services, year — with a massive “Featured Work” headline on top. i made the title do a little type trick: “Featured” is just an outline (transparent fill + text-stroke) and “Work” is solid, both bold and stretched to the full width of the screen. cheap to render, looks like i tried way harder than i did. the fun part is the hover. when you mouse over a row, a preview image of that project fades in and follows your cursor around. i used gsap quickTo for the x/y so the image trails the mouse with this smooth lag instead of being glued to it, and i feed the horizontal mouse velocity into a slight rotation so the card tilts in the direction you’re moving. tiny detail, sells the whole thing. also learned the hard way that you need to snap the preview to the cursor BEFORE the first fade-in, otherwise it flies in from wherever it was last time. one gsap.set and the jank is gone. the annoying part: this section doesn’t live on the page like a normal section. it sits inside the techstack pin from #4, behind that ink parabola that swallows the screen. so a regular scrolltrigger inside it just fires at the wrong time — the element is pinned at the top of the viewport the entire time, the trigger math is meaningless. took me a minute to accept that the reveal can’t belong to the section at all. it has to be part of the parent timeline. so right after the parabola covers everything, the same scrub that drove the logos now raises the title and cascades the rows in one by one. projects in the table are mock data with placeholder svgs for now. the site has a featured work section and no actual featured work. next step is filling it with real projects.
it’s been a hot minute since the last log. i went home for the holidays and fully unplugged — didn’t touch the repo for like 1 week, so the portfolio just sat there gathering dust. anyway i’m back and i actually shipped a good chunk, so let me catch up. manifesto: a quiet moment on the site, no webgpu, just four lines of text. i split them with SplitText and clip a gray→ink gradient to the glyphs, then scroll slides the background so the dark ink fills each line in from the left. once they’re all dark the whole section fades to ink and the text flips to cream — it inverts into the footer palette right before it unpins. annoying bug: the pin adds 300% scroll and the footer triggers (created earlier) fired too early, so i sort into document order and refresh after the split. footer: classic big mailto headline with a hover underline wipe, socials, and a bottom bar. everything reveals on one timeline when it scrolls in. back-to-top routes through lenis for a smooth scroll with an instant fallback. footer image: the starry-night img has a tiny webgpu canvas on top that copies its object-cover crop, so mousing over it warps the pixels with a little chromatic aberration. the distortion is a cpu grid (base 15, capped 128) — splat pointer velocity into nearby cells, relax back to zero each frame, write it into an 8-bit RG DataTexture the shader samples. and it’s lazy: an IntersectionObserver only mounts the canvas near the viewport, frameloop off when it’s not on screen, plain as the fallback. costs nothing till you scroll to it....
|
1792903814.157449
|
1793767814.157449
|
|
49599
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903814.9753947
|
1793767814.9753947
|
|
44720
|
Wheel of uck by @wowzie | Stardance
|
wowzie
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Wheel of uck by @wowzie | Stardance
|
1792903815.7956145
|
1793767815.7956145
|
|
25694
|
Untitled by @kate | Stardance
|
kate
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @kate | Stardance
|
1792903816.5987363
|
1793767816.5987363
|
|
38323
|
Threejs grass by @trung_nguyen | Stardance
|
trung_nguyen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Threejs grass by @trung_nguyen | Stardance
|
1792903817.4412992
|
1793767817.4412992
|
|
6218
|
heating hub by @sepvanhouten | Stardance
|
sepvanhouten
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: heating hub by @sepvanhouten | Stardance
|
1792903818.2709846
|
1793767818.2709846
|
|
32553
|
Untitled by @roodramehta | Stardance
|
roodramehta
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @roodramehta | Stardance
|
1792903819.0941935
|
1793767819.0941935
|
|
38230
|
Open PLG by @Liam303 | Stardance
|
Liam303
|
0
|
17.0
|
0
|
[]
|
[{"post_id": 35668, "ts": "202 [{"post_id": 35668, "ts": "2026-07-27T08:25:13Z", "hours": 3.0, "text": "Devlog 6 What was added?: A way to export the models, textures and geometry in a higher resolution for cleaner meshes Erision simulation for head based erosion and water based erosion Added a river checkbox to be able to simulate rivers into the terrain Added a snow export layer Labeling for all the buttons because I kept forgetting what each of them did Issues Constant freezing in the viewport when thermal and water erosion options were changed, the way in which I coded it was that everything would be recalculated each time the erosion options would change, set a priority list so only values that need to change does change so not everything needs to be recalculated The export button would remain on forever once clicked, it turns out that I was using switches when I thought I was using buttons, I just needed to added a line that reset the switch to false after it was finished Crashing when rendering at the higher resoluations, still havn’t fixed this, the problems pretty obvously it trying to recalculate it I’m just in the process of figuring out how to fix it. Next time on Open PLG Fixing the crashing issue A way of seeing the erosion lines in the viewport A way of controlling the amount of snow"}, {"post_id": 34980, "ts": "2026-07-26T03:42:24Z", "hours": 3.0, "text": "Devlog 5 What was added?: User tkinter file page to create a way to export all of the data cleanly Seperated the diffrent features like height map, water level and used zipfile to combine all of the exported data into one clean file manager. - Issues: A weird issue where the file manager would pop up so you could choose to save the file but it would be transparent and whenever you click on it you click through it, it remained even after closing the program and the only way to fix it was to restart the computer. It turns out the line root = tk.Tk(); root.withdraw() was forcing it to be the prioratized window but the background process also assumed it was the prioritzed window and so it just hang out waiting for the code to update it. When importing the textures into other software all of the textures would be made for a diffrent sized mesh, fixed this by setting them a constant scale defined by the resoulation of the image, this will also come in handy later. Next time on Open PLG Advanced simlation ooh , being able to simulate stuff like river errosion and snow maps as accuratly as possible, defintly not just doing this as an excuse to practice my simulation rendering skills. Adding a resolution control and the ability to control the resolution of the exported data, probably also a rendering setup so it doesn’t crash when run"}, {"post_id": 34894, "ts": "2026-07-25T23:58:05Z", "hours": 2.0, "text": "Devlog 4 What was added?: Main thing that was added is exporting, the ply file can be exported and you can import it into your software of choice, the reason for .ply is the way in which is stores its data based on vertex positions which matches the height map generation my code runs off. Semi-functional biome masking, so it textures based on catogrized zones such as costal shorlines, flatlands highlands ect. Expanded the internal dictionary for faster switching between elevation values and biome classifications Errors: Trying to apply the biome mask to the mesh caused the geometry to form stair looking blocks, turns out the warp_by_scalar function replaces elevation data with specic indices like -1.0, -0.2, 0.5, 1.5. Fixed this by adding a geometry_elevation array to expand possible vertex indeces, overly simpliefied explanation but I don’t know how to explain it any better All of the checkboxes and export buttons all fused in the left hand bottom of the screen and refused to move, turns out in my hastely coppiying from the PyVista website examples I defined a variable as l_stat which held the location data inside it but I assumed it was a PyVista function with other uses, fixed it just by removing that variable and adding my own location data for each. Next time on Open PLG: Height map exportation so you can choose to displace a plane rather then importing a 3d model, started on this today but didn’t get far before deciding to post this devlog and to take a break. Mask exportation so the final user could use weathering mask for better texturing, this is a feature that a surprisingly low number of similar software have easilibly usable so I knew this was a must have for my project Height based blending for external shaders."}, {"post_id": 34445, "ts": "2026-07-25T05:01:02Z", "hours": 2.0, "text": "Devlog 3 What was added?: Make like a sky blue gradient background to make it look better Added a very basic Thermal Erosion Simulation, more for looks than anything Weathering slider to control the weathering and color Modified the earth color to make it look better Setup the official git hub page Issues: Significant frame drops when I turn the weathering to its heighest setting, fixed it by vectorizing the smoothing operation therefore eliminating the need for the loops I had before. Water shader wasn’t reflected properly, fixed this by creating a specific material for the water and manually adjusted them Next time on Open PLG: Being able to export the height maps and 3d models Biome texturing based on larger array of values"}, {"post_id": 34395, "ts": "2026-07-25T02:30:20Z", "hours": 3.0, "text": "Devlog 2 Note - Due to the complexity of this project all future devlogs on this project will be equally complex, if you have any questions about what anything means feel free to ask and I will try to answer asap What was added?: Infinite world panning: You can now infinitely scroll to either side of the world instead of focusing on a single chunk, acts as both a random see generator and access for larger terrain. Second Noise pass: I added a second higher frequency Perlin noise layer to brake up flat looking areas and add additional micro details Added a transparent water layer that’s controllable by the user Added PBR: Physically Based Rendering and smooth shading adds shadows and overall makes it look a bit better. Issues: Had a problem where moving the sliders at all would result in: “TypeError: The Input DataSet type StructuredGrid must be compatible with PolyData.” The error was a result of PyVista trying to convert the mesh to a PolyData object. I bypassed this by updating coordinate and scalar arrays through actor_3d.mapper.dataset.points instead of .copy_from(). The labels of different sliders would hide off screen due to the very tight pixel positioning and therefore wouldn’t account for screen size. I fixed this by significantly increasing their position onscreen so that no matter the screen size they would fit on screen, I originally tried screen based scaling but it didn’t work. Next time on Open PLG Advanced biome coloring so that cliifs sides and steep slopes have a diffent color then flat planes. Erision filters to simulate damage to the landscape Custom shaders to make everything look better, no idea how I’ll add that but I guess we’ll find out."}, {"post_id": 32853, "ts": "2026-07-22T08:44:36Z", "hours": 4.0, "text": "Sorry for the lack of any project updates for the past couple of days, the school term here in New Zealand has just started, I’ve also had to replace my laptop so I’ve been very busy switching over. The Open Aero project has been postponed to the forceable future to make time for this project, Open PLG, or Procedural Landscape Generator. This is a project I actually need for a separate non-Star Dance project I’m working on so it’s got a high priority. This project is built to generate 3d landscapes for modeling for cgi project and game creation, I’m surprised how much I got done in the opening five hours of the project and a huge amount of this is based on sigh math. For the specic details: its based on the Perlin Noise library to generate the noise for environment displacement, I’m also using pyvista because I’ve used it before so I know it quite well, due to school, coding time will decrease significantly."}]...
|
Title: Open PLG by @Liam303 | Stardance
Devlogs:
Title: Open PLG by @Liam303 | Stardance
Devlogs:
Sorry for the lack of any project updates for the past couple of days, the school term here in New Zealand has just started, I’ve also had to replace my laptop so I’ve been very busy switching over. The Open Aero project has been postponed to the forceable future to make time for this project, Open PLG, or Procedural Landscape Generator. This is a project I actually need for a separate non-Star Dance project I’m working on so it’s got a high priority. This project is built to generate 3d landscapes for modeling for cgi project and game creation, I’m surprised how much I got done in the opening five hours of the project and a huge amount of this is based on sigh math. For the specic details: its based on the Perlin Noise library to generate the noise for environment displacement, I’m also using pyvista because I’ve used it before so I know it quite well, due to school, coding time will decrease significantly.
Devlog 2 Note - Due to the complexity of this project all future devlogs on this project will be equally complex, if you have any questions about what anything means feel free to ask and I will try to answer asap What was added?: Infinite world panning: You can now infinitely scroll to either side of the world instead of focusing on a single chunk, acts as both a random see generator and access for larger terrain. Second Noise pass: I added a second higher frequency Perlin noise layer to brake up flat looking areas and add additional micro details Added a transparent water layer that’s controllable by the user Added PBR: Physically Based Rendering and smooth shading adds shadows and overall makes it look a bit better. Issues: Had a problem where moving the sliders at all would result in: “TypeError: The Input DataSet type StructuredGrid must be compatible with PolyData.” The error was a result of PyVista trying to convert the mesh to a PolyData object. I bypassed this by updating coordinate and scalar arrays through actor_3d.mapper.dataset.points instead of .copy_from(). The labels of different sliders would hide off screen due to the very tight pixel positioning and therefore wouldn’t account for screen size. I fixed this by significantly increasing their position onscreen so that no matter the screen size they would fit on screen, I originally tried screen based scaling but it didn’t work. Next time on Open PLG Advanced biome coloring so that cliifs sides and steep slopes have a diffent color then flat planes. Erision filters to simulate damage to the landscape Custom shaders to make everything look better, no idea how I’ll add that but I guess we’ll find out.
Devlog 3 What was added?: Make like a sky blue gradient background to make it look better Added a very basic Thermal Erosion Simulation, more for looks than anything Weathering slider to control the weathering and color Modified the earth color to make it look better Setup the official git hub page Issues: Significant frame drops when I turn the weathering to its heighest setting, fixed it by vectorizing the smoothing operation therefore eliminating the need for the loops I had before. Water shader wasn’t reflected properly, fixed this by creating a specific material for the water and manually adjusted them Next time on Open PLG: Being able to export the height maps and 3d models Biome texturing based on larger array of values
Devlog 4 What was added?: Main thing that was added is exporting, the ply file can be exported and you can import it into your software of choice, the reason for .ply is the way in which is stores its data based on vertex positions which matches the height map generation my code runs off. Semi-functional biome masking, so it textures based on catogrized zones such as costal shorlines, flatlands highlands ect. Expanded the internal dictionary for faster switching between elevation values and biome classifications Errors: Trying to apply the biome mask to the mesh caused the geometry to form stair looking blocks, turns out the warp_by_scalar function replaces elevation data with specic indices like -1.0, -0.2, 0.5, 1.5. Fixed this by adding a geometry_elevation array to expand possible vertex indeces, overly simpliefied explanation but I don’t know how to explain it any better All of the checkboxes and export buttons all fused in the left hand bottom of the screen and refused to move, turns out in my hastely coppiying from the PyVista website examples I defined a variable as l_stat which held the location data inside it but I assumed it was a PyVista function with other uses, fixed it just by removing that variable and adding my own location data for each. Next time on Open PLG: Height map exportation so you can choose to displace a plane rather then importing a 3d model, started on this today but didn’t get far before deciding to post this devlog and to take a break. Mask exportation so the final user could use weathering mask for better texturing, this is a feature that a surprisingly low number of similar software have easilibly usable so I knew this was a must have for my project Height based blending for external shaders.
Devlog 5 What was added?: User tkinter file page to create a way to export all of the data cleanly Seperated the diffrent features like height map, water level and used zipfile to combine all of the exported data into one clean file manager. - Issues: A weird issue where the file manager would pop up so you could choose to save the file but it would be transparent and whenever you click on it you click through it, it remained even after closing the program and the only way to fix it was to restart the computer. It turns out the line root = tk.Tk(); root.withdraw() was forcing it to be the prioratized window but the background process also assumed it was the prioritzed window and so it just hang out waiting for the code to update it. When importing the textures into other software all of the textures would be made for a diffrent sized mesh, fixed this by setting them a constant scale defined by the resoulation of the image, this will also come in handy later. Next time on Open PLG Advanced simlation ooh , being able to simulate stuff like river errosion and snow maps as accuratly as possible, defintly not just doing this as an excuse to practice my simulation rendering skills. Adding a resolution control and the ability to control the resolution of the exported data, probably also a rendering setup so it doesn’t crash when run
Devlog 6 What was added?: A way to export the models, textures and geometry in a higher resolution for cleaner meshes Erision simulation for head based erosion and water based erosion Added a river checkbox to be able to simulate rivers into the terrain Added a snow export layer Labeling for all the buttons because I kept forgetting what each of them did Issues Constant freezing in the viewport when thermal and water erosion options were changed, the way in which I coded it was that everything would be recalculated each time the erosion options would change, set a priority list so only values that need to change does change so not everything needs to be recalculated The export button would remain on forever once clicked, it turns out that I was using switches when I thought I was using buttons, I just needed to added a line that reset the switch to false after it was finished Crashing when rendering at the higher resoluations, still havn’t fixed this, the problems pretty obvously it trying to recalculate it I’m just in the process of figuring out how to fix it. Next time on Open PLG Fixing the crashing issue A way of seeing the erosion lines in the viewport A way of controlling the amount of snow...
|
1792903819.908619
|
1793767819.908619
|
|
21704
|
Untitled by @mani | Stardance
|
mani
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @mani | Stardance
|
1792903820.737185
|
1793767820.737185
|
|
32649
|
VedantOS by @Vedant_Daga | Stardance
|
Vedant_Daga
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: VedantOS by @Vedant_Daga | Stardance
|
1792903821.563429
|
1793767821.563429
|
|
5382
|
Untitled by @youngpretzel76 | Stardance
|
youngpretzel76
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @youngpretzel76 | Stardance
|
1792903822.3845363
|
1793767822.3845363
|
|
23323
|
how do i delete this gang by @zoel-hachey | Starda how do i delete this gang by @zoel-hachey | Stardance...
|
zoel-hachey
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: how do i delete this gang by @zoel-hachey | Title: how do i delete this gang by @zoel-hachey | Stardance...
|
1792903823.2170782
|
1793767823.2170782
|
|
13037
|
Untitled by @NotSap | Stardance
|
NotSap
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @NotSap | Stardance
|
1792903824.0496652
|
1793767824.0496652
|
|
23231
|
DinoOS by @HenryTierney | Stardance
|
HenryTierney
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: DinoOS by @HenryTierney | Stardance
|
1792903824.8571684
|
1793767824.8571684
|
|
41102
|
Terra-Sense by @Cherise | Stardance
|
Cherise
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Terra-Sense by @Cherise | Stardance
|
1792903825.667761
|
1793767825.667761
|
|
49600
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903826.4851294
|
1793767826.4851294
|
|
30668
|
Receipt Printing by @partavocado | Stardance
|
partavocado
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Receipt Printing by @partavocado | Stardanc Title: Receipt Printing by @partavocado | Stardance...
|
1792903827.2969658
|
1793767827.2969658
|
|
49602
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903828.1242795
|
1793767828.1242795
|
|
49603
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903828.946299
|
1793767828.946299
|
|
49607
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903829.7757328
|
1793767829.7757328
|
|
49618
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903830.5851233
|
1793767830.5851233
|
|
49624
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903831.40159
|
1793767831.40159
|
|
49627
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903832.2170017
|
1793767832.2170017
|
|
73800
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903833.0307293
|
1793767833.0307293
|
|
73801
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903835.407573
|
1793767835.407573
|
|
73802
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903836.2234042
|
1793767836.2234042
|
|
73803
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903837.0377102
|
1793767837.0377102
|
|
73804
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903837.858634
|
1793767837.858634
|
|
73805
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903838.6585603
|
1793767838.6585603
|
|
73806
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903839.4789026
|
1793767839.4789026
|
|
73807
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903840.2777784
|
1793767840.2777784
|
|
73808
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903841.1046417
|
1793767841.1046417
|
|
73809
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903841.9336545
|
1793767841.9336545
|
|
73810
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903842.7387247
|
1793767842.7387247
|
|
73811
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1792903843.5486429
|
1793767843.5486429
|