{"id":13441520,"url":"https://github.com/curv3d/curv","last_synced_at":"2025-03-20T12:31:21.452Z","repository":{"id":43207719,"uuid":"91376236","full_name":"curv3d/curv","owner":"curv3d","description":"a language for making art using mathematics","archived":true,"fork":false,"pushed_at":"2023-09-27T17:32:09.000Z","size":20547,"stargazers_count":1135,"open_issues_count":31,"forks_count":73,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-08-01T03:34:47.827Z","etag":null,"topics":["3d","creative-coding","csg","function-representation","functional-language","generative-art","language","signed-distance-field","solid-modeling"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/curv3d.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-05-15T19:22:34.000Z","updated_at":"2024-07-31T12:16:00.000Z","dependencies_parsed_at":"2022-08-25T08:40:15.913Z","dependency_job_id":"84afa378-6b53-44bd-8e27-08fb3eb26f1d","html_url":"https://github.com/curv3d/curv","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/curv3d%2Fcurv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/curv3d%2Fcurv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/curv3d%2Fcurv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/curv3d%2Fcurv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/curv3d","download_url":"https://codeload.github.com/curv3d/curv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221760023,"owners_count":16876338,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","creative-coding","csg","function-representation","functional-language","generative-art","language","signed-distance-field","solid-modeling"],"created_at":"2024-07-31T03:01:35.025Z","updated_at":"2025-03-20T12:31:21.446Z","avatar_url":"https://github.com/curv3d.png","language":"C++","funding_links":[],"categories":["C++","3d"],"sub_categories":[],"readme":"=================================================\nCurv: a language for making art using mathematics\n=================================================\n\nBy Doug Moen \u003cdoug@moens.org\u003e\n\n*Note: This repository has migrated to \u003chttps://codeberg.org/doug-moen/curv\u003e.*\n\n|twistor| |shreks_donut|\n\n.. |twistor| image:: docs/images/torus.png\n.. |shreks_donut| image:: docs/images/shreks_donut.png\n\nCurv is a programming language for creating art using mathematics.\nIt's a 2D and 3D geometric modelling tool that supports full colour,\nanimation and 3D printing.\n\nFeatures:\n\n* Curv is a simple, powerful, dynamically typed, pure functional\n  programming language.\n* Curv is easy to use for beginners. It has a standard library of\n  predefined geometric shapes, plus operators for transforming and\n  combining shapes. These can be plugged together like Lego to make 2D and 3D\n  models.\n* Coloured shapes are represented using Function Representation (F-Rep).\n  They can be infinitely detailed, infinitely large, and any shape or colour\n  pattern that can be described using mathematics can be represented exactly.\n* Curv exposes the full power of F-Rep programming to experts.\n  The standard geometry library is written entirely in Curv.\n  Many of the demos seen on shadertoy.com can be reproduced in Curv,\n  using shorter, simpler programs. Experts can package techniques used on\n  shadertoy as high level operations for use by beginners.\n* Rendering is GPU accelerated. Curv programs are compiled into fragment\n  shaders which are executed on the GPU.\n* Curv can export meshes to STL, OBJ and X3D files for 3D printing.\n  The X3D format supports full colour 3D printing (on Shapeways.com, at least).\n  These meshes are defect free: watertight, manifold, with no self\n  intersections, degenerate triangles, or flipped triangles.\n\nGetting Started\n===============\n* There are two Curv web interfaces, both in the early prototype\n  stage as of Nov 2021 (limited functionality):\n  \n  * https://curv.leefallat.ca/\n  * https://cadhub.xyz then click on Curv.\n\n* For the full experience, build and install the software\n  (Windows, MacOS, Linux), see `\u003cBUILD.md\u003e`_.\n* On Linux, you can use a prebuilt appimage -- click on the latest release\n  in the Curv github page and scroll to the bottom.\n* The documentation is here: `\u003cdocs/README.rst\u003e`_.\n* To contribute, see `\u003cCONTRIBUTING.md\u003e`_.\n\nCommunity\n=========\nThere is a high volume chat room.\n\n* On matrix: https://app.element.io/#/room/!BbbouYwtinZcRySkDA:matrix.org\n* And linked via 2-way bridge to the Curv Discord channel maintained\n  by https://cadhub.xyz (the link is at the bottom of the CadHub home page).\n* This earlier Discord channel has a ton of interesting discussion history\n  but is now inactive: `\u003chttps://discord.gg/ZSPXaMNWfW\u003e`_.\n\nThere is a Github Discussions page:\n`\u003chttps://github.com/curv3d/curv/discussions\u003e`_.\n\nThere is a low-volume mailing list: ``curv@googlegroups.com``,\nconnected to a web forum: `\u003chttps://groups.google.com/d/forum/curv\u003e`_.\nYou can join the mailing list using your Google account (or you'll be prompted\nto create an account).\n\nHardware and OS Requirements\n============================\nLinux, MacOS (intel \u0026 apple silicon) and Windows (native \u0026 WSL) are supported.\n\nIn order to export meshes (STL files, etc) using the fast ``-Ojit`` method,\nyou need to have a C++ compiler installed (GCC or Clang), and you need\nthe ``glm`` C++ math library installed. These things will already be installed\nif you have built Curv from scratch using the build instructions. Otherwise,\nif you are using a prebuilt binary, you may want to install these things.\nEither way, see `\u003cBUILD.md\u003e`_.\n\nCurv uses OpenGL 3.3.\nThe recommended configuration is a GPU made by Intel, AMD or Nvidia,\nusing a known working GPU driver (see below).\n\n* On Linux, the GPU needs to be modern enough to be supported by the latest\n  driver version from the GPU vendor. Any GPU from 2012 or later will work.\n  Some older GPUs may work: check the list of supported hardware for the driver.\n* On Macintosh, I recommend the current release of MacOS, or 1 or 2 releases\n  earlier. More precisely, Curv works on any version of MacOS supported by\n  `Homebrew \u003chttps://brew.sh/\u003e`_. (For older systems, you would need to\n  resurrect an older version of Homebrew. Also, on a pre-Metal system\n  (hardware from 2011 or earlier), some Curv programs may not work correctly\n  due to the GPU.)\n* On Windows, you can use `MSYS2 \u003chttps://www.msys2.org/\u003e`_ to build and run a\n  native executable; see `\u003cWINDOWS.md\u003e`_. Alternatively, you can use\n  `Windows Subystem for Linux (WSL) \u003chttps://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux\u003e`_\n  for building and running a Linux executable.\n* Raspberry Pi isn't supported yet.\n\n  * Raspberry Pi 4 support is planned once the migration from OpenGL to WebGPU\n    is done. Then Curv will be using Vulkan on Raspberry PI 4.\n  * Raspberry Pi 3 and earlier won't be supported, as the GPU is not powerful\n    enough.\n\n* On Linux, you have 3 choices:\n\n  * An Nvidia GPU, with the Nvidia closed source driver.\n    Any GPU supported by the latest Nvidia driver will work with Curv.\n\n    The open source Nouveau driver is not supported; it is too slow and buggy.\n    Curv runs too slow, with visual glitches. See `issue #78`_.\n\n  * An Intel GPU, using the Intel supplied open source driver (based on Mesa).\n    Any GPU supported by the latest Intel driver will work with Curv\n    (this means: Intel HD Graphics or later).\n\n  * An AMD GPU with the open source Mesa driver, version 19.x or later.\n    The AMDGPU-PRO (closed source) driver should work, but I have no testing\n    reports for it.\n\n    Mesa version 18.x or earlier has a bug on AMD (`issue #30`_) which prevents\n    some Curv programs from running.\n\n* If Curv is invoked within a VNC session, then it might not have direct\n  access to GPU hardware (a slow software renderer is used instead of the GPU).\n  Curv requires a GPU accelerated VNC server.\n  Try `TurboVNC`_ combined with `VirtualGL`_.\n* If Curv is run inside a VM, then it might not have direct access to the GPU.\n  You need to ensure that the VM is GPU accelerated.\n* You can run Curv from the command line on a headless Linux server, to export\n  images and meshes. For image export, you may need to configure a dummy X\n  server: see `\u003chttps://github.com/curv3d/curv/discussions/131\u003e`_.\n\nCurv is not as GPU intensive as AAA video games. Integrated graphics will\nwork fine for most stuff. But you can definitely write Curv code that will\nbenefit from expensive discrete graphics.\n\nWhy is Curv so picky about GPU drivers and hardware, when [some old 3D\nsoftware] runs just fine? The answer is that old 3D software relies primarily\non triangle meshes for representing and rendering 3D shapes, whereas Curv\nuses signed distance fields to represent shapes. Signed distance fields are\na powerful, hot new technology that is only made practical by modern GPUs.\nCurv uses shader programs to render shapes, and uses larger and more complex\nshader programs than [some old 3D software]. This places a heavy and atypical\nload on the GPU driver and hardware, which old hardware and old, outdated\ndriver software may not be prepared to deal with.\n\n.. _`TurboVNC`: https://turbovnc.org/About/Introduction\n.. _`VirtualGL`: https://virtualgl.org/About/Introduction\n.. _`issue #78`: https://github.com/curv3d/curv/issues/78\n.. _`issue #88`: https://github.com/curv3d/curv/issues/88\n.. _`issue #30`: https://github.com/curv3d/curv/issues/30\n.. _`The open source AMD driver has a bug`: https://bugs.freedesktop.org/show_bug.cgi?id=105371\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcurv3d%2Fcurv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcurv3d%2Fcurv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcurv3d%2Fcurv/lists"}