Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
170 changes: 66 additions & 104 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,117 +1,79 @@
# Final Project!

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:

## Milestone 1: Project planning (due 11/15)
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:
# Procedural Flower Tool

#### Introduction
- What motivates your project?
When I first started learning about proceduralism, I was always fascinated by the occurrences of proceduralism in nature such as fractal plants and flowers. Here’s a link to some cool instances of fractals in nature http://eeobcourseblogwolfestudents.blogspot.com/2014/12/qu.html
In this project, I will explore how to create a tool that makes various blooming flowers in Houdini.

#### Goal
- What do you intend to achieve with this project?
I envision the final output of this project being an art directable flower tool, that allows the user to easily and quickly create beautiful flowers with high variance. I am also interested in learning more about Houdini’s features, specifically in animation and simulation. I hope to add in features such as customizable animations depending on the flower bloom and wind simulation.

#### 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.
Here is a link to some visual inspiration of different types of flowers blooming in slow motion: https://youtu.be/CV2P-xsEiYE?t=1398
Procedural baobab flower breakdown: https://vimeo.com/321053835
Never ending flower bloom: https://www.youtube.com/watch?v=J2rDQtsTwzo&ab_channel=Entagma

This may not be extremely relevant to the scope of this project, but I found a design simulation talk that looked really interesting. It may be something I can incorporate into the tool to make it more abstract and fantasy like in the future: https://www.youtube.com/watch?v=jeuo5DjRsq0&ab_channel=Houdini

#### Specification:
- Outline the main features of your project.
1. Create a basic tool that generates a single flower procedurally
- Import a petal with a texture and rotate around center n number of times
- Add blooming animation that follows pattern from visual reference
2. Fine tune tool to add more variance and input controls
- Focus on getting a really nice render of one flower - will have to learn how to light a scene
3. Use flower tool to fill a bouquet of flowers or populate some organic scene


#### Techniques:
- What are the main technical/algorithmic tools you’ll be using? Give an overview, citing specific papers/articles.
The technical aspect of this project will involve problem solving in how to recreate certain patterns and features of the flowers procedurally in Houdini. While some of the flowers have a relatively consistent shape radially, other flowers like orchids do not bloom directly from the center, and their petal shapes are a bit more irregular.

#### Design:
- How will your program fit together? Make a simple free-body diagram illustrating the pieces.
Creating a tool that gives the user flexibility to create flowers of all different petal shapes and blooming patterns will definitely be an interesting technical challenge!

Here is a great example of a similar tool made using Houdini: https://80.lv/articles/procedural-flower-tool-in-houdini/

#### 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 2: Implementation part 1 (due 11/22)
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.

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/29)
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.

Put all your code in your forked repository.

Submission: Add a new section to your README titled: Milestone #3, which should include
- written description of progress on your project goals. If you haven't hit all your goals, what did you have to cut and why?
- Detailed output from your generator, images, video, etc.
We'll check your repository for updates. No need to create a new pull request.

Come to class on the due date with a WORKING COPY of your project. We'll be spending time in class critiquing and reviewing your work so far.

## Final submission (due 12/6)
Time to polish! Spen this last week of your project using your generator to produce beautiful output. Add textures, tune parameters, play with colors, play with camera animation. Take the feedback from class critques and use it to take your project to the next level.

Submission:
- Push all your code / files to your repository
- Come to class ready to present your finished project
- 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.
Week 1:
Create basic tool that generates a simple flower with basic animation
Week 2:
Fine tune tool to add more variance and increase complexity
Learn how to create a high quality render
Week 3:
Create final scene using tool with at least 5-6 different types of flowers and plants
Add finishing touches like wind simulation and dust particles

# Milestone 2
For this milestone, I followed a tutorial to make a simple flower bloom with textures. It was great to learn about animation and I have started thinking about how to edit the parameters to make the tool customizable for many different types of flowers.

# Milestone 3
![image](renders/Active_Render.0001.0.png) ![image](renders/rose.png)

### Golden Ratio Petal Structure
Originally, the way I was creating the petal pattern for the flower was a simple loop around a circle. However I wanted to create a tool with more complex features that outputed an organic looking flower. I found this interesting rose render: https://www.youtube.com/watch?v=SN6por9uaCI&ab_channel=MotionDesignersCommunity and followed Vladyslav Lavrenov's scene files to produce a set of points that spiral based on the golden ratio.

Here is a quick summary of the algorithm used:
For every petal in the flower, I want to calculate the petal's position by finding its polar coordinates (radius and angle). The radius is proportional to the number of petals, so that the spiral continues to grow as we increase the petals. The golden angle is added to the angle for every petal, driving the spiral's curve.

![image](renders/spiral_points.PNG)

### Flower and Petal Parameters
Parameters are categorized into flower paraemeters, for changes to the overall shape of the flower, and petal parameters, for changes to individual petals. I wanted to focus on improving the usability of the tool and fine tuning the parameters of the petal subnetwork to maximize flower variance and allow artistic specificity.

After studying many different types of flowers, it became apparent that there is a relationship between the petal's distance from the center and the petal's size and bend amount. For this reason, I thought it would be best to have the petal size and bend amount be ramp parameters based on the petal's distance from the center. "Petal Bend" controls the overall concavity of the petal, while "Petal Top Bend" controls how much the petal flares out from the top, and the "Petal Side Bend" controls how much the petal folds in on itself. Based on the values and positions of these parameters, a user can create a rose or a tulip!

Link to demo of parameters: https://vimeo.com/650966824

### Goals
Now that I have successfully created a tool that procedurally models various types of flowers, I would like to acheive the following for the final submission:
1. Create at least 3 different types of flowers using the tool and output high quality renders.
2. Add a stem feature (potentially having the user draw a curve for the stem to follow and have the flower blossom on the end of it)
3. Add more procedural details to model the center of the flower: filaments, anthers, stigma, etc.


# Final Submission
### Results
To add the final touches on my tool, I created a feature that allows the user to create a curve based stem with fine tuned parameters such as the amount of stem taper and the curve resample size. The user can also choose to add randomly placed leaves along the stem, specifying the density, type of bend, and shape of the leaves. The most challenging part of adding the stem features was probably figuring out how to configure the normals so that they faced in the direction of the curve. I ended up using a polyframe node to set the normals to the tangent vectors of each point along the curve. This allows the flower to face in any direction that user specifies according to their drawn curve.

Here is a final render of a vase of tulips and roses, created using my flower tool: ![image](renders/vase.png)

### Final Thoughts
This was an amazing to way to learn how powerful Houdini can be for procedural tool building. While it took a while to get the hang of the node system, I found it easy to translate my coding skills into a more visual form of scripting. I am really excited to continue working on this tool. I'd like to add a few more procedural elements, and maybe even add some animations of a flowers turning into other types of flowers!

Loading