123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="generator" content="Asciidoctor 1.5.4">
- <title>ShaderBlow</title>
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
- <style>
- /* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
- /* Remove comment around @import statement below when using as a custom stylesheet */
- /*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
- article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
- audio,canvas,video{display:inline-block}
- audio:not([controls]){display:none;height:0}
- [hidden],template{display:none}
- script{display:none!important}
- html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
- body{margin:0}
- a{background:transparent}
- a:focus{outline:thin dotted}
- a:active,a:hover{outline:0}
- h1{font-size:2em;margin:.67em 0}
- abbr[title]{border-bottom:1px dotted}
- b,strong{font-weight:bold}
- dfn{font-style:italic}
- hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
- mark{background:#ff0;color:#000}
- code,kbd,pre,samp{font-family:monospace;font-size:1em}
- pre{white-space:pre-wrap}
- q{quotes:"\201C" "\201D" "\2018" "\2019"}
- small{font-size:80%}
- sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
- sup{top:-.5em}
- sub{bottom:-.25em}
- img{border:0}
- svg:not(:root){overflow:hidden}
- figure{margin:0}
- fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
- legend{border:0;padding:0}
- button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
- button,input{line-height:normal}
- button,select{text-transform:none}
- button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
- button[disabled],html input[disabled]{cursor:default}
- input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
- input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
- input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
- button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
- textarea{overflow:auto;vertical-align:top}
- table{border-collapse:collapse;border-spacing:0}
- *,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
- html,body{font-size:100%}
- body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto}
- a:hover{cursor:pointer}
- img,object,embed{max-width:100%;height:auto}
- object,embed{height:100%}
- img{-ms-interpolation-mode:bicubic}
- .left{float:left!important}
- .right{float:right!important}
- .text-left{text-align:left!important}
- .text-right{text-align:right!important}
- .text-center{text-align:center!important}
- .text-justify{text-align:justify!important}
- .hide{display:none}
- body{-webkit-font-smoothing:antialiased}
- img,object,svg{display:inline-block;vertical-align:middle}
- textarea{height:auto;min-height:50px}
- select{width:100%}
- .center{margin-left:auto;margin-right:auto}
- .spread{width:100%}
- p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
- .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
- div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
- a{color:#2156a5;text-decoration:underline;line-height:inherit}
- a:hover,a:focus{color:#1d4b8f}
- a img{border:none}
- p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
- p aside{font-size:.875em;line-height:1.35;font-style:italic}
- h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
- h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
- h1{font-size:2.125em}
- h2{font-size:1.6875em}
- h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
- h4,h5{font-size:1.125em}
- h6{font-size:1em}
- hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
- em,i{font-style:italic;line-height:inherit}
- strong,b{font-weight:bold;line-height:inherit}
- small{font-size:60%;line-height:inherit}
- code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
- ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
- ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
- ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
- ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
- ul.square{list-style-type:square}
- ul.circle{list-style-type:circle}
- ul.disc{list-style-type:disc}
- ul.no-bullet{list-style:none}
- ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
- dl dt{margin-bottom:.3125em;font-weight:bold}
- dl dd{margin-bottom:1.25em}
- abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
- abbr{text-transform:none}
- blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
- blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
- blockquote cite:before{content:"\2014 \0020"}
- blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
- blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
- @media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
- h1{font-size:2.75em}
- h2{font-size:2.3125em}
- h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
- h4{font-size:1.4375em}}
- table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
- table thead,table tfoot{background:#f7f8f7;font-weight:bold}
- table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
- table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
- table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
- table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
- body{tab-size:4}
- h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
- h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
- .clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
- .clearfix:after,.float-group:after{clear:both}
- *:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
- pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
- .keyseq{color:rgba(51,51,51,.8)}
- kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
- .keyseq kbd:first-child{margin-left:0}
- .keyseq kbd:last-child{margin-right:0}
- .menuseq,.menu{color:rgba(0,0,0,.8)}
- b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
- b.button:before{content:"[";padding:0 3px 0 2px}
- b.button:after{content:"]";padding:0 2px 0 3px}
- p a>code:hover{color:rgba(0,0,0,.9)}
- #header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
- #header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
- #header:after,#content:after,#footnotes:after,#footer:after{clear:both}
- #content{margin-top:1.25em}
- #content:before{content:none}
- #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
- #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
- #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
- #header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
- #header .details span:first-child{margin-left:-.125em}
- #header .details span.email a{color:rgba(0,0,0,.85)}
- #header .details br{display:none}
- #header .details br+span:before{content:"\00a0\2013\00a0"}
- #header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
- #header .details br+span#revremark:before{content:"\00a0|\00a0"}
- #header #revnumber{text-transform:capitalize}
- #header #revnumber:after{content:"\00a0"}
- #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
- #toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
- #toc>ul{margin-left:.125em}
- #toc ul.sectlevel0>li>a{font-style:italic}
- #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
- #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
- #toc li{line-height:1.3334;margin-top:.3334em}
- #toc a{text-decoration:none}
- #toc a:active{text-decoration:underline}
- #toctitle{color:#7a2518;font-size:1.2em}
- @media only screen and (min-width:768px){#toctitle{font-size:1.375em}
- body.toc2{padding-left:15em;padding-right:0}
- #toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
- #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
- #toc.toc2>ul{font-size:.9em;margin-bottom:0}
- #toc.toc2 ul ul{margin-left:0;padding-left:1em}
- #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
- body.toc2.toc-right{padding-left:0;padding-right:15em}
- body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
- @media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
- #toc.toc2{width:20em}
- #toc.toc2 #toctitle{font-size:1.375em}
- #toc.toc2>ul{font-size:.95em}
- #toc.toc2 ul ul{padding-left:1.25em}
- body.toc2.toc-right{padding-left:0;padding-right:20em}}
- #content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
- #content #toc>:first-child{margin-top:0}
- #content #toc>:last-child{margin-bottom:0}
- #footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
- #footer-text{color:rgba(255,255,255,.8);line-height:1.44}
- .sect1{padding-bottom:.625em}
- @media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
- .sect1+.sect1{border-top:1px solid #efefed}
- #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
- #content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
- #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
- #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
- #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
- .audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
- .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
- table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
- .paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
- table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
- .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
- .admonitionblock>table td.icon{text-align:center;width:80px}
- .admonitionblock>table td.icon img{max-width:none}
- .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
- .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
- .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
- .exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
- .exampleblock>.content>:first-child{margin-top:0}
- .exampleblock>.content>:last-child{margin-bottom:0}
- .sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
- .sidebarblock>:first-child{margin-top:0}
- .sidebarblock>:last-child{margin-bottom:0}
- .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
- .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
- .literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
- .sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
- .literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
- .literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
- @media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
- @media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
- .literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
- .listingblock pre.highlightjs{padding:0}
- .listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
- .listingblock pre.prettyprint{border-width:0}
- .listingblock>.content{position:relative}
- .listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
- .listingblock:hover code[data-lang]:before{display:block}
- .listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
- .listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
- table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
- table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
- table.pyhltable td.code{padding-left:.75em;padding-right:0}
- pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
- pre.pygments .lineno{display:inline-block;margin-right:.25em}
- table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
- .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
- .quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
- .quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
- .quoteblock blockquote{margin:0;padding:0;border:0}
- .quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
- .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
- .quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
- .quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
- .quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
- .quoteblock .quoteblock blockquote:before{display:none}
- .verseblock{margin:0 1em 1.25em 1em}
- .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
- .verseblock pre strong{font-weight:400}
- .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
- .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
- .quoteblock .attribution br,.verseblock .attribution br{display:none}
- .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
- .quoteblock.abstract{margin:0 0 1.25em 0;display:block}
- .quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
- .quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
- table.tableblock{max-width:100%;border-collapse:separate}
- table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
- table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
- table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
- table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
- table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
- table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
- table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
- table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
- table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
- table.frame-all{border-width:1px}
- table.frame-sides{border-width:0 1px}
- table.frame-topbot{border-width:1px 0}
- th.halign-left,td.halign-left{text-align:left}
- th.halign-right,td.halign-right{text-align:right}
- th.halign-center,td.halign-center{text-align:center}
- th.valign-top,td.valign-top{vertical-align:top}
- th.valign-bottom,td.valign-bottom{vertical-align:bottom}
- th.valign-middle,td.valign-middle{vertical-align:middle}
- table thead th,table tfoot th{font-weight:bold}
- tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
- tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
- p.tableblock>code:only-child{background:none;padding:0}
- p.tableblock{font-size:1em}
- td>div.verse{white-space:pre}
- ol{margin-left:1.75em}
- ul li ol{margin-left:1.5em}
- dl dd{margin-left:1.125em}
- dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
- ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
- ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
- ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
- ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
- ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
- ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
- ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
- ul.inline>li>*{display:block}
- .unstyled dl dt{font-weight:400;font-style:normal}
- ol.arabic{list-style-type:decimal}
- ol.decimal{list-style-type:decimal-leading-zero}
- ol.loweralpha{list-style-type:lower-alpha}
- ol.upperalpha{list-style-type:upper-alpha}
- ol.lowerroman{list-style-type:lower-roman}
- ol.upperroman{list-style-type:upper-roman}
- ol.lowergreek{list-style-type:lower-greek}
- .hdlist>table,.colist>table{border:0;background:none}
- .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
- td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
- td.hdlist1{font-weight:bold;padding-bottom:1.25em}
- .literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
- .colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
- .colist>table tr>td:last-of-type{padding:.25em 0}
- .thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
- .imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
- .imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
- .imageblock>.title{margin-bottom:0}
- .imageblock.thumb,.imageblock.th{border-width:6px}
- .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
- .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
- .image.left{margin-right:.625em}
- .image.right{margin-left:.625em}
- a.image{text-decoration:none;display:inline-block}
- a.image object{pointer-events:none}
- sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
- sup.footnote a,sup.footnoteref a{text-decoration:none}
- sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
- #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
- #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
- #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
- #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
- #footnotes .footnote:last-of-type{margin-bottom:0}
- #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
- .gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
- .gist .file-data>table td.line-data{width:99%}
- div.unbreakable{page-break-inside:avoid}
- .big{font-size:larger}
- .small{font-size:smaller}
- .underline{text-decoration:underline}
- .overline{text-decoration:overline}
- .line-through{text-decoration:line-through}
- .aqua{color:#00bfbf}
- .aqua-background{background-color:#00fafa}
- .black{color:#000}
- .black-background{background-color:#000}
- .blue{color:#0000bf}
- .blue-background{background-color:#0000fa}
- .fuchsia{color:#bf00bf}
- .fuchsia-background{background-color:#fa00fa}
- .gray{color:#606060}
- .gray-background{background-color:#7d7d7d}
- .green{color:#006000}
- .green-background{background-color:#007d00}
- .lime{color:#00bf00}
- .lime-background{background-color:#00fa00}
- .maroon{color:#600000}
- .maroon-background{background-color:#7d0000}
- .navy{color:#000060}
- .navy-background{background-color:#00007d}
- .olive{color:#606000}
- .olive-background{background-color:#7d7d00}
- .purple{color:#600060}
- .purple-background{background-color:#7d007d}
- .red{color:#bf0000}
- .red-background{background-color:#fa0000}
- .silver{color:#909090}
- .silver-background{background-color:#bcbcbc}
- .teal{color:#006060}
- .teal-background{background-color:#007d7d}
- .white{color:#bfbfbf}
- .white-background{background-color:#fafafa}
- .yellow{color:#bfbf00}
- .yellow-background{background-color:#fafa00}
- span.icon>.fa{cursor:default}
- .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
- .admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
- .admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
- .admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
- .admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
- .admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
- .conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
- .conum[data-value] *{color:#fff!important}
- .conum[data-value]+b{display:none}
- .conum[data-value]:after{content:attr(data-value)}
- pre .conum[data-value]{position:relative;top:-.125em}
- b.conum *{color:inherit!important}
- .conum:not([data-value]):empty{display:none}
- dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
- h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
- p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
- p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
- p{margin-bottom:1.25rem}
- .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
- .exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
- .print-only{display:none!important}
- @media print{@page{margin:1.25cm .75cm}
- *{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
- a{color:inherit!important;text-decoration:underline!important}
- a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
- a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
- abbr[title]:after{content:" (" attr(title) ")"}
- pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
- thead{display:table-header-group}
- svg{max-width:100%}
- p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
- h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
- #toc,.sidebarblock,.exampleblock>.content{background:none!important}
- #toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
- .sect1{padding-bottom:0!important}
- .sect1+.sect1{border:0!important}
- #header>h1:first-child{margin-top:1.25rem}
- body.book #header{text-align:center}
- body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
- body.book #header .details{border:0!important;display:block;padding:0!important}
- body.book #header .details span:first-child{margin-left:0!important}
- body.book #header .details br{display:block}
- body.book #header .details br+span:before{content:none!important}
- body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
- body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
- .listingblock code[data-lang]:before{display:block}
- #footer{background:none!important;padding:0 .9375em}
- #footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
- .hide-on-print{display:none!important}
- .print-only{display:block!important}
- .hide-for-print{display:none!important}
- .show-for-print{display:inherit!important}}
- </style>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
- <style>
- /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
- /*pre.CodeRay {background-color:#f7f7f8;}*/
- .CodeRay .line-numbers{border-right:1px solid #d8d8d8;padding:0 0.5em 0 .25em}
- .CodeRay span.line-numbers{display:inline-block;margin-right:.5em;color:rgba(0,0,0,.3)}
- .CodeRay .line-numbers strong{color:rgba(0,0,0,.4)}
- table.CodeRay{border-collapse:separate;border-spacing:0;margin-bottom:0;border:0;background:none}
- table.CodeRay td{vertical-align: top;line-height:1.45}
- table.CodeRay td.line-numbers{text-align:right}
- table.CodeRay td.line-numbers>pre{padding:0;color:rgba(0,0,0,.3)}
- table.CodeRay td.code{padding:0 0 0 .5em}
- table.CodeRay td.code>pre{padding:0}
- .CodeRay .debug{color:#fff !important;background:#000080 !important}
- .CodeRay .annotation{color:#007}
- .CodeRay .attribute-name{color:#000080}
- .CodeRay .attribute-value{color:#700}
- .CodeRay .binary{color:#509}
- .CodeRay .comment{color:#998;font-style:italic}
- .CodeRay .char{color:#04d}
- .CodeRay .char .content{color:#04d}
- .CodeRay .char .delimiter{color:#039}
- .CodeRay .class{color:#458;font-weight:bold}
- .CodeRay .complex{color:#a08}
- .CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
- .CodeRay .color{color:#099}
- .CodeRay .class-variable{color:#369}
- .CodeRay .decorator{color:#b0b}
- .CodeRay .definition{color:#099}
- .CodeRay .delimiter{color:#000}
- .CodeRay .doc{color:#970}
- .CodeRay .doctype{color:#34b}
- .CodeRay .doc-string{color:#d42}
- .CodeRay .escape{color:#666}
- .CodeRay .entity{color:#800}
- .CodeRay .error{color:#808}
- .CodeRay .exception{color:inherit}
- .CodeRay .filename{color:#099}
- .CodeRay .function{color:#900;font-weight:bold}
- .CodeRay .global-variable{color:#008080}
- .CodeRay .hex{color:#058}
- .CodeRay .integer,.CodeRay .float{color:#099}
- .CodeRay .include{color:#555}
- .CodeRay .inline{color:#000}
- .CodeRay .inline .inline{background:#ccc}
- .CodeRay .inline .inline .inline{background:#bbb}
- .CodeRay .inline .inline-delimiter{color:#d14}
- .CodeRay .inline-delimiter{color:#d14}
- .CodeRay .important{color:#555;font-weight:bold}
- .CodeRay .interpreted{color:#b2b}
- .CodeRay .instance-variable{color:#008080}
- .CodeRay .label{color:#970}
- .CodeRay .local-variable{color:#963}
- .CodeRay .octal{color:#40e}
- .CodeRay .predefined{color:#369}
- .CodeRay .preprocessor{color:#579}
- .CodeRay .pseudo-class{color:#555}
- .CodeRay .directive{font-weight:bold}
- .CodeRay .type{font-weight:bold}
- .CodeRay .predefined-type{color:inherit}
- .CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
- .CodeRay .key{color:#808}
- .CodeRay .key .delimiter{color:#606}
- .CodeRay .key .char{color:#80f}
- .CodeRay .value{color:#088}
- .CodeRay .regexp .delimiter{color:#808}
- .CodeRay .regexp .content{color:#808}
- .CodeRay .regexp .modifier{color:#808}
- .CodeRay .regexp .char{color:#d14}
- .CodeRay .regexp .function{color:#404;font-weight:bold}
- .CodeRay .string{color:#d20}
- .CodeRay .string .string .string{background:#ffd0d0}
- .CodeRay .string .content{color:#d14}
- .CodeRay .string .char{color:#d14}
- .CodeRay .string .delimiter{color:#d14}
- .CodeRay .shell{color:#d14}
- .CodeRay .shell .delimiter{color:#d14}
- .CodeRay .symbol{color:#990073}
- .CodeRay .symbol .content{color:#a60}
- .CodeRay .symbol .delimiter{color:#630}
- .CodeRay .tag{color:#008080}
- .CodeRay .tag-special{color:#d70}
- .CodeRay .variable{color:#036}
- .CodeRay .insert{background:#afa}
- .CodeRay .delete{background:#faa}
- .CodeRay .change{color:#aaf;background:#007}
- .CodeRay .head{color:#f8f;background:#505}
- .CodeRay .insert .insert{color:#080}
- .CodeRay .delete .delete{color:#800}
- .CodeRay .change .change{color:#66f}
- .CodeRay .head .head{color:#f4f}
- </style>
- </head>
- <body class="article toc2 toc-left">
- <div id="header">
- <h1>ShaderBlow</h1>
- <div class="details">
- <span id="author" class="author"></span><br>
- <span id="revnumber">version ,</span>
- <span id="revdate">2016/03/17 20:48</span>
- </div>
- <div id="toc" class="toc2">
- <div id="toctitle">Table of Contents</div>
- <ul class="sectlevel2">
- <li><a href="#colorscale-filter">ColorScale Filter</a></li>
- <li><a href="#grayscale-filter">GrayScale Filter</a></li>
- <li><a href="#old-film-effect-filter">Old Film Effect Filter</a></li>
- <li><a href="#lightblow-shader">LightBlow Shader</a></li>
- <li><a href="#dissolver-shader">Dissolver Shader</a></li>
- <li><a href="#fakeparticleblow-shader">FakeParticleBlow Shader</a></li>
- <li><a href="#forceshield-shader">Forceshield Shader</a></li>
- <li><a href="#matcap-shader">MatCap Shader</a></li>
- <li><a href="#glass-shader">Glass Shader</a></li>
- <li><a href="#simplerefraction-postprocessor-filter">SimpleRefraction PostProcessor/Filter</a></li>
- <li><a href="#basicssao-filter">BasicSSAO Filter</a></li>
- <li><a href="#electricity-shaders">Electricity Shaders</a></li>
- <li><a href="#simplesprite-shader">SimpleSprite Shader</a></li>
- <li><a href="#bubble-shader">Bubble Shader</a></li>
- <li><a href="#simplespriteparticle-shader">SimpleSpriteParticle Shader</a></li>
- <li><a href="#texture-bombing">Texture Bombing</a></li>
- <li><a href="#night-vision">Night Vision</a></li>
- <li><a href="#predator-thermal-vision">Predator Thermal Vision</a></li>
- <li><a href="#frosted-glass-effect">Frosted glass effect</a></li>
- </ul>
- </div>
- </div>
- <div id="content">
- <div id="preamble">
- <div class="sectionbody">
- <div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/shaderblow_intro_01.jpg" alt="shaderblow_intro_01.jpg" height=""></span></p>
- </div>
- <div class="literalblock">
- <div class="content">
- <pre> Collections of effects for jMonkeyEngine 3. To install the ShaderBlow plugin into the jMonkeyEngine SDK, go to Tools→Plugins→Available Plugins.
- You can always get the source of ShaderBlow project here:
- link:http://code.google.com/p/jmonkeyplatform-contributions/source/browse/#svn%2Ftrunk%2Fshaderblowlib%2FShaderBlow[ShaderBlow project SVN]</pre>
- </div>
- </div>
- <div class="paragraph">
- <p>The source has many examples and tests to explain the capacity of shaders much better.</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Filters:</p>
- <div class="ulist">
- <ul>
- <li>
- <p>Basic SSAO</p>
- </li>
- <li>
- <p>ColorScale (added by @H)</p>
- </li>
- <li>
- <p>GrayScale (added by @H)</p>
- </li>
- <li>
- <p>Simple Refraction (added by @mifth)</p>
- </li>
- <li>
- <p>Old Film Effect (added by @H)</p>
- </li>
- <li>
- <p>Night Vision (added by @wezrule)</p>
- </li>
- <li>
- <p>Predator Thermal Vision (added by @wezrule)</p>
- </li>
- <li>
- <p>Frosted Glass effect (added by @wezrule)</p>
- </li>
- </ul>
- </div>
- </li>
- <li>
- <p>Shaders</p>
- <div class="ulist">
- <ul>
- <li>
- <p>Dissolver (added by @thetoucher)</p>
- </li>
- <li>
- <p>FakeParticleBlow (added by @mifth)</p>
- </li>
- <li>
- <p>Forceshield (added by @ficik)</p>
- </li>
- <li>
- <p>MatCap (added by @mifth)</p>
- </li>
- <li>
- <p>Glass (added by @mifth)</p>
- </li>
- <li>
- <p>Texture Bombing (added by @wezrule)</p>
- </li>
- </ul>
- </div>
- </li>
- </ul>
- </div>
- <div class="paragraph">
- <p><a href="http://hub.jmonkeyengine.org/forum/topic/shaderblow-project/">http://hub.jmonkeyengine.org/forum/topic/shaderblow-project/</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="colorscale-filter">ColorScale Filter</h3>
- <div class="paragraph">
- <p>The ColorScale filter applys a color to the render image. You can use this filter to tint the render according to one particular color without change any material (underwater scene, night scene, fire scene) or to achieve fade-in/fade-out effect.</p>
- </div>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Allow to set the color to apply. Default is red.</p>
- </li>
- <li>
- <p>Allow to set intensity of the color. Default is 0.7f. Frag shader clamps color intensity between 0 and 1.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/colorfilter2.png" alt="ColorScale Filter OFF" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/colorfilter1.png" alt="ColorScale filter ON" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/colorfilter3.png" alt="ColorScale Filter ON" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/colorfilter4.png" alt="ColorScale Filter" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage">Usage</h4>
- <div class="paragraph">
- <p>Add a <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/src/com/shaderblow/filter/colorscale/ColorScaleFilter.java">ColorScaleFilter</a> instance to a FilterPostProccesor instance. Set color and color intensity. Then add the FilterPostProccesor instance to Application’s viewPort attribute.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="local-variable">this</span>.fpp = <span class="keyword">new</span> FilterPostProcessor(<span class="local-variable">this</span>.assetManager);
- <span class="local-variable">this</span>.fpp.setNumSamples(<span class="integer">4</span>);
- <span class="local-variable">this</span>.colorScale = <span class="keyword">new</span> ColorScaleFilter();
- <span class="local-variable">this</span>.fpp.addFilter(<span class="local-variable">this</span>.colorScale);
- <span class="comment">// colorScale.setFilterColor(ColorRGBA.Red.clone()); // Set Filter color</span>
- <span class="comment">// colorScale.setColorDensity(0.5f); // Set Color intensity (between 0 and 1);</span>
- <span class="local-variable">this</span>.viewPort.addProcessor(<span class="local-variable">this</span>.fpp);</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/filter/color/TestColorScale.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/colorscale-filter/">Forum threat</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="grayscale-filter">GrayScale Filter</h3>
- <div class="paragraph">
- <p>The GrayScale filter converts the render image to grayscale.</p>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 50%;">
- <col style="width: 50%;">
- </colgroup>
- <thead>
- <tr>
- <th class="tableblock halign-left valign-top"><strong>GrayScale Filter OFF</strong></th>
- <th class="tableblock halign-left valign-top"><strong>GrayScale Filter ON</strong></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/grayscalefilter-off.jpg" alt="GrayScale Filter OFF" height=""></span></p>
- </div></div></td>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/grayscalefilter-on.png" alt="GrayScale Filter ON" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-2">Usage</h4>
- <div class="paragraph">
- <p>Add a <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/src/com/shaderblow/filter/grayscale/GrayScaleFilter.java">GrayScaleFilter</a> instance to a FilterPostProccesor instance. Then add the FilterPostProccesor instance to Application’s viewPort attribute.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="local-variable">this</span>.fpp = <span class="keyword">new</span> FilterPostProcessor(<span class="local-variable">this</span>.assetManager); <span class="comment">// Create FilterPostProcessor instance</span>
- <span class="local-variable">this</span>.grayScale = <span class="keyword">new</span> GrayScaleFilter(); <span class="comment">// Create GrayScaleFilter instance</span>
- <span class="local-variable">this</span>.fpp.addFilter(<span class="local-variable">this</span>.grayScale); <span class="comment">// Add GrayScaleFilter instance to FilterPostProcessor instance</span>
- <span class="local-variable">this</span>.viewPort.addProcessor(<span class="local-variable">this</span>.fpp); <span class="comment">// Add FilterPostProcessor instance to ViewPort</span></code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/filter/grayscale/TestGrayScale.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/forum/topic/solved-grayscale-filter/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="old-film-effect-filter">Old Film Effect Filter</h3>
- <div class="paragraph">
- <p>Old Film filter simulate the effect of a classic looking film effect. It’s a port of this <a href="http://devmaster.net/posts/2989/shader-effects-old-film">shader effect</a>.</p>
- </div>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Allow to set the <strong>filter’s color</strong>. Default is sepia (ColorRGBA(112f / 255f, 66f / 255f, 20f / 255f, 1.0f)).</p>
- </li>
- <li>
- <p>Allow to set the <strong>color’s density</strong>. Default is 0.7. Shader clamps this value between 0 to 1. The color image gets grayscale when color’s densite is set to 0.</p>
- </li>
- <li>
- <p>Allow to set the <strong>noise’s density</strong>. Default is 0.4. Shader clamps this value between 0 to 1.</p>
- </li>
- <li>
- <p>Allow to set the <strong>scratches' density</strong>. Default is 0.3. Shader clamps this value between 0 to 1.</p>
- </li>
- <li>
- <p>Allow to set the <strong>vignetting’s diameter</strong>. Default is 0.9. Shader clamps this value between 0 to 1.4. Vignetting effect is made using two circles. The inner circle represents the region untouched by vignetting. The region between the inner and outer circle represent the area where vignetting starts to take place, which is a gradual fade to black from the inner to outer ring. Any part of the frame outside of the outer ring would be completely black.</p>
- </li>
- </ul>
- </div>
- <div class="paragraph">
- <p><strong>NOTE</strong>: I chose to clamp this value inside the frag shader code instead of using java code because I thought this way is faster (better from preformace point of view). You can clamp this values using java code if you want.</p>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 50%;">
- <col style="width: 50%;">
- </colgroup>
- <thead>
- <tr>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/youtube_cgfzhkq-mkk" alt="youtube_cgfzhkq-mkk" height=""></span></th>
- <th class="tableblock halign-left valign-top"></th>
- </tr>
- </thead>
- </table>
- <div class="sect3">
- <h4 id="usage-3">Usage</h4>
- <div class="paragraph">
- <p>Add a <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/src/com/shaderblow/filter/oldfilm/OldFilmFilter.java">OldFilmFilter</a> instance to a FilterPostProccesor instance. Then add the FilterPostProccesor instance to Application’s viewPort attribute.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="local-variable">this</span>.fpp = <span class="keyword">new</span> FilterPostProcessor(<span class="local-variable">this</span>.assetManager); <span class="comment">// Create FilterPostProcessor instance</span>
- <span class="local-variable">this</span>.oldFilmFilter= <span class="keyword">new</span> OldFilmFilter(); <span class="comment">// Create OldFilmFilter instance</span>
- <span class="local-variable">this</span>.fpp.addFilter(<span class="local-variable">this</span>.oldFilmFilter); <span class="comment">// Add OldFilmFilter instance to FilterPostProcessor instance</span>
- <span class="local-variable">this</span>.viewPort.addProcessor(<span class="local-variable">this</span>.fpp); <span class="comment">// Add FilterPostProcessor instance to ViewPort</span></code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/filter/oldfilm/TestOldFilm.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/forum/topic/old-film-effect-filter/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="lightblow-shader">LightBlow Shader</h3>
- <div class="paragraph">
- <p>The Lightblow shader is an improved Lighting shader for JME.</p>
- </div>
- <div class="paragraph">
- <p>Features:
- * Improved lighting calculations.
- * Improved reflection calculations.
- * Reflection map implementation with alpha normal map.
- * Improved Minnaert calculations.
- * Hemispherical lighting.
- * Image Based Lighting with Albedo.
- * Emissive map implementation with diffuse alpha.
- * normalization of normals by default.
- * Specular map implementation with normal map alpha.
- * Specular intensity implementation.
- * Switching -x/-y/-z normals for different normal maps. (3dmax, blender, xnormal have different approaches).
- * Specular Color now works with specular maps
- * Glowblow fragment shader is added with m_GlowIntensity? uniform. It’s possible to change glow intensity for objects. Please, use DiffuseMap? as GlowMap? instead of new additional Glow rgb texture.
- * Lightmaps are added.
- * Rim Lighting is added. Thanks to Thetoucher from JME Blog!
- * Fog is added. Fog is used without post-processing!
- * Texture Blending: 4 diffuse, 4 normal textures can be blended (Like Terrain System).</p>
- </div>
- <div class="paragraph">
- <p>Forum: <a href="http://jmonkeyengine.org/forum/topic/lightblow-shader/">http://jmonkeyengine.org/forum/topic/lightblow-shader/</a>
- Software for NormalMaps? making: <a href="http://shadermap.com/shadermap_pro.php">http://shadermap.com/shadermap_pro.php</a>
- Software for CubeMaps? editing: <a href="http://developer.amd.com/archive/gpu/cubemapgen/pages/default.aspx">http://developer.amd.com/archive/gpu/cubemapgen/pages/default.aspx</a>
- Watch following videos:</p>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <thead>
- <tr>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/youtube_knroh_3o2uo" alt="youtube_knroh_3o2uo" height=""></span></th>
- </tr>
- </thead>
- </table>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/forum/topic/lightblow-shader/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- <div class="sect2">
- <h3 id="dissolver-shader">Dissolver Shader</h3>
- <div class="paragraph">
- <p>The Dissolve Shader uses a simple grey scale image as an animated mask to hide a material.</p>
- </div>
- <div class="paragraph">
- <p>The shader incrementally clamps off the colour value, dark to light, and uses that for a masking texture to discard pixels.
- It is currently capped for convenience at 255 frames of animation and is only using one colour channel.
- In simple terms, in starts by only discarding the darkest parts of the texture map, then the slightly lighter parts, then the slightly lighter again and again until it eventually cant get any lighter (white), at which point the proccess is complete.</p>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 50%;">
- <col style="width: 50%;">
- </colgroup>
- <thead>
- <tr>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/dissolver-screen.png" alt="Dissolver screenshot" height=""></span></th>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/dissolver-maps.png" alt="Mask maps" height=""></span></th>
- </tr>
- </thead>
- </table>
- <div class="paragraph">
- <p>Starting at the top left we have: simple linear dissolve, organic dissolve and pixel dissolve.
- And bottom row: organic growth, texture masking, organic burn.
- Mask texture maps on the second image.</p>
- </div>
- <div class="paragraph">
- <p>The test is occolating the dissolve amount between 0 and 1. It demonstrates 6 different uses for the shader, all running at the same speed. The top row are straight forward dissolves. The bottom row shows 3 potential applications:</p>
- </div>
- <div class="olist arabic">
- <ol class="arabic">
- <li>
- <p>Organic Growth (bottom left) over a mesh, this could work both animating rapidly for a fast grow effect, or set to a fixed value e.g. set to 0.5f is “50% covered in growth”;</p>
- </li>
- <li>
- <p>Texture Masking (bottom middle) , I see this is probably where the most practical applications will come from. The demonstration shows a poorely photoshoped clean street, peices of garbage are then scattered around dependant on the dissolve amount, this would work best with a fixed value eg set to .75 is “75% dirty”. Texture Masking could be also be used for:</p>
- <div class="olist loweralpha">
- <ol class="loweralpha" type="a">
- <li>
- <p>paint damage on a car;</p>
- </li>
- <li>
- <p>lacerations on a character;</p>
- </li>
- <li>
- <p>the blood shot eye effect that creeps in from the sides of the screen when you’ve taken too much damage in a modern FPS.</p>
- </li>
- </ol>
- </div>
- </li>
- <li>
- <p>Organic Burn (bottom right) is comprised of 2 cubes, one blue, one orange, both with the same organic dissolve, however the orange one is slightly offset ahead of the blue so it shows first (ie the dissolve amount is always slight advanced).</p>
- </li>
- </ol>
- </div>
- <div class="paragraph">
- <p>Watch following videos:</p>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 50%;">
- <col style="width: 50%;">
- </colgroup>
- <thead>
- <tr>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/youtube_ry0r_qwfqlq" alt="youtube_ry0r_qwfqlq" height=""></span></th>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/youtube_wufmcn1uv48" alt="youtube_wufmcn1uv48" height=""></span></th>
- </tr>
- </thead>
- </table>
- <div class="sect3">
- <h4 id="usage-4">Usage</h4>
- <div class="paragraph">
- <p>The shader requires 2 parameters:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>a Texture2D texture map to use as the dissolve map; and</p>
- </li>
- <li>
- <p>a Vector2 of internal params params:</p>
- <div class="ulist">
- <ul>
- <li>
- <p>the first is a float value being the amount of dissolve, a value from 0-1 : 0 being no dissolve, being fully dissolved; and</p>
- </li>
- <li>
- <p>the second value is an int use as an inversion switch, 1 to invert the dissolve/discard, 0 to leave as is.</p>
- </li>
- </ul>
- </div>
- </li>
- </ul>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="comment">// Create a material instance using ShaderBlow's Lighting.j3md</span>
- <span class="directive">final</span> Material mat = <span class="keyword">new</span> Material(<span class="local-variable">this</span>.assetManager, <span class="string"><span class="delimiter">"</span><span class="content">ShaderBlow/MatDefs/Dissolve/Lighting.j3md</span><span class="delimiter">"</span></span>);
- mat.setColor(<span class="string"><span class="delimiter">"</span><span class="content">Ambient</span><span class="delimiter">"</span></span>, ColorRGBA.Blue);
- mat.setColor(<span class="string"><span class="delimiter">"</span><span class="content">Diffuse</span><span class="delimiter">"</span></span>, ColorRGBA.White);
- mat.setColor(<span class="string"><span class="delimiter">"</span><span class="content">Specular</span><span class="delimiter">"</span></span>, ColorRGBA.Black);
- mat.setBoolean(<span class="string"><span class="delimiter">"</span><span class="content">UseMaterialColors</span><span class="delimiter">"</span></span>, <span class="predefined-constant">true</span>);
- <span class="local-variable">this</span>.assetManager.loadTexture(<span class="string"><span class="delimiter">"</span><span class="content">TestTextures/Dissolve/burnMap.png</span><span class="delimiter">"</span></span>
- mat.setTexture(<span class="string"><span class="delimiter">"</span><span class="content">DissolveMap</span><span class="delimiter">"</span></span>, map); <span class="comment">// Set mask texture map</span>
- <span class="local-variable">this</span>.DSParams = <span class="keyword">new</span> Vector2f(<span class="integer">0</span>, <span class="integer">0</span>); <span class="comment">// standard dissolver</span>
- <span class="comment">//this.DSParamsInv = new Vector2f(0, 1); // inverted dissolver</span>
- mat.setVector2(<span class="string"><span class="delimiter">"</span><span class="content">DissolveParams</span><span class="delimiter">"</span></span>, <span class="local-variable">this</span>.DSParams); <span class="comment">// Set params</span>
- <span class="directive">final</span> <span class="predefined-type">Box</span> b = <span class="keyword">new</span> <span class="predefined-type">Box</span>(Vector3f.ZERO, <span class="integer">1</span>, <span class="integer">1</span>, <span class="integer">1</span>);
- <span class="directive">final</span> Geometry geom = <span class="keyword">new</span> Geometry(<span class="string"><span class="delimiter">"</span><span class="content">Box</span><span class="delimiter">"</span></span>, b);
- geom.setMaterial(mat);</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/dissolve/TestDissolve.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/user-code-projects/forum/topic/dissolve-shader-1/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="fakeparticleblow-shader">FakeParticleBlow Shader</h3>
- <div class="literalblock">
- <div class="content">
- <pre>Effect for fire or engine of a ship. Such an effect is used in the “Eve Online game for ship engines.</pre>
- </div>
- </div>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="olist arabic">
- <ol class="arabic">
- <li>
- <p>GPU animation (now you don’t need simpleUpdate(float tpf) for the shader). Animation is made displacing the texture according to X and/or Y axis.</p>
- </li>
- <li>
- <p>X and/or Y animation direction. No animation is supported also.</p>
- </li>
- <li>
- <p>Animation direction changer. By default the Y axis animation’s direction is up-to-down and the X axis animation’s direction is right-to-left.</p>
- </li>
- <li>
- <p>Allow to set animation speed.</p>
- </li>
- <li>
- <p>Allow to set mask texture in order to set particle shape.</p>
- </li>
- <li>
- <p>Allow to set particle color.</p>
- </li>
- <li>
- <p>Allow to set fog color. Fog color is applyed to the material using for color’s alpha value as fog distance factor.</p>
- </li>
- </ol>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/fakeparticleblow.png" alt="FakeParticleBlow" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/fakeparticleblow3.png" alt="FakeParticleBlow" height=""></span> Fog applyed to blue fire</p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_hdqop4yz-la" alt="youtube_hdqop4yz-la" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-5">Usage</h4>
- <div class="paragraph">
- <p>Create a material (by SDK or by code) using <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/assets/ShaderBlow/MatDefs/FakeParticleBlow/FakeParticleBlow.j3md">FakeParticleBlow.j3md</a>.
- Set material’s parameters and set the material to a spatial.</p>
- </div>
- <div class="paragraph">
- <p>Most of the cases the spatial will be 4 to 10 planes in the same location but rotated on Y axis using different angles for each plane. Something similar to this:</p>
- </div>
- <div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/fakeobject.png" alt="fakeobject.png" height=""></span></p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="comment">// Create the material</span>
- <span class="directive">final</span> Material mat = <span class="keyword">new</span> Material(<span class="local-variable">this</span>.assetManager,
- <span class="string"><span class="delimiter">"</span><span class="content">ShaderBlow/MatDefs/FakeParticleBlow/FakeParticleBlow.j3md</span><span class="delimiter">"</span></span>);
- <span class="comment">// Create the mask texture to use</span>
- <span class="directive">final</span> Texture maskTex = <span class="local-variable">this</span>.assetManager.loadTexture(<span class="string"><span class="delimiter">"</span><span class="content">TestTextures/FakeParticleBlow/mask.png</span><span class="delimiter">"</span></span>);
- mat.setTexture(<span class="string"><span class="delimiter">"</span><span class="content">MaskMap</span><span class="delimiter">"</span></span>, maskTex);
- <span class="comment">// Create the texture to use for the spatial.</span>
- <span class="directive">final</span> Texture aniTex = <span class="local-variable">this</span>.assetManager.loadTexture(<span class="string"><span class="delimiter">"</span><span class="content">TestTextures/FakeParticleBlow/particles.png</span><span class="delimiter">"</span></span>);
- aniTex.setWrap(WrapMode.MirroredRepeat); <span class="comment">// NOTE: Set WrapMode = MirroredRepeat in order to animate the texture</span>
- mat.setTexture(<span class="string"><span class="delimiter">"</span><span class="content">AniTexMap</span><span class="delimiter">"</span></span>, aniTex); <span class="comment">// Set texture</span>
- mat.setFloat(<span class="string"><span class="delimiter">"</span><span class="content">TimeSpeed</span><span class="delimiter">"</span></span>, <span class="integer">2</span>); <span class="comment">// Set animation speed</span>
- mat.setColor(<span class="string"><span class="delimiter">"</span><span class="content">BaseColor</span><span class="delimiter">"</span></span>, ColorRGBA.Green.clone()); <span class="comment">// Set base color to apply to the texture</span>
- <span class="comment">// mat.setBoolean("Animation_X", true); // Enable X axis animation</span>
- mat.setBoolean(<span class="string"><span class="delimiter">"</span><span class="content">Animation_Y</span><span class="delimiter">"</span></span>, <span class="predefined-constant">true</span>); <span class="comment">// Enable Y axis animation</span>
- mat.setBoolean(<span class="string"><span class="delimiter">"</span><span class="content">Change_Direction</span><span class="delimiter">"</span></span>, <span class="predefined-constant">true</span>); <span class="comment">// Change direction of the texture animation</span>
- mat.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off); <span class="comment">// Allow to see both sides of a face</span>
- mat.getAdditionalRenderState().setBlendMode(BlendMode.Additive);
- <span class="directive">final</span> ColorRGBA fogColor = ColorRGBA.Black.clone();
- fogColor.a = <span class="integer">10</span>; <span class="comment">// fogColor's alpha value is used to calculate the intensity of the fog (distance to apply fog)</span>
- mat.setColor(<span class="string"><span class="delimiter">"</span><span class="content">FogColor</span><span class="delimiter">"</span></span>, fogColor); <span class="comment">// Set fog color to apply to the spatial.</span>
- <span class="directive">final</span> Quad quad = <span class="keyword">new</span> Quad(<span class="integer">3</span>, <span class="integer">3</span>); <span class="comment">// Create an spatial. A plane in this case</span>
- <span class="directive">final</span> Geometry geom = <span class="keyword">new</span> Geometry(<span class="string"><span class="delimiter">"</span><span class="content">Particle</span><span class="delimiter">"</span></span>, quad);
- geom.setMaterial(mat); <span class="comment">// Assign the material to the spatial</span>
- TangentBinormalGenerator.generate(geom);
- geom.setQueueBucket(Bucket.Transparent); <span class="comment">// Remenber to set the queue bucket to transparent for the spatial</span></code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p>To get green/yellow/blue fog (not transparency):</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> mat.getAdditionalRenderState().setBlendMode(BlendMode.AlphaAdditive);
- <span class="directive">final</span> ColorRGBA fogColor = ColorRGBA.Blue.clone();</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p>Several planes geometries will be required as there will be AlphaAdditive material.</p>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/fakeparticleblow/TestFakeParticleBlow.java">TestCase 1</a>
- <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/fakeparticleblow/TestFakeParticleBlow2.java">TestCase 2</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/fakeparticleblow-shader/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="forceshield-shader">Forceshield Shader</h3>
- <div class="paragraph">
- <p>Forcefield shader adds shield effect to a spatial.
- The spatial will be a sphere most of the cases, but box or oval should be possible to use. Only problem is that it has to be higher-poly because distace is calculated from vertex.</p>
- </div>
- <div class="paragraph">
- <p>Hits are registred as contact point position using this control and effect animation is based on distance from contact point and time.
- Max number of hits displayed is 4.</p>
- </div>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Allow to set texture of the shield.</p>
- </li>
- <li>
- <p>Allow to set color of the shield.</p>
- </li>
- <li>
- <p>Allow to set minimal visibility (similar to alpha value). Default is 0, that means shield is no displayed, only hit animations.</p>
- </li>
- <li>
- <p>Allow to set effect duration. Default is 0.5s.</p>
- </li>
- <li>
- <p>Allow to set effect size. Default is 1.</p>
- </li>
- <li>
- <p>Allow to enable/disable hit animations.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_uu2nbabm9pk" alt="youtube_uu2nbabm9pk" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_urzmiuehscc" alt="youtube_urzmiuehscc" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-6">Usage</h4>
- <div class="paragraph">
- <p>Create a Spatial instance. Create a <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/src/com/shaderblow/forceshield/ForceShieldControl.java">ForceShieldControl</a> instance.
- Add the control instance to the spatial.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="comment">// Create spatial to be the shield</span>
- <span class="directive">final</span> Sphere sphere = <span class="keyword">new</span> Sphere(<span class="integer">30</span>, <span class="integer">30</span>, <span class="float">1.2f</span>);
- <span class="directive">final</span> Geometry shield = <span class="keyword">new</span> Geometry(<span class="string"><span class="delimiter">"</span><span class="content">forceshield</span><span class="delimiter">"</span></span>, sphere);
- shield.setQueueBucket(Bucket.Transparent); <span class="comment">// Remenber to set the queue bucket to transparent for the spatial</span>
- <span class="comment">// Create ForceShieldControl</span>
- <span class="local-variable">this</span>.forceShieldControl = <span class="keyword">new</span> ForceShieldControl(<span class="local-variable">this</span>.assetManager, <span class="float">0.5f</span>);
- shield.addControl(<span class="local-variable">this</span>.forceShieldControl); <span class="comment">// Add the control to the spatial</span>
- <span class="local-variable">this</span>.forceShieldControl.setEffectSize(<span class="float">2f</span>); <span class="comment">// Set the effect size</span>
- <span class="local-variable">this</span>.forceShieldControl.setColor(<span class="keyword">new</span> ColorRGBA(<span class="integer">1</span>, <span class="integer">0</span>, <span class="integer">0</span>, <span class="integer">3</span>)); <span class="comment">// Set effect color</span>
- <span class="local-variable">this</span>.forceShieldControl.setVisibility(<span class="float">0.1f</span>); <span class="comment">// Set shield visibility.</span>
- <span class="comment">// Set a texture to the shield</span>
- <span class="local-variable">this</span>.forceShieldControl.setTexture(<span class="local-variable">this</span>.assetManager.loadTexture(<span class="string"><span class="delimiter">"</span><span class="content">TestTextures/ForceShield/fs_texture.png</span><span class="delimiter">"</span></span>));
- <span class="comment">// this.forceShieldControl.setEnabled(false); // Enable, disable animation.</span></code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p>Use <em>forceShieldControl.registerHit(final Vector3f position)</em> method to register a hit.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code data-lang="java"> <span class="directive">final</span> CollisionResults crs = <span class="keyword">new</span> CollisionResults();
- <span class="local-variable">this</span>.rootNode.collideWith(<span class="keyword">new</span> Ray(<span class="local-variable">this</span>.cam.getLocation(), <span class="local-variable">this</span>.cam.getDirection()), crs);
- <span class="keyword">if</span> (crs.getClosestCollision() != <span class="predefined-constant">null</span>) {
- <span class="comment">// Register a hit</span>
- <span class="local-variable">this</span>.forceShieldControl.registerHit(crs.getClosestCollision().getContactPoint());
- }</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/forceshield/TestShield.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/user-code-projects/forum/topic/forceshield-my-very-first-shader/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="matcap-shader">MatCap Shader</h3>
- <div class="paragraph">
- <p>MatCap shader will be very useful for scrollshooters to imitate different materials like glass, gold, metals.
- The shader does not use any lights, only one texture.</p>
- </div>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Fog color and fog skybox.</p>
- </li>
- <li>
- <p>Toon edge effect.</p>
- </li>
- <li>
- <p>Multiply color: set a color to change texture’s color.</p>
- </li>
- <li>
- <p>Normal map.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/shaderblow_matcap.jpg" alt="MatCap shader" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/matcap3.png" alt="Multiply color" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/matcap1.png" alt="Toon edge effect" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/matcap2.png" alt="Fog effect" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-7">Usage</h4>
- <div class="paragraph">
- <p>Create a material (by SDK or by code) using <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/assets/ShaderBlow/MatDefs/MatCap/MatCap.j3md">MatCap.j3md</a>. Set material’s parameters and set the material to a spatial.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code>Material My Material : ShaderBlow/MatDefs/MatCap/MatCap.j3md {
- MaterialParameters {
- DiffuseMap : Flip TestTextures/matcaps/met2.png
- Nor_Inv_Y : true
- Nor_Inv_X : false
- Nor_Inv_Z : false
- NormalMap : TestModels/LightBlow/jme_lightblow_nor.png
- FogSkyBox : Flip TestTextures/Water256.dds
- Toon : true
- EdgesColor : 1.0 0.0 0.0 1.0
- EdgeSize : 0.01
- Fog_Edges : true
- }
- AdditionalRenderState {
- }
- }</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/matcap/TestMatCap.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/graphics/forum/topic/glsl-matcap-shader-advice-needed/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="glass-shader">Glass Shader</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Fog color and fog skybox.</p>
- </li>
- <li>
- <p>Toon edge effect.</p>
- </li>
- <li>
- <p>Multiply color: set a color to change texture’s color.</p>
- </li>
- <li>
- <p>Normal map.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/glass-shader.png" alt="Glass shader" height=""></span></p>
- </div></div></td>
- </tr>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/glass-shader2.png" alt="Glass Shader and Fog Color effect" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-8">Usage</h4>
- <div class="paragraph">
- <p>Create a material (by SDK or by code) using <a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/assets/ShaderBlow/MatDefs/Glass/Glass.j3md">Glass.j3md</a>. Set material’s parameters and set the material to a spatial.</p>
- </div>
- <div class="listingblock">
- <div class="content">
- <pre class="CodeRay highlight"><code>Material My Material : ShaderBlow/MatDefs/Glass/Glass.j3md {
- MaterialParameters {
- RefMap : Flip TestTextures/Water256.dds
- Multiply_Color : 1.1 1.5 1.1 1.0
- colorIntensity : 0.79999995
- Nor_Inv_Y : true
- NormalMap : TestModels/LightBlow/jme_lightblow_nor.png
- ChromaticAbberation : true
- abberIndex : 0.04
- specularIntensity : 0.59999996
- Toon : true
- EdgesColor : 0.2 1.0 0.0 1.0
- EdgeSize : 0.01
- Fog_Edges : true
- }
- AdditionalRenderState {
- }
- }</code></pre>
- </div>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/ShaderBlow/test-src/com/shaderblow/test/glass/TestGlass.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/graphics/forum/topic/glsl-glass-shader-advice-is-needed/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="simplerefraction-postprocessor-filter">SimpleRefraction PostProcessor/Filter</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Cool refraction effect</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_eaukcu5grmc" alt="youtube_eaukcu5grmc" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-9">Usage</h4>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/simplerefraction/TestSimpleRefraction.java">TestCase for PostProcessor</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/filter/simplerefractionfilter/TestSimpleRefractionFilter.java">TestCase for Filter</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="basicssao-filter">BasicSSAO Filter</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Cool Shadows.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/shaderblow_ssao.png" alt="Glass shader" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-10">Usage</h4>
- <div class="paragraph">
- <p><a href="http://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/filter/basicssao/TestBasicSSAO.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/user-code-projects/forum/topic/wip-custom-ambient-occlusion-filter/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="electricity-shaders">Electricity Shaders</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Cool Electricity effect</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_jdtes95hnpe" alt="youtube_jdtes95hnpe" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/forum/topic/electricity-shaders/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- <div class="sect2">
- <h3 id="simplesprite-shader">SimpleSprite Shader</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>GPU animated texture.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/shaderblow_simplesprite_shader.png" alt="Glass shader" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <thead>
- <tr>
- <th class="tableblock halign-left valign-top"><span class="image"><img src="../../sdk/plugin/youtube_7xfxbt-dw3i" alt="youtube_7xfxbt-dw3i" height=""></span></th>
- </tr>
- </thead>
- </table>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/graphics/forum/topic/texture-animation-shader-help-needed/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- <div class="sect2">
- <h3 id="bubble-shader">Bubble Shader</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Cool nice bubble.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_rkfblz1eohg" alt="youtube_rkfblz1eohg" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/forum/topic/bubble-shader/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- <div class="sect2">
- <h3 id="simplespriteparticle-shader">SimpleSpriteParticle Shader</h3>
- <div class="paragraph">
- <p>Features:
- static sprite speed: can render 1500000 sprites at 149 fps ( 0% cpu load, speed limited only by graphics card ). As long as you don’t change them (add, move, delete, change image).
- FULL LIBRARY PLUGIN: <a href="http://code.google.com/p/petomancer/downloads/detail?name=SpriteLibrary.zip&can=2&q=">http://code.google.com/p/petomancer/downloads/detail?name=SpriteLibrary.zip&can=2&q=</a></p>
- </div>
- <div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/shaderblow_simplespriteparticle_shader.png" alt="shaderblow_simplespriteparticle_shader.png" height=""></span></p>
- </div>
- <div class="paragraph">
- <p><a href="http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/spritelibrary-efficient-render-of-sprites/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- <div class="sect2">
- <h3 id="texture-bombing">Texture Bombing</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Applying random images from a texture atlas to a model by dividing up the model’s UV textures into cells.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_3lbhu2c5v8o" alt="youtube_3lbhu2c5v8o" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-11">Usage</h4>
- <div class="paragraph">
- <p><a href="https://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/texturebombing/TestTextureBombing.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://hub.jmonkeyengine.org/forum/topic/textureglyph-bombing-shader/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="night-vision">Night Vision</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Apply a mask (Binoculars) and color to emulate night vision mode.</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_mnsjavutdps" alt="youtube_mnsjavutdps" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-12">Usage</h4>
- <div class="paragraph">
- <p><a href="https://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/filter/nightvision/TestNightVision.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://hub.jmonkeyengine.org/forum/topic/night-vision-filter-available-in-shaderblow-plugin/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="predator-thermal-vision">Predator Thermal Vision</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Changes the color in the scene to emulate the predator thermal vision effect</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_dqbwcwvwtfq" alt="youtube_dqbwcwvwtfq" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-13">Usage</h4>
- <div class="paragraph">
- <p><a href="https://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/filter/predatorvision/TestPredatorVision.java?spec=svn1097&r=1097">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://hub.jmonkeyengine.org/forum/topic/predator-thermal-vision-filter-available-in-the-shaderblow-plugin/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- <div class="sect2">
- <h3 id="frosted-glass-effect">Frosted glass effect</h3>
- <div class="paragraph">
- <p>Features:</p>
- </div>
- <div class="ulist">
- <ul>
- <li>
- <p>Displays a frosted glass effect over the current scene</p>
- </li>
- </ul>
- </div>
- <table class="tableblock frame-all grid-all spread">
- <colgroup>
- <col style="width: 100%;">
- </colgroup>
- <tbody>
- <tr>
- <td class="tableblock halign-left valign-top"><div><div class="paragraph">
- <p><span class="image"><img src="../../sdk/plugin/youtube_bb0jvjqvurw" alt="youtube_bb0jvjqvurw" height=""></span></p>
- </div></div></td>
- </tr>
- </tbody>
- </table>
- <div class="sect3">
- <h4 id="usage-14">Usage</h4>
- <div class="paragraph">
- <p><a href="https://code.google.com/p/jmonkeyplatform-contributions/source/browse/trunk/shaderblowlib/ShaderBlow/test-src/com/shaderblow/test/filter/frostedglass/TestFrostedGlass.java">TestCase</a></p>
- </div>
- <div class="paragraph">
- <p><a href="http://hub.jmonkeyengine.org/forum/topic/frosted-glass-filter-available-in-the-shaderblow-plugin/">Forum thread</a></p>
- </div>
- <hr>
- </div>
- </div>
- </div>
- <div id="footer">
- <div id="footer-text">
- Version <br>
- Last updated 2016-06-05 15:58:32 UTC
- </div>
- </div>
- </body>
- </html>
|