{"id":930,"date":"2018-07-27T16:06:44","date_gmt":"2018-07-27T15:06:44","guid":{"rendered":"https:\/\/emberglitch.com\/?p=930"},"modified":"2019-06-04T13:44:21","modified_gmt":"2019-06-04T12:44:21","slug":"color-temperature","status":"publish","type":"post","link":"https:\/\/emberglitch.com\/color-temperature\/","title":{"rendered":"Color Temperature"},"content":{"rendered":"[vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][vc_column_text]\n
” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”]
The main input at the top of the graph gets a variable called Temperature. This is a float value in a range of 1000-27000 K. The value goes to boolean switch where it can be switched to use a preset value from the list on the left. The input goes to the formula section where the float value is converted from Kelvin to RGB. This is done by the code below.<\/p>\n
” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” color_overlay=”#939393″ overlay_strength=”0.3″ shape_divider_position=”bottom” shape_type=””][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]
Set Temperature = Temperature \\ 100<\/span><\/p>\n I also added some reference temperature colors in description of the Temperature parameter. With the information given the user has a rough idea what to use for light colors. <\/span>[\/vc_column_text][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”] The preset list is constructed in a common way for easy expandability. It \u2018iterates’ from 0 to 15 int and checks if the value is equal to the set value. Then it sends a temperature value through the if\/else chain to the top, towards the boolean switch. ” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”][vc_column_text]http:\/\/www.zombieprototypes.com\/?p=210<\/span><\/a>[\/vc_column_text][vc_custom_heading text=”With the new function all setup, the new pixel processor graph looks like this.
\nCalculate Red:<\/span>
\n<\/span> \u00a0\u00a0\u00a0If Temperature <= 66 Then<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Red = 255<\/span>
\n<\/span> \u00a0\u00a0\u00a0Else<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Red = Temperature – 60<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Red = 329.698727446 * (Red ^ -0.1332047592)<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Red < 0 Then Red = 0<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Red > 255 Then Red = 255<\/span>
\n<\/span> \u00a0\u00a0\u00a0End If<\/span>
\n<\/span> \u00a0\u00a0\u00a0<\/span>
\n<\/span> \u00a0\u00a0\u00a0Calculate Green:<\/span>
\n<\/span> \u00a0\u00a0\u00a0If Temperature <= 66 Then<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Green = Temperature<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Green = 99.4708025861 * Ln(Green) – 161.1195681661<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Green < 0 Then Green = 0<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Green > 255 Then Green = 255<\/span>
\n<\/span> \u00a0\u00a0\u00a0Else<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Green = Temperature – 60<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Green = 288.1221695283 * (Green ^ -0.0755148492)<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Green < 0 Then Green = 0<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Green > 255 Then Green = 255<\/span>
\n<\/span> \u00a0\u00a0\u00a0End If<\/span>
\n<\/span> \u00a0\u00a0\u00a0<\/span>
\n<\/span> \u00a0\u00a0\u00a0Calculate Blue:<\/span>
\n<\/span> \u00a0\u00a0\u00a0If Temperature >= 66 Then<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Blue = 255<\/span>
\n<\/span> \u00a0\u00a0\u00a0Else<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Temperature <= 19 Then<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Blue = 0<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Else<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Blue = Temperature – 10<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Blue = 138.5177312231 * Ln(Blue) – 305.0447927307<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Blue < 0 Then Blue = 0<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0If Blue > 255 Then Blue = 255<\/span>
\n<\/span> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0End If<\/span>
\n<\/span> \u00a0\u00a0\u00a0End If<\/span>[\/vc_column_text]
\nThat\u2019s it for the pixel processor node.
\nIn the main graph the output from the pixel processor is connected to the output nodes baseColor and emissive. ” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”]<\/div><\/div>[\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/3″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]
<\/div><\/div>[\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/3″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][vc_column_text]The only thing missing are the input parameters: <\/span><\/p>\n
\n
Input & Preset list<\/h3>\n[\/vc_column_text][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”2\/3″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]
<\/a><\/div><\/div>[\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]
\n” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]Conversion formula<\/h3>\n[\/vc_column_text]
\nAnd it also splits the temperature into two groups, above and below 6600 K. Sadly I couldn\u2019t use reusable function nodes to optimize it, because it uses a couple different methods for the calculation.
\n” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”2\/3″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]<\/a><\/div><\/div>[vc_column_text]Conversion formula separated by temperatures below or above 6600 K.<\/span><\/i>[\/vc_column_text][\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]
\nFor the new algorithm I only removed the conversion formula everything else stays the same.
\n” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”]Improved accuracy<\/h3>\n[\/vc_column_text]
<\/a><\/div><\/div>[vc_column_text]Best fit function. a + b*x + c ln(x)<\/span><\/i>[\/vc_column_text][\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][vc_custom_heading text=”Each of variables is a input parameter for the function. The float variable \u2018Kelvin\u2019 is the temperature input divide by 100.
\nWith the new function finished, I only have to set the right values into the function and everything is working perfectly. Luckily I didn\u2019t have to calculate this, I used the values Neil provided in his blog post.<\/p>\n
\n” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”2\/3″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]<\/a><\/div><\/div>[\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/1″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][vc_column_text]\n
Range remapping<\/h3>\n[\/vc_column_text][vc_custom_heading text=”At the end of the graph the output value is converted from 0-255 to 0-1 and combined with a 4th channel, the alpha channel. For now the alpha channel isn\u2019t doing anything, because I wanted the main purpose of this substance to be making accurate light sources. And a premade mask would give the user less control. It could be used ” font_container=”tag:p|text_align:left” google_fonts=”font_family:Open%20Sans%20Condensed%3A300%2C300italic%2C700|font_style:300%20light%20regular%3A300%3Anormal”][\/vc_column][\/vc_row][vc_row type=”in_container” full_screen_row_position=”middle” scene_position=”center” text_color=”dark” text_align=”left” overlay_strength=”0.3″ shape_divider_position=”bottom”][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”1\/6″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”][\/vc_column][vc_column column_padding=”no-extra-padding” column_padding_position=”all” background_color_opacity=”1″ background_hover_color_opacity=”1″ column_shadow=”none” column_border_radius=”none” width=”2\/3″ tablet_text_alignment=”default” phone_text_alignment=”default” column_border_width=”none” column_border_style=”solid”]