<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.polycount.com/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.polycount.com/w/index.php?action=history&amp;feed=atom&amp;title=Blending_functions</id>
		<title>Blending functions - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.polycount.com/w/index.php?action=history&amp;feed=atom&amp;title=Blending_functions"/>
		<link rel="alternate" type="text/html" href="http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;action=history"/>
		<updated>2026-04-08T20:31:35Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.2</generator>

	<entry>
		<id>http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;diff=6908&amp;oldid=prev</id>
		<title>Millennium: /* Category 3 (Complex) */</title>
		<link rel="alternate" type="text/html" href="http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;diff=6908&amp;oldid=prev"/>
				<updated>2015-10-14T12:03:33Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Category 3 (Complex)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:03, 14 October 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As we see the result values of R, G and B components (except for alpha) for this blending mode &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;depends &lt;/del&gt;on it's base layer initial values&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;As we see the result values of R, G and B components (except for alpha) for this blending mode &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;depend &lt;/ins&gt;on it's base layer initial values&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if (baseColor &amp;gt; .5) then {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if (baseColor &amp;gt; .5) then {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 82:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 82:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Actually we don't want newColor to gradually change between A and B, but only switch A &amp;lt;-&amp;gt; B, so interpolation_value &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;should &lt;/del&gt;be strictly equal to 0 or 1. And here is where the [https://msdn.microsoft.com/en-us/library/windows/desktop/bb509665(v=vs.85).aspx step(x, y)] function &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;come &lt;/del&gt;in. The equivalent for '''step''' functionality is:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Actually we don't want newColor to gradually change between A and B, but only switch A &amp;lt;-&amp;gt; B, so interpolation_value &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;must &lt;/ins&gt;be strictly equal to 0 or 1. And here is where the [https://msdn.microsoft.com/en-us/library/windows/desktop/bb509665(v=vs.85).aspx step(x, y)] function &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;comes &lt;/ins&gt;in. The equivalent for '''step''' functionality is:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	float step(x, y) {&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	float step(x, y) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 93:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 93:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Apparently, if it's required to invert output values, just change the order of '''step''' input arguments. Let's assembly all the information we've found out and re-write our shader:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Apparently, if it's required to invert output values, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;we &lt;/ins&gt;just &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;should &lt;/ins&gt;change the order of '''step''' input arguments. Let's assembly all the information we've found out and re-write our shader:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	float isLessOrEq = step(cBase, 0.5);&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	float isLessOrEq = step(cBase, 0.5);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 107:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 107:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;P.P.S. Although compiler will do this work for you at the optimization stage, keep in mind that explicit &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;declaration &lt;/del&gt;variables as '''float''' (1.0, 1. or 1.f insted of 1) is more preferable then writing expressions with variables of different types and, in result, mixing '''float''' with '''int'''. It causes implicit type conversion, which sometimes leads to [http://media.moddb.com/images/members/1/691/690410/G-Mans_Ghost.jpg unforeseen consequences].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;P.P.S. Although compiler will do this work for you at the optimization stage, keep in mind that explicit variables &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;declaration &lt;/ins&gt;as '''float''' (1.0, 1. or 1.f insted of 1) is more preferable then writing expressions with variables of different types and, in result, mixing '''float''' with '''int'''. It causes implicit type conversion, which sometimes leads to [http://media.moddb.com/images/members/1/691/690410/G-Mans_Ghost.jpg unforeseen consequences].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key polycountwiki:diff:version:1.11a:oldid:6880:newid:6908 --&gt;
&lt;/table&gt;</summary>
		<author><name>Millennium</name></author>	</entry>

	<entry>
		<id>http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;diff=6880&amp;oldid=prev</id>
		<title>Millennium: /* Category 3 (Complex) */</title>
		<link rel="alternate" type="text/html" href="http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;diff=6880&amp;oldid=prev"/>
				<updated>2015-09-10T18:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Category 3 (Complex)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;amp;diff=6880&amp;amp;oldid=4738&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Millennium</name></author>	</entry>

	<entry>
		<id>http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;diff=4738&amp;oldid=prev</id>
		<title>Haiddasalami: Created page with &quot;Here are all the Photoshop Blending Modes, in easy to use functions for various languages.  ==HLSL== ===Category 1 (Darker)=== &lt;pre&gt;float4 Darken (float4 cBase, float4 cBlend)...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.polycount.com/w/index.php?title=Blending_functions&amp;diff=4738&amp;oldid=prev"/>
				<updated>2014-08-06T19:49:45Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Here are all the Photoshop Blending Modes, in easy to use functions for various languages.  ==HLSL== ===Category 1 (Darker)=== &amp;lt;pre&amp;gt;float4 Darken (float4 cBase, float4 cBlend)...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Here are all the Photoshop Blending Modes, in easy to use functions for various languages.&lt;br /&gt;
&lt;br /&gt;
==HLSL==&lt;br /&gt;
===Category 1 (Darker)===&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Darken (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	cNew.rgb = min(cBase.rgb, cBlend.rgb);&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Multiply (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (cBase * cBlend);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 ColorBurn (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (1 - (1 - cBase) / cBlend);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 LinearBurn (float4 cBase, float4 CBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (cBase + cBlend - 1);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Category 2 (Lighter)===&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Lighten (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	cNew.rgb = max(cBase.rgb, cBlend.rgb);&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Screen (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (1 - (1 - cBase) * (1 - cBlend));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 ColorDodge (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (cBase / (1 - cBlend));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 LinearDodge (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (cBase + cBlend);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Category 3 (Complex)===&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Overlay (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
/*&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	if (cBase.r &amp;gt; .5) { cNew.r = 1 - (1 - 2 * (cBase.r - .5)) * (1 - cBlend.r); }&lt;br /&gt;
	else { cNew.r = (2 * cBase.r) * cBlend.r; }&lt;br /&gt;
	&lt;br /&gt;
	if (cBase.g &amp;gt; .5) { cNew.g = 1 - (1 - 2 * (cBase.g - .5)) * (1 - cBlend.g); }&lt;br /&gt;
	else { cNew.g = (2 * cBase.g) * cBlend.g; }&lt;br /&gt;
	&lt;br /&gt;
	if (cBase.b &amp;gt; .5) { cNew.b = 1 - (1 - 2 * (cBase.b - .5)) * (1 - cBlend.b); }&lt;br /&gt;
	else { cNew.b = (2 * cBase.b) * cBlend.b; }&lt;br /&gt;
	&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
*/&lt;br /&gt;
	// Vectorized (easier for compiler)&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	&lt;br /&gt;
	// overlay has two output possbilities&lt;br /&gt;
	// which is taken is decided if pixel value&lt;br /&gt;
	// is below half or not&lt;br /&gt;
&lt;br /&gt;
	cNew = step(0.5,cBase);&lt;br /&gt;
	&lt;br /&gt;
	// we pick either solution&lt;br /&gt;
	// depending on pixel&lt;br /&gt;
	&lt;br /&gt;
	// first is case of &amp;lt; 0.5&lt;br /&gt;
	// second is case for &amp;gt;= 0.5&lt;br /&gt;
	&lt;br /&gt;
	// interpolate between the two, &lt;br /&gt;
	// using color as influence value&lt;br /&gt;
	cNew= lerp((cBase*cBlend*2),(1.0-(2.0*(1.0-cBase)*(1.0-cBlend))),cNew);&lt;br /&gt;
&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 SoftLight (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	if (cBlend.r &amp;gt; .5) { cNew.r = cBase.r * (1 - (1 - cBase.r) * (1 - 2 * (cBlend.r)));}&lt;br /&gt;
	else { cNew.r = 1 - (1 - cBase.r) * (1 - (cBase.r * (2 * cBlend.r))); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.g &amp;gt; .5) { cNew.g = cBase.g * (1 - (1 - cBase.g) * (1 - 2 * (cBlend.g)));}&lt;br /&gt;
	else { cNew.g = 1 - (1 - cBase.g) * (1 - (cBase.g * (2 * cBlend.g))); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.g &amp;gt; .5) { cNew.b = cBase.b * (1 - (1 - cBase.b) * (1 - 2 * (cBlend.b)));}&lt;br /&gt;
	else { cNew.b = 1 - (1 - cBase.b) * (1 - (cBase.b * (2 * cBlend.b))); }&lt;br /&gt;
	&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 HardLight (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	if (cBlend.r &amp;gt; .5) { cNew.r = 1 - (1 - cBase.r) * (1 - 2 * (cBlend.r)); }&lt;br /&gt;
	else { cNew.r = cBase.r * (2 * cBlend.r); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.g &amp;gt; .5) { cNew.g = 1 - (1 - cBase.g) * (1 - 2 * (cBlend.g)); }&lt;br /&gt;
	else { cNew.g = cBase.g * (2 * cBlend.g); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.b &amp;gt; .5) { cNew.b = 1 - (1 - cBase.b) * (1 - 2 * (cBlend.b)); }&lt;br /&gt;
	else { cNew.b = cBase.b * (2 * cBlend.b); }&lt;br /&gt;
	&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 VividLight (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	if (cBlend.r &amp;gt; .5) {cNew.r = 1 - (1 - cBase.r) / (2 * (cBlend.r - .5)); }&lt;br /&gt;
	else {cNew.r = cBase.r / (1 - 2 * cBlend.r); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.g &amp;gt; .5) {cNew.g = 1 - (1 - cBase.g) / (2 * (cBlend.g - .5)); }&lt;br /&gt;
	else {cNew.g = cBase.g / (1 - 2 * cBlend.g); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.b &amp;gt; .5) {cNew.b = 1 - (1 - cBase.b) / (2 * (cBlend.b - .5)); }&lt;br /&gt;
	else {cNew.b = cBase.b / (1 - 2 * cBlend.b); }&lt;br /&gt;
	&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 LinearLight (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	if (cBlend.r &amp;gt; .5) {cNew.r = cBase.r + 2 * (cBlend.r - .5); }&lt;br /&gt;
	else {cNew.r = cBase.r + 2 * cBlend.r - 1; }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.g &amp;gt; .5) {cNew.g = cBase.g + 2 * (cBlend.g - .5); }&lt;br /&gt;
	else {cNew.g = cBase.g + 2 * cBlend.g - 1; }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.b &amp;gt; .5) {cNew.b = cBase.b + 2 * (cBlend.b - .5); }&lt;br /&gt;
	else {cNew.b = cBase.b + 2 * cBlend.b - 1; }&lt;br /&gt;
	&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 PinLight (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	float4 cNew;&lt;br /&gt;
	if (cBlend.r &amp;gt; .5) { cNew.r = max(cBase.r, 2 * (cBlend.r - .5)); }&lt;br /&gt;
	else {cNew.r = min(cBase.r, 2 * cBlend.r); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.g &amp;gt; .5) { cNew.g = max(cBase.g, 2 * (cBlend.g - .5)); }&lt;br /&gt;
	else {cNew.g = min(cBase.g, 2 * cBlend.g); }&lt;br /&gt;
	&lt;br /&gt;
	if (cBlend.b &amp;gt; .5) { cNew.b = max(cBase.b, 2 * (cBlend.b - .5)); }&lt;br /&gt;
	else {cNew.b = min(cBase.b, 2 * cBlend.b); }&lt;br /&gt;
	&lt;br /&gt;
	cNew.a = 1.0;&lt;br /&gt;
	return cNew;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Category 4 (Comparison)===&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Difference (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (abs(cBase - cBlend));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float4 Exclusion (float4 cBase, float4 cBlend)&lt;br /&gt;
{&lt;br /&gt;
	return (.5 - 2 * (cBase - .5) * (cBlend - .5));&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:HLSL]][[Category:Shaders]][[Category:Rendering]][[Category:Code]][[Category:Functions]]&lt;/div&gt;</summary>
		<author><name>Haiddasalami</name></author>	</entry>

	</feed>