Textures are the most important element for simulating real-world scenes and providing realistic and immersive sensations in many applications. Procedural textures can simulate a broad variety of surface textures, which is helpful for the design and development of new sensors. Procedural texture generation is the process of creating textures using mathematical models. The input to these models can be a set of parameters, random values generated by noise functions, or existing texture images, which may be further processed or combined to generate new textures. Many methods for procedural texture generation have been proposed, but there has been no comprehensive survey or comparison of them yet. In this paper, we present a review of different procedural texture generation methods, according to the characteristics of the generated textures. We divide the different generation methods into two categories: structured texture and unstructured texture generation methods. Example textures are generated using these methods with varying parameter values. Furthermore, we survey post-processing methods based on the filtering and combination of different generation models. We also present a taxonomy of different models, according to the mathematical functions and texture samples they can produce. Finally, a psychophysical experiment is designed to identify the perceptual features of the example textures. Finally, an analysis of the results illustrates the strengths and weaknesses of these methods.