From e18c7f6bced0817dca4c2159fb7032fc10f8571a Mon Sep 17 00:00:00 2001 From: Nexoniarz Date: Tue, 20 Oct 2026 17:38:04 +0200 Subject: [PATCH] 0.6: README and site for sculpting, materials, scripts and the Mac app (a macOS download); features regrouped; nothing wider than a phone on a phone Co-Authored-By: Claude Opus 5.5 --- CMakeLists.txt | 2 +- README.md | 43 +++++++++++++++++++++++++++++++++---------- docs/content.js | 10 +++++++--- docs/site.css | 4 ++++ 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 91e9c29..9953af9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.25) -project(Fry3DX VERSION 0.5.0 LANGUAGES C CXX) +project(Fry3DX VERSION 0.6.0 LANGUAGES C CXX) set(CMAKE_CXX_SCAN_FOR_MODULES OFF) # (no C++ modules; the scan can pick up a different clang than the NDK's) if(UNIX AND NOT APPLE) add_link_options(-rdynamic) # function names in crash reports diff --git a/README.md b/README.md index bd88509..4fc4f6e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

Fry3DX

Frying 3D Extreme — a 3D modeller that does what you'd expect.
-Pick a tool, click, drag. On Windows, Linux and your phone.

+Pick a tool, click, drag. On Windows, macOS, Linux and your phone.

Website · Download · @@ -28,10 +28,12 @@ From [Releases](https://github.com/Nexoniarz/Fry3DX/releases): | | | |---|---| | **Windows** (10 and 11, x64) | `Fry3DX-…-windows-x64.zip`: unpack, run `fry3dx.exe` | +| **macOS** (13.3 and newer, Apple silicon and Intel) | `Fry3DX-…-macos.zip`: unzip, open `Fry3DX.app` (the first time: right-click it, Open) | | **Linux** (any distro from 2022 on, x64) | `Fry3DX-…-linux-x64.AppImage`: make it executable, run it. Or the `.tar.gz` | | **Android** (8.0 and newer, 64-bit, Vulkan) | `Fry3DX-…-android-arm64.apk`: open it on the phone to install | -Needs a graphics card (or phone) with Vulkan; on a PC, OpenGL 4.6 works too. +Needs a graphics card (or phone) with Vulkan; on a PC, OpenGL 4.6 works too. On a Mac, Vulkan +comes inside the app (MoltenVK, on Metal), and OpenGL 4.1 is the fallback. ## What it does @@ -46,6 +48,8 @@ Five tabs along the top: **Model**, **Paint**, **Layout**, **Render**, **Print** - **Move, turn, scale** (W, E, R): the arrows turn with the object. Scale keeps the other side where it is; Shift scales both sides at once. Ctrl snaps. - **Round, smooth, mirror** any object, changeable any time, baked in when you like. +- **Materials**: gold, chrome, steel, wood, ceramic, rubber and more, or how metal and rough it + is; shown in the view (Solid too), exported with it. **Editing the shape** (Tab, or double-click) - Points, edges, faces (1, 2, 3). Extrude (X), inset (I), round edges (B), loop cut (C), knife (K), @@ -63,6 +67,11 @@ Five tabs along the top: **Model**, **Paint**, **Layout**, **Render**, **Print** - **Layers** with folders inside folders, drag and drop, hide and lock whole groups, and a button on every row that brings the camera to it. +**Sculpting** (the Paint tab's other side: Tab) +- Raise, puff out, smooth, flatten, pinch and grab the surface (1 to 6); Ctrl goes the other way, + Shift smooths, X does the same on both sides. A shape with too few points is made finer first, + keeping its shape. + **Painting** - Paint on the model or on its flat picture. **Paste any picture** (Ctrl+V): it goes on like a sticker that bends over edges and corners; Enter locks it as a layer, clicking it in the @@ -79,9 +88,19 @@ Five tabs along the top: **Model**, **Paint**, **Layout**, **Render**, **Print** sizes in millimetres, checks for holes and flipped faces with buttons that fix them, overhangs in red, weight and filament, measuring, lay flat on a face, save 3MF or STL. +**Scripts** (the Script panel, F5) +- Lua with a `fry` library: add shapes and change their settings, combine them, move points by a + formula, sculpt, set the materials and the sun. One Ctrl+Z takes back all a script did; an error + takes it back itself. Examples in Script > Examples; the **?** button lists every function. + It can't reach anything outside the scene (no files, no programs). + +**The look**: light or dark, or following the desktop (View > Appearance), in +[Niveus](https://github.com/Nexoniarz/niveus): keys that look like keys, fields set into the panel. + **Files** - `.fry`: Fry3DX's own file, everything in one, packed small. **Autosave** in the background, - offered back after a crash; Save / Don't save / Cancel when closing. + offered back after a crash; Save / Don't save / Cancel when closing. Drop a `.fry`, a script or + a picture on the window to open it. - **Export**: GLB, glTF, FBX (Blender, Unity, Unreal, Maya), OBJ, 3MF, STL, PLY. **On a phone or tablet**: everything bigger, the side panels when you want them, a bar of big @@ -94,8 +113,8 @@ F1 in the app lists every key. ## Build it yourself Everything it uses is downloaded while building; you need CMake 3.25+, Ninja, a C++20 compiler -(GCC 13+, Clang 17+ or clang-cl) and glslc (from shaderc or the Vulkan SDK). On NixOS, -`shell.nix` has it all. +(GCC 13+, Clang 17+, Xcode 15+ or clang-cl) and glslc (from shaderc or the Vulkan SDK). On NixOS, +`shell.nix` has it all; on a Mac, `brew install cmake ninja shaderc molten-vk`. ```sh git clone https://github.com/Nexoniarz/Fry3DX.git && cd Fry3DX @@ -109,9 +128,10 @@ cmake --build build/debug --target check # the tests (after | `debug`, `release` | for working on it | | `portable` | a Linux build to hand out: SDL and the C++ library inside the program | | `windows` | Windows, cross-built from Linux with clang-cl ([how](cmake/toolchains/windows-msvc.cmake)) | +| `macos-arm64`, `macos-x64` | `Fry3DX.app` for Apple silicon / Intel (both build on either Mac); `tools/package.py macos` joins them into one app | | `android` | the Android library; `android/build_apk.py` makes the APK ([how](android/build_apk.py)) | -`tools/package.py` packs builds into the downloads (zip, tar.gz, AppImage). Pushing a tag +`tools/package.py` packs builds into the downloads (zip, tar.gz, AppImage, the Mac app). Pushing a tag `v*` makes GitHub build all of them and put them in a release (`.github/workflows/build.yml`). ## What's where @@ -122,19 +142,22 @@ cmake --build build/debug --target check # the tests (after | `src/mesh.*`, `tools.cpp`, `cut.cpp` | polygon meshes and the edits on them (tested without a window) | | `src/boolean.cpp`, `modify.cpp` | combining shapes, thickness, joining flat faces | | `src/shapes.*` | the shape library and starter models | -| `src/scene.*`, `package.cpp` | objects, folders, the `.fry` file | +| `src/scene.*`, `package.cpp` | objects, folders, materials, the `.fry` file | +| `src/sculpt.*` | the sculpting brushes | +| `src/script.*` | scripts: Lua and the `fry` library; examples in `content/Fry3DX/scripts/` | | `src/export.cpp`, `print.cpp` | GLB/glTF/FBX/OBJ/3MF/STL/PLY, checks for printing | | `src/uv.cpp`, `sticker.cpp`, `image.cpp` | flat layouts, stickers, pictures | | `engine/` | window, Vulkan/OpenGL renderer, UI, files | | `android/`, `tools/`, `.github/` | builds and packages | | `docs/` | the website (GitHub Pages); its words are all in `docs/content.js` | -| `tests/` | `mesh_test` | +| `tests/` | `mesh_test`, `script_test` (every example script runs) | ## Coming -Sculpting, materials shown in the view, scripting; animation later. +Animation; textures for materials (wood grain, brushed metal); dynamic detail while sculpting. ## Licence [Apache License 2.0](LICENSE). Copyright 2026 Nexoniarz. -Sky pictures: Poly Haven, CC0. DejaVu fonts: their own free licence (`engine/fonts/LICENSE` in builds). +Sky pictures: Poly Haven, CC0. Fonts: Instrument Sans and JetBrains Mono (SIL Open Font +License), DejaVu (its own free licence). Lua: MIT. MoltenVK (in the Mac app): Apache 2.0. diff --git a/docs/content.js b/docs/content.js index 79d4421..4b95b1c 100644 --- a/docs/content.js +++ b/docs/content.js @@ -7,7 +7,7 @@ window.FRY = { authorUrl: "https://github.com/Nexoniarz", repo: "https://github.com/Nexoniarz/Fry3DX", tagline: "A 3D modeller that does what you'd expect.", - intro: "Pick a tool, click, drag. Plain words instead of jargon, a toolbox like GIMP's, and the useful stuff from the big modellers without the hundred menus around it. On Windows, Linux and your phone.", + intro: "Pick a tool, click, drag. Plain words instead of jargon, a toolbox like GIMP's, and the useful stuff from the big modellers without the hundred menus around it. On Windows, macOS, Linux and your phone.", releases: "https://github.com/Nexoniarz/Fry3DX/releases/latest", why: { @@ -21,7 +21,7 @@ window.FRY = { // The feature tabs, in order (each feature names its group). featureGroups: [ { id: "make", title: "Make" }, - { id: "paint", title: "Paint" }, + { id: "paint", title: "Paint & sculpt" }, { id: "print", title: "Render & print" }, { id: "work", title: "Work" }, ], @@ -33,6 +33,8 @@ window.FRY = { { group: "make", icon: "points", title: "Real shape editing", text: "Points, edges and faces. Extrude, inset, round edges, loop cut, knife, merge. Shift+click picks a whole loop, Shift+Ctrl+click a ring." }, { group: "make", icon: "hole", title: "Holes for screws and nuts", text: "Round, rectangle, triangle or hexagon. M2 to M8 screw and nut sizes ready, with a little room added so the print actually fits." }, { group: "make", icon: "copies", title: "Copies and thickness", text: "Copies in a row or round in a circle. Make a surface thick, or a solid hollow with walls exactly as thick as you need." }, + { group: "paint", icon: "sculpt", title: "Sculpt it like clay", text: "Raise, puff out, smooth, flatten, pinch and grab the surface with a brush, the same on both sides if you like. A shape with too few points is made finer first, keeping its shape." }, + { group: "print", icon: "sphere", title: "Materials you can see", text: "Gold, chrome, brushed steel, wood, ceramic, rubber and more, or set how metal and rough it is yourself. Shown in the view, not only in the render, and exported with it." }, { group: "paint", icon: "brush", title: "Paint and stickers", text: "Paint on the model or on its flat picture. Paste any picture (Ctrl+V) and it goes on like a sticker that bends over edges and corners." }, { group: "paint", icon: "layout", title: "Layout tab", text: "Move, turn and size the flat frames of the surface by hand. The paint follows, so the model looks the same." }, { group: "print", icon: "print", title: "Made for 3D printing", text: "Your printer's plate in the view, sizes in millimetres, checks for holes and flipped faces with fix buttons, overhangs shown red, weight and filament." }, @@ -96,6 +98,7 @@ fry.frame()`, downloads: [ { os: "Windows", what: "10 and 11, 64-bit", file: "windows-x64.zip", how: "Unpack it, run fry3dx.exe." }, + { os: "macOS", what: "13.3 and newer, Apple silicon and Intel", file: "macos.zip", how: "Unzip it, open Fry3DX.app. The first time: right-click it and choose Open." }, { os: "Linux", what: "any distro from 2022 on, 64-bit", file: "linux-x64.AppImage", how: "Make it executable, run it. A .tar.gz is there too." }, { os: "Android", what: "8.0 and newer, 64-bit, Vulkan", file: "android-arm64.apk", how: "Open it on the phone to install (allow installing from your browser or files app)." }, ], @@ -108,10 +111,11 @@ fry.frame()`, "cmake --preset release && cmake --build build/release", "build/release/bin/fry3dx", ], - needs: "Needs: CMake 3.25+, Ninja, a C++20 compiler (GCC 13+, Clang 17+) and glslc. Presets for Windows (cross-built) and Android are in the README.", + needs: "Needs: CMake 3.25+, Ninja, a C++20 compiler (GCC 13+, Clang 17+, Xcode 15+) and glslc. Presets for macOS, Windows (cross-built) and Android are in the README.", }, versions: [ + { v: "0.6", date: "2026-10-20", items: ["Sculpting, scripts and a Mac app", "Sculpting: raise, puff out, smooth, flatten, pinch and grab", "Materials shown in the view, sixteen to start from", "Scripts: Lua and a Script panel, with examples", "macOS: one app for Apple silicon and Intel", "A new look (Niveus): light and dark, following the desktop", "A new logo", "Drop a file on the window to open it"] }, { v: "0.5", date: "2026-10-19", items: ["Builds for Windows, Linux (AppImage) and Android", "A phone layout: big buttons, finger gestures, the phone's file picker", "Apache License 2.0"] }, { v: "0.4", date: "2026-10-19", items: ["Combine objects: add, subtract, overlap", "Draw shapes onto other objects", "Copies in a row or circle, thicken and hollow", "FBX export", "Folders and groups in Layers, go-to buttons", "Shift scales both sides, Shift+click loops and rings", "A crash screen of its own"] }, { v: "0.3", date: "2026-10-19", items: ["Stickers that bend over edges, picture layers", "Packed .fry files, autosave and recovery", "Layout tab, Print tab, 3MF / STL / OBJ / PLY / GLB export", "Hole tool: hexagon nut pockets, rectangles, outlines"] }, diff --git a/docs/site.css b/docs/site.css index 9dd582a..667921a 100644 --- a/docs/site.css +++ b/docs/site.css @@ -33,12 +33,16 @@ body { background: var(--nv-color-background); } @media (min-width: 64rem) { .hero { grid-template-columns: 5fr 7fr; gap: var(--nv-space-12); } } +.hero > * { min-inline-size: 0; } /* (a grid's items may shrink below their content) */ .hero__copy { display: flex; flex-direction: column; gap: var(--nv-space-5); align-items: flex-start; } +.hero__copy > .nv-badge { white-space: normal; max-inline-size: 100%; } /* (the newest version's line wraps on a phone) */ +/* Tab rows wider than a phone scroll sideways instead of widening the page. */ +.nv-nav-tabs { max-inline-size: 100%; overflow-x: auto; scrollbar-width: none; } .hero__title { font-size: clamp(var(--nv-font-size-4xl), 5.5vw, var(--nv-font-size-5xl)); } .hero__bed { padding: var(--nv-space-6); min-inline-size: 0; } .app-window { max-inline-size: 100%; }