From 4d8684b82dbf38e4088672a49503bc7319cb5ca5 Mon Sep 17 00:00:00 2001 From: gigamaster <1905497+gigamaster@users.noreply.github.com> Date: Tue, 5 Nov 2024 02:55:21 +0100 Subject: [PATCH] apps voxel tools --- app/asset/launcher.json | 22 +- app/asset/search.json | 22 +- app/web-app/vixel.webp | Bin 0 -> 37164 bytes app/web-app/vixel/.gitignore | 1 + app/web-app/vixel/LICENSE.md | 24 + app/web-app/vixel/README.md | 57 + app/web-app/vixel/index.html | 105 + app/web-app/vixel/media/material-000.png | Bin 0 -> 121678 bytes app/web-app/vixel/media/material-001.png | Bin 0 -> 128537 bytes app/web-app/vixel/media/material-002.png | Bin 0 -> 118783 bytes app/web-app/vixel/media/material-003.png | Bin 0 -> 120465 bytes app/web-app/vixel/media/screenshot-000.png | Bin 0 -> 1838761 bytes app/web-app/vixel/media/screenshot-001.png | Bin 0 -> 1917732 bytes app/web-app/vixel/package-lock.json | 4780 +++++++++++++++++++ app/web-app/vixel/package.json | 33 + app/web-app/vixel/src/camera.js | 84 + app/web-app/vixel/src/glsl/display.frag | 17 + app/web-app/vixel/src/glsl/display.vert | 10 + app/web-app/vixel/src/glsl/frag.frag | 13 + app/web-app/vixel/src/glsl/frag.vert | 7 + app/web-app/vixel/src/glsl/sample.frag | 346 ++ app/web-app/vixel/src/glsl/sample.vert | 7 + app/web-app/vixel/src/index.js | 486 ++ app/web-app/vixel/src/pingpong.js | 33 + app/web-app/vixel/src/render.js | 278 ++ app/web-app/vixel/src/stage.js | 228 + app/web-app/vixel/src/voxel-index.js | 47 + app/web-app/vixel/static/bundle.js | 1 + app/web-app/voxedit.webp | Bin 0 -> 52896 bytes app/web-app/voxedit/Mill.vengi | Bin 0 -> 19242 bytes app/web-app/voxedit/README.md | 17 + app/web-app/voxedit/coi-serviceworker.js | 146 + app/web-app/voxedit/font.ttf | Bin 0 -> 17112 bytes app/web-app/voxedit/index.html | 166 + app/web-app/voxedit/vengi-voxedit.html | 1 + app/web-app/voxedit/vengi-voxedit.js | 1 + app/web-app/voxedit/vengi-voxedit.wasm | Bin 0 -> 5495786 bytes app/web-app/voxedit/vengi-voxedit.worker.js | 1 + 38 files changed, 6929 insertions(+), 4 deletions(-) create mode 100644 app/web-app/vixel.webp create mode 100644 app/web-app/vixel/.gitignore create mode 100644 app/web-app/vixel/LICENSE.md create mode 100644 app/web-app/vixel/README.md create mode 100644 app/web-app/vixel/index.html create mode 100644 app/web-app/vixel/media/material-000.png create mode 100644 app/web-app/vixel/media/material-001.png create mode 100644 app/web-app/vixel/media/material-002.png create mode 100644 app/web-app/vixel/media/material-003.png create mode 100644 app/web-app/vixel/media/screenshot-000.png create mode 100644 app/web-app/vixel/media/screenshot-001.png create mode 100644 app/web-app/vixel/package-lock.json create mode 100644 app/web-app/vixel/package.json create mode 100644 app/web-app/vixel/src/camera.js create mode 100644 app/web-app/vixel/src/glsl/display.frag create mode 100644 app/web-app/vixel/src/glsl/display.vert create mode 100644 app/web-app/vixel/src/glsl/frag.frag create mode 100644 app/web-app/vixel/src/glsl/frag.vert create mode 100644 app/web-app/vixel/src/glsl/sample.frag create mode 100644 app/web-app/vixel/src/glsl/sample.vert create mode 100644 app/web-app/vixel/src/index.js create mode 100644 app/web-app/vixel/src/pingpong.js create mode 100644 app/web-app/vixel/src/render.js create mode 100644 app/web-app/vixel/src/stage.js create mode 100644 app/web-app/vixel/src/voxel-index.js create mode 100644 app/web-app/vixel/static/bundle.js create mode 100644 app/web-app/voxedit.webp create mode 100644 app/web-app/voxedit/Mill.vengi create mode 100644 app/web-app/voxedit/README.md create mode 100644 app/web-app/voxedit/coi-serviceworker.js create mode 100644 app/web-app/voxedit/font.ttf create mode 100644 app/web-app/voxedit/index.html create mode 100644 app/web-app/voxedit/vengi-voxedit.html create mode 100644 app/web-app/voxedit/vengi-voxedit.js create mode 100644 app/web-app/voxedit/vengi-voxedit.wasm create mode 100644 app/web-app/voxedit/vengi-voxedit.worker.js diff --git a/app/asset/launcher.json b/app/asset/launcher.json index cf1c6ac..c2f057d 100644 --- a/app/asset/launcher.json +++ b/app/asset/launcher.json @@ -111,6 +111,26 @@ }, { "id": 12, + "url": "https://gigamaster.github.io/codemo/web-app/vixel/", + "name": "Vixel", + "author": "Author", + "desc": "Web app A WebGL path tracing voxel renderer built with regl", + "cat": "3D graphics", + "icon": "icon-apps", + "image": "https://gigamaster.github.io/codemo/web-app/vixel.webp" + }, + { + "id": 13, + "url": "https://gigamaster.github.io/codemo/web-app/voxedit/", + "name": "Voxedit", + "author": "Author", + "desc": "Web app Voxel editor with animation support, a collection of voxel tools and volume formats", + "cat": "3D graphics", + "icon": "icon-apps", + "image": "https://gigamaster.github.io/codemo/web-app/voxedit.webp" + }, + { + "id": 14, "url": "https://gigamaster.github.io/codemo/web-app/voxel-builder/", "name": "Voxel-builder", "author": "Author", @@ -120,7 +140,7 @@ "image": "https://gigamaster.github.io/codemo/web-app/voxel-builder.webp" }, { - "id": 13, + "id": 15, "url": "https://gigamaster.github.io/codemo/web-app/vvvebjs/", "name": "Vvvebjs", "author": "Author", diff --git a/app/asset/search.json b/app/asset/search.json index af50ea3..08e21b2 100644 --- a/app/asset/search.json +++ b/app/asset/search.json @@ -98,14 +98,30 @@ }, { "id": 13, + "page_url": "https://gigamaster.github.io/codemo/web-app/vixel/", + "page_title": "vixel", + "page_desc": "Web app A WebGL path tracing voxel renderer built with regl", + "page_cat": "web-app", + "page_icon": "icon-apps" + }, + { + "id": 14, + "page_url": "https://gigamaster.github.io/codemo/web-app/voxedit/", + "page_title": "Voxedit", + "page_desc": "Web app Voxel editor, animation, tools and volume formats", + "page_cat": "web-app", + "page_icon": "icon-apps" + }, + { + "id": 15, "page_url": "https://gigamaster.github.io/codemo/web-app/voxel-builder/", - "page_title": "voxel-builder", + "page_title": "Voxel-builder", "page_desc": "Web app to create 3D voxel art, modeling art game graphics", "page_cat": "web-app", "page_icon": "icon-apps" }, { - "id": 14, + "id": 16, "page_url": "https://gigamaster.github.io/codemo/web-app/vvvebjs/", "page_title": "vvvebjs", "page_desc": "Drag and drop web page builder ", @@ -113,7 +129,7 @@ "page_icon": "icon-apps" }, { - "id": 15, + "id": 20, "page_url": "https://gigamaster.github.io/codemo/web-app/notification/", "page_title": "Notification", "page_desc": "Toast, inline, actionable, non-intrusive messages and updates", diff --git a/app/web-app/vixel.webp b/app/web-app/vixel.webp new file mode 100644 index 0000000000000000000000000000000000000000..49ed7e78e0374957fc5ea3823dc2f34e7e40c17a GIT binary patch literal 37164 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 diff --git a/app/web-app/vixel/README.md b/app/web-app/vixel/README.md new file mode 100644 index 0000000..1c5502a --- /dev/null +++ b/app/web-app/vixel/README.md @@ -0,0 +1,57 @@ +# Vixel + +A javascript & webgl voxel path tracer. See it live [here](https://wwwtyro.github.io/vixel-editor). + +Author: Rye Terrell + +![vixel screenshot](media/screenshot-000.png) + +![vixel screenshot](media/screenshot-001.png) + +## Materials + +- **Color** is the material's base color. + +- **Roughness** describes how randomly specular light is reflected from the surface. + +- **Metalness** describes how much of the light it reflects is diffusive. A purely metallic surface reflects zero light diffusively. + +- **Emission** is how much light the material emits. If this value is greater than zero, only the **color** component of the material is used. + +| Roughness | Metalness | Real world analogue | Rendered example | +| --------- | --------- | ------------------- | -------------------------------- | +| 0.0 | 0.0 | Smooth plastic | ![thing](media/material-000.png) | +| 1.0 | 0.0 | Chalk | ![thing](media/material-001.png) | +| 0.0 | 1.0 | Mirror | ![thing](media/material-002.png) | +| 1.0 | 0.05 | Unpolished metal | ![thing](media/material-003.png) | + +## Ground + +The **color**, **roughness**, and **metalness** properties can also be set for the ground plane, and are identical in meaning. + +## Sky + +- **Time** is simply the time of day on a 24-hour clock. The sun rises at 6:00 and sets at 18:00. + +- **Azimuth** is the direction of the sun _around_ the up/down axis. + +## Rendering + +- **Width** and **Height** define the resolution of your rendered image. + +- **DOF Distance** is how far into your scene the focus plane lies. + +- **DOF Magnitude** is how strong the DOF effect is. + +- **Samples/Frame** describes how many samples are taken per frame. `1` is one sample per pixel, per frame. If the interactivity of the editor is slow or + choppy, you can reduce this to improve your framerate. Similarly, if you want to converge the scene faster, you can increase it (though increasing it is only + effective until you're GPU bound). + +- **Take Screenshot** will download a screenshot. + +## Scene + +- **Copy URL** copies the current scene to the clipboard and updates the URL. For now, this is the only way to save and share your scene. Feel free to paste it + into a text file to save it longer term. Yes, there are absolutely plans to improve this. + +- **Clear Scene** clears the scene of all voxels save one. diff --git a/app/web-app/vixel/index.html b/app/web-app/vixel/index.html new file mode 100644 index 0000000..4e14f64 --- /dev/null +++ b/app/web-app/vixel/index.html @@ -0,0 +1,105 @@ + + + + + + + +
+ +
+
+
+
+
+ Controls +

+ + + + + + + +
Left mouse buttonPlace voxel
Shift + left mouse buttonRemove voxel
Control + left mouse buttonCopy voxel
Right mouse button + dragRotate camera
Mouse wheelZoom
H keyHide/show controls
+
+ More information +
+
help
+ + diff --git a/app/web-app/vixel/media/material-000.png b/app/web-app/vixel/media/material-000.png new file mode 100644 index 0000000000000000000000000000000000000000..4db0418cb41e9ebd335470f22fc88d3c9da69467 GIT binary patch literal 121678 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