|
| 1 | + |
| 2 | +# Project 5: Shape Grammar |
| 3 | + |
| 4 | +For this assignment you'll be building directly off of the L-system code you |
| 5 | +wrote last week. |
| 6 | + |
| 7 | +**Goal:** to model an urban environment using a shape grammar. |
| 8 | + |
| 9 | +**Note:** We’re well aware that a nice-looking procedural city is a lot of work for a single week. Focus on designing a nice building grammar. The city layout strategies outlined in class (the extended l-systems) are complex and not expected. We will be satisfied with something reasonably simple, just not a uniform grid! |
| 10 | + |
| 11 | +## Symbol Node (5 points) |
| 12 | +Modify your symbol node class to include attributes necessary for rendering, such as |
| 13 | +- Associated geometry instance |
| 14 | +- Position |
| 15 | +- Scale |
| 16 | +- Anything else you may need |
| 17 | + |
| 18 | +## Grammar design (55 points) |
| 19 | +- Design at least five shape grammar rules for producing procedural buildings. Your buildings should vary in geometry and decorative features (beyond just differently-scaled cubes!). At least some of your rules should create child geometry that is in some way dependent on its parent’s state. (20 points) |
| 20 | + - Eg. A building may be subdivided along the x, y, or z axis into two smaller buildings |
| 21 | + - Some of your rules must be designed to use some property about its location. (10 points) |
| 22 | + - Your grammar should have some element of variation so your buildings are non-deterministic. Eg. your buildings sometimes subdivide along the x axis, and sometimes the y. (10 points) |
| 23 | +- Write a renderer that will interpret the results of your shape grammar parser and adds the appropriate geometry to your scene for each symbol in your set. (10 points) |
| 24 | + |
| 25 | +## Create a city (30 points) |
| 26 | +- Add a ground plane or some other base terrain to your scene (0 points, come on now) |
| 27 | +- Using any strategy you’d like, procedurally generate features that demarcate your city into different areas in an interesting and plausible way (Just a uniform grid is neither interesting nor plausible). (20 points) |
| 28 | + - Suggestions: roads, rivers, lakes, parks, high-population density |
| 29 | + - Note, these features don’t have to be directly visible, like high-population density, but they should somehow be visible in the appearance or arrangement of your buildings. Eg. High population density is more likely to generate taller buildings |
| 30 | +- Generate buildings throughout your city, using information about your city’s features. Color your buildings with a method that uses some aspect of its state. Eg. Color buildings by height, by population density, by number of rules used to generate it. (5 points) |
| 31 | +- Document your grammar rules and general approach in the readme. (5 points) |
| 32 | +- ??? |
| 33 | +- Profit. |
| 34 | + |
| 35 | +## Make it interesting (10) |
| 36 | +Experiment! Make your city a work of art. |
| 37 | + |
| 38 | +## Warnings: |
| 39 | +If you're not careful with how many draw calls you make in a single `tick()`, |
| 40 | +you can very easily blow up your CPU with this assignment. As with the L-system, |
| 41 | +try to group geometry into one VBO so the run-time of your program outside of |
| 42 | +the time spent generating the city is fast. |
| 43 | + |
| 44 | +## Suggestions for the overachievers: |
| 45 | +Go for a very high level of decorative detail! |
| 46 | +Place buildings with a strategy such that buildings have doors and windows that are always accessible. |
| 47 | +Generate buildings with coherent interiors |
| 48 | +If dividing your city into lots, generate odd-shaped lots and create building meshes that match their shape .i.e. rather than working with cubes, extrude upwards from the building footprints you find to generate a starting mesh to subdivide rather than starting with platonic geometry. |
0 commit comments