Moon Island --- Final Project of Rendering and Shading class

Final Project Moon Island 

VIZA616 Rendering and shading, Spring 2020


Jiaqi Cui
---------------------------------------------------------------------------------------------

This is the conceptual diagram I just started to do. (All models are created by myself). I have given the same color to all buildings of the same material, which is convenient for future work. All the models in the scene were made by myself. This scene has a background story: The moon suddenly disappeared one day, so on a small island, the residents built their own moon tree.



The picture below is my Visual Goal. I want to render my scene in a Stylized style. My professor told me that it would be relatively simple to make a photorealistic look. The Stylized style needs some abstraction, and it is difficult to make. But I really like the serious and cute look of Stylized. My plan makes it photo-realistic first, then apply distortion function on it to make them look like stylized.


I also have greater ambitions regarding Shader. I saw someone on the Internet who made such a three-dimensional rendering into a two-dimensional stylized renderer. This is the direction I am very, very interested, and very, very much want to do. After finishing the production of this island, I plan to go deeper towards the development of Shader in Unity or Unreal.

                                          https://youtu.be/DfoVhtqoiGk

---------------------------------------------------------------------------------------------
Render Image without environment and light:


Daylight environment render image:

Night environment render image:

Another possibility --- Micro Island in a Jar


---------------------------------------------------------------------------------------------

Familiar with noise features:

I tried all the examples my professor gave me and put an outcome picture for each expression.  
DEMO LINK:

Work Flow:
BaseColor -> Specular ->Normal -> Displacement

Create base color use scripting, then create a more complex procedural PxrSurface node based on the feature of the material.

Technical Goal:
1. Understand procedural pattern creating, use PxrOSL, SeExpr, and C++ create pattern layer by layer then distortion on U and V direction by a different noise
function.

2. Familiar with different parameters of PxrSurface(Diffuse, Specular, BumpNormal, ClearCoat, Fuzz, SubSurface, Glass, and Displacement), use them to recreate the features of Wood, Stone, Moon, Water, etc.

---------------------------------------------------------------------------------------------
Materials need to be created:

1.Wood: for most of the building [O]

2.Concrete: for the main body of the tower [X] C++

3.Stone: for rock [O]

4.Sand: for Island’s ground [O]

5.Water: for sea [O]

6. Moon [O]

7. Lifebuoy [X] C++

8. Tiles [X] C++
---------------------------------------------------------------------------------------------
Step0: Experimental Toon-Style Shader (OSL#3)

Because Renderman' PxrOSL does not support Closure and Vray, I couldn't get the correct light direction. So I used a position to simulate a "fake light". And made a dot product of Normal and Light direction, use the dot direction to drive highlight and shadow. There should be one way to create dark outlines. And I found this works especially good on the round surface. Maybe I could use this in my project.



My classmate Drew told me that I could link the position to my simulate light's position by Node Editor in Maya. So I created a Locator and send the locator's world position to the toon shader. Then I can move the locator as a light source, and keyframe it like a real light. This progress makes me very excited. My next step is to add more smooth options and use different multiply method to mimic direct light source and second light source.


Light direction can be easily changed by move the locator!
---------------------------------------------------------------------------------------------
Step1. Voronoinoise for Water Surface(SeExpr#1)

By changing the color and some other parameters, you can also use Voronoi noise to generate patterns on the water surface. And the expression is more suitable for making water surface so that you can set keyframes on the parameters to create the effect of water flow.

Outcoming Effect:


Then I used the PxrBlend node to add a dark green color for the water to make it looks like a deep ocean.


Step2.1 Turbulence noise for Moon (SeExpr#2)

Turbulence -> Base color





Cell noise (OSL#1)-> Displacement. To create the meteor crater
------------------------------------------------------------------------------------------


Step3 Wood Pattern(OSL#2)

After seen several references, I found using one smooth step minus another smooth step could generate an outcome "Stripe". Which can be used in mix function to blend wood's dark part and light part to creating an actual stripe color. 



And wood's surface is not just like this regular shape. To make it looks more realistic, I added some vfBm noise, noise,  and other offset settings.

Old and dark wood: more stripe frequency, more twisting


Light and new wood: Less stripe frequency and more regular


---------------------------------------------------------------------------------------------
Step4.   Create rock with Toon shader(OSL#3) and Voronoi noise(SeExpr#3)

I found multiply two Voronoi noise and a lower frequency of the $P can generate a regular noise. Which I think could be used for my rock.



Then I found this outcome looks very flat and I need more colors to make it looks more three dimensional. So I used the PxrBlend node to blend these noise and high-contrast colors together. 


For rock, the bump on the surface is important, too. Then I used a procedural pattern in Renderman called PxrWorley to make the rocks' surface looks bump.





---------------------------------------------------------------------------------------------

Step5. Sand material by Fbm noise(seExpr#3) and PxrDisplace


First I used the fbm noise to create a float type mixer, then I used this mixer driven a curve function, which gave me the ability to blend different colors.


After observing sand shape in the real world, the sand's function is bumpy, so I added a Pxr Worley and give it more randomized.







---------------------------------------------------------------------------------------------

C++ LifeRing
C++ Tower and house main body
C++ roof

After spending at least 4 days solving this problem. I found this bug is basically caused by an update in Visual Studio. In VS2015 or before, they tolerate a specific way to initialize lists in C++, but after VS2017 or later they start to see that as an error. Which keeps sending  "error C2440 <function-style-cast> cannot transfer "initializer list" to "RixSCParamInfo" " sent to my Cutter. This problem technically could be solved by changing the framework of the C++ code we have in Class 8. But they have too many virtual functions and pointers in the code. Unfortunately, I still didn't have the ability to solve that problem. I and Meena have spent 2 or 3 hours checking out settings one by one, however, we apparently tried everything we could. And I uninstalled my VS2019 today, but it still does not work.






So I decided to work more on OSL shader and environment and light setting. 






---------------------------------------------------------------------------------------------
Inspiration: Put this island in a jar and combined with my former project





评论

此博客中的热门博文

Walkway and Temple Generater Tool

Assignment04 Rebuild Mark Twain's House