A method for generating bump map data for use in a 3-dimensional computer graphics system comprising the steps of: receiving data defining an area to which a texture is to be applied, the data comprising a requested sample position of the texture; receiving texture data to apply to the area, the data including surface height data; performing a filtering step on samples of the texture data to generate filtered samples; deriving surface tangent vectors from the filtered samples; and deriving a bump map surface normal from the surface tangent vectors characterised in that the filtering step includes the steps of: using bi-quadratic B-splines to model a height surface from the surface height data; and, for the requested sample position of the texture, fetching a 3x3 set of height values for the surface height data comprising four partially overlapping 2x2 grids of values, and filtering the four 2x2 grids of values at respective bilinear units (65, 66, 67, 68) to generate the filtered samples, the bilinear units (65, 66, 67, 68) being red, green, blue and alpha bilinear units configured to calculate a respective red, green, blue and alpha colour channel, the bilinear units using a set of blending factors so that the bilinear unit that filters the top-left 2×2 grid of values uses blending factors (Ublend 0, Vblend 0), the bilinear unit that filters the top-right 2×2 grid of values uses blending factors (Ublend 1, Vblend 0), the bilinear unit that filters the bottom-left 2×2 grid of values uses the blending factors (Ublend 0, Vblend 1) and the bilinear unit that filters the bottom-right 2×2 grid of values uses the blending factors (Ublend 1, Vblend 1), where Ublend 0 = 1/2 + Ublend/2; Ublend 1 = Ublend/2; Vblend 0 = 1/2 + Vblend/2; Vblend 1 = Vblend/2 and Ublend and Vblend are linear blending factors. receiving data defining an area to which a texture is to be applied, the data comprising a requested sample position of the texture; receiving texture data to apply to the area, the data including surface height data; performing a filtering step on samples of the texture data to generate filtered samples; deriving surface tangent vectors from the filtered samples; and deriving a bump map surface normal from the surface tangent vectors characterised in that the filtering step includes the steps of: using bi-quadratic B-splines to model a height surface from the surface height data; and, for the requested sample position of the texture, fetching a 3x3 set of height values for the surface height data comprising four partially overlapping 2x2 grids of values, and filtering the four 2x2 grids of values at respective bilinear units (65, 66, 67, 68) to generate the filtered samples, the bilinear units (65, 66, 67, 68) being red, green, blue and alpha bilinear units configured to calculate a respective red, green, blue and alpha colour channel, the bilinear units using a set of blending factors so that the bilinear unit that filters the top-left 2×2 grid of values uses blending factors (Ublend 0, Vblend 0), the bilinear unit that filters the top-right 2×2 grid of values uses blending factors (Ublend 1, Vblend 0), the bilinear unit that filters the bottom-left 2×2 grid of values uses the blending factors (Ublend 0, Vblend 1) and the bilinear unit that filters the bottom-right 2×2 grid of values uses the blending factors (Ublend 1, Vblend 1), where Ublend 0 = 1/2 + Ublend/2; Ublend 1 = Ublend/2; Vblend 0 = 1/2 + Vblend/2; Vblend 1 = Vblend/2 and Ublend and Vblend are linear blending factors.