add screenshots, start writing about voxel engine

This commit is contained in:
Crispy 2022-05-07 20:07:54 +02:00
parent 8da53cb9e0
commit 481fcf0227
32 changed files with 124 additions and 169 deletions

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
<link rel="icon" type="image/x-icon" href="/icons/favicon.png"> <link rel="icon" type="image/x-icon" href="/media/icons/favicon.png">
<title>Blender creations</title> <title>Blender creations</title>
</head> </head>
<body> <body>
@ -15,10 +15,9 @@
<nav> <nav>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/blender/">Blender stuff</a></li>
<li><a href="/projects/">Projects</a></li> <li><a href="/projects/">Projects</a></li>
<li><a href="/blender/">Blender</a></li>
<li><a href="/fractals/">Fractals</a></li> <li><a href="/fractals/">Fractals</a></li>
<li><a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">Game of Life</a></li>
<li><a href="https://crispypin.itch.io/">Games</a></li> <li><a href="https://crispypin.itch.io/">Games</a></li>
</ul> </ul>
</nav> </nav>
@ -29,31 +28,32 @@
<h2>Alien Creatures animation</h2> <h2>Alien Creatures animation</h2>
<p>January 2022</p> <p>January 2022</p>
<p><a href="https://youtu.be/AfRJvExamX4">youtu.be/AfRJvExamX4</a></p> <p><a href="https://youtu.be/AfRJvExamX4">youtu.be/AfRJvExamX4</a></p>
<iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/AfRJvExamX4"></iframe> <!-- <iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/AfRJvExamX4"></iframe> -->
<video src="/media/blender/critters.mp4" controls height="480"></video>
<h2>Alien Tree</h2> <h2>Alien Tree</h2>
<p>January 2022</p> <p>January 2022</p>
<a href="media/alien_tree.png"><img src="media/alien_tree_preview.png" alt="Alien Tree" title="Click for full resolution"></a> <a href="/media/blender/alien_tree.png"><img src="/media/blender/alien_tree_preview.png" alt="Alien Tree" title="Click for full resolution"></a>
<h2>Decapod Alien</h2> <h2>Decapod Alien</h2>
<p>January 2022</p> <p>January 2022</p>
<a href="media/decapod_shock.png"><img src="media/decapod_shock_preview.png" alt="Decapod Alien" title="Click for full resolution"></a> <a href="/media/blender/decapod_shock.png"><img src="/media/blender/decapod_shock_preview.png" alt="Decapod Alien" title="Click for full resolution"></a>
<h2>Crab</h2> <h2>Crab</h2>
<p>October 2021</p> <p>October 2021</p>
<a href="media/crab.png"><img src="media/crab_preview.png" alt="Crab" title="Click for full resolution"></a> <a href="/media/blender/crab.png"><img src="/media/blender/crab_preview.png" alt="Crab" title="Click for full resolution"></a>
<h2>Shork Wallpaper</h2> <h2>Shork Wallpaper</h2>
<p>This is a wallpaper for the game <a href="https://crispypin.itch.io/ld-48">Shork</a>.</p> <p>This is a wallpaper for the game <a href="https://crispypin.itch.io/ld-48">Shork</a>.</p>
<p>May 2021</p> <p>May 2021</p>
<a href="media/shork_wallpaper.png"><img src="media/shork_wallpaper_preview.png" alt="Shork Wallpaper" title="Click for full resolution"></a> <a href="/media/blender/shork_wallpaper.png"><img src="/media/blender/shork_wallpaper_preview.png" alt="Shork Wallpaper" title="Click for full resolution"></a>
</main> </main>
<footer> <footer>
<p>Copyright © 2022 - CrispyPin</p> <p>Copyright © 2022 - CrispyPin</p>
<div class="links"> <div class="links">
<a href="https://github.com/CrispyPin"><img src="/icons/github.png" alt="" width=32px></a> <a href="https://github.com/CrispyPin"><img src="/media/icons/github.png" alt="" width=32px></a>
<a href="https://crispypin.itch.io/"><img src="/icons/itch.io.svg" alt="" width=32px></a> <a href="https://crispypin.itch.io/"><img src="/media/icons/itch.io.svg" alt="" width=32px></a>
<a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/icons/youtube.png" alt="" width=32px></a> <a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/media/icons/youtube.png" alt="" width=32px></a>
</div> </div>
</footer> </footer>
</body> </body>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
<link rel="icon" type="image/x-icon" href="/icons/favicon.png"> <link rel="icon" type="image/x-icon" href="/media/icons/favicon.png">
<title>Fractals</title> <title>Fractals</title>
</head> </head>
<body> <body>
@ -15,10 +15,9 @@
<nav> <nav>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/blender/">Blender stuff</a></li>
<li><a href="/projects/">Projects</a></li> <li><a href="/projects/">Projects</a></li>
<li><a href="/blender/">Blender</a></li>
<li><a href="/fractals/">Fractals</a></li> <li><a href="/fractals/">Fractals</a></li>
<li><a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">Game of Life</a></li>
<li><a href="https://crispypin.itch.io/">Games</a></li> <li><a href="https://crispypin.itch.io/">Games</a></li>
</ul> </ul>
</nav> </nav>
@ -70,9 +69,9 @@
<footer> <footer>
<p>Copyright © 2022 - CrispyPin</p> <p>Copyright © 2022 - CrispyPin</p>
<div class="links"> <div class="links">
<a href="https://github.com/CrispyPin"><img src="/icons/github.png" alt="" width=32px></a> <a href="https://github.com/CrispyPin"><img src="/media/icons/github.png" alt="" width=32px></a>
<a href="https://crispypin.itch.io/"><img src="/icons/itch.io.svg" alt="" width=32px></a> <a href="https://crispypin.itch.io/"><img src="/media/icons/itch.io.svg" alt="" width=32px></a>
<a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/icons/youtube.png" alt="" width=32px></a> <a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/media/icons/youtube.png" alt="" width=32px></a>
</div> </div>
</footer> </footer>
</body> </body>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
<link rel="icon" type="image/x-icon" href="/icons/favicon.png"> <link rel="icon" type="image/x-icon" href="/media/icons/favicon.png">
<title>crispypin.cc</title> <title>crispypin.cc</title>
</head> </head>
<body> <body>
@ -15,10 +15,9 @@
<nav> <nav>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/blender/">Blender stuff</a></li>
<li><a href="/projects/">Projects</a></li> <li><a href="/projects/">Projects</a></li>
<li><a href="/blender/">Blender</a></li>
<li><a href="/fractals/">Fractals</a></li> <li><a href="/fractals/">Fractals</a></li>
<li><a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">Game of Life</a></li>
<li><a href="https://crispypin.itch.io/">Games</a></li> <li><a href="https://crispypin.itch.io/">Games</a></li>
</ul> </ul>
</nav> </nav>
@ -29,9 +28,9 @@
<footer> <footer>
<p>Copyright © 2022 - CrispyPin</p> <p>Copyright © 2022 - CrispyPin</p>
<div class="links"> <div class="links">
<a href="https://github.com/CrispyPin"><img src="/icons/github.png" alt="" width=32px></a> <a href="https://github.com/CrispyPin"><img src="/media/icons/github.png" alt="" width=32px></a>
<a href="https://crispypin.itch.io/"><img src="/icons/itch.io.svg" alt="" width=32px></a> <a href="https://crispypin.itch.io/"><img src="/media/icons/itch.io.svg" alt="" width=32px></a>
<a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/icons/youtube.png" alt="" width=32px></a> <a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/media/icons/youtube.png" alt="" width=32px></a>
</div> </div>
</footer> </footer>
</body> </body>

View file

Before

Width:  |  Height:  |  Size: 3.4 MiB

After

Width:  |  Height:  |  Size: 3.4 MiB

View file

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 222 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View file

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

View file

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 209 KiB

View file

Before

Width:  |  Height:  |  Size: 2.8 MiB

After

Width:  |  Height:  |  Size: 2.8 MiB

View file

Before

Width:  |  Height:  |  Size: 324 KiB

After

Width:  |  Height:  |  Size: 324 KiB

View file

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -0,0 +1,3 @@
#!/bin/env python3
find . -iname "*.png" -exec mogrify -crop '600x400+100+150' {} \;

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
<link rel="icon" type="image/x-icon" href="/icons/favicon.png"> <link rel="icon" type="image/x-icon" href="/media/icons/favicon.png">
<title>Projects</title> <title>Projects</title>
</head> </head>
<body> <body>
@ -15,10 +15,9 @@
<nav> <nav>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/blender/">Blender stuff</a></li>
<li><a href="/projects/">Projects</a></li> <li><a href="/projects/">Projects</a></li>
<li><a href="/blender/">Blender</a></li>
<li><a href="/fractals/">Fractals</a></li> <li><a href="/fractals/">Fractals</a></li>
<li><a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">Game of Life</a></li>
<li><a href="https://crispypin.itch.io/">Games</a></li> <li><a href="https://crispypin.itch.io/">Games</a></li>
</ul> </ul>
</nav> </nav>
@ -27,39 +26,64 @@
<b>**This page is a draft**</b> <b>**This page is a draft**</b>
<h1>Projects:</h1> <h1>Projects:</h1>
<ul> <ul>
<li><a href="#ovr-utils">OVR Utils</a></li>
<li><a href="#voxel-mesh">Voxel mesh optimiser</a></li> <li><a href="#voxel-mesh">Voxel mesh optimiser</a></li>
<li><a href="#ovr-utils">OVR Utils</a></li>
<li><a href="#voxel-raymarch">Raymarched voxel rendering</a></li> <li><a href="#voxel-raymarch">Raymarched voxel rendering</a></li>
<li><a href="#gol-wallpaper">Game of life wallpaper</a></li> <li><a href="#gol-wallpaper">Game of life wallpaper</a></li>
</ul> </ul>
<h2 class="title-link" id="voxel-mesh"><a href="#voxel-mesh">Voxel mesh optimiser and chunk system</a></h2>
<a href="https://github.com/CrispyPin/gd-voxel-rs">https://github.com/CrispyPin/gd-voxel-rs</a>
<p>
I am making a voxel engine in rust to learn rust and godot-rust as well as explore voxel systems.
</p>
<video src="/media/projects/voxel/demo.mp4" controls height="320">video not supported :(</video>
<p>Demo of fast terrain generation</p>
<video src="/media/projects/voxel/demo2.mp4" controls height="320">video not supported :(</video>
<p>Greedy mesh visualisation</p>
<h3>Greedy mesh algorithm</h3>
<p>The algorithm I'm using is one I made myself, inspired by a few others. I could not find an easy to understand explanation of how to do it but <a href="https://vercidium.com/blog/voxel-world-optimisations/">this artice</a> and <a href="https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/">this article</a> gave me somewhere to start</p>
<p>In this explanation I will assume basic knowledge of how meshes work and how to do the simplest form of culling for voxel meshes.</p>
<img src="/media/projects/voxel/fig1.png" alt="">
<p>fig. 1: example set of voxels, with the simplest form of mesh generation applied.</p>
<p>To start off, we can break down the problem to 2 dimensions by recognising that each direction along the axis as well as each layer along those directions is independent. We then only have to process a single 2D slice of the voxel domain at once.
</p>
<img src="/media/projects/voxel/fig2.png" alt="">
<p>fig. 2: The algorithm only needs to consider one layer and direction at a time, highlighted in green</p>
<p>The first step is to generate "strips", essentially create long quads that cover connected voxels. We can loop through the plane and keep track of at most one active strip. The active strip is the last one started and we grow it as more voxels under it are traversed. In the inner loop we check the voxel at that position as well as the one above. With this we can determine if we need to stop the current strip, start a new one or do nothing. If there is not currently an active strip, a new one should be created when the voxel below is filled and the one above is empty (an exposed surface). </p>
<img src="/media/projects/voxel/fig3.png" alt="">
<p>fig.3: Long strips of adjacent voxels can be merged into fewer, long quads.</p>
<h2 class="title-link" id="ovr-utils"><a href="#ovr-utils">OVR Utils</a></h2> <h2 class="title-link" id="ovr-utils"><a href="#ovr-utils">OVR Utils</a></h2>
<a href="https://github.com/CrispyPin/ovr-utils">https://github.com/CrispyPin/ovr-utils</a> <a href="https://github.com/CrispyPin/ovr-utils">https://github.com/CrispyPin/ovr-utils</a>
<p> <p>
OVR Utils is a VR overlay application that has some useful tools for SteamVR. It has been an ongoing project since may 2021. OVR Utils is a VR overlay application that has some useful tools for SteamVR. I have been working on it on and off since May 2021.
</p> </p>
<p> <p>
I wanted an overlay that could tell me the time without having to open the steam dashboard, and to see the battery levels of my controllers easily, but couldn't find one for free that also had linux support. So I decided to create my own, and also wrote down a long list of other useful tools. So far only a few of these have been implemented, such as the image overlay and the keyboard. I wanted an overlay that could tell me the time without having to open the steam dashboard, and to see the battery levels of my controllers easily, but couldn't find one for free that also had linux support. So I decided to create my own, and also wrote down a long list of other useful tools. So far only a few of these have been implemented, such as the image overlay and the keyboard.
</p> </p>
<h2 class="title-link" id="voxel-mesh"><a href="#voxel-mesh">Voxel mesh optimiser</a></h2>
<a href="https://github.com/CrispyPin/voxel-meshing">https://github.com/CrispyPin/voxel-meshing</a>
<p>
I really like voxels so I decided to try making an algorithm that generates a triangle mesh for a set of voxels. It tries to minimise the number of triangles by merging quads.
</p>
<h2 class="title-link" id="voxel-raymarch"><a href="#voxel-raymarch">Raymarched voxel rendering</a></h2> <h2 class="title-link" id="voxel-raymarch"><a href="#voxel-raymarch">Raymarched voxel rendering</a></h2>
<a href="https://github.com/CrispyPin/voxel-raymarcher">https://github.com/CrispyPin/voxel-raymarcher</a> <a href="https://github.com/CrispyPin/voxel-raymarcher">https://github.com/CrispyPin/voxel-raymarcher</a>
<img src="/media/projects/raymarched-voxels.png" alt="">
<h2 class="title-link" id="gol-wallpaper"><a href="#gol-wallpaper">Game of life wallpaper</a></h2> <h2 class="title-link" id="gol-wallpaper"><a href="#gol-wallpaper">Game of life wallpaper</a></h2>
<a href="https://github.com/CrispyPin/gol-wallpaper">https://github.com/CrispyPin/gol-wallpaper</a> <a href="https://github.com/CrispyPin/gol-wallpaper">https://github.com/CrispyPin/gol-wallpaper</a>
<p>See live here: <a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">gol.crispypin.cc</a></p>
</main> </main>
<footer> <footer>
<p>Copyright © 2022 - CrispyPin</p> <p>Copyright © 2022 - CrispyPin</p>
<div class="links"> <div class="links">
<a href="https://github.com/CrispyPin"><img src="/icons/github.png" alt="" width=32px></a> <a href="https://github.com/CrispyPin"><img src="/media/icons/github.png" alt="" width=32px></a>
<a href="https://crispypin.itch.io/"><img src="/icons/itch.io.svg" alt="" width=32px></a> <a href="https://crispypin.itch.io/"><img src="/media/icons/itch.io.svg" alt="" width=32px></a>
<a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/icons/youtube.png" alt="" width=32px></a> <a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/media/icons/youtube.png" alt="" width=32px></a>
</div> </div>
</footer> </footer>
</body> </body>

View file

@ -1,13 +1,13 @@
body { body {
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif; font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
background-color: #181818; background-color: #181818;
color: #dff; color: white;
display: -ms-grid; display: -ms-grid;
display: grid; display: grid;
-ms-grid-rows: 50px auto 1fr auto; -ms-grid-rows: 50px auto 1fr auto;
grid-template-rows: 50px auto 1fr auto; grid-template-rows: 50px auto 1fr auto;
-ms-grid-columns: 20px 1fr 20px; -ms-grid-columns: 80px 1fr 80px;
grid-template-columns: 20px 1fr 20px; grid-template-columns: 80px 1fr 80px;
margin: 0; margin: 0;
min-height: 100vh; min-height: 100vh;
} }
@ -18,11 +18,11 @@ a:visited {
.title-link a { .title-link a {
text-decoration: none; text-decoration: none;
color: #dff; color: white;
} }
.title-link a:visited { .title-link a:visited {
color: #dff; color: white;
} }
nav { nav {
@ -79,7 +79,8 @@ footer p {
} }
main { main {
padding: 0 20px; padding: 0 150px 40px;
margin: 5px 100px;
grid-column: 2 / -2; grid-column: 2 / -2;
background-color: #282828; background-color: #282828;
} }
@ -122,41 +123,6 @@ main {
margin: 2px; margin: 2px;
} }
.controlbar .slider {
-webkit-appearance: none;
-moz-appearance: none;
outline: none;
border-radius: 0;
height: 25px;
padding: 0;
margin: 2px;
cursor: pointer;
}
.controlbar .slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
border-radius: 1px;
width: 25px;
height: 25px;
background-color: #46c;
margin: 0;
border-radius: 0;
border: 1px solid #000;
}
.controlbar .slider::-moz-range-thumb {
/*TODO make this look the same as on chrome*/
-moz-appearance: none;
width: 25px;
height: 100%;
background-color: #46c;
margin: 0;
padding: 0;
border-radius: 0;
border: 1px solid #000;
}
.controlbar label { .controlbar label {
background-color: #181818; background-color: #181818;
color: #fb8; color: #fb8;
@ -164,38 +130,23 @@ main {
font-family: 'Consolas', 'Courier New', Courier, monospace; font-family: 'Consolas', 'Courier New', Courier, monospace;
} }
.controlbar .play-button { .clickable, nav li, .controlbar button, .controlbar input {
-ms-flex-preferred-size: 35%; border-radius: 2px;
flex-basis: 35%;
}
.clickable, nav li, .controlbar button, .controlbar input, .scroll-reset {
border-radius: 4px;
background-color: #4a4; background-color: #4a4;
} }
.clickable:hover, nav li:hover, .controlbar button:hover, .controlbar input:hover, .scroll-reset:hover { .clickable:hover, nav li:hover, .controlbar button:hover, .controlbar input:hover {
background-color: #4af; background-color: #4af;
} }
.clickable:active, nav li:active, .controlbar button:active, .controlbar input:active, .scroll-reset:active { .clickable:active, nav li:active, .controlbar button:active, .controlbar input:active {
background-color: #46c; background-color: #46c;
} }
.clickable:disabled, nav li:disabled, .controlbar button:disabled, .controlbar input:disabled, .scroll-reset:disabled { .clickable:disabled, nav li:disabled, .controlbar button:disabled, .controlbar input:disabled {
background-color: #8b8; background-color: #8b8;
text-decoration: line-through; text-decoration: line-through;
color: #000; color: #000;
cursor: default; cursor: default;
} }
.scroll-reset {
position: fixed;
right: 20px;
bottom: 20px;
width: 40px;
height: 40px;
background-image: url("uparrow.png");
cursor: pointer;
}
/*# sourceMappingURL=style.css.map */ /*# sourceMappingURL=style.css.map */

View file

@ -1,6 +1,6 @@
{ {
"version": 3, "version": 3,
"mappings": "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", "mappings": "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",
"sources": [ "sources": [
"style.scss" "style.scss"
], ],

View file

@ -6,7 +6,7 @@ $main-item-disabled: #8b8;
$main-bg: #181818; $main-bg: #181818;
$main-page-bg: #282828; $main-page-bg: #282828;
$main-color: #dff; $main-color: rgb(255, 255, 255);
body { body {
@ -17,11 +17,10 @@ body {
display: grid; display: grid;
grid-template-rows: 50px auto 1fr auto; grid-template-rows: 50px auto 1fr auto;
grid-template-columns: 20px 1fr 20px; grid-template-columns: 80px 1fr 80px;
margin: 0; margin: 0;
min-height: 100vh; min-height: 100vh;
} }
a:visited { a:visited {
@ -83,7 +82,8 @@ footer {
} }
main { main {
padding: 0 20px; padding: 0 150px 40px ;
margin: 5px 100px;
grid-column: 2 / -2; grid-column: 2 / -2;
background-color: $main-page-bg; background-color: $main-page-bg;
} }
@ -115,52 +115,16 @@ main {
flex-grow: 1; flex-grow: 1;
margin: 2px; margin: 2px;
} }
.slider {
-webkit-appearance: none;
-moz-appearance: none;
outline: none;
border-radius: 0;
height: 25px;
padding: 0;
margin: 2px;
cursor: pointer;
&::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
border-radius: 1px;
width: 25px;
height: 25px;
background-color: $main-item-active;
margin: 0;
border-radius: 0;
border: 1px solid #000;
}
&::-moz-range-thumb {
/*TODO make this look the same as on chrome*/
-moz-appearance: none;
width: 25px;
height: 100%;
background-color: $main-item-active;
margin: 0;
padding: 0;
border-radius: 0;
border: 1px solid #000;
}
}
label { label {
background-color: $main-bg; background-color: $main-bg;
color: #fb8; color: #fb8;
margin: 2px; margin: 2px;
font-family: 'Consolas', 'Courier New', Courier, monospace; font-family: 'Consolas', 'Courier New', Courier, monospace;
} }
.play-button {
flex-basis: 35%;
}
} }
.clickable { .clickable {
border-radius: 4px; border-radius: 2px;
background-color: $main-item; background-color: $main-item;
&:hover { &:hover {
background-color: $main-item-hover; background-color: $main-item-hover;
@ -176,13 +140,3 @@ main {
} }
} }
.scroll-reset {
@extend .clickable;
position: fixed;
right: 20px;
bottom: 20px;
width: 40px;
height: 40px;
background-image: url("uparrow.png");
cursor: pointer;
}

View file

@ -13,24 +13,25 @@
<h2>Alien Creatures animation</h2> <h2>Alien Creatures animation</h2>
<p>January 2022</p> <p>January 2022</p>
<p><a href="https://youtu.be/AfRJvExamX4">youtu.be/AfRJvExamX4</a></p> <p><a href="https://youtu.be/AfRJvExamX4">youtu.be/AfRJvExamX4</a></p>
<iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/AfRJvExamX4"></iframe> <!-- <iframe width="854" height="480" src="https://www.youtube-nocookie.com/embed/AfRJvExamX4"></iframe> -->
<video src="/media/blender/critters.mp4" controls height="480"></video>
<h2>Alien Tree</h2> <h2>Alien Tree</h2>
<p>January 2022</p> <p>January 2022</p>
<a href="media/alien_tree.png"><img src="media/alien_tree_preview.png" alt="Alien Tree" title="Click for full resolution"></a> <a href="/media/blender/alien_tree.png"><img src="/media/blender/alien_tree_preview.png" alt="Alien Tree" title="Click for full resolution"></a>
<h2>Decapod Alien</h2> <h2>Decapod Alien</h2>
<p>January 2022</p> <p>January 2022</p>
<a href="media/decapod_shock.png"><img src="media/decapod_shock_preview.png" alt="Decapod Alien" title="Click for full resolution"></a> <a href="/media/blender/decapod_shock.png"><img src="/media/blender/decapod_shock_preview.png" alt="Decapod Alien" title="Click for full resolution"></a>
<h2>Crab</h2> <h2>Crab</h2>
<p>October 2021</p> <p>October 2021</p>
<a href="media/crab.png"><img src="media/crab_preview.png" alt="Crab" title="Click for full resolution"></a> <a href="/media/blender/crab.png"><img src="/media/blender/crab_preview.png" alt="Crab" title="Click for full resolution"></a>
<h2>Shork Wallpaper</h2> <h2>Shork Wallpaper</h2>
<p>This is a wallpaper for the game <a href="https://crispypin.itch.io/ld-48">Shork</a>.</p> <p>This is a wallpaper for the game <a href="https://crispypin.itch.io/ld-48">Shork</a>.</p>
<p>May 2021</p> <p>May 2021</p>
<a href="media/shork_wallpaper.png"><img src="media/shork_wallpaper_preview.png" alt="Shork Wallpaper" title="Click for full resolution"></a> <a href="/media/blender/shork_wallpaper.png"><img src="/media/blender/shork_wallpaper_preview.png" alt="Shork Wallpaper" title="Click for full resolution"></a>
</main> </main>
<include footer.html/> <include footer.html/>
</body> </body>

View file

@ -11,31 +11,56 @@
<b>**This page is a draft**</b> <b>**This page is a draft**</b>
<h1>Projects:</h1> <h1>Projects:</h1>
<ul> <ul>
<li><a href="#ovr-utils">OVR Utils</a></li>
<li><a href="#voxel-mesh">Voxel mesh optimiser</a></li> <li><a href="#voxel-mesh">Voxel mesh optimiser</a></li>
<li><a href="#ovr-utils">OVR Utils</a></li>
<li><a href="#voxel-raymarch">Raymarched voxel rendering</a></li> <li><a href="#voxel-raymarch">Raymarched voxel rendering</a></li>
<li><a href="#gol-wallpaper">Game of life wallpaper</a></li> <li><a href="#gol-wallpaper">Game of life wallpaper</a></li>
</ul> </ul>
<h2 class="title-link" id="voxel-mesh"><a href="#voxel-mesh">Voxel mesh optimiser and chunk system</a></h2>
<a href="https://github.com/CrispyPin/gd-voxel-rs">https://github.com/CrispyPin/gd-voxel-rs</a>
<p>
I am making a voxel engine in rust to learn rust and godot-rust as well as explore voxel systems.
</p>
<video src="/media/projects/voxel/demo.mp4" controls height="320">video not supported :(</video>
<p>Demo of fast terrain generation</p>
<video src="/media/projects/voxel/demo2.mp4" controls height="320">video not supported :(</video>
<p>Greedy mesh visualisation</p>
<h3>Greedy mesh algorithm</h3>
<p>The algorithm I'm using is one I made myself, inspired by a few others. I could not find an easy to understand explanation of how to do it but <a href="https://vercidium.com/blog/voxel-world-optimisations/">this artice</a> and <a href="https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/">this article</a> gave me somewhere to start</p>
<p>In this explanation I will assume basic knowledge of how meshes work and how to do the simplest form of culling for voxel meshes.</p>
<img src="/media/projects/voxel/fig1.png" alt="">
<p>fig. 1: example set of voxels, with the simplest form of mesh generation applied.</p>
<p>To start off, we can break down the problem to 2 dimensions by recognising that each direction along the axis as well as each layer along those directions is independent. We then only have to process a single 2D slice of the voxel domain at once.
</p>
<img src="/media/projects/voxel/fig2.png" alt="">
<p>fig. 2: The algorithm only needs to consider one layer and direction at a time, highlighted in green</p>
<p>The first step is to generate "strips", essentially create long quads that cover connected voxels. We can loop through the plane and keep track of at most one active strip. The active strip is the last one started and we grow it as more voxels under it are traversed. In the inner loop we check the voxel at that position as well as the one above. With this we can determine if we need to stop the current strip, start a new one or do nothing. If there is not currently an active strip, a new one should be created when the voxel below is filled and the one above is empty (an exposed surface). </p>
<img src="/media/projects/voxel/fig3.png" alt="">
<p>fig.3: Long strips of adjacent voxels can be merged into fewer, long quads.</p>
<h2 class="title-link" id="ovr-utils"><a href="#ovr-utils">OVR Utils</a></h2> <h2 class="title-link" id="ovr-utils"><a href="#ovr-utils">OVR Utils</a></h2>
<a href="https://github.com/CrispyPin/ovr-utils">https://github.com/CrispyPin/ovr-utils</a> <a href="https://github.com/CrispyPin/ovr-utils">https://github.com/CrispyPin/ovr-utils</a>
<p> <p>
OVR Utils is a VR overlay application that has some useful tools for SteamVR. It has been an ongoing project since may 2021. OVR Utils is a VR overlay application that has some useful tools for SteamVR. I have been working on it on and off since May 2021.
</p> </p>
<p> <p>
I wanted an overlay that could tell me the time without having to open the steam dashboard, and to see the battery levels of my controllers easily, but couldn't find one for free that also had linux support. So I decided to create my own, and also wrote down a long list of other useful tools. So far only a few of these have been implemented, such as the image overlay and the keyboard. I wanted an overlay that could tell me the time without having to open the steam dashboard, and to see the battery levels of my controllers easily, but couldn't find one for free that also had linux support. So I decided to create my own, and also wrote down a long list of other useful tools. So far only a few of these have been implemented, such as the image overlay and the keyboard.
</p> </p>
<h2 class="title-link" id="voxel-mesh"><a href="#voxel-mesh">Voxel mesh optimiser</a></h2>
<a href="https://github.com/CrispyPin/voxel-meshing">https://github.com/CrispyPin/voxel-meshing</a>
<p>
I really like voxels so I decided to try making an algorithm that generates a triangle mesh for a set of voxels. It tries to minimise the number of triangles by merging quads.
</p>
<h2 class="title-link" id="voxel-raymarch"><a href="#voxel-raymarch">Raymarched voxel rendering</a></h2> <h2 class="title-link" id="voxel-raymarch"><a href="#voxel-raymarch">Raymarched voxel rendering</a></h2>
<a href="https://github.com/CrispyPin/voxel-raymarcher">https://github.com/CrispyPin/voxel-raymarcher</a> <a href="https://github.com/CrispyPin/voxel-raymarcher">https://github.com/CrispyPin/voxel-raymarcher</a>
<img src="/media/projects/raymarched-voxels.png" alt="">
<h2 class="title-link" id="gol-wallpaper"><a href="#gol-wallpaper">Game of life wallpaper</a></h2> <h2 class="title-link" id="gol-wallpaper"><a href="#gol-wallpaper">Game of life wallpaper</a></h2>
<a href="https://github.com/CrispyPin/gol-wallpaper">https://github.com/CrispyPin/gol-wallpaper</a> <a href="https://github.com/CrispyPin/gol-wallpaper">https://github.com/CrispyPin/gol-wallpaper</a>
<p>See live here: <a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">gol.crispypin.cc</a></p>
</main> </main>
<include footer.html/> <include footer.html/>

View file

@ -1,8 +1,8 @@
<footer> <footer>
<p>Copyright © 2022 - CrispyPin</p> <p>Copyright © 2022 - CrispyPin</p>
<div class="links"> <div class="links">
<a href="https://github.com/CrispyPin"><img src="/icons/github.png" alt="" width=32px></a> <a href="https://github.com/CrispyPin"><img src="/media/icons/github.png" alt="" width=32px></a>
<a href="https://crispypin.itch.io/"><img src="/icons/itch.io.svg" alt="" width=32px></a> <a href="https://crispypin.itch.io/"><img src="/media/icons/itch.io.svg" alt="" width=32px></a>
<a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/icons/youtube.png" alt="" width=32px></a> <a href="https://www.youtube.com/channel/UCFW1QTsbFgux8VrduCz_ckQ"><img src="/media/icons/youtube.png" alt="" width=32px></a>
</div> </div>
</footer> </footer>

View file

@ -2,4 +2,4 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
<link rel="icon" type="image/x-icon" href="/icons/favicon.png"> <link rel="icon" type="image/x-icon" href="/media/icons/favicon.png">

View file

@ -1,10 +1,9 @@
<nav> <nav>
<ul> <ul>
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/blender/">Blender stuff</a></li>
<li><a href="/projects/">Projects</a></li> <li><a href="/projects/">Projects</a></li>
<li><a href="/blender/">Blender</a></li>
<li><a href="/fractals/">Fractals</a></li> <li><a href="/fractals/">Fractals</a></li>
<li><a href="https://gol.crispypin.cc/?cellsize=5&time=2&margin=0&populate=true">Game of Life</a></li>
<li><a href="https://crispypin.itch.io/">Games</a></li> <li><a href="https://crispypin.itch.io/">Games</a></li>
</ul> </ul>
</nav> </nav>