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
没有评论:
发表评论