This project aims to provide a framework and a solid implementation of different techniques

Procedural-Cities

This project aims to provide a framework and a solid implementation of different techniques for generating complete seamless procedural cities with interiors for all buildings.

Small demo: https://www.youtube.com/watch?v=n1eZOV8r_g4

This project was done as a master thesis at LTH, link to thesis is available here: http://lup.lub.lu.se/luur/download?func=downloadFile&recordOId=8929185&fileOId=8929189

The source code is available to everyone under the MIT licence and you're very welcome to clone or fork the reposity, but keep in mind that it is mostly a proof-of-concept and the code is hardly optimized or refined.

Most parameters are accessible from the "Spawner" blueprint-class, one is spawned in the default map, so edit the values inside of that. Some parameters can be found in ProcMeshActorBP, PlotBuilderBP and HouseBuilderBP. The most interesting parameters to change might be length, maximum turn rate for roads and heatmap settings.

Starting the project generates the city, the defalt character can either walk (with collisions enabled) or fly (with collisions disabled), switch by pressing R.

Some pictures:

Interior apartment Interior several apartments 1 Interior several apartments 2 Interior several apartments 3 City overview 1 City overview 2 City overview 3 City map 1 City map 2 City map 3 City map 4 Large city

Owner
Comments
  • Dependency on non-maintained 3rd party library

    Dependency on non-maintained 3rd party library

    Hi, I see that when trying to open the project in UE4 4.18, it's asking me to install a plugin https://github.com/Koderz/RuntimeMeshComponent.

    In the UE Asset Store, this plugin has not been updated since UE 4.10.

    Two questions:

    1. How did you get this plugin working in your project?
    2. Which UE4 engine version did you build this project with?
  • Building your project

    Building your project

    Hi!

    Your project looks great, but I cannot seem to get it to compile on Ubuntu 18.04 targeting Unreal Engine 4.19.

    My error messages are:

    error: '&&' within '||' [-Werror,-Wlogical-op-parentheses]
    error: call to 'abs' is ambiguous
    

    I do not really care about UE's version so if you got it to work with a precise version I'd be willing to give it a shot.

  • Can Launch UE4.25 project, but Magic Leap Structs have changed. Any Ideas how to fix this?

    Can Launch UE4.25 project, but Magic Leap Structs have changed. Any Ideas how to fix this?

    Looks like the structs for magic leap have changed so they don't match the format that this was originally programmed for. Any ideas how to get the description and transform information from the magic leap tracking mesh struct now? image

  • Cho add building shell option

    Cho add building shell option

    This is a small change to allow generation only the exterior of building. Requries generation mode to be "complete generation" as well as "Shell only" to be ticked (also in performance secion)

    BP change is just adding an "or shellOnly" before before passing "shellOnly" into the next function.

    This may not be a good/correct way of doing things, but the first way I saw to get the result I want (If you are aware of a better way of doing this, may be preferable to this PR)

  • Procedural

    Procedural

    Great Tool really, thanks for sharing it!! I have some questions.First, Is this only generated runtime??I mean, if i want to use this , i must make them fixed (So, Can I turn the whole city to static meshes?? Or If given heatmaps, Is the city generated the same each runtime??Second, I can not generate interiors , this is strange. Does it need some settings to generate interiors?? Can you give some tutorials about this software? Thank you very much and again, Great work

  • fix build on UE4.21

    fix build on UE4.21

    Leaving this pull request here for anyone who are looking to build the project on UE4.21. I have also moved the RunTimeMeshComponent to the Plugins folder to a part clear that it is in fact a plugin and not a part of this project.

  • Looping 360 the same value when calculation best rotation for initial FRoadSegment

    Looping 360 the same value when calculation best rotation for initial FRoadSegment

    Hi,

    First of, what a great project!

    I think I found a small bug though.

    When you spawn the initial road in Spawner.cpp You rotate 360 degrees to find the best rotation for the initial segment, however it doesn't use the calculated variable 'Testpoint'.

    So currently it loops 360 times around point 0,0. Which is pretty pointless (sorry couldn't resist the pun ;) )

    Anyway this line: https://github.com/magnificus/Procedural-Cities/blob/9dd8a75e143aaccc914eaaf48253b4946eb99e49/Source/City/Spawner.cpp#L370

    All 'point' should be 'testPoint'. (also the line below it ofc)

    Sidenote: Also NoiseSingleton::getInstance()->noise( is called twice, it might be better to store it in a temporary value to improve performance.

  • No Buildings Generated

    No Buildings Generated

    It seem that no buildings are generated. I see streets, lights, and the things on top of buildings; but no buildings! When looking at the log I see a bunch of warning like this:

    LogTemp: Warning: dist between start and end: 7150.078125
    LogActor: Warning: ProcMeshActorBp_C /Game/FirstPersonCPP/Maps/UEDPIE_0_standardmap.standardmap:PersistentLevel.ProcMeshActorBp_C_688 has natively added scene component(s), but none of them were set as the actor's RootComponent - picking one arbitrarily
    LogTemp: Warning: dist between start and end: 7150.046875
    LogActor: Warning: ProcMeshActorBp_C /Game/FirstPersonCPP/Maps/UEDPIE_0_standardmap.standardmap:PersistentLevel.ProcMeshActorBp_C_689 has natively added scene component(s), but none of them were set as the actor's RootComponent - picking one arbitrarily
    LogTemp: Warning: dist between start and end: 7150.045898
    LogActor: Warning: ProcMeshActorBp_C /Game/FirstPersonCPP/Maps/UEDPIE_0_standardmap.standardmap:PersistentLevel.ProcMeshActorBp_C_690 has natively added scene component(s), but none of them were set as the actor's RootComponent - picking one arbitrarily
    LogTemp: Warning: dist between start and end: 7150.028320
    LogActor: Warning: ProcMeshActorBp_C /Game/FirstPersonCPP/Maps/UEDPIE_0_standardmap.standardmap:PersistentLevel.ProcMeshActorBp_C_691 has natively added scene component(s), but none of them were set as the actor's RootComponent - picking one arbitrarily
    LogTemp: Warning: dist between start and end: 9049.761719
    

    I'm running 4.20.3. Pulled from master today.

  • add tidyed version of poly debugging visualisers in the same style as the noise visualiser

    add tidyed version of poly debugging visualisers in the same style as the noise visualiser

    This should make it easy to see what polys are being generated - can make for quick iteration testing too by disabling the BP calls after drawing the poly debug visualiser.

  • Fix mad poly generation and freezing bug

    Fix mad poly generation and freezing bug

    FVector otherTangent2 = FRotator(0, 90, 0).RotateVector(otherTangent2); was the issue.

    Disappointed there was not a compiler error! (or even a warning... perhaps I missed it)

    more notes in code.

  • remove .vs folder, add to .git ignore

    remove .vs folder, add to .git ignore

    I don't think this folder should be in git, it contains paths for a computer (pointing at a drive I don't even have!) and causing compilation problems

  • Screenshots from the blueprints

    Screenshots from the blueprints

    Well, I'll share this with you, maybe somebody can find this useful.

    I'm a Unity3D dev and I don't have the possibility to have Unreal Engine on all of my computers, as long as I port the code of this project, but is nice to have a screenshot to follow the flow of this application in order to port it.

    RoadGeneration until PlotGeneration image

    PlotGeneration until House placement: image

    Maybe I'm missing Room generation.

  • Make procedurally generates meshes destructible

    Make procedurally generates meshes destructible

    First off, this is an awesome project that’s been undertaken. Very nice.

    But I do have a question.

    Where would be the best place to hook into this code to allow for the runtime meshes generated to be made into destructible meshes, using the APEX plugin?

    Thank you

A demonstration of various different techniques for implementing 'threaded code,' a technique used in Forth and in virtual machines like the JVM.

Threaded code is a technique used in the implementation of virtual machines (VMs). It avoids the overhead of calling subroutines repeatedly by 'thread

Nov 4, 2022
SOLID principles using modern C++

SOLID principles in modern C++ Description We will try to explain SOLID principles with an example. We will start with a non optimised scenario of a s

Sep 4, 2022
Project in the field of Advanced Programming Techniques by prof. Brian Kernighan, inspired by real event that made Ken Thompson invent grep command

ed_to_grep Project in the field of Advanced Programming Techniques by prof. Brian Kernighan, inspired by real event that made Ken Thompson invent grep

Nov 1, 2022
Provide a unified trading framework and connectors to popular trading venues

Boost.connector Provide a unified trading framework and connectors to popular trading venues This is currently NOT an official Boost library. Introduc

Nov 24, 2021
Project is to port original Zmodem for Unix to CP/M and provide binaries and source code for platform specific modification as needed. Based on 1986 C source code by Chuck Forsberg

Zmodem-CP-M This repository is intended to foster a RetroBrewComputers community effort to port the original Zmodem source code for Unix to CP/M so ev

Aug 31, 2022
Project is to port original Zmodem for Unix to CP/M and provide binaries and source code for platform specific modification as needed. Based on 1986 C source code by Chuck Forsberg

Zmodem4CPM This repository is intended to foster a RetroBrewComputers community effort to port the original Zmodem source code for Unix to CP/M so eve

Aug 31, 2022
Techniques based on named pipes for pool overflow exploitation targeting the most recent (and oldest) Windows versions

Table of Contents Table of Contents Introduction Named-Pipes Introduction Exploitation Spraying the non-paged pool Memory Disclosure/Arbitrary Read Co

Dec 16, 2022
Research tool able to detect and mitigate evasion techniques used by malware in-the-wild

JuanLesPIN IntelPin tool to detect and mitigate Windows malware evasion techniques. This tool is a prototype developed for a research project whose pa

Dec 30, 2022
Quick reference on command line tools and techniques

1. Introduction 1.1. Scope 1.2. Background 1.3. Purpose 1.4. Next steps 2. Basics 2.1. Common commands 2.2. Shortcuts 2.2.1. Navigation 2.2.2. Editing

Dec 7, 2022
This project aims to bring back a productive working environment on Windows 11
This project aims to bring back a productive working environment on Windows 11

This project aims to bring back a productive working environment on Windows 11

Dec 30, 2022
This project aims to code a C library regrouping usual functions

Libft Very first project in 1337 school. Lift consists in coding your own C standard library functions. Premier projet de l'ecole 1337. Cet exercice p

Jan 13, 2022
Minishell - This project aims to recreate most of the bash shell.
Minishell - This project aims to recreate most of the bash shell.

minishell Contents Info How to use Clone repo and submodules Linux dependencies MAC dependencies Compile and execute Install Features Built-in command

Jun 9, 2022
Vaccine Monitor app implemented in C with system Programming techniques.Projects implemented as part of the course Syspro K24

System_Programming_Projects Vaccine Monitor app implemented in C with system Programming techniques.Projects implemented as part of the course Syspro

Dec 30, 2021
A Windows user-mode shellcode execution tool that demonstrates various techniques that malware uses
A Windows user-mode shellcode execution tool that demonstrates various techniques that malware uses

Jektor Toolkit v1.0 This utility focuses on shellcode injection techniques to demonstrate methods that malware may use to execute shellcode on a victi

Sep 5, 2022
This Repository Aims To Help Beginners with their first successful pull request and Know How to do open source contributions Also For Intermediate and Advance level contributors as well.
This Repository Aims To Help Beginners with their first successful pull request and Know How to do open source contributions Also For Intermediate and Advance level contributors as well.

Hacktoberfest_2021 This Repository Aims To Help Beginners with their first successful pull request and Know How to do open source contributions Also F

Jan 9, 2022
Firmware update for XeniumOS used on Xenium and OpenXenium modchips to provide software fixes and various improvements.
Firmware update for XeniumOS used on Xenium and OpenXenium modchips to provide software fixes and various improvements.

Firmware update for XeniumOS used on Xenium and OpenXenium modchips to provide software fixes and various improvements. About • Features • Installatio

Dec 9, 2022
A simple tool that aims to efficiently and quickly parse the outputs of web scraping tools like gau

massurl is a simple tool that aims to parse the outputs of tools like gau, and extract the parameters for each URL, remove duplicates and do it all very quickly. Because web scraping tools' outputs can get very large very quickly, it is nice to have a tool that parses them and and outputs something clean and easy to read.

Jul 24, 2022
StarkScript - or the Stark programming language - is a compiled C-based programming language that aims to offer the same usability as that of JavaScript's and TypeScript's

StarkScript StarkScript - or the Stark programming language - is a compiled C-based programming language that aims to offer the same usability as that

May 10, 2022
Arbitrary Precision provides C++ long integer types that behave as basic integer types. This library aims to be intuitive and versatile in usage, rather than fast.

Arbitrary Precision (AP) Cross-platform and cross-standard header-only arbitrary precision arithmetic library. Currently it offers integer types that

Sep 28, 2022