More procedural colour palette experimentation in the procgen side-project (C++/OpenGL/GLSL) - Struggling to settle on a palette
https://redd.it/1atudhj
@proceduralgeneration
Techniques for procedurally filling box with rooms? Procedurally generated castle?
https://redd.it/1ath9yl
@proceduralgeneration
_os2f.OpenSimplex2F_noise2_XBeforeY
)
"""OS2F OpenSimplex2F_noise2_XBeforeY"""
OpenSimplex2F_noise2_XBeforeY.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise2_XBeforeY.restype = ctypes.c_double
OpenSimplex2F_noise3_Classic: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise3_Classic
)
"""OS2F OpenSimplex2F_noise3_Classic"""
OpenSimplex2F_noise3_Classic.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise3_Classic.restype = ctypes.c_double
OpenSimplex2F_noise3_XYBeforeZ: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise3_XYBeforeZ
)
"""OS2F OpenSimplex2F_noise3_XYBeforeZ"""
OpenSimplex2F_noise3_XYBeforeZ.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise3_XYBeforeZ.restype = ctypes.c_double
OpenSimplex2F_noise3_XZBeforeY: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise3_XZBeforeY
)
"""OS2F OpenSimplex2F_noise3_XZBeforeY"""
OpenSimplex2F_noise3_XZBeforeY.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise3_XZBeforeY.restype = ctypes.c_double
OpenSimplex2F_noise4_Classic: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise4_Classic
)
"""OS2F OpenSimplex2F_noise4_Classic"""
OpenSimplex2F_noise4_Classic.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise3_Classic.restype = ctypes.c_double
OpenSimplex2F_noise4_XYBeforeZW: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise4_XYBeforeZW
)
"""OS2F OpenSimplex2F_noise4_XYBeforeZW"""
OpenSimplex2F_noise4_XYBeforeZW.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise4_XYBeforeZW.restype = ctypes.c_double
OpenSimplex2F_noise4_XZBeforeYW: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise4_XZBeforeYW
)
"""OS2F OpenSimplex2F_noise4_XZBeforeYW"""
OpenSimplex2F_noise4_XZBeforeYW.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise4_XZBeforeYW.restype = ctypes.c_double
OpenSimplex2F_noise4_XYZBeforeW: ctypes._NamedFuncPointer = (
_os2f.OpenSimplex2F_noise4_XYZBeforeW
)
"""OS2F OpenSimplex2F_noise4_XYZBeforeW"""
OpenSimplex2F_noise4_XYZBeforeW.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise4_XYZBeforeW.restype = ctypes.c_double
```
https://redd.it/1art4xs
@proceduralgeneration
My first game dev project, Star Citizen Like Planet Tech (procedural planet creating toolkit)
https://redd.it/1arth4u
@proceduralgeneration
Procedurally Generated Worlds with ASCII Art in CultGame
https://www.youtube.com/watch?v=lmK2DL4LsqQ
https://redd.it/1arnjvo
@proceduralgeneration
[WIP] Method for infinite terrain height maps with erosion (no simulation, GAN, etc)
https://redd.it/1aqyfwf
@proceduralgeneration
For my first game, first shot at procedural generation, beyond excited so far.
https://redd.it/1aqtjp8
@proceduralgeneration
My friend spent months making this video essay on the history of procedural games and what makes some of them amazing… and others really bland.
https://youtu.be/yL1hwWPsKoM?si=6yq-tCi-qV-gLGYY
https://redd.it/1aoha99
@proceduralgeneration
My friend spent literal months making this video essay on "Why Procedural Games are Bland" and it's honestly fascinating
https://youtu.be/yL1hwWPsKoM?si=6yq-tCi-qV-gLGYY
https://redd.it/1ao8j3s
@proceduralgeneration
Procedural generation of place names with pronunciations using Malcov chain. Do the results look natural?
https://redd.it/1ancu7f
@proceduralgeneration
Spent a bit more time on my Outrun track generator, no textures or actual geometry yet.
https://redd.it/1amehwr
@proceduralgeneration
Dungeon layout randomizer I made a long time before I found out about this sub - never used
https://redd.it/1am76s9
@proceduralgeneration
Annotated source code for the classic Archimedes game Lander by David Braben. Including an explanation of the terrain generator
https://lander.bbcelite.com/
https://redd.it/1attxfz
@proceduralgeneration
Advice on Procedural Generation Methods
I've been tinkering around with procedural generation for my game for the last few months on and off in my free time. My basic goal was to have a map of n islands separated by sea. Currently, I've got a fairly trivial setup:
1. Generate a heightmap using simplex noise.
2. Apply a shaping function (square bump) to the heightmap to give the shape of an island in a given area.
3. Set the cells based on their resulting altitudes.
4. Repeat this process in different areas of the map.
The issues I'm running into involve improving the generation with more advanced features, some of which are as follows:
Biomes (and biome blending) - with my current setup I'm not sure how to best achieve this. I can add in another simplex map but applying that (even with low octaves) may look somewhat unnatural when spread across the whole world (cutting through different islands) etc.
Feature areas (related to biomes) - How can I identify (and even place) things like lakes, rivers, and areas with heightened difficulty? Anything that may have distinct features/properties (different fish types in lakes/rivers, harder enemies in certain areas, etc.)
If anyone has any tips on how I can improve upon my current approach, or if I should switch over to something like Voronoi or a different combination of algorithms, I would appreciate any help from those who are more experienced than me in this space. Thank in advance.
​
https://redd.it/1at27rp
@proceduralgeneration
I made a Python wrapper around OpenSimplex2F using ctypes
```python
# -*- coding: utf-8 -*-
"""Python OpenSimplex2 wrapper"""
from __future__ import annotations
import ctypes
import os.path
from typing import TYPE_CHECKING, TypeAlias
__all__: list[str] = [
"Grad2",
"Grad3",
"Grad4",
"LatticePoint2D",
"LatticePoint3D",
"LatticePoint4D",
"OpenSimplex2F_context",
"OpenSimplex2F_shutdown",
"OpenSimplex2F_free",
"OpenSimplex2F",
"OpenSimplex2F_noise2",
"OpenSimplex2F_noise2_XBeforeY",
"OpenSimplex2F_noise3_Classic",
"OpenSimplex2F_noise3_XYBeforeZ",
"OpenSimplex2F_noise3_XZBeforeY",
"OpenSimplex2F_noise4_Classic",
"OpenSimplex2F_noise4_XYBeforeZW",
"OpenSimplex2F_noise4_XZBeforeYW",
"OpenSimplex2F_noise4_XYZBeforeW",
]
if TYPE_CHECKING:
Fields: TypeAlias = list[
tuple[str, type[ctypes._CData]] # pylint: disable=protected-access
]
_os2f: ctypes.CDLL = ctypes.CDLL(
os.path.abspath("../lib/OpenSimplex2/OpenSimplex2F.so")
)
class Grad2(ctypes.Structure):
"""OS2F Grad2"""
_fields_: Fields = [
("dx", ctypes.c_double),
("dy", ctypes.c_double),
]
class Grad3(ctypes.Structure):
"""OS2F Grad3"""
_fields_: Fields = [
("dx", ctypes.c_double),
("dy", ctypes.c_double),
("dz", ctypes.c_double),
]
class Grad4(ctypes.Structure):
"""OS2F Grad4"""
_fields_: Fields = [
("dx", ctypes.c_double),
("dy", ctypes.c_double),
("dz", ctypes.c_double),
("dw", ctypes.c_double),
]
class LatticePoint2D(ctypes.Structure):
"""OS2F LatticePoint2D"""
_fields_: Fields = [
("xsv", ctypes.c_int),
("ysv", ctypes.c_int),
("dx", ctypes.c_double),
("dy", ctypes.c_double),
]
class LatticePoint3D(ctypes.Structure):
"""OS2F LatticePoint3D"""
_fields_: Fields
LatticePoint3D._fields_ = [ # pylint: disable=protected-access
("dxr", ctypes.c_double),
("dyr", ctypes.c_double),
("dzr", ctypes.c_double),
("xrv", ctypes.c_int),
("yrv", ctypes.c_int),
("zrv", ctypes.c_int),
("nextOnFailure", ctypes.POINTER(LatticePoint3D)),
("nextOnSuccess", ctypes.POINTER(LatticePoint3D)),
]
class LatticePoint4D(ctypes.Structure):
"""OS2F LatticePoint4D"""
_fields_: Fields = [
("xsv", ctypes.c_int),
("ysv", ctypes.c_int),
("zsv", ctypes.c_int),
("wsv", ctypes.c_int),
("dx", ctypes.c_double),
("dy", ctypes.c_double),
("dz", ctypes.c_double),
("dw", ctypes.c_double),
("xsi", ctypes.c_double),
("ysi", ctypes.c_double),
("zsi", ctypes.c_double),
("wsi", ctypes.c_double),
("ssiDelta", ctypes.c_double),
]
class OpenSimplex2F_context(ctypes.Structure):
"""OS2F OpenSimplex2F_context"""
_fields_: Fields = [
("perm", ctypes.POINTER(ctypes.c_int16)),
("permGrad2", ctypes.POINTER(Grad2)),
("permGrad3", ctypes.POINTER(Grad3)),
("permGrad4", ctypes.POINTER(Grad4)),
]
OpenSimplex2F_shutdown: ctypes._NamedFuncPointer = _os2f.OpenSimplex2F_shutdown
"""OS2F OpenSimplex2F_shutdown"""
OpenSimplex2F_shutdown.argtypes = []
OpenSimplex2F_shutdown.restype = None
OpenSimplex2F_free: ctypes._NamedFuncPointer = _os2f.OpenSimplex2F_free
"""OS2F OpenSimplex2F_free"""
OpenSimplex2F_free.argtypes = [ctypes.POINTER(OpenSimplex2F_context)]
OpenSimplex2F_free.restype = None
OpenSimplex2F: ctypes._NamedFuncPointer = _os2f.OpenSimplex2F
"""OS2F OpenSimplex2F"""
OpenSimplex2F.argtypes = [
ctypes.c_int64,
ctypes.POINTER(ctypes.POINTER(OpenSimplex2F_context)),
]
OpenSimplex2F.restype = ctypes.c_int
OpenSimplex2F_noise2: ctypes._NamedFuncPointer = _os2f.OpenSimplex2F_noise2
"""OS2F OpenSimplex2F_noise2"""
OpenSimplex2F_noise2.argtypes = [
ctypes.POINTER(OpenSimplex2F_context),
ctypes.c_double,
ctypes.c_double,
]
OpenSimplex2F_noise2.restype = ctypes.c_double
OpenSimplex2F_noise2_XBeforeY: ctypes._NamedFuncPointer = (
Wanderers (2014)
https://www.behance.net/gallery/21605971/Neri-Oxman-Wanderers
https://redd.it/1arozgf
@proceduralgeneration
Realistic Ocean Simulation Week 15: Switched spectrum from Phillips to JONSWAP
https://redd.it/1argqzx
@proceduralgeneration
Removing Dead Ends From Cellular Automata
https://redd.it/1aqxsd2
@proceduralgeneration
Generative Organic Form: After Effects
https://youtube.com/watch?v=I3I-acpxofM&si=XqfJtEOdFve0umqQ
https://redd.it/1apyem1
@proceduralgeneration
Call for Presentations - C3 Dev Festival
It is the contemporary software engineering and design festival. Our 2-days event will take place in Amsterdam. We will have one-day with two tracks featuring the latest and greatest news and insights from the global network!
Your talk topic should be relevant to the coding, career & creativity and topics around it, including (but not limited to):
* Career
* Culture
* Psychology
* Productivity
* Code
* Architecture
* Infrastructure
* Deep learning
* AI
* Data
* Graphics
* Creativity
* UX
Full talk length: 20 min.
Lightning talk length: 5-7 minutes.
Feel free to submit multiple talk proposals if you have a few ideas to share!
⚠️ Submission Deadline → February 28
Submit your talk → https://docs.google.com/forms/d/e/1FAIpQLSfD-K3eyLhLglvqpsCEzq1-m\_K5NE2ih5YMtujxyIRcjiJw\_g/viewform
Learn more → https://c3fest.com/
Follow on Twitter → https://twitter.com/c3devfest
https://redd.it/1ap4o36
@proceduralgeneration
Rudimentary Character Movement on Procedurally Generated Isometric Tilemap
https://youtu.be/xPAxgiiRA4w
https://redd.it/1aoqohe
@proceduralgeneration
Battery explosion
https://youtu.be/LYLgx9tmw3I
https://redd.it/1aoce0k
@proceduralgeneration
Easily texturing a procedural terrain!
https://redd.it/1ampu7y
@proceduralgeneration
ruin render
​
https://preview.redd.it/93e5m73qhjhc1.jpg?width=2560&format=pjpg&auto=webp&s=709094455f966c5dad8a5999c82fb90f93de840d
https://preview.redd.it/65fibc6rhjhc1.jpg?width=2560&format=pjpg&auto=webp&s=c5d4b113869b3e171855b61a91f6d17177509938
https://redd.it/1amlgai
@proceduralgeneration
What do you think Sims uses for Procedural generate their characters?
I wonder how they do it and I want to research more about the different technics, so...
How do you think EA generates Sims for you to interact with?
https://redd.it/1amb1r7
@proceduralgeneration
Realistic Ocean Simulation Week 14: Attempting to create my own FFT. Butterfly Texture.
https://www.reddit.com/gallery/1am58yw
https://redd.it/1am5cct
@proceduralgeneration