cartoony ice shader with screen-space distortion – timeline: 4 days (includes learning how to adjust normals and using grabpass)

how it works


distortion is based on a normal map, and the strength/color of the glowing edge can be changed in the material.


renderqueue + grabpass{}

the object is rendered in the transparent queue, and uses GrabPass{} to be able to use screen-space distortion.


screen-space distortion

the screen position is calculated in the vertex shader using the unity function ComputeGrabScreenPos().

then, the screen UV is calculated by dividing screenPos.xy by screenPos.w. After getting the normal, it is then added to the screen UV and multiplied a bit to get the distortion effect.