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 + +

+ + + + + +

+ +## Design Doc + +### Introduction + + + +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: + +![Frame 3](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/assets/88256581/a134835f-89a2-41ad-83e2-cfb801b750dc) + +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. + +![inspo](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/assets/88256581/b80623c8-1f0a-419a-97cc-71b975b83d39) + + +### 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: +![CIS 5660 Final Project Diagram (1)](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/assets/88256581/47c64ac7-cc7d-4384-846f-02cf8644633a) + +### 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: + + ![Screenshot 2023-11-26 190938](https://github.com/CIIINDYXUU/Procedural-Terrarium-Generator/assets/88256581/fa523889-bdf2-4351-afa3-9c95983bcd9a) + +

+ + + + + + + + +

+ +One major challenge I faced when building the generator was implementing the "golden ratio" algorithm. I was able to generate points following a phyllotactic pattern using VEX I learned from [this tutorial](https://www.youtube.com/watch?v=7xD1JgQTQKY), but I had a lot of difficulty figuring out how to create a petal shape and attach it correctly to each point. With the deadline approaching, I had to pivot and change my strategy -- mainly using the **skin** node to craft the petals and revolving those petals around circles. While I'm disappointed I couldn't figure out how to implement phyllotaxis as I originally planned, I'm overall satisfied with the look of the current version! + +My main goal for the next milestone is to tweak the generator to potentially add more controls for petal bending as well as implement color, which is crucial for creating a variety of visually interesting succulents. I want to try my hand at creating a cacti generator to go alongside the succulents, and I will be following [this tutorial](https://www.youtube.com/watch?v=BhXcOzpDQ1g) to build my ceramic pots with soil/pebbles. + + +## Milestone 3 + +### Succulent, Cacti, and Pot Generators +For Milestone 3, I created three different generators for building variations of succulents, cacti, and containers for the plants. As of the deadline, every generator is feature complete and I'm very happy with the overall look and user controls! Using my generator, I created some different succulents and cacti and arranged them into the composition below. + +

+ +

+ + +#### Succulent +After Milestone 2, I added more controls for petal bend, allowing petals to curl in on themselves and have more overall bend. I also used VOPs, mainly a color ramp and noise, to add color controls and a waxy-looking texture that appears on real-life succulents. + +

+ + +

+ +#### Cacti +Similarly to my succulent generator, I made my cacti generator mainly using a **skin node** and circles to form the base cacti mesh. I also created spines that got copied to points along the outer ridges of the cacti. The user can use ramps to adjust the cacti's and spines' shape and has access to a variety of different controls such as height, scale, twist, spine length, spine frequency, and more. + +

+ + +

+ +#### Pot +To make the pot generator, I followed this helpful [YouTube tutorial](https://www.youtube.com/watch?v=BhXcOzpDQ1g). I modeled a pot and accompanying tray and created an adjustable layer of soil using a **blast node** and a **mountain node** to add some realistic variation. I also procedurally modeled an extra pebble/soil layer using a **scatter node** to get a series of points on the soil layer and copied spheres affected by a **mountain node** to the points. + +

+ + +

+ +### Goals for the Future +Based on the feedback received from class, I see some potential ways to spruce up this tool and polish it further. Since there are so many different possibilities for the succulent petal shapes it can be hard to replicate the exact parameters used to create certain shapes. So, I'm also thinking of creating and saving some ramp presets to make a more efficient and artist-friendly tool. If time permits, I also want to tackle random generation, using a global seed to create random succulents, cacti, and overall compositions. If I can't get the randomization done in time, I will go with my original plan of manually placing my generated plants into nice, aesthetic compositions. + +While I may not be able to fit these into the final submission, I am looking forward to further refining this tool in the future! :) diff --git a/finalproject.hipnc b/finalproject.hipnc new file mode 100644 index 00000000..6cc35465 Binary files /dev/null and b/finalproject.hipnc differ diff --git a/finalprojectRenders.hipnc b/finalprojectRenders.hipnc new file mode 100644 index 00000000..9d41140d Binary files /dev/null and b/finalprojectRenders.hipnc differ