diff --git a/README.md b/README.md index 3f5b1e71..cc40f181 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,167 @@ -# 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: - -## 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: - -#### Introduction -- What motivates your project? - -#### Goal -- What do you intend to achieve with this project? - -#### 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. - -#### Specification: -- Outline the main features of your project. - -#### Techniques: -- What are the main technical/algorithmic tools you’ll be using? Give an overview, citing specific papers/articles. - -#### Design: -- How will your program fit together? Make a simple free-body diagram illustrating the pieces. - -#### 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. - -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. - -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/5) -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. +# CIS 5660 Final Project: Procedural Terrarium Generator + +As the final project for my Procedural Computer Graphics course at Penn, I developed a SideFX Houdini Generator Tool that allows users to create variations of succulents and cacti using procedural modeling. + +### [Final Presentation Slides](https://docs.google.com/presentation/d/1w8xcrTtV7Av6USqMMAVL6e4-5wygFOCWcM9LKY3COJE/edit?usp=sharing) +### [Video Demos for Generators](https://drive.google.com/file/d/1Eeo94UtBY_vV1yXrRKvDlulw4skYYJ7O/view?usp=sharing) + +### Table of Contents + +* [Final Renders](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/blob/main/README.md#final-renders) +* [Milestone 1: Design Document](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/blob/main/README.md#design-doc) +* [Milestone 2: Creating a Basic Succulent Generator](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/blob/main/README.md#milestone-2) +* [Milestone 3: Building the Succulent, Cacti, and Pot Generators](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/blob/main/README.md#milestone-3) + +## Final Renders + +
+
+
+
+
+
+
+
+The motivation behind this project is to utilize the power of proceduralism to replicate naturally occurring phenomena from real-life flora! I was especially drawn to the concept of ___phyllotaxis___, the phenomenon in botany where leaves or petals are arranged around a stem in a spiraling pattern. Phyllotactic patterns (Fibonacci sequences, Golden Ratio, etc.) can be observed in a variety of plant species, such as succulents, which result in beautiful and fascinating geometric patterns.
+
+Succulents come in various shapes, sizes, colors, and arrangements, making them an interesting subject for procedural modeling. While there are endless types of succulents, for this project I will focus on the ___echeveria___, a type of succulent known for its aesthetic, rosette-shaped design.
+
+### Goal
+Through this project, I hope to accomplish the following:
+1. Develop a procedural modeling tool that generates different variations of succulents, enabling users the creative freedom to create a wide range of succulent species and designs.
+2. Continue developing my procedural modeling skills in Houdini, gaining hands-on experience with creating a user-friendly and intuitive tool for 3D artists
+3. Create beautiful and realistic final renders of terrariums, populated with succulents (and potentially other greenery like cacti if time permits) generated with my Houdini tool.
+
+### Inspiration and Reference Images:
+
+There are endless variations of echeveria succulents which means tons of inspiration to draw from! Below are a few examples of different succulent shapes, colors, and arrangements:
+
+
+
+I also found references to visualize what the final renders could look like. From ceramic pots to glass containers, I plan to draw direct inspiration from these photos when designing my terrariums.
+
+
+
+
+### Specification:
+
+The main features of this project include:
+1. The procedural succulent generator allowing users to control multiple parameters
+ - Parameters such as:
+ - number of petals
+ - roundness vs. pointiness of the petal tip
+ - bend angle of the petals
+ - width and length of petals
+ - scale of the entire succulent
+ - distribution of color
+2. Terrarium containers, both glass and ceramic versions modeled and textured in Houdini
+3. Polished final renders of terrariums with variations of succulents
+
+#### Extra Credit Features:
+1. A procedural cacti generator allowing users to control multiple parameters:
+ - Parameters such as:
+ - scale of the cacti
+ - amount of ridges
+ - density of spines
+ - length of spines
+ - amount of twist
+2. Implementing procedural placement, allowing the user to randomly generate arrangements of the succulents
+
+### Techniques:
+
+For this project, I anticipate using Houdini procedural modeling techniques learned throughout the semester and VEX. I have also collected some helpful tutorials, articles, and a paper:
+- [Procedural Succulents by Kilian Baur](https://80.lv/articles/006sdf-procedural-art-plant-generation-in-houdini/) - Article breaking down one artist's workflow when creating procedural succulents
+- [Fibonacci Flower in Houdini by Junichiro Horikawa](https://www.youtube.com/watch?v=nPWQpQQgWJM) - Youtube Tutorial outlining how to create a Fibonacci pattern in Houdini
+- [Procedurally Model Pot & Snake Plant | Houdini Tutorial](https://www.youtube.com/watch?v=BhXcOzpDQ1g) - Youtube Tutorial on how to create a snake plant and a pot. Will refer to this when modeling pots and soil.
+- [The use of positional information in the modeling of plants](http://algorithmicbotany.org/papers/sigcourse.2003/2-27-positional.pdf) - Paper describing the mathematics and algorithms behind phyllotaxy in plants.
+
+### Design:
+
+
+### Timeline:
+
+#### Week 1 (11/8 - 11/15):
+- Implement a working Houdini tool that can generate basic succulent geometry
+ - Expose parameters for users to create custom succulents
+ - If time permits, implement color control
+
+#### Week 2 (11/16 - 11/27)
+- Continue to refine the succulent generator tool, adding color and tweaking the shape
+- Model different versions of the terrarium containers, including round glass containers and ceramic pots
+- If time permits, experiment with creating a cacti generator tool
+
+#### Week 3 (11/28 - 12/5)
+- Create final renders
+ - Generate different variations of succulents and manually place the succulents into the terrariums
+ - Add some soil and/or rocks into the terrariums
+ - Add lighting and apply materials
+
+
+## Milestone 2
+
+### Building the Succulent Generator
+
+ For Milestone 2, I created a working succulent generator that allows the user to adjust the petal's shape and depth using ramps as well as control other parameters such as petal count, petal bend, layers, width, length, and depth. Below are some examples of succulent models created using my generator:
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+