diff --git a/README.md b/README.md index 2859b45..1301537 100644 --- a/README.md +++ b/README.md @@ -9,29 +9,105 @@ Before submitting your first milestone, _you must get your project idea and scop 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? +- My final project revolves around recreating the city of Apotos from Sonic Unleashed in Houdini. The idea is to apply multiple concepts learned throughout the class such as noise functions, procedural geometry generation and city creation to achieve an aesthetically pleasing result. #### Goal -- What do you intend to achieve with this project? +- The goal of my project is to make an efficient procedural Apotos builder in Houdini using a combination of Procedural house generation with controls and procedural terrain. The idea is that the city should look organic so it should have also trees and plants, correct materials and the structure placement should follow a logic that makes sense in the real world. For example we expect to have house along the streets in the city. +- Ultimitely the objective with this project is not scale but actually have a couple of realistic looking blocks of the village that mimmic the style of the game really well. + #### 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. +- Images of Apotos in Sonic Unleashed (Game art and gameplay) + +![](ref1.png) + +![](ref2.png) + +![](ref3.png) + +![](ref4.png) + +![](ref5.png) + +![](ref6.png) + +![](ref7.png) + +![](ref8.png) + + +- Gameplay of the level + +https://www.youtube.com/watch?v=j4OBe-rONR4 + #### Specification: -- Outline the main features of your project. +- Procedural greek style houses. These will add different variations on window and door placement, roof adornments, color of windows. Varying modules will make up the total size based on the width, height and depth selected by the user. +- Procedural style mills with varying height. +- White stone material. +- User defined streets painted with the Path tool of Hudini. +- HDRI for sky downloaded online. +- Decorating assets placed procedurally such as barrels and bushes. +- Procedural terrain elevation. +- Procedural water base. #### Techniques: -- What are the main technical/algorithmic tools you’ll be using? Give an overview, citing specific papers/articles. +- First I'll start by building the house generator using this tutorial and changing the geometry to make it more greek looking: +https://www.youtube.com/watch?v=r0e7M2B7dL0&list=PLXNFA1EysfYnxvrW27g6e5HhTwKBM2TZC +- Then I'll generate wind mills following this tutorial +https://www.youtube.com/watch?v=afHVjiNeH7A&t=2s +- Then I will generate the Terrain using this tutorial as a reference: +https://www.youtube.com/watch?v=rwLbiuKX5D0 +- I will generate the cobblestone paths using this tutorial: +https://www.youtube.com/watch?v=QH6Kk7_AJec +- I will make the base stone material white and change the color of the wood material. +- I will look for decorator assets online such as barrels, bushes and lamps that will be placed based on the previously referenced material. +- Will follow some of the tips here for material setup +https://www.youtube.com/watch?v=IcbzGNqnFkA + + #### Design: -- How will your program fit together? Make a simple free-body diagram illustrating the pieces. + +![](diagram.jpg) #### 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. +- (11/9) Mileston 1 work: have the terrain generation, the house generator and the mill generator HDAs done. +- (11/16) Add some decorator such trees and barrels. +- (11/23) Milestone 2 work: have the houses realigned as well as mills. Avoid overlapping geometry. Add optimizations with any file caching as needed and setup camera for renders. Have the base layout of a couple of blocks of the village. +- (11/28) Final submission work: Download HDRIs and any missing material to prepare renders. Create renders. +- (12/5) Have the renders ready Submit your Design doc as usual via pull request against this repository. ## Milestone 1: Implementation part 1 (due 11/16) + +* Added house generator: based on an extruded L system with random window types and door placement plus roof and no roof mode. + + +![](house2.png) + +![](house3.png) + +![](house4.png) + + +* Added procedural terrain: various types of noise and masks to get terrain + + +![](proceduralterrain.png) + + +* Road generator: using voronoi noise and curve projections + + +![](roadgenerator.png) + + +* General state of things: I'm behind on the mill generator. The house generator took me longer than expected but I should have it ready for next milestone. Also haven't been able to push houdini files yet because they are too heavy. Looking to solve that. + +![](stateOfThings.png) + + 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. @@ -41,6 +117,25 @@ Submission: Add a new section to your README titled: Milestone #1, which should - 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/28) + +![](milestone2progress.png) + + +* Added more details to the road and adjusted form. +* Added procedural windmill created with L-Systems. +* Added Polyhaven sky hdri. +* Added more detail to the terrain. +* Added quixel megascans assets for materials in road, house concrete, windmill, grass, and cliffside. + +![](milestone2progress2.png) + +* Added tree part. +* Since the file is too heavy for github I loaded it here to google drive https://drive.google.com/drive/folders/1ktqONZbyFW1bz0l2qw-rwIQqHJL6xMoR?usp=sharing. +* I'm still missing some materials and some assets like grass scattering. + + + + 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. @@ -52,7 +147,43 @@ 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) + +Link to content and assets: https://drive.google.com/drive/folders/1ktqONZbyFW1bz0l2qw-rwIQqHJL6xMoR?usp=share_link +The quixel assets are in the Downloaded folder, so certain paths would have to be reset for the project to look well locally. + +# Things I accomplished for this submission: + +* Added textures and materials for all objects. +* Added Trees, Grass, and scattered rocks. +* Polished house placement. +* Did final render edited colors with post process effect. + +# Final result render + +![](imageRenderFinalEdited.png) + +# Post mortem + +I believe my project went very well. I encountered some limitations in terms of hardware. For example I wanted more detailed grass and also have bodies of water but my laptop was not strong enough to handle it. So that made me make different choices such as scattering rocks in the valley. + +Having a set camera from the beginning allowed me to cut back on a lot of geometry that would not end up in the frame. But, this also elminated my flexibility on composition in the end. + +I believe this project was a great experience since I got to interact with a lot of different techniques and tools we used during the course such as: L-System, Procedural materials, Procedural geometry creation for villages/cities, Curved paramter, noise for terrain ,element placement and more. +I think in the future I would like to experiment more with procedural city creation since I found it to be very fun. + +Also, this project was an opportunity to learn a lot of parts of Houdini and took me out of my confort zone of classic coding. I feel I have so much more to learn but it was a great starting place. + +Ideally I would have love to use the generated environment in a game prototype but due to limited time I couldn't. +There are things I would like to expand on in the future, such as improving the scale of the city, adding more variation on the assets and large bodies of water. + + +## Rest of the assignment explanation + 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: diff --git a/diagram.jpg b/diagram.jpg new file mode 100644 index 0000000..7f9cf23 Binary files /dev/null and b/diagram.jpg differ diff --git a/house2.png b/house2.png new file mode 100644 index 0000000..ce08546 Binary files /dev/null and b/house2.png differ diff --git a/house3.png b/house3.png new file mode 100644 index 0000000..ab551ca Binary files /dev/null and b/house3.png differ diff --git a/house4.png b/house4.png new file mode 100644 index 0000000..420f071 Binary files /dev/null and b/house4.png differ diff --git a/imageRenderFinal.png b/imageRenderFinal.png new file mode 100644 index 0000000..81dc842 Binary files /dev/null and b/imageRenderFinal.png differ diff --git a/imageRenderFinalEdited.png b/imageRenderFinalEdited.png new file mode 100644 index 0000000..81dc842 Binary files /dev/null and b/imageRenderFinalEdited.png differ diff --git a/milestone2progress.png b/milestone2progress.png new file mode 100644 index 0000000..070c778 Binary files /dev/null and b/milestone2progress.png differ diff --git a/milestone2progress2.png b/milestone2progress2.png new file mode 100644 index 0000000..0df7bb1 Binary files /dev/null and b/milestone2progress2.png differ diff --git a/proceduralterrain.png b/proceduralterrain.png new file mode 100644 index 0000000..7c99eae Binary files /dev/null and b/proceduralterrain.png differ diff --git a/ref1.png b/ref1.png new file mode 100644 index 0000000..3667170 Binary files /dev/null and b/ref1.png differ diff --git a/ref2.png b/ref2.png new file mode 100644 index 0000000..6c8f2cb Binary files /dev/null and b/ref2.png differ diff --git a/ref3.png b/ref3.png new file mode 100644 index 0000000..2579d23 Binary files /dev/null and b/ref3.png differ diff --git a/ref4.png b/ref4.png new file mode 100644 index 0000000..e2ba191 Binary files /dev/null and b/ref4.png differ diff --git a/ref5.png b/ref5.png new file mode 100644 index 0000000..30e0013 Binary files /dev/null and b/ref5.png differ diff --git a/ref6.png b/ref6.png new file mode 100644 index 0000000..eb35136 Binary files /dev/null and b/ref6.png differ diff --git a/ref7.png b/ref7.png new file mode 100644 index 0000000..84efa12 Binary files /dev/null and b/ref7.png differ diff --git a/ref8.png b/ref8.png new file mode 100644 index 0000000..df4692b Binary files /dev/null and b/ref8.png differ diff --git a/roadgenerator.png b/roadgenerator.png new file mode 100644 index 0000000..efdb159 Binary files /dev/null and b/roadgenerator.png differ diff --git a/stateOfThings.png b/stateOfThings.png new file mode 100644 index 0000000..2e3f7b4 Binary files /dev/null and b/stateOfThings.png differ