Visual Effects Studio I


This is a brief journal that will catalogue my progress between classes. For the most part, I will be providing screen captures of what the building looks like at the start of that class, as well as a snapshot of what the parameters look like (so the development can more easily be seen).

Class 1

Presented my project proposal to the class. I included reference photographs as well as a basic project timetable for deadlines. Overall goal is to create a procedural system for this penitentiary that does as much as possible procedurally with controls to pseudo-artistically control stuff, including lights, number of cells and open doors, door types, etc. Everything is created in Houdini, the majority uses ForEach nodes, and Python scripts will be developed as necessary.

A lot of source photography reference for how I want the light to look, as well as texture and detail references can be seen in my personal photographs of Eastern State Penitentiary.

Week 1

Procedural Structure

Week 2

Procedural Structure

Week 3

Procedural Lights

Week 4

Procedural Texturing

Week 5

Flex Time

Week 6

Artistic Lighting

Week 7

Procedural Texturing

Week 8

Non-Procedural Details

Week 9

Rendering and Post-Production

Week 10

Troubleshooting and Breakdown

Class 2

Basic build of building getting template in place. Have controls to rotate wings correctly and create a second floor. Modifies roof accordingly.

Class 3

Refinements of buildings shape and size. Addition of tower and tower controls.

Class 4

Details added. Cutout for skylights (bad cookies). Center tower details. Finner controls and refinements created.

Full view of parameters here.

Class 5

Many errors and issues fixed. Troubleshooting of all parameters to reduce errors or unexpected results - fixed anything that was wrong. More accurate details and controls overall. More intuitive controls of parameters with complete functionality of logical disabling (i.e. if a parameter shouldn't be allowed to be changed due to another parameter, it doesn't allow you to modify the first parameter).

Full view of parameters here.

Class 6

Overall modeling completed (with few exceptions).

Full view of parameters here.

Initial development of light instancing controls which take points created from the geometry and reads them in to an instance node. Lights with full controls are created for every light type. Not functioning, simply built the parameters. Everything is done using Python scripts on a HDA.

Network level one: "/obj"

Network level two: "/obj/instance2"

The Python scripts are stored in this digital asset: light_insted

Network level three: "/obj/instance2/light_insted"

object_merge2 - reads in the points for the lights from the source geometry (the penitentiary)

material1 - has all of the light overrides so that eash light type can have a seperate light color, intensity, cone angle, etc.

Below are the controls for all of these instanced lighs. At the top are "master" controls that will, if enabled, make all lights of the same type (regardless of wing) the same. Below are individual controls for the lights, per wing. Each group has seperate controls. Everything is created from the click of the "Update All" button. It reads information from the parameters of the penitentary as well as from the Python script. Everything is intuitively created (i.e. if there is no second floor for a wing, the 5th light type will not be created for that wing's controls).

Example of high-level controls for a wing with only 4 types of lights.

Example of high-level controls for a wing with all 5 types of lights.

Object_merge takes the points from the source geometry.

On the Material node, expressions are created on each value to reference the high-level values.

All of the overrides are created and named properly.

Quick rendered light test. Render was over 30 minutes (way too long).

Class 7

Continued development, refinement, and optimization of procedural lights (render tests down to 1-3 minutes per frame). Created an "Render Optomize" button that querries the values of all of the parameters that were created from the "Update All" button to see if light is being emitted, if not, points of that light type are deleted. This saves render times dramatically, likely because each point that wasn't casting light isn't trying to calculate shadows for that point, or do the calculations for the light per point. The script attached to that button will set up the Delete node in the network correctly.

Two new buttons: "Render Optomize" and "Store Light Values"

Network level three: "/obj/instance2/light_insted"

Delete node added and updated correcly for optomized renders.

To work around the issue of parameters being deleted on any modification or load of the asset I started development on a way to write out the light values to an external file. The "Store Light Values" button performs this task. Another button will need to be developed to read the values back into Houdini.

The number of light shader overrides has been increased to 6 instead of the previous 5. This was to fix the "broken" light controls and overrides per light type. I forgot to enable the controls through the additional light override of docone which is set to 1 for enabled.

Finally, I started to experiment with UV texture placement and creation for the geometry.

Class 8

Minor developments, none of which provided significant visual differences. Mostly worked on getting the storage of light values and read back in of parameters to function properly.

Also worked on a way to disable unused parameters based on the light strength (Attenuation).

Class 9

Fixed issue with light instanced parameters that weren't functioning properly. It was a result of a miss-named parameter within a multiparm block (my mistake). Even though I no longer had a need for the "Store Light Values" button/script and it's counterpart, I finished the scripts and both buttons work properly. Note: it will not manage animated values - values are written out based on the current frame.

Finalized "Store Light Values" and "Read In Light Values From File" buttons and scripts.

Example of the changes to the parameters for the Delete node.

Finalized all Python functions for the instanced light controls. Cleaned up and fully commented my code. Promoted high-level, reused values outside of each function. Light instancing scripts.

Continued development of procedural UV'ing and texturing.

Overview of UV's across the peitentiary. Pale-green means there are no UVs.

View of UV's from persepctive of the camera.

View from the camera of textures within Houdini.

Render from camera of textures - no lighting.

Class 10 -- MIDTERM

Presented my project for the class for midterm view. Had lighting and texturing progress across the entire system.

Overview of UV's across the peitentiary. Everything (except for the center tower) has been procedurally UV'ed.

View of UV's from persepctive of the camera.

Lighting, texturing, and render progress with comparisons. Quick, high-level experiment with using a global illumination (GI) light to fill out the blacks some.





Quick Review:

Modeling needs: stairs to second floor, ledge and walkway for second floor, railings for walkway for second floor, bed frames for cells, gates and doorways near the passageway from the center tower.

Lighting needs: experiment with lighting methods, experiment more with global illumination lights, experiment with area or portal lights to get the "cut off" look of the lights.

Texturing needs: find out why the ceiling texture is not showing up as strongly as it should - is it light or texture based, texture the interior center rotundra for the center tower, continue refinements of specularity of all materials.

Misc needs:Continue to optomize and reduce render times as much as possible. Concider baking out geometry of penitentiary to reduce cook times pre-render.

Class 11

Developed pair of scripts to help speedup look development workflow. One set will toggle materials throughout a network (to help determine what is ligh and what is material in the final renders, and to render optomize test). The other set will toggle displacement on and off for all material nodes in a SHOP network.

Materials enabled.

Materials disabled.

Discovered that "Read in Light Values from File" script didn't work (I must have messed something up from when it was working a week ago). Wasn't able to fix before class time.

Class 12

Fixed "Read in Light Values from File" script.

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 13

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 14

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 15

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 16

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 17

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 18

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 19

--Include pictures of building overview and paramater list, plus a brief description of progress.--

Class 20

--Include pictures of building overview and paramater list, plus a brief description of progress.--


This class allows for the development of one complete, demo reel worthy project. I took the opportunity to revisit my Houdini procedural modeling skills while expanding on Houdini multi-parms, assest/parameter development (specifically through Python), the ForEach node, and light instancing.

Back to Top