00001
00002
00003
00004 from __future__ import division
00005
00006 from image import *
00007 from perlin_noise import *
00008 from tiles import *
00009
00010 WHITE = (1, 1, 1, 1)
00011
00012
00013 def blend_corners(grid, corner_colors, amount):
00014 w, h = grid.dims
00015 new_grid = Grid2D((w, h))
00016
00017 for i in range(w):
00018 horizontal_blend = i / w
00019
00020 color1 = mix_color(corner_colors[0], corner_colors[1], horizontal_blend)
00021 color2 = mix_color(corner_colors[2], corner_colors[3], horizontal_blend)
00022
00023 for j in range(h):
00024 vertical_blend = j / h
00025
00026 color = mix_color(color1, color2, vertical_blend)
00027
00028 new_grid[i, j] = mix_color(grid[i, j], color, amount)
00029
00030 return new_grid
00031
00032
00033 def multiply_corners(grid, corner_colors, amount):
00034 w, h = grid.dims
00035 new_grid = Grid2D((w, h))
00036
00037 for i in range(w):
00038 horizontal_blend = i / w
00039
00040 color1 = mix_color(corner_colors[0], corner_colors[1], horizontal_blend)
00041 color2 = mix_color(corner_colors[2], corner_colors[3], horizontal_blend)
00042
00043 for j in range(h):
00044 vertical_blend = j / h
00045
00046 color = mix_color(color1, color2, vertical_blend)
00047
00048 red1, green1, blue1, alpha1 = color
00049 red2, green2, blue2, alpha2 = grid[i, j]
00050
00051 new_color = red1 * red2, green1 * green2, blue1 * blue2, 1
00052
00053 new_grid[i, j] = new_color
00054
00055 return new_grid
00056
00057
00058 def make_perlin_tiles(width, height):
00059 perlin_grids = perlin_noise_tileable(width, height, 6, 0.5, 2)
00060
00061 return perlin_grids
00062
00063
00064 def add_ramp(grid, ramp_height):
00065 w, h = grid.dims
00066 new_grid = Grid2D((w, h), 0)
00067
00068 for i in range(w):
00069 for j in range(h):
00070 new_grid[i, j] = grid[i, j] + j / h * ramp_height
00071
00072 return new_grid
00073
00074
00075 def make_perlin_ramp_images():
00076 perlin_grids = make_perlin_tiles(128, 128)
00077 for i, perlin_grid in enumerate(perlin_grids):
00078 perlin_grid = add_ramp(perlin_grid, 2)
00079 perlin_grid = multiply_grid(perlin_grid, 2)
00080 perlin_grid = add_grid(perlin_grid, -2.5)
00081 perlin_grid = saturate(perlin_grid)
00082
00083
00084 sharp_perlin_grid = threshold(perlin_grid, 0.5)
00085 sharp_perlin_grid = greyscale_grid_to_rgb_grid(sharp_perlin_grid, (1, 1, 1, 1))
00086 grid_to_rgb_image(sharp_perlin_grid, 'blend/perlin_ramp_sharp%d.png' % i)
00087
00088
00089 perlin_grid = greyscale_grid_to_rgb_grid(perlin_grid, (1, 1, 1, 1))
00090 grid_to_rgb_image(perlin_grid, 'blend/perlin_ramp%d.png' % i)
00091
00092
00093
00094
00095
00096 def blend_mask_demo():
00097
00098 grid1 = rgb_image_to_grid('blend/grass.png')
00099
00100
00101 grid2 = rgb_image_to_grid('blend/stone.png')
00102
00103 mask_types = [
00104 'smooth_v',
00105 'perlin_ramp0',
00106 'perlin_ramp1',
00107 'perlin_ramp_sharp0',
00108 ]
00109
00110
00111 for mask_type in mask_types:
00112
00113 mask = rgb_grid_to_greyscale_grid(rgb_image_to_grid('blend/' + mask_type + '.png'))
00114
00115
00116 new_grid = blend(grid1, grid2, mask)
00117
00118
00119 grid_to_rgb_image(new_grid, 'blend/blended_' + mask_type + '.png')
00120
00121
00122 def quilt_demo():
00123
00124 grid1 = rgb_image_to_grid('blend/grass.png')
00125
00126
00127 grid2 = rgb_image_to_grid('blend/stone.png')
00128
00129
00130 new_grid = quilt(grid1, grid2, 128)
00131
00132
00133 grid_to_rgb_image(new_grid, 'blend/quilted_.png')
00134
00135
00136 def blend_demo4():
00137 source_tiles = [
00138 'grass',
00139 'stone',
00140 'twigs',
00141 'red_grass']
00142
00143 grids = []
00144
00145 for source_tile in source_tiles:
00146 grids.append(rgb_image_to_grid('blend/%s.png' % source_tile))
00147
00148 mask_type1 = 'smooth_h'
00149 mask_type2 = 'smooth_v'
00150
00151 mask1 = rgb_grid_to_greyscale_grid(rgb_image_to_grid('blend/' + mask_type1 + '.png'))
00152 mask2 = rgb_grid_to_greyscale_grid(rgb_image_to_grid('blend/' + mask_type2 + '.png'))
00153
00154 tiles = []
00155
00156 new_grid1 = blend(grids[0], grids[1], mask1)
00157 new_grid2 = blend(grids[2], grids[3], mask1)
00158
00159 new_grid = blend(new_grid1, new_grid2, mask2)
00160
00161 tiles.append(new_grid)
00162 tiles.append(new_grid1)
00163 tiles.append(new_grid2)
00164
00165 new_grid1 = blend(grids[0], grids[2], mask2)
00166 new_grid2 = blend(grids[1], grids[3], mask2)
00167
00168 tiles.append(new_grid1)
00169 tiles.append(new_grid2)
00170
00171 for i, tile in enumerate(tiles):
00172 grid_to_rgb_image(tile, 'blend/blended_' + 'smooth_2_' + str(i) + '.png')
00173
00174
00175 def blend_corners_demo():
00176 grid = rgb_image_to_grid('blend/grass_grey.png')
00177
00178 green = (0, 1, 0, 1)
00179 yellow_green = (0.5, 1, 0, 1)
00180 blue_green = (0, 1, 0.5, 1)
00181 dark_green = (0, 0.5, 0, 1)
00182 red = (1, 0, 0, 1)
00183 green = (0, 1, 0, 1)
00184 blue = (0, 0, 1, 1)
00185 black = (0, 0, 0, 1)
00186
00187 color_sets = [
00188 [ green, yellow_green, blue_green, dark_green],
00189 [ red, green, blue, black],
00190 [WHITE, WHITE, WHITE, WHITE]
00191 ]
00192
00193 for i, color_set in enumerate(color_sets):
00194 new_grid = multiply_corners(grid, color_set, 1)
00195 grid_to_rgb_image(new_grid, 'blend/corners_multiply_%d.png' % i)
00196
00197 new_grid = blend_corners(grid, color_set, .3)
00198 grid_to_rgb_image(new_grid, 'blend/corners_blend_%d.png' % i)
00199
00200 make_perlin_ramp_images()
00201 blend_mask_demo()
00202 quilt_demo()
00203 blend_demo4()
00204 blend_corners_demo()