Categories
FMP

FNP|Visual Style Test 03: Soft Two-Tone Shading

1. Visual Inspiration

Following my previous Halftone and Cross-Hatching experiments, I began exploring a simpler black-and-white rendering style: Soft Two-Tone Shading.

Unlike the previous tests, which relied on procedural patterns to represent light and shadow, this experiment focuses on tonal separation and smooth transitions. I wanted to enhance the contrast while preserving the original lighting, creating a visual style inspired by black-and-white photography and X-ray imagery.

For Rushing Place, this approach could reduce visual distractions caused by complex textures and strengthen the atmosphere through lighting and spatial depth.

2. Technical Development

This experiment was developed using a Post Process Material in Unreal Engine 5, combining grayscale conversion, two-tone shading, and depth-based masking.

Grayscale Conversion

First, I used SceneTexture (PostProcessInput0) to capture the rendered scene and connected its Color output to Desaturation, setting the Fraction to 1 to remove all colour.

I then used Component Mask (R) to extract the grayscale information for further brightness calculations.

Node connection:

SceneTexture → Desaturation → Component Mask (R)

Two-Tone Shading

To separate the image into light and dark regions, I created two grayscale calculations.

Dark Region:

Grayscale → Multiply (DarkRange: 0.4)

Light Region:

Grayscale → Multiply (LightRange: 0.18) → Add (LightMin: 0.8)

These operations remap the original grayscale values into two distinct brightness ranges, increasing the contrast between light and shadow.

I then used SplitThreshold (0.5) and TransitionSoftness (0.15) to control the boundary between these regions.

These parameters were connected to Subtract and Add nodes to calculate the minimum and maximum values for a SmoothStep node.

The grayscale value was connected to the SmoothStep Value input to generate a smooth brightness mask.

Finally, I used a Lerp node to blend the dark and light results, with the SmoothStep output controlling the Alpha input.

Node connection:

Grayscale → SmoothStep → Lerp (DarkResult / LightResult)

Unlike Step, which creates a sharp boundary, SmoothStep allows a gradual transition between the two tonal regions, maintaining strong contrast while producing softer shading.

Depth-Based Masking

To further control the appearance of foreground and background elements, I used SceneDepth to obtain depth information from the scene.

First, I connected ScreenPosition to the UVs input of SceneDepth.

I then used BackgroundDepth (5000) and BackgroundFade (1000) with Add and Subtract nodes to define the depth transition range.

These values were connected to SmoothStep to generate a BackgroundMask.

Node connection:

ScreenPosition → SceneDepth → SmoothStep → BackgroundMask

The BackgroundMask was then inverted using OneMinus (1-x) to create a ForegroundMask.

Based on these masks, I further experimented with Power, Subtract, and Multiply nodes to adjust the mask distribution and explore depth-based edge transitions.

X-Ray and Glow

To explore a more experimental visual appearance, I also developed an X-ray-inspired brightness processing branch.

First, I used a Power node with XRayContrast (1.6) to adjust the grayscale contrast.

The result was then multiplied by XRayOpacity (0.75) to control the intensity of the effect.

I also introduced GlowStrength and EdgeGlowStrength parameters to explore brightness enhancement and depth-based edge effects.

These adjustments provided additional possibilities for controlling contrast, spatial depth, and the overall visual atmosphere.

3. Visual Experiment

After building the material, I focused on adjusting several parameters to observe their influence on the final image:

* SplitThreshold: Controls the brightness level separating light and dark regions.

* TransitionSoftness: Controls the smoothness of the tonal transition. Lower values produce sharper boundaries.

* DarkRange / LightRange: Adjust the brightness distribution within the dark and light regions.

* BackgroundDepth / BackgroundFade: Control the depth boundary and transition between foreground and background elements.

By adjusting these parameters, I could explore different visual results, ranging from soft grayscale shading to stronger black-and-white contrast.

Compared to Halftone and Cross-Hatching, this technique reduces repetitive textures and places greater emphasis on the scene’s lighting and spatial structure.

4. Reflection

This experiment helped me better understand how grayscale remapping and SmoothStep nodes can be used to create stylised lighting effects in UE5.

One of the main challenges I encountered was balancing strong contrast with the preservation of visual details. Initially, the tonal separation was too strong, causing some details to disappear, particularly in darker areas. To address this, I repeatedly adjusted SplitThreshold and TransitionSoftness, aiming to maintain clear contrast while creating more natural transitions between light and shadow.

Another challenge was controlling the depth-based masks. Since objects were positioned at different distances from the camera, a fixed BackgroundDepth value did not work consistently across all scenes. I experimented with BackgroundFade and other mask parameters to reduce abrupt transitions between foreground and background elements.

Compared to my previous Halftone and Cross-Hatching experiments, this rendering approach produces a cleaner image with fewer complex textures, placing greater emphasis on lighting and spatial structure.

For Rushing Place, I believe this style could help create a sense of psychological pressure through strong tonal contrast. However, it is important to avoid excessive simplification that could reduce visual clarity.

Overall, this experiment showed me that stylised rendering is not only about creating a distinctive visual appearance, but also about finding a balance between artistic expression, technical control, and visual readability.

Categories
FMP

FMP | Visual Style Test 02: Cross-Hatching Effect

1. Visual Inspiration

Following my Halftone experiment, I began exploring another black-and-white visual style: Cross-Hatching.

The reference image uses overlapping lines in different directions to create tonal variations. Lighter areas contain fewer lines and more white space, while darker areas are built up through dense, intersecting strokes, creating a printmaking or pen-and-ink aesthetic.

Compared to the dot-based structure of Halftone, Cross-Hatching emphasises line direction and repetition. This structured and repetitive visual language connects with the themes of urban order, repetitive behaviour, and psychological pressure in Rushing Place.

I therefore experimented with recreating this traditional drawing technique in a 3D environment using UE5’s procedural material system.

2. Technical Development

This experiment uses a Post Process Material in Unreal Engine 5 to generate screen-space hatching patterns and control their distribution based on scene brightness.

Grayscale Conversion

First, I used SceneTexture (PostProcessInput0) to capture the rendered scene and connected its Color output to Desaturation, setting the Fraction to 1 to remove all colour.

I then used Component Mask (R) to extract the grayscale information for brightness calculations.

Node connection:

SceneTexture → Desaturation → Component Mask (R)

Procedural Hatching

I used ScreenPosition to obtain screen coordinates and applied different mathematical operations to generate three sets of lines.

First Layer: Diagonal Lines

ScreenPosition (R + G) → Add → Multiply → Frac → Step

Second Layer: Opposite Diagonal Lines

ScreenPosition (R − G) → Subtract → Multiply → Frac → Step

Third Layer: Horizontal Lines

ScreenPosition (G) → Multiply → Frac → Step

The main nodes control different aspects of the pattern:

* Multiply: Controls line density using HatchDensity (150).

* Frac: Creates repeating patterns from continuous screen coordinates.

* Step: Converts the patterns into black-and-white lines using HatchWidth (0.37).

* OneMinus (1-x): Inverts the black-and-white values of selected patterns.

Combining these three directional patterns creates the cross-hatching effect.

Layered Shading

To control the hatching based on scene brightness, I created three grayscale thresholds:

* Layer1Threshold: 0.25

* Layer2Threshold: 0.50

* Layer3Threshold: 0.90

The Step nodes compare the scene’s grayscale values with these thresholds. The results are then combined with the hatching patterns using Multiply nodes.

Multiple Lerp nodes blend white, light grey, and medium grey values, allowing different brightness regions to display different combinations of lines.

Finally, the combined result is connected to Emissive Color and applied to the scene through a Post Process Volume.

3. Visual Experiment

After building the material, I focused on testing three parameters:

HatchDensity: Controls the frequency of the lines. Higher values produce denser patterns and finer textures.

HatchWidth: Controls line thickness. Thicker lines create stronger black-and-white contrast but may obscure details.

LayerThreshold: Controls how different hatching patterns are combined across brightness levels, affecting the overall tonal distribution.

Adjusting these parameters allowed me to explore different results, from simple line patterns to more complex overlapping textures.

4. Reflection

This experiment helped me better understand how mathematical nodes in UE5 can recreate traditional drawing techniques through procedural rendering.

Compared to Halftone, Cross-Hatching offers stronger directional patterns and a more hand-drawn appearance. The repeated and overlapping lines can also create visual tension, which relates to the themes of Rushing Place.

However, the technique has some limitations. Since the lines are generated using screen coordinates, they do not naturally follow object surfaces. Dense hatching can also reduce the readability of complex scenes.

Additionally, the procedural lines appear highly regular, lacking the natural variation of hand-drawn strokes.

Overall, this experiment expanded my exploration of black-and-white NPR styles and encouraged me to consider how to balance visual expression, readability, and emotional impact.

Categories
FMP

FMP | Visual Style Test 01: Halftone Effect

1. Visual Inspiration

During the visual development of Rushing Place, I wanted to explore an experimental black-and-white style made entirely of dots.

This test was inspired by Halftone art, which uses dots of different sizes to represent light and shadow, creating a visual effect similar to newspaper printing.

My idea was to first convert the image into greyscale, then use variations in dot size to represent different brightness levels. Darker areas have larger dots, making them appear denser, while lighter areas have smaller dots with more white space.

Through this approach, I wanted to simplify the image into a more abstract and graphic style while still keeping the basic shapes and three-dimensional forms of the objects.

2. Technical Development

I created this effect in Unreal Engine 5 (UE5) using a Post Process Material. This allows me to change the appearance of the entire scene without having to modify each object’s material individually.

First, I used the SceneTexture node to capture the scene image. I then used HLSL code inside a Custom node to calculate the brightness of the image and convert the colour information into greyscale values.

Next, I used the Screen Position node to get the screen coordinates. The image was divided into a regular grid, with a circular dot generated inside each grid cell.

The size of each dot changes automatically based on the brightness of the original image:

* Darker areas: Larger dots cover more space, making these areas appear denser and darker.

* Lighter areas: Smaller dots leave more empty space, making these areas appear lighter.

In this way, smooth changes in brightness are replaced by dots of different sizes, creating a halftone effect similar to traditional printing.

To make the effect more flexible, I added two main adjustable parameters:

Dot Density

This controls the number and spacing of dots across the image. Increasing the value creates more dots with smaller gaps, allowing the image to show more detail. Lowering the value creates fewer dots and a more abstract appearance.

Contrast

This controls how strongly the image brightness affects the dot sizes. Higher contrast creates a clearer difference between light and dark areas, while lower contrast produces a softer transition.

I also used a Noise node, combined with Step and Lerp nodes, to add a subtle grainy texture. By adjusting the noise scale and strength, I can introduce small variations to the regular dot pattern, making the image feel more like a printed texture.

Finally, I adjusted the black-and-white output in the Custom node to create two versions: white dots on a black background and black dots on a white background.

Both versions use the same post-process material setup, allowing me to adjust the parameters and test different results directly in UE5.

3. Visual Tests

For this experiment, I created two different versions of the halftone effect.

Version 01: Black Background / White Dots

The first version uses a black background with white dots to represent the light and dark areas of the image.

This version has stronger visual contrast and creates a more abstract, digital appearance.

Version 02: White Background / Black Dots

The second version uses a white background with black dots to represent the objects.

Compared with the first version, this effect is closer to traditional newspaper printing and creates a cleaner, more minimal visual style.

Adjustable Parameters

To make future development easier, I added parameters that can be adjusted at any time.

Dot Density: Controls the number and spacing of dots, allowing the image to appear more detailed or abstract.

Contrast: Controls the variation in dot sizes, making the differences between light and dark areas stronger or softer.

By adjusting these parameters, I can change the dot sizes, visual density, and overall appearance to suit different scenes without rebuilding the material.

4. Reflection

Through this test, I successfully created a halftone effect that transforms a regular 3D scene into a black-and-white image made of dots.

This style keeps the basic shapes of the objects while creating a more graphic and abstract appearance, which fits the experimental visual direction of Rushing Place.