Saturday, May 9, 2026

Procedural Park Restrooms, etc.

In this post I continue my work on parks from the previous blog post. Before I get into bathrooms, let me discuss some of the smaller park additions and improvements I made first. In reality I worked on some of these changes at the same time, alternating between code edits.

I did eventually get hills working in parks. I had to add collision avoidance for AI people, include them in blockers for placing other objects, and adjust the elevation of previously placed trees to move them on top of the hill. (Trees are added first since they're part of the terrain.) I added player collision with hills by interpolating the Z-value of the player position from the nearest heightmap corners. This also allows the player to walk below the water in ponds, which means that I no longer need to block off that area for the player.

My daughter suggested adding fish to the ponds, so that's what I did. I split the class that handles fish in building fish tanks, pools, and flooded basements and created a city version for use with ponds. The only major difference is that fish are constrained to a bowl-shaped area rather than a box shape. They swim around in the pond and occasionally change direction, but otherwise ignore the player. They don't run from the player like fish in the ocean.

Residential parks now have cube map reflections enabled. I previously only had reflections in commercial cities because some of those office building types used reflective exterior materials. This has changed so that reflections are always enabled when the player is in parks in any type of city.

 

Park Water Fountains 

Next, I added water fountains along park paths. I wanted to add those green metal water fountains with the lower dog water part that I see in the parks around my house. I believe this is referred to as the "Fido and Me" fountain. Apparently these cost $4000? Crazy! Anyway, I couldn't find a free 3D model of one of these, so I had to construct them procedurally from cylinders, cones, and a few cubes. They have cube map reflections enabled with a painted metal material. So far I haven't made these fountains interactive for the player.

Park water fountain next to a walking path and some picnic tables.

Here's another water fountain, this time with a sneak peek of a park restroom in the background. I'll get to restrooms below.

Park water fountain with restroom in the background. More on this below.
 

Park Restrooms 

I added small restroom buildings to parks containing two rooms, one for men and the other for women. These are placed so that they don't overlap any ponds, creeks, park paths, trees, etc. Yes, trees are placed first. We don't want to be cutting down trees to build restrooms, right? There's a constraint that no two restrooms can be placed within a block of each other, so two parks on adjacent blocks will have one shared restroom. Restrooms come in two flavors: doors in the front, and doors at the sides/ends. I initially couldn't decide which I preferred, so I added a 50/50 chance for each style.

Let's start with the exterior. These buildings use a similar system as gas station convenience stores. They're owned by the city system rather than the buildings system. This means the placer has complete control of all parameters rather than relying on randomness to choose the size, shape, and material. The size is fixed with an aspect ratio of 1.25:1. Technically this is the "house" floorplan type. I used a random selection from the concrete block and brick exterior wall set and a sloped ("peaked") roof style. Each interior room has a single exterior door with a sign next to the door indicating gender. I added wooden privacy fences next to the doors. Restrooms with both doors on the front also have a concrete patio area between the fences and a water fountain mounted on the wall in the middle. Like this: 

Closeup of the park restroom from the previous screenshot. This one has both doors on the front and a water fountain between them. Walls are concrete block.

One downside of having restrooms placed by the city object placer inside parks is that they don't automatically get connected to the power lines. However, I was able to update the power line logic to connect restrooms with power but not cable TV wires relatively easily. Technically they also don't connect to the underground tunnel/sewage system either, though they don't have basements to begin with.

Restrooms with doors at the ends have their gender signs on the adjacent walls, and fences directly across from the doors. Maybe I should add a concrete patio at each end as well? The limitation here is that I'm actually drawing these as driveways, which means I can have only one. I did attempt to add the driveway under the entire building and that seems to work, assuming there's no basement. I haven't updated the screenshot though.

Both styles of restrooms have long, thin, and high windows along the walls that don't have doors. I had to make them high so that they don't overlap with objects placed inside such as urinals and hand dryers. These are glass block windows that let light pass through but the player can't see through. 

Second variant of park restroom with the doors at each end.

Pedestrians will choose these buildings as destinations just like normal houses and office buildings. I did add the logic for women to choose the women's room door while men choose the men's room door. Parks are neutral territory not owned by anyone, which means that people can walk through them at any time, as long as they avoid colliding with buildings that aren't their destinations.

After I added those two screenshots above, I realized that the doors don't look right. House doors don't fit with restrooms. I later changed them to use door textures from office building interiors, which I feel is a better fit. I took one new screenshot, shown below.

Park restroom with office style doors that open outward. This one has brick walls.

I also changed restroom doors so that they open outward rather than inward. The restrooms in my local park all open outward. While I was at it, I changed some other types of buildings such as restaurants to open outward. I think every building type other than houses should have doors that open outward for fire safety. The only problem with this is that the interior door handles don't have correct lighting or reflections when they rotate outside the bounds of the building. Now that I think about it, I should add exterior door handle 3D models as well.


Restroom Interiors

Park restrooms have the same plaster walls as most other buildings because I don't have a good alternative. I could make the walls smooth and untextured, but that would look boring. Floors and ceilings are bare concrete. Maybe ceilings should be high and reach to the peaked roof? It could be similar to attics with metal rather than wood beams. That sounds like a lot of effort though. I'll probably at least attempt it.

I've made some improvements to restroom interiors. Note that these apply to all multi-person building restrooms (office building, restaurant, park, mall, etc.) Stalls now have metal trim, hinges, and door latches. These look much better now that I have proper (though distorted) interior reflections. There are four paint colors for stalls: light blue, light green, light gray, and dark gray. Here's a new screenshot of light blue bathroom stalls with shiny metal hardware.

New bathroom stalls with shiny metal trim, hinges, and door latch.

I added three new bathroom objects: paper towel dispensers, soap dispensers, and hand dryers. These are all drawn as 3D models I found online because the shapes were too complex to create with code. Or rather I've done enough of this lately and I wanted to take a break after the water fountains, etc. They're placed on the walls of larger bathrooms that have been divided into stalls. I should probably add some of them to the small bathrooms as well for non-residential buildings. ... There, I've added paper towel and soap dispensers to single use office bathrooms.

The paper towel dispenser is placed first, in the middle between the sink/mirror and the door. It's added to whichever wall has more space. I believe there's always room to place the paper towel dispenser. Or at least I haven't come across a bathroom where it's missing due to placement constraints.

The hand dryer is next added to the door's wall, between the paper towel dispenser and the door, if there's space. In the case of interior rooms with doors that open inward, the dryer is placed to avoid the path of the opening door. I added it closer to the door in the case of a wide bathroom with a long wall.

Finally, soap dispensers are placed between the paper towel dispenser and the sink mirror if they fit. This usually only happens in bathrooms with a gap between the door wall and the sinks. There's no gap for some of the short-but-wide bathrooms that are added to office buildings. Park restrooms are fixed size and large enough, so it should always be possible to place all three objects. 

Park front entrance restroom interior showing the new hand dryer, paper towel dispenser, and soap dispenser together by the door.

Here's another view that shows the entire park restroom interior with (old texture) door, window, stalls, and sink in the back. The hand dryer is visible on the far wall under the window. Oh, I almost forgot. I also added those shiny cylindrical trash cans previously seen in malls to larger bathrooms.

Park side entrance Women's restroom with black (very dark gray) stalls and high block window.

Park restrooms have lower lighting levels compared to office buildings. Part of this is just due to the lower color temperature, which makes the light more yellow compared to the bright white of commercial spaces. The other reason is because park ceiling lights are smaller. I had to restrict their size to avoid the door clipping through them back when doors opened inward. (Take a look at the door and light position in the screenshot above.) Park restroom doors sometimes open into the short side of the room, while office restrooms usually have their doors at the long end near the sinks and urinals.

Here is what an office building restroom looks like for comparison. Note that these have the same object additions as above. Some wider rooms have sinks, paper towel dispensers, hand dryers, and soap dispensers on both sides of the door.

Office building Men's restroom with brighter and higher color temperature lighting.

I think I'm mostly done with bathrooms for now. I need to go back and work on door handle models, and maybe make a few other minor changes.

30 comments:

  1. Glad to hear tiny pond-fish have been implemented. Giant sky-fish when?

    ReplyDelete
  2. Yes, fully procedural fido&me water fountains! Do you instance some of them with no dog part on the bottom? Do some have two or three side-fountains? Can you make a fountain fractal? There are so many possibilities with procgen. Push the technology forward!

    ReplyDelete
    Replies
    1. They're currently all the same geometry. I can make multiple variants. The only tricky part is calculating the final bounding volume for collision detection.

      Delete
    2. I added a second variant with no dog bowl.

      Delete
  3. Now that you have your own procgen water fountain, you should use that for all the outdoor fountains instead of the high-rez fountain models you have on the park restrooms.

    ReplyDelete
    Replies
    1. Maybe, when I get back to that part. I would have to change the placement system since models vs. generated geometry work differently.

      Delete
    2. Okay, now some restrooms have the green generated fountain models in front of them.

      Delete
  4. Instead of having concrete pads on only one end, just make them extend under the whole building so you have pads at both ends and sidewalks around the perimeter of the building as well.

    ReplyDelete
    Replies
    1. I did eventually add a concrete floor under the entire restroom in some cases. I was expecting to have problems but it actually worked without issue. It doesn't go all the way around the building because the park restrooms I used for reference have dirt at least in the back.

      Delete
  5. The restroom interiors look really good. The only thing I would do is make the partitions about two feet taller.

    ReplyDelete
    Replies
    1. I made stall partitions about one foot taller and that looks about right to me. Thanks.

      Delete
  6. Once you have the plumbing all hooked up, you should add a warp-pipe system like in Mario Brothers.

    ReplyDelete
  7. Hey frank so i been playing the current version of 3dworld a lot. And man i got to say i'm impressed. Your project is basically the "dwarf fortress" of city generators or at the very least building generation. I've also gone back and read through all the blogposts i skimmed over or happened to miss over the past year. Seriously the effort you put into making environments interactive is incredible. Thousands of nested items per building. With interactable lockers, drawers, freezers.... holy...

    I now have a pretty good (i think?) understanding of how 3Dworld's building limitations work. At least relatively speaking. I do actually have a few much more normal suggestions. I might list them in another post as i'm sure the comments in this could get cluttered after this.

    As a side-note the prison blogpost kind of blew me away considering the complexity of it all. it seems probably one of the most complex building specifications in 3dworld so far.

    So I've been thinking the past like 3 days of a potential way of partially solving 3Dworld's "limited space" problem with you running out of buildings to assign to specific functions. You May have already thought of this long ago but i might as well brainstorm it anyway. One thing i want to say before i get into this i completely understand if you choose the route were you will cease creating new "Specifications" for buildings once it is no longer any "free room" to do so and instead just iterate and improve the existing ones. I would fully understand that as what you've already done is borderline mad-programmer levels of stuff like seriously.

    Okay I'm going to break this whole thing down into 2 separate processes. One of these might interest you and could be practical. Or neither is practical and that's okay. As you have stated in multiple previous blogposts you are running out of "space" in 3Dworld to assign special building types. As all building types that have been added so far have been retro-fitted to overwrite into the generic office buildings/houses that have existed in 3dworld since 2019/2020 i think when major changes were last made for exterior generation.

    I'm thought of these suggestions within the limitations of 3Dworld so hopefully they aren't too wild.

    Side-Note: seeing the park restrooms being "new" exterior buildings that did not exist before actually made me more hopeful of process 2

    ReplyDelete
    Replies
    1. Process 1:


      So 3Dworld is running out of generic "buildings" to fill into special types. I think a first part solution to this would be to allow the engine to use a config file maybe buildings_params.txt or heightmap.txt to allow the user to set a maximum limit of certain special structures. e.g setting a max limit of prisons to say 25 in the config would mean the generator would only assign a maximum of 25 office buildings in the scene that suit the correct parameters to that classification.

      Now this would require 3Dworld to have knowledge about the total count of special buildings that is separate from the interior layer. I say this because if i disable interior rendering in the scene the debug colors above buildings also disappear witch makes me think buildings are assigned not when the scene is first generated/loaded but are done in runtime in the interior pass witch would make this pretty hard to do if not impossible without serious re-writing witch is not the goal.

      The more i think about it this one might just not be possible. But if it were ideally this would allow the scene config to have a new section dedicated to special building types and the option to set a max limit for each one in the scene. This could free up space for
      future building assignments that may use the same set of requirements as others. (e.g number of floors, material, floorplan, etc)

      Delete

    2. Process 2: (This is for cube-based secondary buildings only, city buildings would not be practical) (

      This one is also a bit on the weird side but hear me out i may be very incorrect about this but here goes anyway. 3Dworld's buildings are generated from the outside-in. So all exteriors are determined first and exteriors have virtually zero knowledge of any potential interior contents. For the sake of simplicity i'm going to use the new DataCenter building type as an example during this. However implementing this for all old assignment types might not be practical. This may be easier with only doing this approach for new building assignments in the future.

      So let's say there are only ~50 buildings in the default scene seed that can be qualified as a datacenter. From your blogpost the major requirement is an office building with 4-6 floors. And i'm assuming it's limited to a square-cube building (so no T or L shapes) So let's say we want to create a scene with nothing but datacenters. The goal of this whole thing is to gain the ability to force generate a x number of buildings of a specific size to control the density of certain assigned buildings.

      In 3dworld let's say you program a way to tell the building generator to generate and place cube buildings of x-(width) range and x-(height) range. instead of the generator fully randomizing the dimensions we are specifying a limited range of both height and width for the cube exterior to be generated. Say we call this limitation an optional "preset" I'll name it "Preset A" for this example. Preset A is set to generate a cube office building that is guaranteed to be within our specified width and height range we've set. There is Zero knowledge of interiors here this is solely the exterior box generator.

      Since i'm using DataCenters as an example, we want control over how many buildings could be considered as a "datacenter" So our "Preset A" creates an exterior that would fit the requirements for a 4-6 floor office building. Everytime. As we are simply rendering a cube with a fixed range of dimensions instead of it being entirely random.

      Now we create a new "scene" and lets say we fill it with 100 of our "Preset A" cube buildings. In this case once in-game in theory you would end up with 100 office cube buildings. All of witch are relatively similar in size to one-another. and all of witch contain 4-6 floors. As the interior generator would do it's thing like normal and fill the empty box exteriors with all the goodies.

      Given how 3Dworld assigns buildings you should already end up with some dozens of datacenters if not most of them? So now we have a scene filled with mostly datacenters and we can manipulate the amount by simply adding more or less of our "Preset A" structures into the scene.

      A second example for further context. Say we want a scene with only schools. Let's say we change the assignment so that schools
      prioritize buildings that are shorter but wider. Say 2-4 floors. We can then create a "Preset B" that we set to generate an office building exterior with a specific height range that forces it to be at minimum tall enough for 2 floors but at max 4 floors. Then we set the width range to be at minimum more of a larger cube but a maximum more of a big rectangle. Now we crate a scene with "Preset B" an in theory we now have building exteriors that would very likely be filled as schools.


      Now what's the point of all of this you might ask? Well this could somewhat solve the limited space issue with special building types without rewriting the interior generator or too many major functions in general. Accomplishing all this would in theory unlock the ability to generate more buildings that could be appropriate for more specific building assignments.

      Delete

    3. Process 2.1:

      Now on integrating what i spoke about in process 2 into the main heightmap scene. Or at least a theory of how i'd imagine it could be done. The simplest way i can think of it is that we give the generator the ability to replace an x number of existing building "exteriors" with a set number of our "Preset" exteriors.

      Example:

      Say we have our scene that is set to generate ~10k buildings. Let's Say we force 400 of those buildings to be our special preset exterior types. This would mean a set number of building exteriors would use our "forced-limited rules" for dimensions we've set. Witch in turn would guarantee them to be useable by whatever special building assignments we have set to fit them.


      Final words:

      Okay so i spent about 2 hours writing this up and visualizing it in my brain. I'm sure in practice doing this would take a two dozen hours of work who knows. I was trying to think of a way you could solve the problem with running out of useable generic buildings in the scene without having to rewrite any major systems for interiors at all. Although you would certainly have to rewrite how 3Dworld handles the parameterization and selection for exterior building generation.

      Truthfully you don't have to attempt any of this. In fact i would actually advise not to just because this could get complex in a way that causes several headaches for sure. These were just some ideas i had thought about.

      Delete
    4. I don't think I can reply to individual comments, only to the thread. Really this should be in an email or something because the Blogger comment box is too small for this. I wrote this in a text editor and will try to paste it into the comment box.

      Thanks for your inputs. I need to explain more about how buildings work because what you suggest doesn't really fit into the current system, but there may be other ways to do it.

      First, there is no lack of space. There are 18K total buildings and plenty of each type around somewhere. The problem is really a lack of space *near the player starting location*, where buildings are easy to get to without using overhead map mode to teleport somewhere. And also a lack of space in cities, which only have around 800 commercial buildings total. I'm trying to guarantee maps have at least one building of each type within a few frame tiles of the start.

      There's a second constraint that I don't want to make any changes that completely change the placement of buildings across the world. By now I've memorized where all of the interesting buildings are near the start and can even recognize them by name if I get an error printout for a named building. Knowing where all the special cases are makes it easier to test that none of the building or room types are broken as I make changes.

      Also for the park restrooms: I can place a custom building anywhere in the open space in a city. This happens after the normal procedural placement. But it's not that powerful because there's not much open space after everything procedural is added, at least not space for something like a data center.

      Delete
    5. Process 1: Setting a fixed number of anything doesn't work with the current multi-threaded generation system. There's no easy way to synchronize the "count of 25" requirement across threads. And even if I did it serially, buildings are processed by tile (XY world grid), so all the special buildings would be in one corner of the map. The current system requires that all buildings be generated independently of each other. Changing this is major architectural work.

      The debug visualization is done by drawing the debug box as a sort of interior object and has nothing to do with generation order. Right now it's place buildings => assign exterior geom => select building name/type/features => floorplan => assign rooms => add interior objects. Only the placement step is serial because it must consider previously placed buildings for overlap queries. And the last two steps are only done when the player is close to a building. Building type selection comes after geom generation, so those geometry requirements must be met for the selected type.

      It's not easy to expose these per-building type rules to the config file. For one, if the user sets values that won't work, generation may fail or even crash. Second, there's no easy UI to specify things such as shape constraints and roof types because these are details that are hard-coded into the source and not exported to the config file/UI level.

      Delete
    6. Process 2: Yes, exteriors are generated before interiors. This allows the system to draw distant buildings without needing to create full interiors for them until the player gets closer. However, building type assignment applies to all buildings at generation time because it's needed for features such as overhead map mode.

      Data centers must be office type buildings with 4-6 floors (2-3 floors are reserved for factory/warehouse/powerplant and 7-9 floors for parking structures). Also they must be rectangular with a minimum base area and a flat roof type for placing all of the cooling objects. (Roof type is part of the exterior that's generated first.) You can create a scene with all buildings that *could be* data centers by editing the 538 line building_materials.txt. You can create one or more materials with an exact x/y/z size range and forced to a single cube and add that as the only material(s). Create a custom file and change config_city.txt line 21 to include it rather than building_materials.txt. You can create an entire scene of buildings that could be data centers.

      But you can't create this as a preset and have multiple of these. That would require support for multiple building config files, or a whole new layer on top of that building config system. That's another major architectural change. You could just add a single new material to the existing building_materials.txt file though, and that will give you a higher chance of getting data centers. Just call add_material multiple times to give it more weight.

      Here, I added a file building_materials_datacenter.txt to the project. Change config_city.txt to comment out line 21 and uncomment line 22 and you get a scene with no city buildings but most of the non-city buildings are data centers or parking structures. It's pretty laggy because these buildings are huge and contain many objects. Note that you need some fixes for asserts I ran into for this to load, so you'll have to rebuild 3DWorld from source. Or you can copy that block with the min_levels/max_levels/split_prob/size_range into the existing building_materials.txt as an extra set of materials. Those, and the block at the top of the file with "max_sides 4", are the four parameters you need to get data centers.

      Schools have a more relaxed requirement with no max height that allows for stacked buildings. This is because schools don't require a fixed set of custom large rooms and will conform to whatever interior hallway/room layout structure has already been generated. Offices will replace classrooms, etc. Hospitals are the same way.

      Process 2.1: This is really what requires a completely new building config system. I don't know if/when I would get to that. Sorry. I only have nights t o work on this and can't spend the next month adding support for all of this.

      Delete
    7. Thanks for taking the time to respond! And i appreciate you clarifying about the assignment space. I initially was under the impression that 3dworld was running out of space for special building types lol. but now i understand that's not of any real concern.

      Also i now have a better understanding (i think) of how you assign buildings to begin with due to your explanation. And i appreciate the fact you went to make a test datacenter scene even though you didn't have to. But hey i'm almost certain i'll mess around with it because why not?

      Okay outside of all of that theory stuff. I do actually have a few more level-headed suggestions/ideas that are more realistic. i've already filled the replies to death so i'll just make a separate comment

      Delete
    8. There are plenty of ways of changing the building system to improve it and add new features, but the chance that I can implement a very specific request is pretty low. It's quite a complex system. I need to be careful with big changes because I don't have a good automated test system, so I have to manually check that everything looks correct. There are asserts in the code as well that cover some cases.

      Delete
  8. This comment has been removed by the author.

    ReplyDelete
  9. So one suggestion or rather a question i have. Is there any technical limitation or reason that stops you from rendering interior doors at a realistic height scale?

    I feel i've asked this before some years ago? It's nothing serious really just for aesthetic purposes. Or immersion more so. I don't know the actual ceiling height for buildings but if i were to compare visually to reality i assume that ceilings are ~7 feet roughly. And doors are also that height given that they render to the ceiling. In america the average door height is 6 foot 8 inches. So having interior doors for buildings scaled down slightly beneath the ceiling height would be more visually appealing.

    But if this is done for some optimization reason then it's no issue. I'm aware you originally did this back in 2019 as you pre-generated all doors across buildings in the scene as a single wall geometry across all floors at the time since they were not treated as interactive "objects".

    The second suggestion is mainly for residential homes. This is a very specific one. But given you added the ability for basements to be ransacked with books and objects thrown around. I would say that there should be a rare chance for a given room type inside a home to be "trashy" or more "clustered" It kind of builds character and even a bit of "story" in the environment per say. However i would not suggest the rooms to have the ability to have water damage, cracks, etc as that probably would look very wrong and weird for normal rooms. But you know maybe stacks of clothes on the floor or bed, boxes on the floor, paper balls, maybe some bottles sometimes, ya know?

    This might already be possible i just have not seen it yet so far. I just really like the improvements made with basements and some of the newer building types as you've gotten better at doing this type of stuff over time and more of those newer small features being retro-fitted to the residential homes and generic offices could be cool.. in general i would say that more room types across buildings (apartments, houses, maybe offices?) should have a rare chance of getting a "clustered" flag added to them that could cause these sets of objects to litter around the room.

    You could likely re-use a lot of code from the basement clutter system so i hope this would not be too crazy of a task. Though i'm not sure what performance would be like for bigger buildings but i'd imagine there would never be a scenario more intense than a shopping store that has literally tens of thousands of items. 3Dworld seems to handle that very well.

    I know i could probably think of a million things. Maybe i'll share a few more ideas in your next blogpost or so.

    Okay last topic i swear!

    The last thing i was thinking about was some floorplan ideas. These floorplans would maybe leave a good amount of variety as well and i'm aware some floorplans for buildings tend to be more limited in variety. I though of a few floorplan ideas for T and L shaped cube buildings that might allow a percentage of them to be used as apartment complexes. Obviously room size would probably vary quite a lot in that case give those buildings change in scale. I don't really have a good way to describe it really to be honest.

    But that's all for now. What you've done so far with the project is already a one-of-a-kind situation and it boggles my mind sometimes with some of the systems you have. So i'm a little eager to see what other things you manage to trickle in over the coming year.

    ReplyDelete
    Replies
    1. Building floor spacing is around 8 feet for all building types. Office buildings should be more like 12 feet, but it was much simpler to use the same value everywhere. Some special types have 1.5x or 2x the spacing such as malls and industrial buildings. The gap between floors for the ceilings is 10% of the total, which makes the ceiling height about 7.2 feet.

      Exterior doors do have a bit of wall above them. Interior doors extend from the floor to ceiling for two reasons: (1) They originally were merged across floors as an optimization before I added support for closed doors, and (2) It avoids adding that small section of wall and trim above the door, which is a minor optimization. The first one is no longer relevant and the second one probably makes little difference. But it would be quite a bit of work to go back and change now. You probably don't realize what all would need to change. For example, the player can push furniture around and potentially through a doorway. A shorter door would require a height check when pushing something like a bookcase. There are probably at least a dozen places in the code that would have to change, and I can't even list them all out. I'll add it to the list.

      For messy rooms, I already have some rooms with clothes on the floor, etc. I didn't want to overdo it because the above ground areas are supposed to be cleaner than the basements. I'm sure I can go back and add more objects to some rooms. I don't think the object count matters as long as they're not full of high vertex count polygon models.

      For building floorplans, I'm sure I could do better. This is probably the most difficult step of procedural cities/buildings, and the one that most often goes wrong and produces unrealistic results. Right now I have a number of different layout templates and some general room partitioning algorithms. I could definitely make an L-shaped building into a hotel or apartments. I just haven't gotten around to that yet. The first step would be to create an L-shaped hallway and make offices, then enable other room types, then extend it to T-shapes and others.

      Delete
    2. For doors I added a small gap between the top of the door and the ceiling, but it's filled with white trim material rather than wall material because that was easier. It's the best I can do for now.

      Delete
  10. Hey frank! i recently updated my visual studio and attempted compiling 3dworld myself again. and the compiler errors as it can't find the assimp dependency. I read through some previous commit logs and found you removed that library as it was no longer needed but the project file still attempts to use it for compiling by default?

    I just wanted to report this as it might not have been your intention.

    ReplyDelete
    Replies
    1. I changed to using vcpkg to install Assimp because there are too many files to include the entire project in 3DWorld, and it has too many dependencies to build from source. See the section "Install on all platforms using vcpkg" here: https://github.com/assimp/assimp/blob/master/Build.md

      Delete