2026年7月28日星期二
Common Art - Summer- Final Sprint
2026年7月14日星期二
Common Art - Summer- Sprint #5
Introduction
This sprint was slightly affected by illness. Fortunately, most of my assigned work had already been completed, so the overall impact was manageable. I also coordinated the integration with Rag and Jules, and the water effect has now been refined to a good state. The next step will likely be to sync with the lighting artist, as the scene currently appears somewhat too dark.
During this sprint, I also fixed a bug in the procedural sparkle effect: the sparkles were moving in an overly uniform and predictable pattern. This has now been corrected, and it turned out to be a minor issue.
Water
2026年6月30日星期二
Common Art - Summer- Sprint #4
Introduction
Since I was not assigned a new task for this sprint, this round focused on refining the result from the previous sprint and adding more detail. My current goal is to keep polishing the overall effect.
Water
Caustics
Compared with the last update, I found one issue in the water caustics: during certain moments, the effect would become noticeably brighter because of the opposing UV flow. I adjusted several parameters to prevent that brightness spike, and after the refinement the caustics now feel much smoother.
Waterfall
Splash
Before the last class, my main focus was researching VFX in Niagara. Since I have relatively little experience creating VFX, I spent some time studying the workflow. I have now created a splashing-water effect and added a simple mist layer. The current result already looks quite good, but I did not have time to build the scaling logic yet. I will decide whether to add that feature in the next sprint based on what the effect needs.
P4V
2026年6月17日星期三
Common Art - Summer- Sprint #3
General
Since I will soon return to China for an internship, this sprint also included many tasks that were originally planned for later sprints, so the overall team schedule would not be affected.
Building on the previous sprint, I fully completed the water material and waterfall effects.
Water
Caustics
The main idea was to use a fake caustics texture, which I created in Substance Designer.
I then sampled the texture using the XY coordinates of the world-space position reconstructed from depth. Since the water itself does not write to depth, I used the reconstructed world position from the scene depth to sample the caustics texture. By adding opposing UV flows, I was able to create a convincing underwater caustics effect.
The most difficult part was finding a reliable way to reconstruct world-space position from depth in UE5. Unreal and Unity handle this differently, so I spent quite a bit of time working through the problem.
Magic Spark
To better match the overall scene, I also added a subtle fake particle effect to the water. Our scene already has a fairly dense particle atmosphere, so this helped the water sit more naturally in the environment. The effect is made with two Perlin Noise textures flowing in opposite directions, followed by a Step operation.
Matcap
Although it may be hard to see clearly in the screenshots, I wanted the water to retain some ambient lighting in darker environments. UE's default physically based ambient lighting was too dark for this stylized water style, so I added a Matcap texture to provide a bit of extra environmental light.
Waterfall
Before starting the material work, I first quickly modeled a waterfall mesh plane in Blender. To keep the edges transparent, I painted vertex colors and used them as a simple mask for edge transparency.
The main body of the waterfall was built with a different approach from the water material. I did not use the Single Layer Water shading model here. A waterfall usually behaves more like a thin sheet, and it generally does not have enough depth variation to drive shallow-to-deep color changes in the same way as a water surface. Using Transparent Lit made the result more direct and easier to control.
The most important part of the waterfall is the foam. The core approach is UV flow, UV distortion, and applying Step operations to noise textures to create the flowing stripe patterns I wanted. The foam system mainly includes Main Foam, Detail Foam, Waterline, and Edge Foam. Edge Foam is generated around objects intersecting with the waterfall, and its logic is similar to shoreline waves: it is calculated based on the distance to the nearest surface.
I also added some Magic Spark to the waterfall, but with a different implementation. In this case, I baked the sparkle pattern into a texture and animated it with UV flow.
There is also a Waterfall Wave effect, which is a fake effect for the pool below the waterfall: a wave spreading outward from the impact area. The idea is quite similar to the other effects, using UV flow and UV distortion to manipulate noise and produce the final result.
The most time-consuming parts were parameter tuning and creating a large number of noise textures.
Final
P4V
2026年6月3日星期三
Common Art - Summer- Sprint #2
General
At the beginning of this sprint, we finalized the task distribution for the team.
My main responsibility on this cinematic project is to develop the water and waterfall systems.
I am also supporting Gabe S. by using Substance Designer to create several textures.
For this sprint, my primary focus is still the water work.
Since I was sick last week, I have been working hard this week to catch up with the schedule. At this point, I have completed the first version of the water shader/system.
Meetings and Documentation
At the beginning of this week, all of the Tech Art and 3D Art team members had a longer meeting to define the overall art style for the project. As a technical artist, one of my responsibilities was to help gather environment-related artist references.
Water
Since I am responsible for the water, I looked for several useful tutorials and breakdowns before starting development.
The most interesting reference I found was this one:
Stylized Water in UE5 Breakdown
This artist shared several techniques on X for creating stylized water in Unreal Engine.
His breakdown was very helpful for me.
He mentioned that he learned a lot from the following video, and I did as well:
How scrolling textures gave Super Mario Galaxy 2 its charm
This video explains many old-school water techniques used in Super Mario Galaxy. Even though these techniques are older, they are still valuable references today.
I recreated some of these ideas in Unreal. The current implementation is still simple, but after further refinement, some of these techniques should be useful for version 2 of my water system.
Because of the limited time for this version, my main goal was to establish the foundation and complete the basic rendering result.
The features and textures currently completed are:
Refraction and reflection effects
Adjustable shallow/deep water control
WPO waves + recalculated normals
Stylized shoreline wave effect
Water normal texture creation
Foam noise texture creation
The current water effect is partially compatible with Unreal's Water plugin. However, since the final environment will be built around an island, Unreal's official Water plugin may not always be the most convenient solution for our needs. Because of that, I implemented the wave motion using World Position Offset.
For the Gerstner wave implementation, I referenced this article.
Although the article is written for Unity, the logic can still be adapted to Unreal as long as the coordinate system differences are handled correctly. Unreal and Unity are both left-handed coordinate systems, but Unreal is Z-up while Unity is Y-up.
In the next version, I plan to start exploring:
Caustics effect
Sparkle/highlight effect
More stylized parameter controls
The goal is to push the water further toward a more stylized and cartoony look.
P4V
2026年5月17日星期日
Common Art - Summer- Sprint #1
VFX
There were not many tasks assigned to the Technical Artists during this sprint. My first task was to make sure the VFX created last semester could run reliably in our project. I organized and moved the VFX into the project, simplified the exposed parameters, and improved the adjustment workflow so that all artists can quickly use the effect.
Master Materials
In addition, Raghavendra and I were responsible for creating the Master Materials. The basic Master Materials have now all been integrated into the project.
Emissive Breathing
After finishing the basic setup, I also worked on a special technical art experiment. I created a GPU-based timer that does not rely on CPU control, which makes it very performance-friendly, and integrated it into the emissive material. This allows artists to freely adjust the emissive breathing effect, including customizing the glow duration and the interval between glow cycles.
2026年2月26日星期四
Common Art - Spring - Lighting Workshop Module 3
Final
Ref
Analysis + Creative process
My creative intent for this piece is actually not to make a heavily stylized environment. Instead, I want to create a natural, fresh atmosphere with a subtle sense of Chinese philosophy. For this “Lost Temple” scene, I’m aiming for an early-morning sunrise in a mountain ruin, when the mist hasn’t fully lifted yet. The fog won’t be exaggerated or overly stylized—I just want to convey a calm, everyday morning in a forgotten temple.
In the first image, I placed the entrance of the lost temple. Its worn-down, decayed state suggests that it’s an ancient place with no people around. The overall environment is relatively dark, but the brightness at the entrance is meant to draw the viewer’s attention—my goal is to guide the audience into the world of the scene through this inviting focal point.
In the second image, you can see a strong backlit setup. This is meant to communicate the time of day and the overall lighting condition of the environment. The third image reinforces what the first two are establishing: the ruined atmosphere and the sunrise timing.
The fourth image is the core shot. You can see that I didn’t add an overly dramatic top light to “glorify” the Buddha, because this is a damaged, weathered statue. I also don’t want the scene to feel overly artistic or theatrical. What I want to express is a sense of quiet plainness—despite the decay, the Buddha returns to simplicity and blends into the everyday world.
That said, I still tried to suggest a sense of sacredness, even if it’s subtle (because I don’t want it to be too exaggerated). I added a warmer rim light on the Buddha, and compositionally I framed the statue from the right looking toward the left. So in the lighting, I made a small deliberate choice: cooler light on the left side and warmer light on the right side, to hint at a gentle, warm radiance.
You can also see that I added fog to the environment. Unreal’s built-in fog effects couldn’t achieve the kind of sunrise atmosphere I wanted—where the mist hasn’t fully lifted yet—so I implemented my own volumetric fog to create that mood.
2025年12月1日星期一
Common Art - Week 15 - Final - 'A' Stage
Terrain Texture V2
| Substance Designer GrassV2 |
Based on the feedback from Stage B, I reworked both the grass and sand materials.
For the sand, I mainly lowered the saturation and brightness so it wouldn’t look so yellow.
For the grass, I pushed the style further and basically rebuilt the material from scratch, which took quite a bit more time.
Combined with the new grass billboard setup I made later, the updated grass material now gives a very nice overall grass look.
The Modified Parts
| Trees |
| Terrain Blending |
Now each tree no longer points along the landscape normal, but instead points straight up.
Also following the last round of suggestions, I researched how to achieve terrain blending in Unreal.
This setup mainly uses Virtual Textures. To make the terrain blend, I use two textures:
-
One texture stores the landscape height.
-
One texture stores the landscape material.
Once I have these two pieces of information, in the trunk material I compare the world-space vertex Z value with the landscape height, then use triplanar mapping to sample the landscape texture.
This gives me the terrain–trunk blending effect.
Grass V2
| The Reference "Sky" |
Again, based on the Stage B feedback, I decided to rebuild our grass and switch to another approach.
This time I collected references from Sky (a game made by the same team as Journey) and recreated a similar grass look.
I implemented billboard grass (always facing the camera) together with a wind system, and they work well.
The wind effect feels very soft and pleasant: each clump of grass sways gently in a regular rhythm.
Since I also have access to the landscape color information, I added that into the grass as well.
For each grass pivot in world space, I sample the landscape color and use it to tint the blades, so every grass clump matches the color of the terrain under it.
| Grass V2 Test |
Apple Tree & Bushes
| Bushes |
Finally, I also created an apple tree and some cute stylized bushes.
The apples on the tree use the same wind system as the leaves, so they also have a slight secondary motion and sway gently with the foliage.
The bushes are made almost the same way as the tree leaves, so I won’t repeat the process here.
P4V
2025年11月12日星期三
Common Art - Week 12 - First Bake - 'B' Stage
Stylized Sand & Fix Issues
P4V ScreenShot
2025年11月5日星期三
Common Art - Week 11 - Initial Block Out - 'C' Stage
Tree V3
Because the previous tree version showed noticeable billboarding artifacts in dense clusters, this iteration focuses on mitigating the carded-leaf look.
The approach is straightforward: use the dot product between the original quad normal and the view vector—i.e., (equivalently, the angle between normal and view)—as a criterion to further cull/fade quads and reduce the artifact.
In the prior version I had already replaced the normals in Houdini with spherical normals. For this pass I modified the model again by baking the original per-face normals into vertex colors, so the shader can access both; this ultimately reduces the carding effect.
Skybox
I also integrated a dynamic skybox system for the project. In addition, several existing materials were minimally adjusted so they correctly respond to the day–night cycle.
Terrain Textures
Using Substance Designer, I authored stylized Grass and Dirt textures and applied them to the terrain materials.(The showcased stylized grass texture was the stone-included variant, but I removed the stones because they caused noticeable repetition/tiling on the terrain)
P4V ScreenShot:
2025年10月29日星期三
Common Art - Week 10 - Initial Block Out - 'D' Stage
Tree V2
In this iteration I integrated a Wind System for the trees (it’s the same wind that drives the grass). Compared to the grass setup, the hard part here was reliably writing each quad’s object-space pivot/origin into UV1 and UV2 in Houdini so the material can reconstruct per-card motion in Unreal. There’s little to no official documentation on this path, and Unreal’s mesh import precision/compression plus differences between DCCs in object-space and UV transforms made it mostly a black-box process—I had to validate each step empirically.
Thanks to Chris’s feedback on triangle count, I further reduced the tree mesh without visible quality loss, reaching a better quality balance.
| Tree V2 |
| Leaves Wind System |
Water V2
For the new water pass I added depth-based color shifts, shoreline edge treatment and shallow-water waves, and a foam layer. I also revisited Unreal’s water documentation and adjusted several shading details to push a more stylized look that fits our game. The improvement over the previous version is obvious in motion.
| Water V2 |
Implementation notes (TA):
-
Depth color: Driven by Unreal’s
AbsorptionCoefficientscombined with water depth to simulate wavelength-dependent attenuation. -
Shoreline effects: Used
DistanceToNearestSurfaceto measure distance from the water body to nearby Static Mesh geometry and gate the near-shore logic. -
Shore waves: After deriving a
ShoreRange, I generated ripples via a sine function—this part is mostly math and is cheap. -
Foam: Layered on top of the shore waves using a noise-based dissolve mask to break up repetition.
| Water Material V2 |
Rocks V1
I first built a Houdini procedural rock generator to get quick variety and consistent forms.
| Rocks |
Then I ported my baseline stylized lighting shader from Unity to Unreal. Small lighting trick for speed: since Unreal doesn’t easily allow multi-light accumulation in Unlit without pipeline changes, I switched to Lit and split the final shading between Emissive and Base Color. By scaling each output with coefficients that sum to 1.0, I can approximate multi-light influence with minimal look drift and keep iteration fast.
| Rocks Material |
| Rocks V1 |