2025年10月22日星期三

Common Art - Week 09 - Initial Block Out - 'F' Stage

 

Tree

First, I completed the procedural modeling of the tree in Houdini, and made sure to bake spherical normals into every leaf vertex.

Houdini

For shading: the leaves use a simple half-Lambert setup, plus a UV-based gradient that darkens from bottom to top. In the next version I plan to add a wind system. The trunk is rendered with the default PBR material.

Leaves


Result Version 1.0

Tree Version 1.0


Water

I built an initial water effect using Unreal’s Water System. So far I’ve implemented a basic moving water surface (normal-based). Thanks to Lumen, refraction and reflection come largely packaged in Unreal—unlike Unity, where I needed more custom code. That said, there are many differences between Unity and Unreal, so directly porting my Unity water will still take some time. Unreal’s strong built-ins also introduce constraints that make certain custom tweaks less straightforward. Still, Unreal’s water rendering approach is very interesting and worth studying.

Water

Result Version 1.0

Water Vesion 1.0


Grass

The billboard-grass shading is quite similar to the leaves, but the grass already has a wind system. The core idea is to sample a Wind Flow Map using world-space XY to offset vertices. I also use the grass card’s UVs so that the farther a point is from the ground, the stronger the wind influence it receives.

Grass

Result Version 1.0


Fire and Smoke

I created multiple versions of fire and smoke to handle different scenarios.

First, I ported the fire effect I made in Unity over to Unreal. Because the coordinate systems differ, getting the billboard behavior right took some time. I also found that Unreal’s Custom node is essentially just a function, so I couldn’t directly transplant my procedural texture functions from Unity—I had to write a lot of boilerplate (which is why I dislike node graphs for reuse and maintenance). It took extra time, but the result looks good.

Single Fire Flame

Next, to pair with that flame, I combined Unreal’s Starter Content particle effects to build my first smoke for use alongside the Single Fire Flame.

Smoke

With the Single Fire Flame and smoke in place, I wanted to port my Unity heat distortion effect. However, modifying the render pipeline in Unreal is difficult, which means I can’t directly access the post-transparency render buffer (Unreal only exposes the opaque pass buffer—Scene Color). So I couldn’t do a noise-based screen-space offset. Instead, inspired by the water work earlier, I used Unreal’s built-in Refraction: animate a noise in UVs, convert height to normals, then drive refraction to create the heat distortion. Since distortion looks odd at a distance and diverges from real-world behavior, I clamp it by world-space distance so it’s disabled beyond a certain range.

Heat Distortion Effect

Result Version 1.0

Fire Version 1.0

We also needed smoke for house chimneys, so I used the Niagara System to create stylized smoke. The particles are mesh-based—since it’s very easy in C4D to make those blobby “metaball” meshes, I voxelized and converted them to mesh there.

Stylized Smoke Mesh

The smoke dissolution uses VoroNoise, driven by particle lifetime in Niagara.

Stylized Smoke

Result Version 1.0

Stylized Smoke Version 1.0


Since the Single Fire Flame might not always meet project needs, I rushed a 2.0 version: using Niagara together with the existing Single Fire Flame to create a new fire effect, and I rewrote the smoke in Niagara as well. Performance cost increased, but visual quality improved significantly.

Result Version 2.0

Multiple Fire Version 2.0

Summary






没有评论:

发表评论