{"id":2300,"date":"2015-11-23T22:06:38","date_gmt":"2015-11-23T22:06:38","guid":{"rendered":"http:\/\/www.amzsaki.com\/?page_id=2300"},"modified":"2020-09-01T02:59:56","modified_gmt":"2020-09-01T02:59:56","slug":"synthesis-of-textures-and-bump-maps-of-tiled-surfaces-part-i","status":"publish","type":"page","link":"https:\/\/www.amzsaki.com\/?page_id=2300","title":{"rendered":"Synthesis of textures and bump maps of tiled surfaces   &#8211;   Part I"},"content":{"rendered":"<p><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-2301\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\" alt=\"Image converted using ifftoany\" width=\"1\" height=\"1\" \/><\/a><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-2301\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\" alt=\"Image converted using ifftoany\" width=\"1\" height=\"1\" \/><\/a><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-thumbnail wp-image-2301\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\" alt=\"Image converted using ifftoany\" width=\"1\" height=\"1\" \/><\/a><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2303\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/perlin_noise03_RENDEREDcrop-1024x834.jpg\" alt=\"Image converted using ifftoany\" width=\"850\" height=\"509\" \/><\/a><\/p>\n<h1><b>Motivation<\/b><\/h1>\n<p style=\"text-align: justify;\">Tiled surfaces are a ubiquitous staple of modern architecture. In an interior space, floors and walls of rooms, from bathrooms to kitchens, and almost every space in between, can be covered with tiles. While, larger format stone tiles are used to clad buildings, delineate walkways and form patios.<\/p>\n<p style=\"text-align: justify;\">The state of computer rendering of images, using global illumination or physically based rendering, has reached a point where it can fool the casual viewer into thinking that what she sees is a photograph. Details defining surfaces at various scales contribute a great deal toward creating this illusion. A simple item, such as a humble floor tile, can have a lot of detail both in its shape and in its color. This detail is generally defined in computer graphics using geometry and\/or textures.<\/p>\n<p style=\"text-align: justify;\">While the generation of textures to convey color variation is relatively easy, the geometric detail to capture the small nuances of tile shape can still be prohibitive to generate and render. The use of surface textures to represent color (be that diffuse or specular, depending on the tile and its surface finish) is part of most rendering engines. Small-scale surface geometric detail can be represented using so called bump maps (Blinn, 1978), where the local surface height of geometry is altered by the bump map for lighting\/shading calculations only. This method does not alter the underlying geometry, which is evident from the silhouettes of bump-mapped objects; a bump-mapped sphere still casts a smooth circular\/elliptical shadow. A variant of the method is to use a normal map, which encodes a perturbed normal at the lighting\/shading calculation point, thus the local perturbation can be along any direction, as opposed to perpendicular to the surface, as the traditional bump mapping. A more advanced method, called displacement mapping, actually alters the local geometry in lighting\/shading calculations.<\/p>\n<h1><b>Features<\/b><\/h1>\n<p style=\"text-align: justify;\">This multi-part article was born out of the need and curiosity to procedurally generate tiles for use in rendering. The method presented and its implementation is capable of generating texture and bump maps of arbitrary sizes. Both square and rectangular tiles, with or without offset, can be created. A grout line of arbitrary color can be specified between tiles as well. The tiles can have any base color, which can be altered from tile to tile. This variation can specified to be between the base color and two other colors (think of it as a darker and a lighter version of the base color, for example, but can be any other colors). In addition, a color variation can be specified within a tile itself. Similarly, a bump map can be generated to alter the base height of a tile, which can vary from tile to tile. A local, per tile, variation can be specified as well. Finally, a grunge or grime map can be overlain the tiles to represent oh-not-so-clean tiles or remains of a spill.<\/p>\n<p style=\"text-align: justify;\">At the heart of the method is a noise function. This noise function represents a random, albeit smoothly varying function. The implementation uses a realization of the Perlin Noise function (Adrian\u2019s Soapbox, 2014) that was modified by yours truly. Thus I cannot claim that I wrote the noise function parts of the code, however I have modified it to suit my needs. Therefore all the credits go to the original author and hereby I thank him for publicly making available such code and the explanation that went with it.<\/p>\n<p style=\"text-align: justify;\">Although the procedural tile generator was meant to be used as a set of C++ classes, part of a larger program, a simple driver program was written for it. This small program allows input files to be read using a rudimentary file format giving access to the parameters of the tile generator. The format of the input file is rather freeform; the parameters can be specified in any order, though logical groupings of them are encouraged.<\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #ff0000;\"><strong>The source code of the tile generator can be downloaded from\u00a0<a style=\"color: #ff0000;\" href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/tileMaker_v1.zip\">tileMaker_v1<\/a>. It was written in C\/C++ and there is a supplied project file for Xcode. All the example input files are contained in the zip as well. Enjoy!<\/strong><\/span><\/p>\n<h1><b>Implementation and usage<\/b><\/h1>\n<p style=\"text-align: justify;\">This section is in a form of a tutorial and a detailed explanation of what each parameter of the tile generator does. Starting with a simple model, and subsequently building up, more complex tiles can be generated. However, perhaps the most fundamental parameter of the tile generator is the specification of where to save the files, thus the input file needs a description of this<\/p>\n<pre><span style=\"color: #ffffff;\">\u00a0outputFileName \/Users\/amzs\/Desktop\/yellow_square_tile_plain01.tif<\/span><\/pre>\n<p style=\"text-align: justify;\">\u00a0The size of the textures to be generated (in pixels) can be specified as<\/p>\n<pre><span style=\"color: #ffffff;\">textureWidth 2048\ntextureHeight 2048<\/span><\/pre>\n<p>Similarly, the physical tiled area is specified by<\/p>\n<pre><span style=\"color: #ffffff;\">tiledAreaWidth 10.0\ntiledAreaLength 10.0<\/span><\/pre>\n<p style=\"text-align: justify;\">Note that the above two parameters can be non-integer, since they represent some real-world dimensions. Although no units (meters, feet) are specified, as long as the real-world coordinates are consistent, things will work out. Thus, the sizes of the tiles themselves can be specified as<\/p>\n<pre><span style=\"color: #ffffff;\">tileWidth 1.0\ntileLength 1.0<\/span><\/pre>\n<p style=\"text-align: justify;\">Again, these are given in real-world units. Use the same number for square tiles, of some other combination for rectangular tiles. Finally, the thickness of the grout line can be given in real-world coordinates as<\/p>\n<pre><span style=\"color: #ffffff;\">groutWidth 0.02<\/span><\/pre>\n<p style=\"text-align: justify;\">Note, that the grout thickness specified will be used for both the horizontal and vertical grout lines.<\/p>\n<p style=\"text-align: justify;\">In summary, the figure below illustrates all these parameters on a sketch.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2308\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure2-1024x504.png\" alt=\"Figure2\" width=\"625\" height=\"307\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure2-1024x504.png 1024w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure2-300x147.png 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure2-624x307.png 624w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure2.png 1164w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p><strong>Figure 1 Tile and texture space<\/strong><\/p>\n<p style=\"text-align: justify;\">So far, using the above specifications alone, only square or rectangular tiles can be generated, but the tiles have to be aligned along both axis. By defining a parameter, tiles can be offset along the horizontal direction. If you want tiles to be offset along the vertical direction, well, just rotate the resulting texture maps by 90 degrees. Thus,<\/p>\n<pre><span style=\"color: #ffffff;\">useTileXOffset\ntileXOffset 1.01<\/span><\/pre>\n<p style=\"text-align: justify;\">The tileXOffset flag turns on the offset generation of tiles for every even row, so the offset starts with the second row of tiles and it is done for every other row thereafter. This is shown in the figure below<\/p>\n<p>\u00a0<a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2312\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure3.png\" alt=\"Figure3\" width=\"441\" height=\"441\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure3.png 441w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure3-150x150.png 150w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure3-300x300.png 300w\" sizes=\"auto, (max-width: 441px) 100vw, 441px\" \/><\/a><\/p>\n<p><strong>Figure 2 Tile offset<\/strong><\/p>\n<h1><\/h1>\n<h1><b>Color variation from tile to tile<\/b><\/h1>\n<p style=\"text-align: justify;\">So, let\u2019s get started with something simple. A square, yellowish tile with some color variation was used to fill a room. The tiled area was 10.0 by 10.0 units, and the tiles were 1.0 by 1.0. The final rendering, done in Maya using Metal Ray, using an area light source in the ceiling, is as follows<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_plain01_RENDERED.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2315\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_plain01_RENDERED-1024x893.jpg\" alt=\"Image converted using ifftoany\" width=\"625\" height=\"545\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_plain01_RENDERED-1024x893.jpg 1024w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_plain01_RENDERED-300x261.jpg 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_plain01_RENDERED-624x544.jpg 624w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_plain01_RENDERED.jpg 1744w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p><strong>Figure 3 Plain yellow tiles<\/strong><\/p>\n<p style=\"text-align: justify;\">Note the subtle color variation from tile to tile. The colors are uniform within each tile. This image was rendered using the following diffuse texture map and a bump map.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2318\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure4-1024x512.jpg\" alt=\"figure4\" width=\"625\" height=\"312\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure4-1024x512.jpg 1024w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure4-300x150.jpg 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure4-624x312.jpg 624w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p><strong>Figure 4 Texture and bumps maps for Figure 3<\/strong><\/p>\n<p style=\"text-align: justify;\">So how does one achieve the color (and greyscale) variation in the texture maps? The texture generator employs something called a \u2018color descriptor\u2019. Given a location within a texture map (or in tile space, see Figure 1) a query is made what the color should be. The color descriptor for the tiles represents this at both global (or per tile) and local (within a tile) space. So lets see what parameters a color descriptor can have. So, for the case of the plain yellow tiles, the color descriptor was<\/p>\n<pre><span style=\"color: #ffffff;\">tileColorGlobalColorType variable\ntileColorGlobalColorNoiseType perlin\ntileColorGlobalColor 1.0 0.94509803921569 0.57254901960784 1.0\ntileColorGlobalColorLowSide 1.0 0.92549019607843 0.42745098039216 1.0\ntileColorGlobalColorHighSide 1.0 0.96470588235294 0.56078431372549 1.0\ntileColorGlobalNoiseXMin 0.0\ntileColorGlobalNoiseYMin 0.0\ntileColorGlobalNoiseXMax 10.0\ntileColorGlobalNoiseYMax 10.0\ntileColorGlobalOctaves 1\ntileColorGlobalPersistence 1.0<\/span><\/pre>\n<p style=\"text-align: justify;\">The parameter tileColorGlobalColorType specifies if the color of a tile is solid or variable. A solid means that there is no color variation between tiles, every tile is the same color. A variable means that colors can change from tile to tile. Thus, the parameter tileColorGlobalColorNoiseType specifies how the color changes. It can take on values such as random, perlin, cosineModulated or wood. The random does what it\u2019s name says; the color randomly varies from tile to tile, more on this later. The perlin one describes the variation of color sampled from a Perlin noise while cosineModulated and wood are variants of the Perlin noise. Examples of each will be given later. So what exactly is meant by that the color varies from tile to tile governed by either a random or procedural manner. The color of a tile is specified by an RGBA parameter (tileColorGlobalColor). In addition, two more colors can be specified (tileColorGlobalColorLowSide and tileColorGlobalColorHighSide). These two colors denote a range in which the color can vary. This is best illustrated as follows<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2322\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure5.png\" alt=\"Figure5\" width=\"961\" height=\"373\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure5.png 961w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure5-300x116.png 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/Figure5-624x242.png 624w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><\/a><\/p>\n<p><strong>Figure 5 Color interpolation using three colors<\/strong><\/p>\n<p style=\"text-align: justify;\">The noise function (random, perlin, etc.) returns a value in the range of 0.0 to 1.0. Thus the final color is linearly interpolated from the given colors depending the noise value. Finally, parameters tileColorGlobalNoiseXMin, tileColorGlobalNoiseYMin, tileColorGlobalNoiseXMax, tileColorGlobalNoiseYMax define the region where the noise function is sampled from. Although, for this example a square region from zero to ten was specified, very interesting effects can be achieved if the region is not a square. By specifying a rectangular area, nice anisotropic, e.g. elongated, color distributions can be achieved, as we will see later. After that, the last two parameters, tileColorGlobalOctaves and tileColorGlobalPersistence are specific to the Perlin noise function. The number of octaves denotes the summation of noise at various scales, while the second parameter affects how the amplitude of noise falls with successive octaves. Generally, the noise value is obtained in the color descriptor as<\/p>\n<pre><span style=\"color: #ffffff;\">noiseValue=noise.OctavePerlin(noiseX,noiseY,0.0,octaves,persistence)\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(1)<\/span><\/pre>\n<p style=\"text-align: justify;\">\u00a0Where the noiseX and noiseY are the x and y coordinates in the noise space, the third parameter is zero (we are only using 2D noise), whereas the octaves and persistence are defined in the reference (Adrian\u2019s Soapbox, 2014). The table below gives a quick summary of how these parameters can affect the visual appearance of the noise function. However, this is just a brief summary. If interested in more detail, please see this reference (Adrian\u2019s Soapbox, 2014).<\/p>\n<p><strong>Table 1 Perlin noise &#8211; parameters and their effect<\/strong><\/p>\n<p style=\"text-align: justify;\">[table id=1 \/]<\/p>\n<p>Lastly, the grout color is prescribed in a similar manner<\/p>\n<pre><span style=\"color: #ffffff;\">groutColorColorType variable\ngroutColorColorNoiseType random\ngroutColorColor 0.5 0.5 0.5 1.0\ngroutColorColorLowSide 0.4 0.4 0.4 1.0\ngroutColorColorHighSide 0.6 0.6 0.6 1.0<\/span><\/pre>\n<p>This time, the grout is of a greyish color, with a color variation from a darker to a lighter tone.<\/p>\n<p>Finally, the description of the tile generator input is concluded with a few more parameters:<\/p>\n<pre><span style=\"color: #ffffff;\">randomTileOrientation false\nrandomTileNoiseStartPoint true\ngenerateBumpMap true\nblurFinalImage false<\/span><\/pre>\n<p style=\"text-align: justify;\">The randomTileOrientation parameter specifies if we want the orientation of each tile (e.g. the direction of sampling the noise space) from tile to tile to be consistent, or random. Similarly, the randomTileNoiseStartPoint parameter specifies if the starting point within the specified sampling region is consecutive as the tiles are generated or random. These last two boolean parameters help to achieve a more natural appearance, since tiles can be laid in forming a pattern or at random.<\/p>\n<p style=\"text-align: justify;\">The closing boolean parameter blurFinalImage serves to add a little bit of blur to the final texture image, if needed, to bring together sharp contrasting regions.<\/p>\n<h1><strong>Local color variation within each tile<\/strong><\/h1>\n<p>Next we can add local color variation to the tile, so the color not only varies from tile to tile, but also varies within each tile, based on a local noise function, we can get the following<\/p>\n<p><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise01_RENDERED.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-2346\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise01_RENDERED-1024x880.jpg\" alt=\"Image converted using ifftoany\" width=\"625\" height=\"537\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise01_RENDERED-1024x880.jpg 1024w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise01_RENDERED-300x258.jpg 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise01_RENDERED-624x536.jpg 624w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise01_RENDERED.jpg 1802w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p><strong>Figure 6 Local color variation within a tile<\/strong><\/p>\n<p style=\"text-align: justify;\">In comparison to Figure 3, the changes are subtle, but they are there, adding that little extra nuance to the visual appearance of the tiles. The texture and bump maps used were as follows<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure7.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2347\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure7-1024x512.jpg\" alt=\"figure7\" width=\"625\" height=\"313\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure7-1024x512.jpg 1024w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure7-300x150.jpg 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/figure7-624x312.jpg 624w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Figure 7 Texture and bumps maps used in Figure 6<\/strong><\/p>\n<p style=\"text-align: justify;\">Also note that a small twist was added to the bump maps; a slowly varying noise was used to add some unevenness within the tiles altering their height not only per tile, but within a tile as well. The per-tile color variation was achieved using a local color descriptor, tileColorLocalColor. This color descriptor has exactly the same set of specifiable parameters as its global cousin. The full input file used to generate Figure 7 is as follows<\/p>\n<pre><span style=\"color: #ffffff;\">outputFileName \/Users\/amzs\/Desktop\/yellow_square_tile_localnoise01.tif\ntextureWidth 2048\ntextureHeight 2048\ntiledAreaWidth 10.0\ntiledAreaLength 10.0\ntileWidth 1.0\ntileLength 1.0\ngroutWidth 0.02\ntileColorGlobalColorType variable\ntileColorGlobalColorNoiseType perlin\ntileColorGlobalColor 1.0 0.94509803921569 0.57254901960784 1.0\ntileColorGlobalColorLowSide 1.0 0.92549019607843 0.42745098039216 1.0\ntileColorGlobalColorHighSide 1.0 0.96470588235294 0.56078431372549 1.0\ntileColorGlobalNoiseXMin 0.0\ntileColorGlobalNoiseYMin 0.0\ntileColorGlobalNoiseXMax 10.0\ntileColorGlobalNoiseYMax 10.0\ngroutColorColorType variable\ngroutColorColorNoiseType random\ngroutColorColor 0.5 0.5 0.5 1.0\ngroutColorColorLowSide 0.4 0.4 0.4 1.0\ngroutColorColorHighSide 0.6 0.6 0.6 1.0\ntileColorLocalColorType variable\ntileColorLocalColorNoiseType perlin\ntileColorLocalColor 1.0 0.94509803921569 0.57254901960784 1.0\ntileColorLocalColorLowSide 1.0 0.92549019607843 0.42745098039216 1.0\ntileColorLocalColorHighSide 1.0 0.96470588235294 0.56078431372549 1.0\ntileColorLocalNoiseXMin 0.0\ntileColorLocalNoiseYMin 0.0\ntileColorLocalNoiseXMax 50.0\ntileColorLocalNoiseYMax 50.0\ntileColorLocalOctaves 8\ntileColorLocalPersistence 0.25\ntileBumpNoiseAlternateColorType variable\ntileBumpNoiseAlternateColorNoiseType perlin\ntileBumpNoiseAlternateColor 1.0 1.0 1.0 1.0\ntileBumpNoiseAlternateColorLowSide 1.0 1.0 1.0 1.0\ntileBumpNoiseAlternateColorHighSide 1.0 1.0 1.0 1.0\ntileBumpNoiseAlternateNoiseXMin 0.0\ntileBumpNoiseAlternateNoiseYMin 0.0\ntileBumpNoiseAlternateNoiseXMax 2.0\ntileBumpNoiseAlternateNoiseYMax 2.0\ntileBumpNoiseAlternateOctaves 2\ntileBumpNoiseAlternatePersistence 0.25\nrandomTileOrientation false\nrandomTileNoiseStartPoint true\u00a0\u00a0\u00a0\u00a0\ngenerateBumpMap true\ntileBumpNoiseAlternate true\nblurFinalImage false<\/span><\/pre>\n<p style=\"text-align: justify;\">If the number of octaves is increased, a more fine detailed noise variation is achieved within each tile, as Figure 8 illustrates.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2350\" src=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02-1024x1024.jpg\" alt=\"yellow_square_tile_localnoise02\" width=\"625\" height=\"625\" srcset=\"https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02-1024x1024.jpg 1024w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02-150x150.jpg 150w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02-300x300.jpg 300w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02-624x624.jpg 624w, https:\/\/www.amzsaki.com\/wp-content\/uploads\/2015\/11\/yellow_square_tile_localnoise02.jpg 2048w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><strong>Figure 8 The number of octaves increased to 8, resulting in a finer noise<\/strong><\/p>\n<p style=\"text-align: justify;\">This concludes the first part of this article. In Part II, further variations on the usage of noise in tile texture making will be discussed.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Motivation Tiled surfaces are a ubiquitous staple of modern architecture. In an interior space, floors and walls of rooms, from<\/p>\n<p><a href=\"https:\/\/www.amzsaki.com\/?page_id=2300\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\">Synthesis of textures and bump maps of tiled surfaces   &#8211;   Part I<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":298,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2300","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/pages\/2300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2300"}],"version-history":[{"count":31,"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/pages\/2300\/revisions"}],"predecessor-version":[{"id":3331,"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/pages\/2300\/revisions\/3331"}],"up":[{"embeddable":true,"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=\/wp\/v2\/pages\/298"}],"wp:attachment":[{"href":"https:\/\/www.amzsaki.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}