Created
March 8, 2020 05:17
-
-
Save flow-dev/2f992c38d0c37dfc6589e6ad2b1667f9 to your computer and use it in GitHub Desktop.
UE4 Color Grading LUT. he reference image generated by this code has no effect on UE4 Post Production.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import cv2\n", | |
"\n", | |
"# UE4 Color Grading LUT\n", | |
"# The reference image generated by this code has no effect on UE4 Post Production\n", | |
"# Multiply this reference image by 3dlut.cube to get the desired look\n", | |
"\n", | |
"# docs\n", | |
"# https://docs.unrealengine.com/en-US/Engine/Rendering/PostProcessEffects/ColorGrading/index.html\n", | |
"\n", | |
"# Reference image\n", | |
"# https://docs.unrealengine.com/Images/Engine/Rendering/PostProcessEffects/UsingLUTs/RGBTable16x1.png\n", | |
"\n", | |
"def ue4_3dlut_256x16(sRGB=False):\n", | |
" \"\"\"ue4_3dlut_256x16\"\"\"\n", | |
" colors = []\n", | |
" for y in range(0, 16):\n", | |
" rows = []\n", | |
" for x in range(0, 256):\n", | |
" rows.append([\n", | |
" 16 * int(x / 16) + int(x / 16), # Blue\n", | |
" 16 * y + y, # Green\n", | |
" 16 * (x % 16) + (x % 16) # Red\n", | |
" ])\n", | |
" colors.append(rows)\n", | |
" \n", | |
" image = np.array(colors).astype(np.uint8)\n", | |
"\n", | |
" if(sRGB):\n", | |
" \"add sRGB(Inversion 2.2)\"\n", | |
"# gamma22LUT = np.array([pow(x/255.0 , 2.2) * 255 for x in range(256)], dtype='uint8')\n", | |
"# image = cv2.LUT(image, gamma22LUT)\n", | |
" gamma045LUT = np.array([pow(x/255.0 , 1.0/2.2) * 255 for x in range(256)], dtype='uint8') \n", | |
" image = cv2.LUT(image, gamma045LUT)\n", | |
" \n", | |
" import matplotlib.pyplot as plt\n", | |
" img_show = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n", | |
" plt.imshow(img_show)\n", | |
" plt.show()\n", | |
" \n", | |
" return image" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"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" | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[[ 0, 0, 0],\n", | |
" [ 0, 0, 17],\n", | |
" [ 0, 0, 34],\n", | |
" ...,\n", | |
" [255, 0, 221],\n", | |
" [255, 0, 238],\n", | |
" [255, 0, 255]],\n", | |
"\n", | |
" [[ 0, 17, 0],\n", | |
" [ 0, 17, 17],\n", | |
" [ 0, 17, 34],\n", | |
" ...,\n", | |
" [255, 17, 221],\n", | |
" [255, 17, 238],\n", | |
" [255, 17, 255]],\n", | |
"\n", | |
" [[ 0, 34, 0],\n", | |
" [ 0, 34, 17],\n", | |
" [ 0, 34, 34],\n", | |
" ...,\n", | |
" [255, 34, 221],\n", | |
" [255, 34, 238],\n", | |
" [255, 34, 255]],\n", | |
"\n", | |
" ...,\n", | |
"\n", | |
" [[ 0, 221, 0],\n", | |
" [ 0, 221, 17],\n", | |
" [ 0, 221, 34],\n", | |
" ...,\n", | |
" [255, 221, 221],\n", | |
" [255, 221, 238],\n", | |
" [255, 221, 255]],\n", | |
"\n", | |
" [[ 0, 238, 0],\n", | |
" [ 0, 238, 17],\n", | |
" [ 0, 238, 34],\n", | |
" ...,\n", | |
" [255, 238, 221],\n", | |
" [255, 238, 238],\n", | |
" [255, 238, 255]],\n", | |
"\n", | |
" [[ 0, 255, 0],\n", | |
" [ 0, 255, 17],\n", | |
" [ 0, 255, 34],\n", | |
" ...,\n", | |
" [255, 255, 221],\n", | |
" [255, 255, 238],\n", | |
" [255, 255, 255]]], dtype=uint8)" | |
] | |
}, | |
"execution_count": 21, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"ue4_3dlut_256x16(False)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3.6.7 64-bit ('base': conda)", | |
"language": "python", | |
"name": "python36764bitbaseconda28d90b05e3314ada96f4bc8f74576c4b" | |
}, | |
"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.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment