Skip to content

Sherry Li Final Project #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 51 additions & 76 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,74 @@
# Final Project!
Presentation link: https://drive.google.com/file/d/1F-joSUog9_I8KyWL3yK4KM3c83ZqQVwq/view?usp=sharing

This is it! The culmination of your procedural graphics experience this semester. For your final project, we'd like to give you the time and space to explore a topic of your choosing. You may choose any topic you please, so long as you vet the topic and scope with an instructor or TA. We've provided some suggestions below. The scope of your project should be roughly 1.5 homework assignments). To help structure your time, we're breaking down the project into 4 milestones:

## Project planning: Design Doc (due 11/8)
Before submitting your first milestone, _you must get your project idea and scope approved by Rachel, Adam or a TA._

### Design Doc
Start off by forking this repository. In your README, write a design doc to outline your project goals and implementation plan. It must include the following sections:


# Final Project: Townhouse Generator
by Sherry Li

## Design Doc

#### Introduction
- What motivates your project?

When walking around my neighborhood near the west end of campus, I always find myself admiring the facades of the townhouses. Although they share a common structure, each has its own unique charm.

During the Procedural Jellyfish assignment, I really enjoyed making a tool that lets artists tweak many parameters to achieve a desired result and also instantly generate random variations to quickly populate a scene. I believe a similar procedural tool would be ideal for generating townhouses, which are often needed in large numbers along a street and impractical to model individually.

#### Goal
- What do you intend to achieve with this project?

With this project, I intend to create a Houdini procedural modelling tool that lets artists generate variations of townhouse facades by customizing the parameters of a controller node.

#### Inspiration/reference:
- You must have some form of reference material for your final project. Your reference may be a research paper, a blog post, some artwork, a video, another class at Penn, etc.
- Include in your design doc links to and images of your reference material.

Specifically, I aim to reference the architectural style of flat-roof conjoined rowhouses that are [distinctive to Philadelphia](https://philadelphiaencyclopedia.org/essays/row-houses/).

<p align="center">
<img width="600" alt="image" src="https://github.com/sherryli02/final-project/assets/97941858/588fd1c7-869c-47c5-be21-4cd627137c96">
</p>

My goal is to achieve a substantial degree of realism, though not to the point of hyperrealism. Stylistically, I aim to match the environments of animated films and games with stylized characters but much more realistic buildings.

<p align="center">
<img width="600" alt="image" src="https://github.com/sherryli02/final-project/assets/97941858/6e32bf31-babb-4b7f-b2c9-988345c570a5">
</p>

#### Specification:
- Outline the main features of your project.

The user will be able to control various parameters affecting building dimensions, roof styles, brick styles, window and shutter styles, door styles, staircase/door height, colors of each component, presence of items like AC units, flags, and lamps, and other details. I aim to strike a balance between specification and noise/proceduralism such that the user has a high level of control, but not so much that it becomes tedious to construct one house.

Stretch goals include allowing users to simply scrub through a seed to generate infinite random townhouse variations and generating houses in a row along a street.

#### Techniques:
- What are the main technical/algorithmic tools you’ll be using? Give an overview, citing specific papers/articles.

I aim to use a range of Houdini nodes. Ideally, I hope to work with multiparms to customize instances of geometry.

#### Design:
- How will your program fit together? Make a simple free-body diagram illustrating the pieces.

<p align="center">
<img width="600" alt="image" src="https://github.com/sherryli02/final-project/assets/97941858/1b9efc7b-181d-483a-9441-aa16d52d0ac3">
</p>

#### Timeline:
- Create a week-by-week set of milestones for each person in your group. Make sure you explicitly outline what each group member's duties will be.

Submit your Design doc as usual via pull request against this repository.
## Milestone 1: Implementation part 1 (due 11/15)
Begin implementing your engine! Don't worry too much about polish or parameter tuning -- this week is about getting together the bulk of your generator implemented. By the end of the week, even if your visuals are crude, the majority of your generator's functionality should be done.
Milestone 1 (by 11/15): Create the base geometry of all building elements (house, windows, door, staircase, inner details).

Milestone 2 (by 11/27): Refine geometry (bricks, outer details, color).

Milestone 3 (by 11/5): Implement stretch goals if possible (randomization, trees). Polish GUI controls and reate renders.


## Milestone 1


<img width="1512" alt="image" src="https://github.com/sherryli02/final-project/assets/97941858/ec5e5f14-27a5-468f-aedd-fda2d10a9dcd">

For this milestone, I created the base elements of the generator. Before I began constructing my node networks, I spent some time thinking through how I wanted to structure the generator in Houdini, particularly in regards to making it possible for me to later implement my stretch goal of having customization and randomization for a series of houses along a street. I decided on first creating a network to generate a single townhouse with an internal controller node. Later, I can convert it to a HDA and use multiparms with a for loop to generate multiple customizable townhouses.

I procedurally modelled initial versions of the walls, windows, doors, roof, foundation, and staircase, connecting parameters to a controller node as I went along.


Put all your code in your forked repository.

Submission: Add a new section to your README titled: Milestone #1, which should include
- written description of progress on your project goals. If you haven't hit all your goals, what's giving you trouble?
- Examples of your generators output so far
We'll check your repository for updates. No need to create a new pull request.
## Milestone 3: Implementation part 2 (due 11/27)
We're over halfway there! This week should be about fixing bugs and extending the core of your generator. Make sure by the end of this week _your generator works and is feature complete._ Any core engine features that don't make it in this week should be cut! Don't worry if you haven't managed to exactly hit your goals. We're more interested in seeing proof of your development effort than knowing your planned everything perfectly.

Expand All @@ -61,57 +90,3 @@ Submission:
- Update your README with two sections
- final results with images and a live demo if possible
- post mortem: how did your project go overall? Did you accomplish your goals? Did you have to pivot?

## Topic Suggestions

### Create a generator in Houdini

### A CLASSIC 4K DEMO
- In the spirit of the demo scene, create an animation that fits into a 4k executable that runs in real-time. Feel free to take inspiration from the many existing demos. Focus on efficiency and elegance in your implementation.
- Example:
- [cdak by Quite & orange](https://www.youtube.com/watch?v=RCh3Q08HMfs&list=PLA5E2FF8E143DA58C)

### A RE-IMPLEMENTATION
- Take an academic paper or other pre-existing project and implement it, or a portion of it.
- Examples:
- [2D Wavefunction Collapse Pokémon Town](https://gurtd.github.io/566-final-project/)
- [3D Wavefunction Collapse Dungeon Generator](https://github.com/whaoran0718/3dDungeonGeneration)
- [Reaction Diffusion](https://github.com/charlesliwang/Reaction-Diffusion)
- [WebGL Erosion](https://github.com/LanLou123/Webgl-Erosion)
- [Particle Waterfall](https://github.com/chloele33/particle-waterfall)
- [Voxelized Bread](https://github.com/ChiantiYZY/566-final)

### A FORGERY
Taking inspiration from a particular natural phenomenon or distinctive set of visuals, implement a detailed, procedural recreation of that aesthetic. This includes modeling, texturing and object placement within your scene. Does not need to be real-time. Focus on detail and visual accuracy in your implementation.
- Examples:
- [The Shrines](https://github.com/byumjin/The-Shrines)
- [Watercolor Shader](https://github.com/gracelgilbert/watercolor-stylization)
- [Sunset Beach](https://github.com/HanmingZhang/homework-final)
- [Sky Whales](https://github.com/WanruZhao/CIS566FinalProject)
- [Snail](https://www.shadertoy.com/view/ld3Gz2)
- [Journey](https://www.shadertoy.com/view/ldlcRf)
- [Big Hero 6 Wormhole](https://2.bp.blogspot.com/-R-6AN2cWjwg/VTyIzIQSQfI/AAAAAAAABLA/GC0yzzz4wHw/s1600/big-hero-6-disneyscreencaps.com-10092.jpg)

### A GAME LEVEL
- Like generations of game makers before us, create a game which generates an navigable environment (eg. a roguelike dungeon, platforms) and some sort of goal or conflict (eg. enemy agents to avoid or items to collect). Aim to create an experience that will challenge players and vary noticeably in different playthroughs, whether that means procedural dungeon generation, careful resource management or an interesting AI model. Focus on designing a system that is capable of generating complex challenges and goals.
- Examples:
- [Rhythm-based Mario Platformer](https://github.com/sgalban/platformer-gen-2D)
- [Pokémon Ice Puzzle Generator](https://github.com/jwang5675/Ice-Puzzle-Generator)
- [Abstract Exploratory Game](https://github.com/MauKMu/procedural-final-project)
- [Tiny Wings](https://github.com/irovira/TinyWings)
- Spore
- Dwarf Fortress
- Minecraft
- Rogue

### AN ANIMATED ENVIRONMENT / MUSIC VISUALIZER
- Create an environment full of interactive procedural animation. The goal of this project is to create an environment that feels responsive and alive. Whether or not animations are musically-driven, sound should be an important component. Focus on user interactions, motion design and experimental interfaces.
- Examples:
- [The Darkside](https://github.com/morganherrmann/thedarkside)
- [Music Visualizer](https://yuruwang.github.io/MusicVisualizer/)
- [Abstract Mesh Animation](https://github.com/mgriley/cis566_finalproj)
- [Panoramical](https://www.youtube.com/watch?v=gBTTMNFXHTk)
- [Bound](https://www.youtube.com/watch?v=aE37l6RvF-c)

### YOUR OWN PROPOSAL
- You are of course welcome to propose your own topic . Regardless of what you choose, you and your team must research your topic and relevant techniques and come up with a detailed plan of execution. You will meet with some subset of the procedural staff before starting implementation for approval.