anyweez / glimpse Goto Github PK
View Code? Open in Web Editor NEWProcedural world generator
Procedural world generator
New worlds use a variety of important variables which are not currently exposed to users. These should be configurable.
Examples:
There will likely be others in the future. Note: at this point there's no user-exposed "seed" that will allow you to generate the same map deterministically, and its unclear that we'll ever include this.
World, Cell, and Population should all be pretty testable. There are also a lot of crazy ass dynamics that I'd like to have a constant eye on.
Similar to problem described here: https://azgaar.wordpress.com/2017/04/03/coastline/
Interpolation on coastlines looks pretty good and I want to keep it, but the fill is still being performed on pre-interpolation polygons which leads to some visual artifacts.
The post above describes one way to fix this with svg masks, but my first attempt will be to try to render landforms as single complex polygons. I expect the challenge will be rendering lakes but I think this will be a simpler solution overall if I can make it work.
Either Angular 2, React, or Ampersand.
The old site linked from github (https://homeworld.surge.sh) is no longer relevant, and I'd like for there to be a project page of some sort.
Goals:
Basic components exist as of b8e4776 but I need to do some testing in the core application. Right now they're independent.
Current plan for population spawning is pretty rudimentary but I think it'll be fine over time w/ law of large numbers.
Forests and/or hilly areas can look like a mess when icons start overlapping, and I think some small visual tweaks like removing partial transparency will help
I'm seeing some lower quality (unpronounceable in english) names come through, as well as some that clearly lack context of where the city is ("Gully Harbor" isn't anywhere near water).
Identify areas that are desirable for humans (or potentially another species). A subset of these locations should have towns, and towns should have names.
This code is very functional w/ pretty explicit types and I'd benefit from some type checking.
Support more realistic terrain generation for larger worlds, as well as for identifying realistic locations for forests (#13) and potentially future formations like deserts.
Initial implementation will likely use latitude (assumes the world has a consistent equator) and elevation to determine a temperature distribution for a cell.
@anyweez to elaborate
Humans should have an easier time surviving in certain biomes.
We need a quantitive way to assess the quality of glimpse worlds to verify whether a set of changes are net positive or negative. This may change over time.
Train a system that can provide a quality score for a given map. This score is likely to be more about aesthetics than anything else, so it may resemble an image classification problem (example to follow). The general implementation of testing the quality of a particular branch would be:
Need to figure this out for rendering the printed version.
Deep water vs water, snow-capped mountains vs standard mountains, and a few different colors of grass.
One possibility:
http://devmag.org.za/2009/05/03/poisson-disk-sampling/
Right now I'm just using a random distribution by biome type which looks pretty dull, especially when most of the map is forest.
60fps rendering is already causing a lot of extra work without any sort of population spawning (#2). If things get any more complicated we'll need to parallelize; it's honestly probably a good idea anyway once we start migrating to have a more complex UI.
Forests should be biome-aware. There are two types of forest biomes, which should have denser tree growth.
Look into Poisson disk sampling for this use case:
http://devmag.org.za/2009/05/03/poisson-disk-sampling/
Currently these two can run in either order, but this means that its possible to have a forest-filled lake. This is happening because the lake plugin is modifying the celltype cellprops, which it really shouldn't be doing.
Need to figure out how to resolve this, though I think the best solution will be to merge lake gen into the terrain plugin where cp_celltype
is being set already.
Put together one command to generate and render X worlds. Performance doesn't matter at this point.
The language server is responsible for providing names for entities in any gen.py
instances. Since each language has to have a training period, the idea is that this will allow the language server to be long-running and avoid training periods.
Since the latest refactor, tectonic plates no longer affect cell elevation. Simplex noise is the primary contributor to elevation, which lacks the "continental" look of the previous plate-based approach.
For reference, here are the Earth's tectonic plates:
https://en.wikipedia.org/wiki/Plate_tectonics#/media/File:Plates_tect2_en.svg
There are two specific properties of plate tectonics that I want to try out:
Any named entity should have it's name rendered. Optional but nice touch would be to approximate city size so bigger cities can have bigger text.
Need to do a quality pass on forest, mountain, and hill iconography. Supersedes #37.
Distributions are decent and may not need adjustments but the icons themselves aren't good enough yet.
Need to figure out how to render the depth of lakes -- oceans use WaterlineHeight
, but this doesn't work for lakes which form at elevations above sea level.
I think each lake may need its own calculated waterline height, and depth can be determined relative to that.
Once we've got towns (#15), we should add roads between them.
At this point, I'm thinking properties of towns will be derived based on the desirability / survivability of a place and that roads will inherit that, vs roads having any direct impact on the towns themselves. I think it should still "look right" in the simulation (bigger cities will have more roads, but not because the roads cause the growth of the city).
Right now rivers are not being rendered at all. Step 1 = make sure they're being calculated correctly, Step 2 = improve render rendering from previous iterations.
Following up on #32 there are still some improvements I can make to improve rendering quality of rivers.
Useful notes:
https://azgaar.wordpress.com/2017/05/27/confluences/
https://azgaar.wordpress.com/2017/05/08/river-systems/
The forest plugin seems to be adding forests to oceans, sometimes multiple times. Likely cause is we're not filtering out water cells as starting positions for forest generation.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.