Visual slot reserved
The future image should show layered ice: cloudy interior, pale edges, controlled cracks, and a readable silhouette.
UE5 / Recipe / Stylized Surface
A frost material recipe for icy surfaces, crystal props, and frozen magic: internal gradients, edge whitening, crack masks, and restrained translucency.
The future image should show layered ice: cloudy interior, pale edges, controlled cracks, and a readable silhouette.
01
Ice should feel layered. If it is only blue and transparent, it usually reads as glass.
02
03
Opaque ice with good edge and cloud masks often reads better than translucent ice in a busy game scene. Use translucency when seeing through the form is important, not because the word ice sounds transparent.
Good ice usually has a narrow, pale value range with carefully placed darker blues. If everything is saturated cyan, it starts to feel like plastic or sci-fi glass.
04
Start with deep blue in thicker areas and pale cyan or white near thinner planes. This can come from vertex color, object-space height, thickness approximation, or a painted mask.
Beginner check: with all detail disabled, the object should already feel colder at edges and denser in the body.
Use low-frequency noise or a packed texture channel for trapped frost and cloudy depth. Keep it broad; tiny noise reads like dirt sitting on top of the ice.
Why: internal cloudiness is what separates ice from clean tinted glass.
Use Fresnel for view-dependent rim and curvature or baked masks for stable chipped edges. Combining both gives a material that reads in motion and in still shots.
Senior note: if the camera is fixed or top-down, curvature masks may be more reliable than pure Fresnel.
Cracks can darken color, brighten frost, cut opacity, or add a thin emissive line for magical ice. Keep crack width and contrast controllable, because cracks become noisy very quickly.
Frosted areas should be rougher and softer; clearer exposed planes can be smoother. This contrast makes the material feel layered without relying only on opacity.
If this is fantasy ice, add a small emissive tint inside cracks or edges. Do not use glow as the primary way to make ice visible.
05
06
float cloud = Texture2DSample(noiseTex, noiseTexSampler, uv * cloudTiling).r;
float cracks = Texture2DSample(crackTex, crackTexSampler, uv).r;
float fresnel = pow(1.0 - saturate(dot(normalWS, viewDirWS)), edgePower);
float frost = saturate(frostAmount + fresnel * edgeFrost + cloud * cloudWeight);
float3 body = lerp(deepIceColor, paleIceColor, frost);
float3 crackColor = cracks * crackTint * crackStrength;
float alpha = lerp(opaqueAlpha, clearAlpha, transparencyAmount);
return float4(body + crackColor + fresnel * glowColor * glowAmount, alpha);07
Many ice looks can be built with opaque shading, Fresnel, cloudy masks, and roughness variation. This avoids sorting issues and keeps the material more stable in production.
For characters, avoid a full-body material swap unless the design truly wants the whole body frozen. Vertex color, custom masks, or runtime parameters let frost grow from contact points, wounds, hands, or feet.
A faceted crystal needs actual planes or strong normal/curvature data. The shader can enhance facets, but it cannot fully invent good crystal structure on a smooth sphere.
08