Skip to content

Instantly share code, notes, and snippets.

@aemarkov
Created November 5, 2019 17:00
Show Gist options
  • Select an option

  • Save aemarkov/6eb63c39100f732e28f4bf888a876107 to your computer and use it in GitHub Desktop.

Select an option

Save aemarkov/6eb63c39100f732e28f4bf888a876107 to your computer and use it in GitHub Desktop.
texture-generator.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from PIL import Image, ImageDraw\n",
"from colorsys import hsv_to_rgb as hsv"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [],
"source": [
"def draw_tile(pos, size, color):\n",
" p1 = tuple(pos * cell_size)\n",
" p2 = tuple((pos + size) * cell_size)\n",
" draw.rectangle((p1, p2), fill=hsv(*color)) #, outline='#000', width=5)"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [],
"source": [
"size = np.array([2048, 2048])\n",
"cell_size = 64\n",
"\n",
"color_base = (0, 0, 200)\n",
"color_min = (0, 0, 150)\n",
"color_max = (0, 0, 220)\n",
"color_border = (0, 0, 0)\n",
"\n",
"grid_size = size / cell_size"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"tile_min = np.array([1, 1])\n",
"tile_max = np.array([6, 2])\n",
"border_width = 5\n",
"\n",
"img = Image.new(\"RGB\", tuple(size)) \n",
"draw = ImageDraw.Draw(img)\n",
"draw.rectangle(((0, 0), tuple(size)), fill=hsv(*color_base))\n",
"\n",
"for _ in range(50):\n",
" color = np.random.randint(2)\n",
" tile_pos = np.random.randint(grid_size)\n",
" tile_size = np.random.randint(tile_min, tile_max)\n",
" draw_tile(tile_pos, tile_size, color_min)\n",
"\n",
"plt.imshow(np.asarray(img))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQ8AAAD8CAYAAABpXiE9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAXGklEQVR4nO3df8yddXnH8fdnVAgVSVvrCCLWYoopP7YKDZCozMVZsNlW2R+k/CEUyZAImyZbtqJ/SDAsnRPN3CZLnU1hcTA2BBsDo4UYyZLxoyDyq1bKjwaaSqO1IHsW9MFrf9zfRw7lue8+53rucz/3IZ9X8uQ5z/f+9b3POb16n/s63++liMDMbFi/NdcdMLPx5OBhZikOHmaW4uBhZikOHmaW4uBhZimdBw9J50raKWmXpPVdH9/M2qEuv+ch6TDgx8BHgeeBB4ALIuKJzjphZq3o+srjDGBXRDwdEb8EbgLWdNwHM2vBvI6Pdxzw3MDfzwNnHrySpEuBSwGOPPLI05csWTLtziYmJmoPNH/+/Na2OZR58+qfxsnJyaH3N4o+Nqnrf1Pfm/p49NFH1y576aWXapfVnVv2+W3arqkfGU3nPIo+1h0v837bu3cvBw4c0LDbdR08ZiQiNgIbAZYvXx6bN2+edr2HHnqodh+nnXZaa9scyuLFi2uX/fSnPx16f6PoY5O6/jf1vamPq1atql22devW2mV155Z9fpu2a+pHRtM5j6KPdcfLvN/WrVs39DbQ/ceWPcDxA3+/q7SZ2ZjpOng8ACyTtFTS4cBaYEvHfTCzFnT6sSUiJiVdAdwJHAZsiojHu+yDmbWj83seEXE7cHvXxzWzdvkbpmaW0umXxDKWLFkS69dP/0XUtjMPbd/5PtR2bWcX2s7StJ1FGtU+64zD89G2zDmvW7eOHTt2DJ2q9ZWHmaU4eJhZioOHmaU4eJhZioOHmaU4eJhZSi8Hxg2aP39+Z2m1bLotO8iqLq2WTUE3bZdJQzftrykl2GQUA/vqNKXQm2TeB6MYvJdJy3f5/PrKw8xSHDzMLMXBw8xSHDzMLMXBw8xSep9tadJ0p7rt/WUHv2VkB3S1/XyMQia7kM3sZLMtmeNlj5WVmYaw7rlvmke1yVgHjyZ9GeWYSZ1l/7E0aXo+Mn0cRRq3bV2+B/ryfuuSP7aYWYqDh5mlpIOHpOMlfU/SE5Iel/SZ0n6VpD2SHi4/qwe2ubKUmdwp6Zw2TsDM5sZs7nlMAn8REQ9JehvwoKRtZdlXI+LLgytLOolqtvSTgXcCd0k6MSJenUUfzGyOpK88ImJvRDxUHv8C2EFVEa7OGuCmiHglIp4BdlGVnzSzMdRKtkXSe4D3A/cBHwCukHQhsJ3q6uTnVIHl3oHNnqcm2AyWm1y0aFFqEFAm3ZkdwJSpFpatuNbUx+w8q5k+ZgdgZbISo8jsZNPabQ88aztLk0mFZ0pUQgs3TCUdBdwCfDYiXgKuA94LrAD2AtcOu8+I2BgRKyNi5VFHHTXbLprZCMwqeEh6C1Xg+FZEfBsgIl6IiFcj4tfAN3jto4lLTZq9icwm2yLgm8COiPjKQPuxA6udBzxWHm8B1ko6QtJSYBlwf/b4Zja3ZnPP4wPAJ4BHJT1c2j4HXCBpBRDAs8CnACLicUk3A09QZWoud6bFbHylg0dE/DcwXaGY2lKSEXENcE32mGbWH/6GqZml9L7c5PLly2Pz5s1Db1eXwsuOfsyUjWySLW05ijkq2x6Nm0151533KEasdjlP6ShS3m1yuUkz65SDh5mlOHiYWYqDh5mlOHiYWYqDh5mljPUcpm2PnB3FCM1MSjA7qjbbj0yKNDsatO1RpKNIkbb9ejZpO43bZVrYVx5mluLgYWYpDh5mluLgYWYpDh5mluLgYWYpY52qHWd9GoWZSWs3aXty4Wx6ui/p2C77kZksemJiYujjgK88zCypjdnTn5X0aKkOt720LZK0TdKT5ffC0i5JXytV4x6RNPeTGZhZSltXHr8fESsiYmX5ez1wd0QsA+4ufwN8jGri42VUdVmua+n4ZtaxUX1sWQNcXx5fD3x8oP2GqNwLLDhotnUzGxNtBI8Atkp6sFR6AzgmIvaWxz8BjimPjwOeG9h22qpxki6VtF3S9gMHDrTQRTNrWxvZlg9GxB5Jvw1sk/SjwYUREZKGmig1IjYCGwFOPfXUaHOOzezgN5u5pjlYs/ow12c2C5YtLdqk7t9EU4am7lhf//rXU32YdfCIiD3l9z5Jt1JViHtB0rERsbd8LNlXVu911bgu66+OQz/GQV9G92b1pR8Zsy03+VZJb5t6DKyiqhC3BbiorHYR8J3yeAtwYcm6nAW8OPDxxszGyGyvPI4Bbq0qTzIP+LeI+C9JDwA3S7oE2A2cX9a/HVgN7AImgItneXwzmyOzCh4R8TTwu9O0/wz4yDTtAVw+m2OaWT/4G6ZmluLgYWYpvR8YNzk5WXtHOpsey+hyrslRzB2a6X/bA9wO1Y+68966dWuqfGjbgw+zA9xGkWauS4d3mdL2lYeZpTh4mFmKg4eZpTh4mFmKg4eZpTh4mFmKqi999tepp54at91227TLMmnLrucHrUvhZUeeZvvY9XmPsy7nN+1S3Xtgw4YN7N69W8Puz1ceZpbi4GFmKQ4eZpbi4GFmKQ4eZpbi4GFmKb0fVdskM0Jz1apVrafbMqm9rlOumdGnXacsM8cbRR/HOR3bpO79MX/+/NT+fOVhZinp4CHpfaXE5NTPS5I+K+kqSXsG2lcPbHNlKTW5U9I57ZyCmc2F9MeWiNgJrACQdBhVCYVbqSY1/mpEfHlwfUknAWuBk4F3AndJOjEiXs32wczmTlsfWz4CPBURuxvWWQPcFBGvRMQzVDOon9HS8c2sY20Fj7XAjQN/XyHpEUmbJC0sbTMqNQmvLze5f//+lrpoZm2adfCQdDjwx8B/lKbrgPdSfaTZC1w77D4jYmNErIyIlYsWLZptF81sBNpI1X4MeCgiXgCY+g0g6RvAd8ufqVKT2QmQu0y3ZSbaHcUkx21rGvmbrbHapO68R1Hr9c2qy9HTbXxsuYCBjyylNu2U86jKT0JVanKtpCMkLQWWAfe3cHwzmwOzuvIo9Wk/CnxqoPlLklYAATw7tSwiHpd0M/AEMAlc7kyL2fiabbnJ/wXeflDbJxrWvwa4ZjbHNLN+8DdMzSzFwcPMUhw8zCzlTTuqti/1Y+v6kU3HZtNtTWnXTG3WbB3Ypucx83q2XY82qy+TJnf5FQBfeZhZioOHmaU4eJhZioOHmaU4eJhZylhnW5rumHc5r2iTvpR57MuxMpmpUfSjL9mRtt8fmezTxMTE0McBX3mYWZKDh5mlOHiYWYqDh5mlOHiYWYqDh5mljHWqNpPmWrx4cW2abhQpurbTj12mfvs0d2jbr03bA+r6Mu9sl2Z05VFKKOyT9NhA2yJJ2yQ9WX4vLO2S9LVSGe4RSacNbHNRWf9JSRe1fzpm1pWZfmzZDJx7UNt64O6IWAbcXf6Gajb1ZeXnUqpSDEhaBHwBOJOq2NMXBmq6mNmYmVHwiIh7gIOrL60Bri+Prwc+PtB+Q1TuBRaUGdXPAbZFxP6I+DmwjTcGJDMbE7O5YXpMROwtj38CHFMe11WGm3HFODPrv1ayLRERVKUWWjFYbvLAgQNt7dbMWjSb4PHCVIGn8ntfaa+rDDfjinGD5SYXLFgwiy6a2ajMJlW7BbgI2FB+f2eg/QpJN1HdHH0xIvZKuhP4m4GbpKuAK2dx/MbUZF/mr8zocuRpk6ZjZeZEzWp6LZtk+5HZLjtKt+05R5v6UXde8+fPH/o4MMPgIelG4MPAYknPU2VNNgA3S7oE2A2cX1a/HVgN7AImgIsBImK/pC8CD5T1ro6Ig2/CmtmYmFHwiIgLahZ9ZJp1A7i8Zj+bgE0z7p2Z9Za/nm5mKQ4eZpbi4GFmKQ4eZpbS+1G18+bNq00/NaUL29aXsoZdpi2b0n5NKca207hdllDMaupHNpXf99G9vvIwsxQHDzNLcfAwsxQHDzNLcfAwsxQHDzNL6X2qdnJyMlVbNjPKMZty7XKkazZFmjGKkbNtp5r7Ugt4FDKjxrs8Z195mFmKg4eZpTh4mFmKg4eZpTh4mFlK77MtTbIDjjLbtX1Xv6kPTVmOrss8ZmT7mMkWZQfNvVmzNJls1sTEROpYhwwekjYBfwjsi4hTStvfAX8E/BJ4Crg4Ig5Ieg+wA9hZNr83Ii4r25xOVXnuSKp5Tj9Tpiwcibo3TmaCWMinGNvW5eTIXf8jGud/tE26rIHc5ft0Jh9bNvPGym7bgFMi4neAH/P6WdCfiogV5eeygfbrgD/ltVKUrhZnNsYOGTymKzUZEVsjYrL8eS9VDZZapa7L0RFxb7nauIHXylOa2Rhq44bpJ4E7Bv5eKukHkr4v6UOl7Tiq8pJTGktNumKcWf/N6oappM8Dk8C3StNe4N0R8bNyj+M2SScPu9+I2AhsBFi+fPnI7ouYWV46eEhaR3Uj9SNTNz4j4hXglfL4QUlPASdSlZUc/GhTW2rSzMZDKnhIOhf4K+D3ImJioP0dwP6IeFXSCVQ3Rp8u1eJeknQWcB9wIfAPMznWxMREahBQ26m47CC8zOCyrrMOdf0fRZag7cF22T52Weaxy9Kcmf2NrNxkTanJK4EjgG2S4LWU7NnA1ZJ+BfwauGygpOSneS1Vewevv09iZmPmkMGjptTkN2vWvQW4pWbZduCUoXpnZr3lr6ebWYqDh5mlOHiYWYqDh5ml9H5U7dFHH50apVmXshpFSi2T2hvF6Nhs/+u26zIVDrnRzl2+ZlmjeD7qzjvzvpo3LxcGfOVhZikOHmaW4uBhZikOHmaW4uBhZikOHmaW0vtUbVO5yUxqLzsHaJelKEcxAXKm/03Pb3ZUarb/XZUcHYXsRN1djUCenJyctv1QfOVhZikOHmaW4uBhZikOHmaW4uBhZimHDB6SNknaJ+mxgbarJO2R9HD5WT2w7EpJuyTtlHTOQPu5pW2XpPXtn4qZdWkmqdrNwD9SFWoa9NWI+PJgg6STgLXAycA7gbsknVgW/xPwUaqaLQ9I2hIRT8yi743qUpPZFGOXkxJnRsDOZp8Z2TqwWZl08ij6WNePUUxy3PZrVvdcZUfVzmQO03tKDdqZWAPcVEowPCNpF3BGWbYrIp4GkHRTWXdkwcPMRms29zyukPRI+VizsLQdBzw3sM5UZbi6djMbU9ngcR3wXmAFVZW4a1vrES43aTYOUsEjIl6IiFcj4tfAN3jto8ke4PiBVacqw9W11+1/Y0SsjIiVCxYsyHTRzEYsFTxK1fsp5wFTmZgtwFpJR0haSlUx7n7gAWCZpKWSDqe6qbol320zm2vZinEflrQCCOBZ4FMAEfG4pJupboROApdHxKtlP1cAdwKHAZsi4vHWz2ZAZgBWX+blfDNrel2ymaSuNPU9O+BvFIMgu9Jqxbiy/jXANdO03w7cPlTvDqEpFdeXEZVN+tKPOtn+dZmaHMVz2HWt4DZlng+PqjWzTjl4mFmKg4eZpTh4mFmKg4eZpfR+DtMmmYzK4sWLa7fruixg3XbZOUD7Mi9nUz+yGbLM/ro0ijTzKAbbtclXHmaW4uBhZikOHmaW4uBhZikOHmaW4uBhZiljnapt0nZ5xWzarG5ZNsWY7UfT81GX/m3qY7YfbQ9YzO6v7UF4o0idZt6PmffAxMTEcB0rfOVhZikOHmaW4uBhZikOHmaW4uBhZinZcpP/PlBq8llJD5f290j6v4Fl/zywzemSHi3lJr8mSaM5JTPrgiKieQXpbOBl4IaIOGWa5dcCL0bE1aWy3Hdr1rsf+HPgPqq5TL8WEXccqoNLliyJ9eunL23b9gjTLuc9HUVauG2jeD4yKeNRPB9tp/L7Mro3Y926dezYsWPo/8wPeeUREfcA+6dbVq4ezgdubNpHKdVwdETcG1W0ugH4+LCdNbP+mO09jw8BL0TEkwNtSyX9QNL3JX2otB1HVWJySmO5ycGKcS+//PIsu2hmozDbb5hewOuvOvYC746In0k6HbhN0snD7jQiNgIbofrYMss+mtkIpIOHpHnAnwCnT7VFxCvAK+Xxg5KeAk6kKi35roHNG8tNmln/zeZjyx8AP4qI33wckfQOSYeVxydQlZt8OiL2Ai9JOqvcJ7kQ+M4sjm1mc2wmqdobgf8B3ifpeUmXlEVreeON0rOBR0rq9j+ByyJi6mbrp4F/AXYBTwGHzLSYWX9ly00SEeumabsFuKVm/e3AG1K4hzJ//vzWR6bWyU5i24fJaKH99G/T85ut69u0LNPHUdQXrjOKdGw2/Vt33l2+F/0NUzNLcfAwsxQHDzNLcfAwsxQHDzNLcfAws5TeT4A8MTGRSktlUnjZ/TUZh1RiXbqw69G9TenYtlOTbfc/M1oY2p9Yu8v3m688zCzFwcPMUhw8zCzFwcPMUhw8zCyl99mWpoFxTYOK2r6z3JfBb1lNd/zrjCL7lClFuWrVqtpM0iiyHJn9NRlFmcq6886cs8tNmlmnHDzMLMXBw8xSHDzMLMXBw8xSZjKH6fGSvifpCUmPS/pMaV8kaZukJ8vvhaVdpZzkLkmPSDptYF8XlfWflHTR6E7LzEZtJuUmjwWOjYiHJL0NeJCq2ts6YH9EbJC0HlgYEX8taTXwZ8Bq4Ezg7yPiTEmLgO3ASiDKfk6PiJ83HX/58uWxefPmaZf1pWRjNl3YlxKFdc9jU/+anvsmXb4ufeljl2ntTAp6w4YN7N69eyTlJvdGxEPl8S+AHVTV3tYA15fVrue18pFrqOraRkTcCywoAegcYFtE7C8BYxtw7rAdNrN+GOqeRylk/X6qYtXHlHosAD8BjimPjwOeG9hsqrRkXft0x/lNuckDBw4M00Uz68iMg4eko6jKKnw2Il4aXFaKV7dWFjIiNkbEyohYuWDBgrZ2a2YtmlHwkPQWqsDxrYj4dml+oXwcmbovsq+07wGOH9h8qrRkXbuZjaGZZFsEfBPYERFfGVi0BZjKmFzEa+UjtwAXlqzLWcCL5ePNncAqSQtLZmZVaTOzMTSTgXEfAD4BPFrKSAJ8DtgA3FzKT+4Gzi/LbqfKtOwCJoCLASJiv6QvAg+U9a4eKEVpZmPmkKnauSbpF8DOue5HyxYD/cjTtsfnNB6mO6clEfGOYXfU+yH5wM6IWDnXnWiTpO0+p/7zOTXz19PNLMXBw8xSxiF4bJzrDoyAz2k8+Jwa9P6GqZn10zhceZhZDzl4mFlKb4OHpHMl7Szzgqyf6/4MQ9Kzkh6V9LCk7aVt6PlP5pKkTZL2SXpsoG2s53CpOaerJO0pr9XDZUqJqWVXlnPaKemcgfbevDfndL6diOjdD3AY8BRwAnA48EPgpLnu1xD9fxZYfFDbl4D15fF64G/L49XAHYCAs4D75rr/pV9nA6cBj2XPAVgEPF1+LyyPF/bsnK4C/nKadU8q77sjgKXl/XhY396bwLHAaeXx24Afl76P/LXq65XHGcCuiHg6In4J3EQ1T8g4G3b+kzkVEfcABw8fGOs5XGrOqc4a4KaIeCUinqEabnEGPXtvxhzOt9PX4DHjuT96KoCtkh6UdGlpG3b+kz4a2Rwuc+yKcgm/aerynjE8p67m25nS1+Ax7j4YEacBHwMul3T24MKorhPHOkf+ZjiH4jrgvcAKYC9w7dx2J6fL+Xam9DV4jPXcHxGxp/zeB9xKdak77PwnffSmm8MlIl6IiFcj4tfAN6heKxijc5qr+Xb6GjweAJZJWirpcGAt1TwhvSfpraomikbSW6nmLXmM4ec/6aM33RwuB91fOo/qtYLqnNZKOkLSUmAZcD89e29KczjfzlzdJZ7BXeTVVHeOnwI+P9f9GaLfJ1Ddgf8h8PhU34G3A3cDTwJ3AYtKu4B/Kuf5KLByrs+h9OtGqsv4X1F9/r0kcw7AJ6luNu4CLu7hOf1r6fMj5R/WsQPrf76c007gY318bwIfpPpI8gjwcPlZ3cVr5a+nm1lKXz+2mFnPOXiYWYqDh5mlOHiYWYqDh5mlOHiYWYqDh5ml/D/tNqKQbZZhsAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"img = Image.new(\"RGB\", tuple(size)) \n",
"draw = ImageDraw.Draw(img)\n",
"draw.rectangle(((0, 0), tuple(size)), fill=hsv(*color_base))\n",
"\n",
"for x in range(int(grid_size[0])):\n",
" for y in range(int(grid_size[1])):\n",
" v = np.random.randint(100)\n",
" if v > 60:\n",
" c = np.random.randint(2)\n",
" draw_tile(np.array([x, y]), np.array([1, 1]), color_min if c else color_max)\n",
" \n",
"plt.imshow(np.asarray(img))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {},
"outputs": [],
"source": [
"img.save('texture.png')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment