From 7675984e7e2d02ac51123484c02663535dff52c4 Mon Sep 17 00:00:00 2001 From: theisen1337 Date: Fri, 12 Jun 2020 11:13:20 -0400 Subject: [PATCH] Free Texture packing workflow. This allows for an alternate workflow for texture and loading textures into the atlas allowing for more users to create more content for the game. --- README.md | 3 +- res_pipeline/Pack_images.py | 64 +++++++++++++++++++++++++++++++ res_pipeline/Steps.txt | 9 +++++ res_pipeline/shapez_size_10.ftpp | 38 ++++++++++++++++++ res_pipeline/shapez_size_100.ftpp | 38 ++++++++++++++++++ res_pipeline/shapez_size_25.ftpp | 38 ++++++++++++++++++ res_pipeline/shapez_size_50.ftpp | 38 ++++++++++++++++++ res_pipeline/shapez_size_75.ftpp | 38 ++++++++++++++++++ 8 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 res_pipeline/Pack_images.py create mode 100644 res_pipeline/Steps.txt create mode 100644 res_pipeline/shapez_size_10.ftpp create mode 100644 res_pipeline/shapez_size_100.ftpp create mode 100644 res_pipeline/shapez_size_25.ftpp create mode 100644 res_pipeline/shapez_size_50.ftpp create mode 100644 res_pipeline/shapez_size_75.ftpp diff --git a/README.md b/README.md index 0d8c70b5..a76c9402 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ This project is based on ES5. Some ES2015 features are used but most of them are For most assets I use Adobe Photoshop, you can find them in `assets/`. -You will need a Texture Packer license in order to regenerate the atlas. If you don't have one but want to contribute assets, let me know and I might compile it for you. I'm currently switching to an open source solution but I can't give an estimate when thats done. +You can use the Texture Packing python script in [res_pipeline](/res_pipeline) to generate packed textures. Default builds over [res_built/atlas](/res_built/atlas). Requires [free-tex-packer-cli](https://github.com/odrick/free-tex-packer-cli). Thanks to [Theisen1337](https://github.com/theisen1337) for intergrating. + shapez.io Screenshot diff --git a/res_pipeline/Pack_images.py b/res_pipeline/Pack_images.py new file mode 100644 index 00000000..16d49125 --- /dev/null +++ b/res_pipeline/Pack_images.py @@ -0,0 +1,64 @@ +from __future__ import print_function +import os + +""" + + @author: Thomas Theis + June 2020 + GNU General Public License v3.0 + +""" +os.system("free-tex-packer-cli --project .\shapez_size_100.ftpp") +os.system("free-tex-packer-cli --project .\shapez_size_75.ftpp") +os.system("free-tex-packer-cli --project .\shapez_size_50.ftpp") +os.system("free-tex-packer-cli --project .\shapez_size_25.ftpp") +os.system("free-tex-packer-cli --project .\shapez_size_10.ftpp") + + + +def update_file( filename, match , replacement ): + """ + + Update Line in file, where match. + + """ + + # Read File + with open(filename, 'r') as file: + # Read list of lines into a list object + data = list(file.readlines()) + + # Loop through lines in file backwards, (meta: I know the keyword is at the bottem of the file.) + for i in range(len(data) -1, 0, -1): + + # Check for Match + if match in data[i]: + + # Print data before updated. + print("\n\nUpdated the line:") + print(data[i]) + print("New line:") + + + # Update data + data[i] = replacement + + # Print New data + print(data[i],"\n\n") + + # Break loop + break + + + # Re-Open file to write + with open(filename, 'w') as file: + + # Write modified data. + file.writelines( data ) + + +update_file("../res_built/atlas/atlas0_100.json", "image", ' "image": "atlas0_100.png",\n') +update_file("../res_built/atlas/atlas0_75.json", "image", ' "image": "atlas0_75.png",\n') +update_file("../res_built/atlas/atlas0_50.json", "image", ' "image": "atlas0_50.png",\n') +update_file("../res_built/atlas/atlas0_25.json", "image", ' "image": "atlas0_25.png",\n') +update_file("../res_built/atlas/atlas0_10.json", "image", ' "image": "atlas0_10.png",\n') diff --git a/res_pipeline/Steps.txt b/res_pipeline/Steps.txt new file mode 100644 index 00000000..8e2cb2f3 --- /dev/null +++ b/res_pipeline/Steps.txt @@ -0,0 +1,9 @@ +You need to download free-tex-packer-cli from node. + +1. npm install -g free-tex-packer-cli + +2. run the python script. + + +*** NOTE *** +If you see flashing on the edges of animation textures i.e. belts. Try changing the "alphaThreshold" (between 0 and 1.0) key in the *.ftpp files \ No newline at end of file diff --git a/res_pipeline/shapez_size_10.ftpp b/res_pipeline/shapez_size_10.ftpp new file mode 100644 index 00000000..60d43a06 --- /dev/null +++ b/res_pipeline/shapez_size_10.ftpp @@ -0,0 +1,38 @@ +{ + "meta": { + "version": "0.6.5" + }, + "savePath": "", + "images": [], + "folders": [ + "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites" + ], + "packOptions": { + "textureName": "../res_built/atlas/atlas0_10", + "textureFormat": "png", + "removeFileExtension": false, + "prependFolderName": true, + "scale": 0.1, + "scaleMethod": "BICUBIC", + "filter": "none", + "exporter": "JSON (hash)", + "base64Export": false, + "tinify": false, + "tinifyKey": "", + "fileName": "pack-resultxx", + "savePath": "", + "width": 2048, + "height": 2048, + "fixedSize": false, + "powerOfTwo": false, + "padding": 0, + "extrude": 2, + "allowRotation": false, + "allowTrim": true, + "trimMode": "trim", + "alphaThreshold": 0.5, + "detectIdentical": true, + "packer": "MaxRectsBin", + "packerMethod": "BestShortSideFit" + } +} \ No newline at end of file diff --git a/res_pipeline/shapez_size_100.ftpp b/res_pipeline/shapez_size_100.ftpp new file mode 100644 index 00000000..7f2ae82b --- /dev/null +++ b/res_pipeline/shapez_size_100.ftpp @@ -0,0 +1,38 @@ +{ + "meta": { + "version": "0.6.5" + }, + "savePath": "", + "images": [], + "folders": [ + "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites" + ], + "packOptions": { + "textureName": "../res_built/atlas/atlas0_100", + "textureFormat": "png", + "removeFileExtension": false, + "prependFolderName": true, + "scale": 1, + "scaleMethod": "BICUBIC", + "filter": "none", + "exporter": "JSON (hash)", + "base64Export": false, + "tinify": false, + "tinifyKey": "", + "fileName": "pack-resultxx", + "savePath": "", + "width": 2048, + "height": 2048, + "fixedSize": false, + "powerOfTwo": false, + "padding": 0, + "extrude": 2, + "allowRotation": false, + "allowTrim": true, + "trimMode": "trim", + "alphaThreshold": 0.5, + "detectIdentical": true, + "packer": "MaxRectsBin", + "packerMethod": "BestShortSideFit" + } +} \ No newline at end of file diff --git a/res_pipeline/shapez_size_25.ftpp b/res_pipeline/shapez_size_25.ftpp new file mode 100644 index 00000000..bf26e3a6 --- /dev/null +++ b/res_pipeline/shapez_size_25.ftpp @@ -0,0 +1,38 @@ +{ + "meta": { + "version": "0.6.5" + }, + "savePath": "", + "images": [], + "folders": [ + "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites" + ], + "packOptions": { + "textureName": "../res_built/atlas/atlas0_25", + "textureFormat": "png", + "removeFileExtension": false, + "prependFolderName": true, + "scale": 0.25, + "scaleMethod": "BICUBIC", + "filter": "none", + "exporter": "JSON (hash)", + "base64Export": false, + "tinify": false, + "tinifyKey": "", + "fileName": "pack-resultxx", + "savePath": "", + "width": 2048, + "height": 2048, + "fixedSize": false, + "powerOfTwo": false, + "padding": 0, + "extrude": 2, + "allowRotation": false, + "allowTrim": true, + "trimMode": "trim", + "alphaThreshold": 0.5, + "detectIdentical": true, + "packer": "MaxRectsBin", + "packerMethod": "BestShortSideFit" + } +} \ No newline at end of file diff --git a/res_pipeline/shapez_size_50.ftpp b/res_pipeline/shapez_size_50.ftpp new file mode 100644 index 00000000..d470c710 --- /dev/null +++ b/res_pipeline/shapez_size_50.ftpp @@ -0,0 +1,38 @@ +{ + "meta": { + "version": "0.6.5" + }, + "savePath": "", + "images": [], + "folders": [ + "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites" + ], + "packOptions": { + "textureName": "../res_built/atlas/atlas0_50", + "textureFormat": "png", + "removeFileExtension": false, + "prependFolderName": true, + "scale": 0.5, + "scaleMethod": "BICUBIC", + "filter": "none", + "exporter": "JSON (hash)", + "base64Export": false, + "tinify": false, + "tinifyKey": "", + "fileName": "pack-resultxx", + "savePath": "", + "width": 2048, + "height": 2048, + "fixedSize": false, + "powerOfTwo": false, + "padding": 0, + "extrude": 2, + "allowRotation": false, + "allowTrim": true, + "trimMode": "trim", + "alphaThreshold": 0.5, + "detectIdentical": true, + "packer": "MaxRectsBin", + "packerMethod": "BestShortSideFit" + } +} \ No newline at end of file diff --git a/res_pipeline/shapez_size_75.ftpp b/res_pipeline/shapez_size_75.ftpp new file mode 100644 index 00000000..a0252dcd --- /dev/null +++ b/res_pipeline/shapez_size_75.ftpp @@ -0,0 +1,38 @@ +{ + "meta": { + "version": "0.6.5" + }, + "savePath": "", + "images": [], + "folders": [ + "C:/Users/tnt/Documents/GitHub/shapez_tnt.io/res_raw/sprites" + ], + "packOptions": { + "textureName": "../res_built/atlas/atlas0_75", + "textureFormat": "png", + "removeFileExtension": false, + "prependFolderName": true, + "scale": 0.75, + "scaleMethod": "BICUBIC", + "filter": "none", + "exporter": "JSON (hash)", + "base64Export": false, + "tinify": false, + "tinifyKey": "", + "fileName": "pack-resultxx", + "savePath": "", + "width": 2048, + "height": 2048, + "fixedSize": false, + "powerOfTwo": false, + "padding": 0, + "extrude": 2, + "allowRotation": false, + "allowTrim": true, + "trimMode": "trim", + "alphaThreshold": 0.5, + "detectIdentical": true, + "packer": "MaxRectsBin", + "packerMethod": "BestShortSideFit" + } +} \ No newline at end of file