You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

466 lines
7.9 KiB

  1. Shader "Hidden/BlendOpsNode"
  2. {
  3. Properties
  4. {
  5. _A ("_Source", 2D) = "white" {}
  6. _B ("_Destiny", 2D) = "white" {}
  7. }
  8. SubShader
  9. {
  10. Pass //colorburn
  11. {
  12. CGPROGRAM
  13. #include "UnityCG.cginc"
  14. #pragma vertex vert_img
  15. #pragma fragment frag
  16. sampler2D _A;
  17. sampler2D _B;
  18. int _Sat;
  19. float4 frag(v2f_img i) : SV_Target
  20. {
  21. float4 src = tex2D( _A, i.uv );
  22. float4 des = tex2D( _B, i.uv );
  23. float4 c = ( ( 1.0 - ( ( 1.0 - des) / src) ) );
  24. if( _Sat == 1 )
  25. c = saturate( c );
  26. return c;
  27. }
  28. ENDCG
  29. }
  30. Pass //colordodge
  31. {
  32. CGPROGRAM
  33. #include "UnityCG.cginc"
  34. #pragma vertex vert_img
  35. #pragma fragment frag
  36. sampler2D _A;
  37. sampler2D _B;
  38. int _Sat;
  39. float4 frag(v2f_img i) : SV_Target
  40. {
  41. float4 src = tex2D( _A, i.uv );
  42. float4 des = tex2D( _B, i.uv );
  43. float4 c = ( ( des/ ( 1.0 - src ) ) );
  44. if( _Sat == 1 )
  45. c = saturate( c );
  46. return c;
  47. }
  48. ENDCG
  49. }
  50. Pass //darken
  51. {
  52. CGPROGRAM
  53. #include "UnityCG.cginc"
  54. #pragma vertex vert_img
  55. #pragma fragment frag
  56. sampler2D _A;
  57. sampler2D _B;
  58. int _Sat;
  59. float4 frag(v2f_img i) : SV_Target
  60. {
  61. float4 src = tex2D( _A, i.uv );
  62. float4 des = tex2D( _B, i.uv );
  63. float4 c = ( min( src , des ) );
  64. if( _Sat == 1 )
  65. c = saturate( c );
  66. return c;
  67. }
  68. ENDCG
  69. }
  70. Pass //divide
  71. {
  72. CGPROGRAM
  73. #include "UnityCG.cginc"
  74. #pragma vertex vert_img
  75. #pragma fragment frag
  76. sampler2D _A;
  77. sampler2D _B;
  78. int _Sat;
  79. float4 frag(v2f_img i) : SV_Target
  80. {
  81. float4 src = tex2D( _A, i.uv );
  82. float4 des = tex2D( _B, i.uv );
  83. float4 c = ( ( des / src ) );
  84. if( _Sat == 1 )
  85. c = saturate( c );
  86. return c;
  87. }
  88. ENDCG
  89. }
  90. Pass //difference
  91. {
  92. CGPROGRAM
  93. #include "UnityCG.cginc"
  94. #pragma vertex vert_img
  95. #pragma fragment frag
  96. sampler2D _A;
  97. sampler2D _B;
  98. int _Sat;
  99. float4 frag(v2f_img i) : SV_Target
  100. {
  101. float4 src = tex2D( _A, i.uv );
  102. float4 des = tex2D( _B, i.uv );
  103. float4 c = ( abs( src - des ) );
  104. if( _Sat == 1 )
  105. c = saturate( c );
  106. return c;
  107. }
  108. ENDCG
  109. }
  110. Pass //exclusion
  111. {
  112. CGPROGRAM
  113. #include "UnityCG.cginc"
  114. #pragma vertex vert_img
  115. #pragma fragment frag
  116. sampler2D _A;
  117. sampler2D _B;
  118. int _Sat;
  119. float4 frag(v2f_img i) : SV_Target
  120. {
  121. float4 src = tex2D( _A, i.uv );
  122. float4 des = tex2D( _B, i.uv );
  123. float4 c = ( ( 0.5 - 2.0 * ( src - 0.5 ) * ( des - 0.5 ) ) );
  124. if( _Sat == 1 )
  125. c = saturate( c );
  126. return c;
  127. }
  128. ENDCG
  129. }
  130. Pass //softlight
  131. {
  132. CGPROGRAM
  133. #include "UnityCG.cginc"
  134. #pragma vertex vert_img
  135. #pragma fragment frag
  136. sampler2D _A;
  137. sampler2D _B;
  138. int _Sat;
  139. float4 frag(v2f_img i) : SV_Target
  140. {
  141. float4 src = tex2D( _A, i.uv );
  142. float4 des = tex2D( _B, i.uv );
  143. float4 c = ( 2.0f*src*des + src*src*(1.0f - 2.0f*des) );
  144. if( _Sat == 1 )
  145. c = saturate( c );
  146. return c;
  147. }
  148. ENDCG
  149. }
  150. Pass //hardlight
  151. {
  152. CGPROGRAM
  153. #include "UnityCG.cginc"
  154. #pragma vertex vert_img
  155. #pragma fragment frag
  156. sampler2D _A;
  157. sampler2D _B;
  158. int _Sat;
  159. float4 frag(v2f_img i) : SV_Target
  160. {
  161. float4 src = tex2D( _A, i.uv );
  162. float4 des = tex2D( _B, i.uv );
  163. float4 c = ( ( src > 0.5 ? ( 1.0 - ( 1.0 - 2.0 * ( src - 0.5 ) ) * ( 1.0 - des ) ) : ( 2.0 * src * des ) ) );
  164. if( _Sat == 1 )
  165. c = saturate( c );
  166. return c;
  167. }
  168. ENDCG
  169. }
  170. Pass //hardmix
  171. {
  172. CGPROGRAM
  173. #include "UnityCG.cginc"
  174. #pragma vertex vert_img
  175. #pragma fragment frag
  176. sampler2D _A;
  177. sampler2D _B;
  178. int _Sat;
  179. float4 frag(v2f_img i) : SV_Target
  180. {
  181. float4 src = tex2D( _A, i.uv );
  182. float4 des = tex2D( _B, i.uv );
  183. float4 c = ( round( 0.5 * ( src + des ) ) );
  184. if( _Sat == 1 )
  185. c = saturate( c );
  186. return c;
  187. }
  188. ENDCG
  189. }
  190. Pass //lighten
  191. {
  192. CGPROGRAM
  193. #include "UnityCG.cginc"
  194. #pragma vertex vert_img
  195. #pragma fragment frag
  196. sampler2D _A;
  197. sampler2D _B;
  198. int _Sat;
  199. float4 frag(v2f_img i) : SV_Target
  200. {
  201. float4 src = tex2D( _A, i.uv );
  202. float4 des = tex2D( _B, i.uv );
  203. float4 c = ( max( src, des ) );
  204. if( _Sat == 1 )
  205. c = saturate( c );
  206. return c;
  207. }
  208. ENDCG
  209. }
  210. Pass //linearburn
  211. {
  212. CGPROGRAM
  213. #include "UnityCG.cginc"
  214. #pragma vertex vert_img
  215. #pragma fragment frag
  216. sampler2D _A;
  217. sampler2D _B;
  218. int _Sat;
  219. float4 frag(v2f_img i) : SV_Target
  220. {
  221. float4 src = tex2D( _A, i.uv );
  222. float4 des = tex2D( _B, i.uv );
  223. float4 c = ( ( src + des - 1.0 ) );
  224. if( _Sat == 1 )
  225. c = saturate( c );
  226. return c;
  227. }
  228. ENDCG
  229. }
  230. Pass //lineardodge
  231. {
  232. CGPROGRAM
  233. #include "UnityCG.cginc"
  234. #pragma vertex vert_img
  235. #pragma fragment frag
  236. sampler2D _A;
  237. sampler2D _B;
  238. int _Sat;
  239. float4 frag(v2f_img i) : SV_Target
  240. {
  241. float4 src = tex2D( _A, i.uv );
  242. float4 des = tex2D( _B, i.uv );
  243. float4 c = ( ( src + des ) );
  244. if( _Sat == 1 )
  245. c = saturate( c );
  246. return c;
  247. }
  248. ENDCG
  249. }
  250. Pass //linearlight
  251. {
  252. CGPROGRAM
  253. #include "UnityCG.cginc"
  254. #pragma vertex vert_img
  255. #pragma fragment frag
  256. sampler2D _A;
  257. sampler2D _B;
  258. int _Sat;
  259. float4 frag(v2f_img i) : SV_Target
  260. {
  261. float4 src = tex2D( _A, i.uv );
  262. float4 des = tex2D( _B, i.uv );
  263. float4 c = ( ( src > 0.5 ? ( des + 2.0 * src - 1.0 ) : ( des + 2.0 * ( src - 0.5 ) ) ) );
  264. if( _Sat == 1 )
  265. c = saturate( c );
  266. return c;
  267. }
  268. ENDCG
  269. }
  270. Pass //multiply
  271. {
  272. CGPROGRAM
  273. #include "UnityCG.cginc"
  274. #pragma vertex vert_img
  275. #pragma fragment frag
  276. sampler2D _A;
  277. sampler2D _B;
  278. int _Sat;
  279. float4 frag(v2f_img i) : SV_Target
  280. {
  281. float4 src = tex2D( _A, i.uv );
  282. float4 des = tex2D( _B, i.uv );
  283. float4 c = ( ( src * des ) );
  284. if( _Sat == 1 )
  285. c = saturate( c );
  286. return c;
  287. }
  288. ENDCG
  289. }
  290. Pass //overlay
  291. {
  292. CGPROGRAM
  293. #include "UnityCG.cginc"
  294. #pragma vertex vert_img
  295. #pragma fragment frag
  296. sampler2D _A;
  297. sampler2D _B;
  298. int _Sat;
  299. float4 frag(v2f_img i) : SV_Target
  300. {
  301. float4 src = tex2D( _A, i.uv );
  302. float4 des = tex2D( _B, i.uv );
  303. float4 c = ( ( des > 0.5 ? ( 1.0 - ( 1.0 - 2.0 * ( des - 0.5 ) ) * ( 1.0 - src ) ) : ( 2.0 * des * src ) ) );
  304. if( _Sat == 1 )
  305. c = saturate( c );
  306. return c;
  307. }
  308. ENDCG
  309. }
  310. Pass //pinlight
  311. {
  312. CGPROGRAM
  313. #include "UnityCG.cginc"
  314. #pragma vertex vert_img
  315. #pragma fragment frag
  316. sampler2D _A;
  317. sampler2D _B;
  318. int _Sat;
  319. float4 frag(v2f_img i) : SV_Target
  320. {
  321. float4 src = tex2D( _A, i.uv );
  322. float4 des = tex2D( _B, i.uv );
  323. float4 c = ( ( src > 0.5 ? max( des, 2.0 * ( src - 0.5 ) ) : min( des, 2.0 * src ) ) );
  324. if( _Sat == 1 )
  325. c = saturate( c );
  326. return c;
  327. }
  328. ENDCG
  329. }
  330. Pass //subtract
  331. {
  332. CGPROGRAM
  333. #include "UnityCG.cginc"
  334. #pragma vertex vert_img
  335. #pragma fragment frag
  336. sampler2D _A;
  337. sampler2D _B;
  338. int _Sat;
  339. float4 frag(v2f_img i) : SV_Target
  340. {
  341. float4 src = tex2D( _A, i.uv );
  342. float4 des = tex2D( _B, i.uv );
  343. float4 c = ( ( des - src ) );
  344. if( _Sat == 1 )
  345. c = saturate( c );
  346. return c;
  347. }
  348. ENDCG
  349. }
  350. Pass //screen
  351. {
  352. CGPROGRAM
  353. #include "UnityCG.cginc"
  354. #pragma vertex vert_img
  355. #pragma fragment frag
  356. sampler2D _A;
  357. sampler2D _B;
  358. int _Sat;
  359. float4 frag(v2f_img i) : SV_Target
  360. {
  361. float4 src = tex2D( _A, i.uv );
  362. float4 des = tex2D( _B, i.uv );
  363. float4 c = ( ( 1.0 - ( 1.0 - src ) * ( 1.0 - des ) ) );
  364. if( _Sat == 1 )
  365. c = saturate( c );
  366. return c;
  367. }
  368. ENDCG
  369. }
  370. Pass //vividlight
  371. {
  372. CGPROGRAM
  373. #include "UnityCG.cginc"
  374. #pragma vertex vert_img
  375. #pragma fragment frag
  376. sampler2D _A;
  377. sampler2D _B;
  378. int _Sat;
  379. float4 frag(v2f_img i) : SV_Target
  380. {
  381. float4 src = tex2D( _A, i.uv );
  382. float4 des = tex2D( _B, i.uv );
  383. float4 c = ( ( src > 0.5 ? ( des / ( ( 1.0 - src ) * 2.0 ) ) : ( 1.0 - ( ( ( 1.0 - des ) * 0.5 ) / src ) ) ) );
  384. if( _Sat == 1 )
  385. c = saturate( c );
  386. return c;
  387. }
  388. ENDCG
  389. }
  390. }
  391. }