AI prompts
base on Layer-based infinite procedural generation
<!-- THIS FILE IS AUTO-GENERATED FROM THE DOCS FRONT PAGE -->
# LayerProcGen
LayerProcGen is a framework that can be used to implement layer-based procedural generation that's **infinite**, **deterministic** and **contextual**. It works out of the box in Unity but can be used in any C#-compatible engine.
**[Documentation](https://runevision.github.io/LayerProcGen/) -
[GitHub](https://github.com/runevision/LayerProcGen) -
[EPC 2024 Talk](https://www.youtube.com/watch?v=4oJGkx0K8UQ) -
[Discussions](https://github.com/runevision/LayerProcGen/discussions)**
![](Documentation/ContextualTransition.gif)
The framework does not itself include any procedural generation algorithms. At its core, it's a way to keep track of dependencies between generation processes in a powerful spatial way.
> *Generating infinite worlds in chunks is a well-known concept since Minecraft.*
>
> *However, there is a widespread misconception that the chunk-based approach can’t be used deterministically with algorithms where the surroundings of a chunk would need to affect the chunk itself.*
>
> *LayerProcGen is designed to help with just that.*
## Features
**Contextual & deterministic**
A central purpose of the framework is to support contextual generation while staying deterministic. Procedural operations can be performed across chunk boundaries, producing seamless results for context-based operations such as blurring, point relaxation, or path-finding. This is possible by dividing the generation into multiple layers and keeping a strict separation between the input and output of each layer.
[Contextual Generation](https://runevision.github.io/LayerProcGen/md_ContextualGeneration.html)
**Plan at scale with intent**
Chunks in one layer can be orders of magnitude larger than chunks in another layer, and you can design them to operate at different levels of abstraction. You can use top-down planning to e.g. have road signs point to distant locations, unlock entire regions based on player progress, or have NPCs talk about things at the other side of the continent.
[Planning at Scale](https://runevision.github.io/LayerProcGen/md_PlanningAtScale.html)
**Bring your own algorithms**
You implement data layers by creating pairs of layer and chunk classes, and you can use whichever generation techniques you want there, as long as they are suitable for generation in chunks on the fly.
[Layers and Chunks](https://runevision.github.io/LayerProcGen/md_LayersAndChunks.html)
**Handles dependencies**
The framework makes it possible to build many different chunk-based procedural data layers with dependencies between each other. It automatically generates depended on chunks when they are needed by chunks in other layers, or by top level requirements.
[Layer Dependencies](https://runevision.github.io/LayerProcGen/md_LayerDependencies.html)
**Two-dimensional infinity**
The framework arranges chunks in either a horizontal or vertical plane. It can be used for 2D or 3D worlds, but 3D worlds can only extend infinitely in two dimensions, similar to Minecraft. The infinity is pseudo-infinite, as it is limited by the range of 32-bit integer numbers and the specifics of which calculations you use in your procedural processes.
**Multi-threaded**
The framework is multi-threaded based on Parallel.ForEach functionality in .Net. The degree of parallelism automatically scales to the number of available cores. When needed, actions can be enqueued to be performed on the main thread.
## Made with LayerProcGen
Released games:
- [The Cluster](https://runevision.com/multimedia/thecluster/) (free)
Games in development:
- [The Big Forest (working title)](https://runevision.com/multimedia/thebigforest/)
## Installation in Unity
LayerProcGen requires Unity 2019.4 or later.
Install LayerProcGen as a Unity Package Manager package from this Git URL:
`https://github.com/runevision/LayerProcGen.git#upm`
See [Unity's instructions here](https://docs.unity3d.com/Manual/upm-ui-giturl.html). If you already have Git installed, it's simply these steps:
- Open the Package Manager window via `Window > Package Manager`
- Click the `+` button and choose `Add package from git URL...`
- Paste the URL: `https://github.com/runevision/LayerProcGen.git#upm`
- Click `Add`
### Samples
You can also import samples for how to use the framework on the `Samples` tab of the package.
The *Simple Samples* have no special requirements.
The *Terrain Sample* requires:
- Burst package
- Input System package
- Player Settings: Enabling `Allow unsafe code`
- Player Settings: Setting `Active Input Handling` to `Both`
- Only tested with Builtin Render Pipeline
## Platform support
The functionality should in general work on all platforms.
The save-state functionality depends on the open-source FBPP (File Based Player Prefs) solution, which has been tested on Windows, MacOS, Linux, iOS and Android. Extending it to work on other platforms will likely be straightforward for someone porting a game for those platforms.
## License
LayerProcGen is licensed under the [Mozilla Public License, v. 2.0](https://mozilla.org/MPL/2.0/).
You can read a summary [here](https://choosealicense.com/licenses/mpl-2.0/). In short: If you make changes/improvements to LayerProcGen, you must share those for free with the community. But the rest of the source code for your game or application is not subject to this license, so there's nothing preventing you from creating proprietary and commercial games that use LayerProcGen.
", Assign "at most 3 tags" to the expected json: {"id":"10418","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"