Two STEMnet events this week

It has been quite a busy week of STEMnet activity. Being a STEMnet ambassador means helping schools and students however I can. Tuesday I spoke to a local secondary school teacher about all things emerging tech that might inspire the next generation. It was pretty much like rebooting Cool Stuff Collective. It is good to share my passion for new tech and some of the unusual twists and turns that I get to explore. This is all voluntary but it is still a service that I try and provide.
Today was a different event I joined about 20 other STEMnet ambassadors from all sorts of parts of industry, currently working and retired. We were at the Winchester Science Centre (I still call it Intech). It was where were shot one of the road trip episodes on Cool Stuff Collective. It was an event aimed at secondary school boys specifically. It was delivered as part of International Mens Day. This may seem strange to focus on us males in the workplace given there already lots of men in the industry. However, it is not always a good idea to ignore one part of society. These boys also needed the information and role models to talk to. So the excuse of a international day or event regardless of gender makes sense to catch some of them.
The day would work as well for groups of girls, the events and experiences were not specifically blokey.
We had groups building bristlebots and trying to make them go in a straight line. (These are DIY versions of Hexbugs. A bristle, like a toothbrush has a vibrating solenoid strapped to it. It causes the bug to shake itself forward in a very insect like way.
One of the very enterprising teams decided to forego the placing of pipe cleaners and weights etc to make the bug drive straight. Instead they build a rail system with straws as outriggers bolted to the bug bug much wider than it. It was a bit of a cheat, but as there were no rules I think it was a very cool build for the 15 mins they had.
The other even was trying to build a small ramps out of kinex and paper only for a micro RC car to jump off. The cars were very twitchy and it was q tricky task to even hit a ramp let alone build one. This made it even more entertaining to watch.
The final hands on was a robot arm test of teamwork. In cross school groups two people at a time had to control the arm and try to pick up the blocks. Every 30 seconds they were swapped out for other people in the team.
#stemnet day
The final part was a speed networking. Each of us STEMnet ambassadors had table and every 4 minutes we talked to 5 students about our life and our work. We all had props. I had the MergeVR headset, my 3d printed Makie, my Flush magazine articles and of course a copy of Reconfigure I told them all about IBM and about virtual worlds and VR and the journey via TV presenting and now authoring. Still that I am a programmer, but that there is a lot they can chose to do.
One question I got was about whether it paid well. I explained a corporate job pays very well, but when you leave that money is a different matter altogether. Trying to sell a book to generate a bit of income, or chasing contracts of any value is tricky when you do leading edge stuff. I did explain that they should focus on IoT as a way forward. That would be a lucrative set of things to invent and get into.
After lunch we were treated to a full planetarium fly through. It was a bit like playing Elite Dangerous but we went out even further. The narrator/pilot was fantastic.
It was a very rewarding day indeed I think. It was also great to meet to many other people interested in helping others grow their STEM knowledge.

Human endeavour – it is what counts

On Saturday we took a family trip to London to the Lee Valley Velodrome on the 2012 Olympic park site. We had tickets to see the Revolution series. Here various pro cycling teams and riders from around the world compete indoors on the banked circuit. WE had been to see some of the Olympics during 2012 but that was the gymnastics at the O2/Millennium Dome so we had not seen the big stadium, giant sculpture nor the velodrome yet.
As predlet 1.0 is currently on crutches, with a heavily sprained ankle, we chose to go overland from Waterloo station to the park in North East London. The cabbie set off North, but our visit clashes with the road closures for the Lord Mayor’s show. So after a u-turn we skirted around the city and then he headed up towards the Velodrome. It was a drizzly rainy day but we did get to see a lot of London.
The Velodrome itself is a fantastic looking building from the outside.
Cycling at the velodrome
It is a huge bowed wood clad curve. The entire building is raised up on a plinth and the glass walls around appear to support the wooden structure. You are let in through an air lock in small groups. The idea is to keep the air and temperature stable inside to protect the track.
Inside it makes sense that the entire structure is raised up as the banked track is incredibly deep and steep.
Cycling at the velodrome
There are two tiers of seating, but everyone can see everything. The riders and track were very close to our seats, and we got a good view down a straight.
The preparation area, for warm up and warm down is located in the infield. So there is always something going on, some form of activity.
We got to see several types of races and mass warmups around the track in between too. The first was with individual riders. It was just them against the track and the clock. Whilst not being bike racing affiecienados it was amazing how quickly we all saw the minute differences in technique and speed that led to different times. You just knew when the winning time was being made. You could feel the wonderful interlocking of all the training with the effort on the day coming into play. The first 200m race (which the clock started a little after the start finish line) was separated by milliseconds. The top time were around 10 seconds to cover the 200m, after 2 laps to wind up to the sprint.
The predlets had not really come across fixed wheel bikes but they soon got the gist of how they worked and the fact these athletes were traveling at over 40 miles and hour with no brakes.
The sprint races were great, it was very crowd friendly and we were able to cheer and support everyone, but particularly the locals. Everyone was cheered though. It is incredibly obvious the effort that they have to put in to be able to move at those speeds. The banked curves and the pressure to try and control the bike, choosing the right line etc it less obvious but was intriguing to watch.
The one on one races were interesting too. These are the ones where the try and catch one another out. They have three laps to complete, but the first one or two are done at a very slow pace, keeping an eye out for the break. The acceleration and power as they wind up the bikes means a fraction of a seconds jump on someone matters. Equally, go to early and you loose power or the other person gets a slip stream. Again these were easy to follow.
The most impressive races were the mass races of 20 or so riders. The Women’s race was 80 laps and the Men’s 120. They tended to stay in a streamlined group unless one chose to break away. Every 10 laps was a sprint lap with points awarded for the top people crossing first. Extra points were on offer for lapping the field. Here is got a bit confusing, the comentator did their best but we got a bit lost as to the rules. When and where the lapping occurred and if it got reset after the sprint lap. It was very impressive though. a constant almost silent whoosh of power sooting past every 10-12 seconds.
Cycling at the velodrome
Cycling at the velodrome
Another race format was the elimination. Each lap the one at the back dropped off until there were 10 then they raced.
The final race was the strangest. A large proportion of it involved not racing at all. It was called the Longest Lap. Here all the riders attempted to balance near the star finish line, on the banked straight. They had to stay upright, no crossing the line for 3-4 minutes. A foot down or holding on and they were out. Then the signal would go and they all raced form a standing start for 1 lap. About 1/3 dropped out before the race.
It was interesting, but seemed a little odd. Then I remembered we used to do this as kids. How long can you balance on your bike without moving. So it is not quite so odd. As a spectator sport watching people balance was actually good too.
We had a great time at the Velodrome. I have to say the tea at the canteen was great too. Lots of venues have food places that are pretty bad or just non-descript. The fresh crepes, cakes and tea at Lee Valley are very nice though.
I entitled this post human endeavour – it is what counts. The combined experience of the science and technology and engineering that created the building, with the effort that the athletes and their teams put in and the variety of experiences over and above just cycling fast combined with a willing and happy crowd of spectators was and is very uplifting.
Everything is about building and improving. That includes hard work and effort, that making it worthy of celebration.
The previous weekend we had our annual trip to see Jools Holland and his Rhythm and Blue Orchestra. It was another amazing show, as usual. In fact it was probably one of the best yet. It is another example where the hard work and effort of the musicians to learn their craft is celebrated by them sharing it with us. The dexterity of Jools Holland on the piano is stunning, the drum solo by Golson Lavis is always a fantastic highlight. Not only one of the greatest drummers ever, but he is there all the time for the whole 2 hour show. These solos everyone else leaves and lets him get in with it. Here is an example. It is well worth the listing to the whole thing and feeling the effort and the effortlessness combine with all his years of experience.

Everyone should have the opportunity to find their talent and to work at to, building on all that came before. It is human endeavour that counts.

A book interview, stickers, emblems and a cross-post

On Friday I had the great pleasure to be asked back to GamesAtWork.biz to talk about the relevance of writing a sci-fi book and how it fitted with both games and software development processes. In order to get my thoughts in order I decided to write a post on Linkedin’s Pulse blogging platform. I have tended to avoid posting other places as I though a central place, here, made more sense. It would seem that it is worth doing both, all, everything though. The fact it was a different platform made me think in a slightly different way. The full post is below, just in case you don’t get around to reading it on Linkedin.
A few more additions to promotional opportunities have happened since too.
I created a Call Of Duty Black Ops iii emblem (not quite as good as the car decals but the tool set is a little less rich I think)
Reconfigure emblem in #callofdutyblackops3
Also there is now an evolving Icon that you can apply from Zymge.com to your Twitter avatar There are lots of other types of overlay stickers that this service can do for you too. Well worth a look.

Here is the Linkedin Pulse post.
I have not written directly on Linkedin before. However now seems a good time. As a long time blogger and contributor to all sorts of other forms I thought I would share here some of what led to me turning my hand from building virtual worlds and making sense of new technology for people, to creating a science fiction novel, and now working on the sequel. The book is linked from Reconfigurebook.co.uk

As a creator of a single person company in the emerging technology space it is quite tricky to get the right sort of work that both pays, is fulfilling and increases the skill base that I have gained over the past 26 years in the industry.

Creating code and architecting systems allows me to use a full stack of skills. In the world today it is much easier to punch above your weight. I recommend everyone, who is a techie, to just have a go making something end to end. I have done that a number of times, but usually for other people. I have never had a product of my own as such. I have worked with and helped a number of startups, those are long term investments in time and emotional effort. They seldom have yet yielded a product I could point to and say there… that’s what I built.

I had a short TV career, by short I mean 3 years of 39 episodes of weekly TV. That is something I was very proud of but the TV companies do not keep that sort of stuff up on the web. Even though the slots on tech were still relevant today they are really tied up in licensing and not just sitting on Youtube. Again no product.

My 20 years at IBM did see a number of project that were flagship ones in the development of the web, but the end results are now no longer there. The virtual world work, which I still continue today is constantly shifting. The old build in Second Life are now just memories. A few stills and movies remain. There is nothing to share as such. Reputation is fleeting after all.

So I was left thinking I need to build something. I needed to create something end to end as a challenge. I was contemplating various games to make, I started on a few but they did not grab me. I know when I am stoked, and with those I was not.

Sat on Holiday I read the Martian. I loved the scientific depth and a sense of genuine substrate to the emotional layer and adventure on top. A few days later I had an image in my head, related to virtual worlds and gaming. An image of a character being rotated in space. A thing we often have to do in virtual worlds. I imagined what it would be like to do that for real. Again another thing people often talk about when they have used a virtual reality system for a while. If only we could manipulate the real world like this. I then thought of the Internet of Things, and how we instrument the world. I then consider how we could use that to reconfigure the world. Boom I had a title Reconfigure.

As I noodled the idea I realised I wanted to get real tech that I knew into the story. I wanted to go full g33k in the set up. Taking real virtual world tech and code and then extrapolating it. I also wanted my main character to make the same mistakes we all make. That was where the idea of the starting point came. She, (and it just happened She became a She instinctively) makes a misplaced Tweet. Types in the wrong window. It is a thing we have all done. I think that makes a good hook. Instead of just hassle though she makes contact with someone or something.

Having got that basis I came home and sketched a story board. I had key types of things I wanted to happen. I had these initial images in my head but had to find the peril, the adventure. I had to find things that were difficult to solve in clever ways.

This is where is became a lot like coding a system. I had problems and sticking points in the storyboard. I had an architecture. I had to work out the code (in this case, words) to pass the tests that allowed this to work and flow.

It became an obsession for a couple of weeks flat out writing. It felt like binge-watching a boxed set. I did not always know what was going to happen, or if I did I didn’t know the details until I started. It was invention, just like a patent. I felt duty bound to make sure it stood up to some degree of reasoning and logic despite getting into the fictional elements.

That was the really fun part. I was, and I am, really happy with the story. So much so I just started on the sequel. It seems to be flowing in the same way though I have learned from my experience on the first book about hen to stop and check. Just like code, sometimes you find a better algorithm and just have to break the code again to fix it.

Doing this myself I had to learn about the formatting and setting for e-readers and specifically Kindle. I also created a sort of beta reader programme for some friends and family to help iron out the typos and bugs. It is impossible to see it all yourself when you are so close to it. That was a humbling experience in itself.

The vagaries of the US tax system, despite being Uk based and a few other little quirks all took a little time. The cover design and using the right format and size all took a while. I am not a designer, but I wanted to give it a go. I tried a couple of covers and got comments about them before settling on this one.

However a the end of October 2015 I published the e-book.

I was expecting, like most first time authors, a massive blip as friends, family, former colleagues and anyone who pays attention on social media or virtual worlds to say “Hey! epredator had written a book, I will take a look at that!” This is a mother humbling experience. There are some very close friends who have done that for me. However I realised that I needed to go wider. My friends and family blip at launch was not going to be big enough to tip the book into the charts.

I was then faced with the almost full time job of advertising and promoting the book. I am still working out the best routes. Amazon is an obvious place to advertise but I also have Facebook, dabbled with Twitter, and some Google Adwords in place.

The advice always seems to be do lots of other things. One of the first things was to brave CreateSpace and typesetting to create the paperback. A physical product still seems to make people think you have done something real. So I did that, and it went live a few days ago.

I always done lots of twists and turns on ideas so these are some of the things I have done in the past few weeks.

  • Join Author central on amazon.com and .co.uk
  • Create videos – I did a show and tell rather like this post and an advert using my son in a style that fitted with an element of the story (all very meta)
  • Create a Forza6 car design – Yes building a lambo with Reconfigure and the book cover all over it let me drop images all over the place and add another promo video around brands hatch. Quite unusual I think?
  • Tweet.. A lot ( I am still hoping the saturation with prompt a few more friends to help 🙂 )
  • Facebook page – I set up the specific page for Reconfigure before going live and then made that available putting a few extras on there
  • Flickr – lots of images, books arriving, weird images of me holding the book etc
  • Free prize draw on Amazon.com – Offering a copy of the book in a prize draw run by Amazon to get Twitter followers
  • Podcast – Tonight I am talking on Gamesatwork.biz after a kind invitation
  • Pay a twitter promoter – I used Bookbear, but there are loads. I may be cheaper than ad clicks
  • Change my job title here to Sci-Fi Author at Feeding Edge Ltd.
  • Added the logo to my twitter avatar
  • Built a second life box to with a link
  • Pinged my old eightbar group on in Second Life
  • Wrote this post 🙂
  • Update 8th November – I also just did the podcast interview on gamesatwork.biz

There are probably more, and there will be more of course. Now much of the chatter I create relates to things in the new book. It’s called Cont3xt at the moment. It follows on and meshes with the timeline of Reconfigure. It is very exciting again. I am back on binge-watching my own series.

I have realised that the aspirational nature of writing, wanting people to enjoy your work and your product is more humbling and scary than exciting. If people don’t buy the book, it’s not because it is not good. They wouldn’t know. With only a few reviews at the moment and not really enough sample size to judge it by I just have to leave it there to be its own thing now.

If every follower and like that I had bought the £1.99/$2.99 e-book today, right now it would hit the top 100. I can see the variance that even a single sale makes to the rank. I don’t have an agent or publisher pushing it. However, I have created what I set out to do and learned a lot in the process about things I was not expecting to learn. That can only be a good thing.

I care about Roisin Kincade, my lead character. Right at the moment she is in quite a difficult place. So I need to keep writing to rescue her. I have the storyboard/architecture and I have some experience in code/writing and testing/editing plus I know how to publish and try to market it. So I best get on with it.

The book, it’s blurb and links to where to get a copy are all on Reconfigurebook.co.uk

Blended Reality – Hiding under tables.

Having been somewhat preoccupied with, you know what, the past few weeks I had not had a chance to comment and share the current wave of demos relating to Google’s Magic Leap. This video was published, ‘shot through magic leap technology’ a few weeks ago.

It has some interesting features to take note of. The little character is under the table. However he is also behind the leg of the table. The real world object clips him and obscures him as the camera pans across. He is floating around and bobbing a little, but the registration with the physical in a hand held karma shot is very impressive.
Also intersting, and more obvious in the solar system shot, is the use of focus. The objects are not always in focus just as a real camera would need to adjust as it got closer. Many AR experiences and blended reality experiences do not have that. They may have lighting and a presence relative to a physical space but they are like 3d stickers.
It is a lot more convincing and real than the large Whale jumping one that was doing the rounds. That looked like an aspirational PR video of what we could expect one day.
I am really looking forward to the next few months/years as these devices become accessible. It is way more exciting than just pure VR (though I love that too!)
It enables us to start instrumenting the world visually as much as we are under the covers with the Internet of Things.

Virtual becomes physical part ii

Today the paperback version of Reconfigure (my sci-fi novel I may have mentioned a few times!) went live. I was really happy with the proof that came from Createspace.

The amazon.com version is also there
I am setting up matchbook so it should mean that the digital copy is available to anyone who buys the physical copy. I am not sure how that pans out or works out, but it works retrospectively is someone buys the physical book and then would like the digital one once the scheme kicks in.
I got predlet 2.0 to help out with an advert for the book. It is a little easter egg, there are a few of them out there, based on the contents so readers or would be readers get a little in the know payoff.

I have been bouncing around the various advert platforms. I am still not sure which works, but I know which ones cost way too much 🙂
Anyway, this new solid paper version might make a good christmas present for someone ? Plus is is something I can wander around and show people, just in case they don’t believe me.
The plans that tomorrow is day 1 of storyboarding book 2. I have a rough idea what that is, there are plenty of hooks on the first book to work with and mesh into, though I don’t want to make each book mandatory. That may be asking a little too much, but it’s an aim.

Virtual Becomes Physical

Have you bought the ebook yet? If not … cough… why not ? 🙂 Even without a kindle you can read it on any device. Go on you know you want too 🙂
I decided once the ebook was published for Reconfigure it would be interesting to explore the print on demand options from CreateSpace. It was some more formatting work to do and also create more than just a cover page. It needed a back page and the blurb associated with it. It also needed a more physical form of typesetting. ebooks are really HTML and reformat themselves. Physical books have to consider the gutter spacing when the pages are bound so you can read all the words.
The first proof arrived today.
Reconfigure goes from virtual to real http://www.reconfigurebook.co.uk #proofing
It was very exciting to see the thing in actual print. I had selected the 6x9inch format as that was the recommended one. However now I look at it it looks a little large, more like a text book than a novel. So I am just working out how to reformat it down to 5×8 a normal paperback size. I also removed all the page numbers, which was something I thought it asked me to do. I realise it was asking that you remove page numbers on the preamble pages. ebooks don’t have any footers for page numbers as the device generates those based on the users font size choice.
Now I have page numbers, I tightened the spacing from the double spaced to 1.5 and I am now resubmitting it all. It means buying another proof copy, but the other book is handy for promo shots being a little bigger 🙂 It is possible to do an awful lot with the support tools that are provided. Each PDF upload is checked that it fits in the correct area and formats correctly. You still have to visually check each page just in case of course. The physical instantiation being the final decision on what goes live. The cover art needs to be in a suitable high resolution (mine already was). It even shows the mouse pointer arrow that is a tiny detail mid cube that is hard to see on the digital covers as they are at the moment.
So onwards and upwards. Of course the print version will be relatively expensive as it is a print on demand. I do not have the economies of scale to produce cheaper versions (yet). I will probably do the Kindle matchbook scheme where physical get a digital version too. It seems very fair to me. I can’t do that until the book is physically live though.

Every advert counts – Fast cars work too

Whilst waiting for Halo5 to drop last night at midnight I spent a little time on Forza 6 creating another custom paint job. This time for, yes, you guessed it Reconfigure It is part of my immersion in my own product to use it in places that I already have done similar things and provide a little twist on the traditional.
I have done Eightbar (in 2007), Epredator, Feeding Edge, Choi Kwang Do and Cool Stuff Collective decals in the past. It is a complicated process involving layering stickers and resizing them not just paining and uploading. It makes for an interesting challenge to get the spirit of an image if not the exact replica.
Here is a lambo done up with Reconfigure.
Reconfigure book paintwork on a lambo
Reconfigure book paintwork on a lambo
Reconfigure book paintwork on a lambo
Reconfigure book paintwork on a lambo
Reconfigure book paintwork on a lambo
I also recorded a lap of Brands Hatch just for a bit of fun too.

Whilst this car will appear, and show Reconfigure when I race, and also appear on a drivatar racing in someones living room I doubt anyone will buy the book on the basis of this, but it is what I do, so I did 🙂
I was attempting to promote the book and get up the sales rank a little by natural sharing.Many thanks to those people who have supported me with a purchase. It means a great deal.
Having always tried to help and support other people in their projects and sharing all sorts of things that may be interesting to colleagues and followers out there I found I succumbed to having to advertise. The book numbers could reach a tipping point with just the people who I have worked with or shared time with popped £1.99/$2.99 in the help epredatar out project. People don’t just buy books, or ebooks for no reason. They are not impulse buys. You have no idea what is in it, unless there are reviews, or people are saying good things about it. Me just wibbling on and enthusing probably sounds more like a noise of “here he goes again”. However, this is a book based on metaverse concepts, on software and game design as well as adventure. When I help people out I don’t expect anything in return so I feel guilty for even asking. Anyway, Facebook ads have been my first forays into the weird world of online targeted ads.
I created 3 ads each with a very low maximum spend. One is a page like for the Facebook page. The other two are direct links to the Amazon book. One targeted at US and Canada the other to the UK. It will be interesting to see what happens there. My numbers are such, at the moment, I can see a one to one relationship between and add and a potential sale.
I had targeted people into tech, my old company, Unity development and Second Life and virtual worlds. It obviously worked as I got sent the ad myself, as did elemming.
Got advertised at by my own advert. So I meet the demographic
I didn’t click on my own ad as its the click to go to Amazon that calls off against the ad budget. It is a pity it does not relate to the sale of a copy, but Facebook is just pushing a URL and the shop is Amazon.
It’s early days, and I am non established author. I like to think I have a bit of reputation as a forward thinker who might make something interesting. I welcome all feedback, good and bad. I will try some other advertising options as the months go on. This is all an experiment after all 🙂

Promoting a product – Reconfigure

It is only a few days since Reconfigure went live on the Amazon store. I need to apologise for the single minded promoting of this 2 month project. It has been a both nerve wracking and exciting time. I have spent many years promoting other peoples ideas, getting buy in and passionate about what they have produced. Now I have to do that for my own product. From a standing start, not having written like this before it is an intriguing position to be in. I believe I have some social capital across social media and the tech industry, but it will be the sales figures that tell me that or now. The Book is only £1.99 so I hope friends, family and followers just support it with a purchase to help the sales rank. A good ales rank draws other people to the book.

However to promote it properly I have done the following.
1. Share the fact it was happening. This was form the outset, helping me through the writing and editing process with people retweeting or asking me about the book.
2. A URL for Reconfigurebook.co.uk. This links to a page on Feeding Edge but it acts as a central point for sharing the book before it was live on Amazon.
3. A Facebook page for the book too. It is replication but some people share those things and not blog posts or tweets. You have to try and be everywhere.
4. When it went live tweeting the link and pinning that to my profile
5. Instagram post of the front cover and the URL
6. Creating profiles on Author central in the US and the UK I now have amazon.com/author/epredator
7. Author central suggested creating a video. So I did, and also then put that on youtube. A bit of editing and bit more information and background to the whole project is in this mini advert.

8. Linkedin. Sharing there too. Adding it to the publications I have listed
9. Pinging a few people privately. I did not want to spam everyone, but just a few hello’s to some nice people who might like the book, or like the fact I have done the book and share a bit wider.
10. Empire Avenue, I created a little mission for people to click through
11. With the video uploaded to Facebook is can be linked to an action, just as there ar links in the youtube version to the site or to amazon
12. Make a print copy of the book. This is in process at the moment. CreateSpace is part of Amazon and helps you put together the different layout and parts for a print on demand. I will have to see how that goes as it was not in the original plan. It might be nice to have a few copies.
13. What next? Well if the social network and everyone out there helps the sales figures this may not need much more, it may tip. However, next would be the costly options of advertising. Where and how and with which service I have yet to work out. I can see direct sales figures so have a good idea of how many people have been good enough to support this for me, not and hopefully with some more sales over the coming weeks.
14. Write another one. It seems having more than one book or a series can attract more people to what you are doing. As with all these things it can be a case of ‘yeah so what you wrote a book’ 🙂
15. Get positive reviews. These are important. It has already started but more would be lovely.
Update 28/10/2015
16. I realised I had not actually advertised on Amazon. It makes sense to be there after all. So I just did started an ad run there too.

I am going to explore and keep an open mind. The story is out there, it feels like I am at the end of my own box set series and now I am looking for the next thing. I did not go down the agent route as I wanted to see and experience this part. Doing everything form start to finish using the tools available to me. I did some unusual twists in that path. e.g. the swirls on the cover are actually effects in Unity with a planetary plugin. I created the layout and background, removed some parts added others and snapped the 3d view into 2d. It forms a backdrop for the cube, which was also Unity3d. It fits with the story in a nice meta way too.

Reconfigure is available right now!

I just hit publish on the Amazon Kindle site, I was expecting it to take a few days but it seems Reconfigure, my first novel is live and available for purchase right now.

The UK link is here, but it will direct you to the relevant territory as it is available globally.
It feels a somewhat odd experience to have let Roisin Kincade out into the wild along with all the wonderful tech and adventures she has had.
I hope, if you choose to buy the book, that you enjoy it. It has been a wonderful experience to create it.
rccover3small
Reconfigure!

Shady Maths for Shaders

I like a good tech challenge and I decided to look a bit more into the world of shaders. I had not fully appreciated how many competing languages there were for these low level compute systems. I had used shaders in Unity3D and I knew we could do fancy things with them. They are wonderfully complicated and full of maths. As with all code you can go native and just write the code directly. There are also tools to help. Things like shadertoy let you see some of the fun that can be had. It reminds me of hacking with the copper process in the old Amiga days. Low level graphics manipulation, direct to the pipeline.
In Unity3d there is a tool I bought a while back called ShaderForge. It allows for editing of the shaders but in a visual way. Each little node shows the results of the maths that is going on in its own area. It is common to have this sort of material editing in 3D applications. There is a lot of maths available and I am only just skimming the surface of what can be done.
I was trying to create a realistic wood ring shader. I wanted to do something like that demonstrated here in normal code (not any of the shader languages).
I ended up with something that looked like this.
ShaderForge Unity3d
It was nearly the concentric rings, but I can only get it to start from the bottom left corner. I have yet to work out which number I can use for an offset so I can get full circles. I have worked out where to put in variance and noise to make the lines wobble a little. So I am a little stuck if anyone has any suggestions I would be very grateful 🙂 I want a random shader texture, slightly different each time which is why I am not using images as I normally do. I am not worried about the colour at the moment BTW. That is a function of scaling the mapping in the sin sweeping function that creates the ripples. I stuck a few extra value modifiers (some set to 0) to see if I could tweak the shader to do what I wanted, but no luck yet. Shaderforge has its own meta data but the thing can be compiled into a full shader in native code.
Just look at what it generates, its fairly full on code.
So it looks like I have quite a lot of learning to do. With code there is always more, always another language or format for something 🙂

***Update Yay for the internet. Dickie replied to this post very very quickly with an image of a very much simpler way for generate the concentric rings. This has massively added to my understanding of the process and is very much appreciated.


// Compiled shader for Web Player, uncompressed size: 14.0KB

// Skipping shader variants that would not be included into build of current scene.

Shader "Shader Forge/wood3" {
Properties {
_Color ("Color", Color) = (0.727941,0.116656,0.0856401,1)
_node_4617 ("node_4617", Color) = (0.433823,0.121051,0.0287089,1)
_node_1057 ("node_1057", Float) = 0.2
}
SubShader {
Tags { "RenderType"="Opaque" }

// Stats for Vertex shader:
// d3d11 : 4 math
// d3d9 : 5 math
// opengl : 10 math
// Stats for Fragment shader:
// d3d11 : 9 math
// d3d9 : 15 math
Pass {
Name "FORWARD"
Tags { "LIGHTMODE"="ForwardBase" "SHADOWSUPPORT"="true" "RenderType"="Opaque" }
GpuProgramID 47164
Program "vp" {
SubProgram "opengl " {
// Stats: 10 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
"!!GLSL#version 120

#ifdef VERTEX

varying vec2 xlv_TEXCOORD0;
void main ()
{
gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex);
xlv_TEXCOORD0 = gl_MultiTexCoord0.xy;
}

#endif
#ifdef FRAGMENT
uniform vec4 _Color;
uniform vec4 _node_4617;
uniform float _node_1057;
varying vec2 xlv_TEXCOORD0;
void main ()
{
vec4 tmpvar_1;
tmpvar_1.w = 1.0;
tmpvar_1.xyz = mix (_node_4617.xyz, _Color.xyz, vec3(((
sqrt((pow ((xlv_TEXCOORD0.x + 0.2), _node_1057) + pow ((xlv_TEXCOORD0.y + 10.0), _node_1057)))
* 11.0) + -10.0)));
gl_FragData[0] = tmpvar_1;
}

#endif
"
}
SubProgram "d3d9 " {
// Stats: 5 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
Matrix 0 [glstate_matrix_mvp]
"vs_3_0
dcl_position v0
dcl_texcoord v1
dcl_position o0
dcl_texcoord o1.xy
dp4 o0.x, c0, v0
dp4 o0.y, c1, v0
dp4 o0.z, c2, v0
dp4 o0.w, c3, v0
mov o1.xy, v1

"
}
SubProgram "d3d11 " {
// Stats: 4 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
ConstBuffer "UnityPerDraw" 336
Matrix 0 [glstate_matrix_mvp]
BindCB "UnityPerDraw" 0
"vs_4_0
root12:aaabaaaa
eefiecedaffpdldohodkdgpagjklpapmmnbhcfmlabaaaaaaoeabaaaaadaaaaaa
cmaaaaaaiaaaaaaaniaaaaaaejfdeheoemaaaaaaacaaaaaaaiaaaaaadiaaaaaa
aaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapapaaaaebaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaabaaaaaaadadaaaafaepfdejfeejepeoaafeeffiedepepfceeaaklkl
epfdeheofaaaaaaaacaaaaaaaiaaaaaadiaaaaaaaaaaaaaaabaaaaaaadaaaaaa
aaaaaaaaapaaaaaaeeaaaaaaaaaaaaaaaaaaaaaaadaaaaaaabaaaaaaadamaaaa
fdfgfpfaepfdejfeejepeoaafeeffiedepepfceeaaklklklfdeieefcaeabaaaa
eaaaabaaebaaaaaafjaaaaaeegiocaaaaaaaaaaaaeaaaaaafpaaaaadpcbabaaa
aaaaaaaafpaaaaaddcbabaaaabaaaaaaghaaaaaepccabaaaaaaaaaaaabaaaaaa
gfaaaaaddccabaaaabaaaaaagiaaaaacabaaaaaadiaaaaaipcaabaaaaaaaaaaa
fgbfbaaaaaaaaaaaegiocaaaaaaaaaaaabaaaaaadcaaaaakpcaabaaaaaaaaaaa
egiocaaaaaaaaaaaaaaaaaaaagbabaaaaaaaaaaaegaobaaaaaaaaaaadcaaaaak
pcaabaaaaaaaaaaaegiocaaaaaaaaaaaacaaaaaakgbkbaaaaaaaaaaaegaobaaa
aaaaaaaadcaaaaakpccabaaaaaaaaaaaegiocaaaaaaaaaaaadaaaaaapgbpbaaa
aaaaaaaaegaobaaaaaaaaaaadgaaaaafdccabaaaabaaaaaaegbabaaaabaaaaaa
doaaaaab"
}
SubProgram "opengl " {
// Stats: 10 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
"!!GLSL#version 120

#ifdef VERTEX

varying vec2 xlv_TEXCOORD0;
void main ()
{
gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex);
xlv_TEXCOORD0 = gl_MultiTexCoord0.xy;
}

#endif
#ifdef FRAGMENT
uniform vec4 _Color;
uniform vec4 _node_4617;
uniform float _node_1057;
varying vec2 xlv_TEXCOORD0;
void main ()
{
vec4 tmpvar_1;
tmpvar_1.w = 1.0;
tmpvar_1.xyz = mix (_node_4617.xyz, _Color.xyz, vec3(((
sqrt((pow ((xlv_TEXCOORD0.x + 0.2), _node_1057) + pow ((xlv_TEXCOORD0.y + 10.0), _node_1057)))
* 11.0) + -10.0)));
gl_FragData[0] = tmpvar_1;
}

#endif
"
}
SubProgram "d3d9 " {
// Stats: 5 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
Matrix 0 [glstate_matrix_mvp]
"vs_3_0
dcl_position v0
dcl_texcoord v1
dcl_position o0
dcl_texcoord o1.xy
dp4 o0.x, c0, v0
dp4 o0.y, c1, v0
dp4 o0.z, c2, v0
dp4 o0.w, c3, v0
mov o1.xy, v1

"
}
SubProgram "d3d11 " {
// Stats: 4 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
ConstBuffer "UnityPerDraw" 336
Matrix 0 [glstate_matrix_mvp]
BindCB "UnityPerDraw" 0
"vs_4_0
root12:aaabaaaa
eefiecedaffpdldohodkdgpagjklpapmmnbhcfmlabaaaaaaoeabaaaaadaaaaaa
cmaaaaaaiaaaaaaaniaaaaaaejfdeheoemaaaaaaacaaaaaaaiaaaaaadiaaaaaa
aaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapapaaaaebaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaabaaaaaaadadaaaafaepfdejfeejepeoaafeeffiedepepfceeaaklkl
epfdeheofaaaaaaaacaaaaaaaiaaaaaadiaaaaaaaaaaaaaaabaaaaaaadaaaaaa
aaaaaaaaapaaaaaaeeaaaaaaaaaaaaaaaaaaaaaaadaaaaaaabaaaaaaadamaaaa
fdfgfpfaepfdejfeejepeoaafeeffiedepepfceeaaklklklfdeieefcaeabaaaa
eaaaabaaebaaaaaafjaaaaaeegiocaaaaaaaaaaaaeaaaaaafpaaaaadpcbabaaa
aaaaaaaafpaaaaaddcbabaaaabaaaaaaghaaaaaepccabaaaaaaaaaaaabaaaaaa
gfaaaaaddccabaaaabaaaaaagiaaaaacabaaaaaadiaaaaaipcaabaaaaaaaaaaa
fgbfbaaaaaaaaaaaegiocaaaaaaaaaaaabaaaaaadcaaaaakpcaabaaaaaaaaaaa
egiocaaaaaaaaaaaaaaaaaaaagbabaaaaaaaaaaaegaobaaaaaaaaaaadcaaaaak
pcaabaaaaaaaaaaaegiocaaaaaaaaaaaacaaaaaakgbkbaaaaaaaaaaaegaobaaa
aaaaaaaadcaaaaakpccabaaaaaaaaaaaegiocaaaaaaaaaaaadaaaaaapgbpbaaa
aaaaaaaaegaobaaaaaaaaaaadgaaaaafdccabaaaabaaaaaaegbabaaaabaaaaaa
doaaaaab"
}
SubProgram "opengl " {
// Stats: 10 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" "VERTEXLIGHT_ON" }
"!!GLSL#version 120

#ifdef VERTEX

varying vec2 xlv_TEXCOORD0;
void main ()
{
gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex);
xlv_TEXCOORD0 = gl_MultiTexCoord0.xy;
}

#endif
#ifdef FRAGMENT
uniform vec4 _Color;
uniform vec4 _node_4617;
uniform float _node_1057;
varying vec2 xlv_TEXCOORD0;
void main ()
{
vec4 tmpvar_1;
tmpvar_1.w = 1.0;
tmpvar_1.xyz = mix (_node_4617.xyz, _Color.xyz, vec3(((
sqrt((pow ((xlv_TEXCOORD0.x + 0.2), _node_1057) + pow ((xlv_TEXCOORD0.y + 10.0), _node_1057)))
* 11.0) + -10.0)));
gl_FragData[0] = tmpvar_1;
}

#endif
"
}
SubProgram "d3d9 " {
// Stats: 5 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" "VERTEXLIGHT_ON" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
Matrix 0 [glstate_matrix_mvp]
"vs_3_0
dcl_position v0
dcl_texcoord v1
dcl_position o0
dcl_texcoord o1.xy
dp4 o0.x, c0, v0
dp4 o0.y, c1, v0
dp4 o0.z, c2, v0
dp4 o0.w, c3, v0
mov o1.xy, v1

"
}
SubProgram "d3d11 " {
// Stats: 4 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" "VERTEXLIGHT_ON" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
ConstBuffer "UnityPerDraw" 336
Matrix 0 [glstate_matrix_mvp]
BindCB "UnityPerDraw" 0
"vs_4_0
root12:aaabaaaa
eefiecedaffpdldohodkdgpagjklpapmmnbhcfmlabaaaaaaoeabaaaaadaaaaaa
cmaaaaaaiaaaaaaaniaaaaaaejfdeheoemaaaaaaacaaaaaaaiaaaaaadiaaaaaa
aaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapapaaaaebaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaabaaaaaaadadaaaafaepfdejfeejepeoaafeeffiedepepfceeaaklkl
epfdeheofaaaaaaaacaaaaaaaiaaaaaadiaaaaaaaaaaaaaaabaaaaaaadaaaaaa
aaaaaaaaapaaaaaaeeaaaaaaaaaaaaaaaaaaaaaaadaaaaaaabaaaaaaadamaaaa
fdfgfpfaepfdejfeejepeoaafeeffiedepepfceeaaklklklfdeieefcaeabaaaa
eaaaabaaebaaaaaafjaaaaaeegiocaaaaaaaaaaaaeaaaaaafpaaaaadpcbabaaa
aaaaaaaafpaaaaaddcbabaaaabaaaaaaghaaaaaepccabaaaaaaaaaaaabaaaaaa
gfaaaaaddccabaaaabaaaaaagiaaaaacabaaaaaadiaaaaaipcaabaaaaaaaaaaa
fgbfbaaaaaaaaaaaegiocaaaaaaaaaaaabaaaaaadcaaaaakpcaabaaaaaaaaaaa
egiocaaaaaaaaaaaaaaaaaaaagbabaaaaaaaaaaaegaobaaaaaaaaaaadcaaaaak
pcaabaaaaaaaaaaaegiocaaaaaaaaaaaacaaaaaakgbkbaaaaaaaaaaaegaobaaa
aaaaaaaadcaaaaakpccabaaaaaaaaaaaegiocaaaaaaaaaaaadaaaaaapgbpbaaa
aaaaaaaaegaobaaaaaaaaaaadgaaaaafdccabaaaabaaaaaaegbabaaaabaaaaaa
doaaaaab"
}
SubProgram "opengl " {
// Stats: 10 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" "VERTEXLIGHT_ON" }
"!!GLSL#version 120

#ifdef VERTEX

varying vec2 xlv_TEXCOORD0;
void main ()
{
gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex);
xlv_TEXCOORD0 = gl_MultiTexCoord0.xy;
}

#endif
#ifdef FRAGMENT
uniform vec4 _Color;
uniform vec4 _node_4617;
uniform float _node_1057;
varying vec2 xlv_TEXCOORD0;
void main ()
{
vec4 tmpvar_1;
tmpvar_1.w = 1.0;
tmpvar_1.xyz = mix (_node_4617.xyz, _Color.xyz, vec3(((
sqrt((pow ((xlv_TEXCOORD0.x + 0.2), _node_1057) + pow ((xlv_TEXCOORD0.y + 10.0), _node_1057)))
* 11.0) + -10.0)));
gl_FragData[0] = tmpvar_1;
}

#endif
"
}
SubProgram "d3d9 " {
// Stats: 5 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" "VERTEXLIGHT_ON" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
Matrix 0 [glstate_matrix_mvp]
"vs_3_0
dcl_position v0
dcl_texcoord v1
dcl_position o0
dcl_texcoord o1.xy
dp4 o0.x, c0, v0
dp4 o0.y, c1, v0
dp4 o0.z, c2, v0
dp4 o0.w, c3, v0
mov o1.xy, v1

"
}
SubProgram "d3d11 " {
// Stats: 4 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" "VERTEXLIGHT_ON" }
Bind "vertex" Vertex
Bind "texcoord" TexCoord0
ConstBuffer "UnityPerDraw" 336
Matrix 0 [glstate_matrix_mvp]
BindCB "UnityPerDraw" 0
"vs_4_0
root12:aaabaaaa
eefiecedaffpdldohodkdgpagjklpapmmnbhcfmlabaaaaaaoeabaaaaadaaaaaa
cmaaaaaaiaaaaaaaniaaaaaaejfdeheoemaaaaaaacaaaaaaaiaaaaaadiaaaaaa
aaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapapaaaaebaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaabaaaaaaadadaaaafaepfdejfeejepeoaafeeffiedepepfceeaaklkl
epfdeheofaaaaaaaacaaaaaaaiaaaaaadiaaaaaaaaaaaaaaabaaaaaaadaaaaaa
aaaaaaaaapaaaaaaeeaaaaaaaaaaaaaaaaaaaaaaadaaaaaaabaaaaaaadamaaaa
fdfgfpfaepfdejfeejepeoaafeeffiedepepfceeaaklklklfdeieefcaeabaaaa
eaaaabaaebaaaaaafjaaaaaeegiocaaaaaaaaaaaaeaaaaaafpaaaaadpcbabaaa
aaaaaaaafpaaaaaddcbabaaaabaaaaaaghaaaaaepccabaaaaaaaaaaaabaaaaaa
gfaaaaaddccabaaaabaaaaaagiaaaaacabaaaaaadiaaaaaipcaabaaaaaaaaaaa
fgbfbaaaaaaaaaaaegiocaaaaaaaaaaaabaaaaaadcaaaaakpcaabaaaaaaaaaaa
egiocaaaaaaaaaaaaaaaaaaaagbabaaaaaaaaaaaegaobaaaaaaaaaaadcaaaaak
pcaabaaaaaaaaaaaegiocaaaaaaaaaaaacaaaaaakgbkbaaaaaaaaaaaegaobaaa
aaaaaaaadcaaaaakpccabaaaaaaaaaaaegiocaaaaaaaaaaaadaaaaaapgbpbaaa
aaaaaaaaegaobaaaaaaaaaaadgaaaaafdccabaaaabaaaaaaegbabaaaabaaaaaa
doaaaaab"
}
}
Program "fp" {
SubProgram "opengl " {
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
"!!GLSL"
}
SubProgram "d3d9 " {
// Stats: 15 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
Vector 0 [_Color]
Float 2 [_node_1057]
Vector 1 [_node_4617]
"ps_3_0
def c3, 0.200000003, 10, 11, -10
def c4, 1, 0, 0, 0
dcl_texcoord v0.xy
add r0.xy, c3, v0
pow r1.x, r0.x, c2.x
pow r1.y, r0.y, c2.x
add r0.x, r1.y, r1.x
rsq r0.x, r0.x
rcp r0.x, r0.x
mad r0.x, r0.x, c3.z, c3.w
mov r1.xyz, c1
add r0.yzw, -r1.xxyz, c0.xxyz
mad oC0.xyz, r0.x, r0.yzww, c1
mov oC0.w, c4.x

"
}
SubProgram "d3d11 " {
// Stats: 9 math
Keywords { "DIRECTIONAL" "SHADOWS_OFF" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
ConstBuffer "$Globals" 144
Vector 96 [_Color]
Vector 112 [_node_4617]
Float 128 [_node_1057]
BindCB "$Globals" 0
"ps_4_0
root12:aaabaaaa
eefiecedbabakleflijnjmcmgkldbcbdippjnhehabaaaaaaceacaaaaadaaaaaa
cmaaaaaaieaaaaaaliaaaaaaejfdeheofaaaaaaaacaaaaaaaiaaaaaadiaaaaaa
aaaaaaaaabaaaaaaadaaaaaaaaaaaaaaapaaaaaaeeaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaabaaaaaaadadaaaafdfgfpfaepfdejfeejepeoaafeeffiedepepfcee
aaklklklepfdeheocmaaaaaaabaaaaaaaiaaaaaacaaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaaaaaaaaaapaaaaaafdfgfpfegbhcghgfheaaklklfdeieefcgeabaaaa
eaaaaaaafjaaaaaafjaaaaaeegiocaaaaaaaaaaaajaaaaaagcbaaaaddcbabaaa
abaaaaaagfaaaaadpccabaaaaaaaaaaagiaaaaacabaaaaaaaaaaaaakdcaabaaa
aaaaaaaaegbabaaaabaaaaaaaceaaaaamnmmemdoaaaacaebaaaaaaaaaaaaaaaa
cpaaaaafdcaabaaaaaaaaaaaegaabaaaaaaaaaaadiaaaaaidcaabaaaaaaaaaaa
egaabaaaaaaaaaaaagiacaaaaaaaaaaaaiaaaaaabjaaaaafdcaabaaaaaaaaaaa
egaabaaaaaaaaaaaaaaaaaahbcaabaaaaaaaaaaabkaabaaaaaaaaaaaakaabaaa
aaaaaaaaelaaaaafbcaabaaaaaaaaaaaakaabaaaaaaaaaaadcaaaaajbcaabaaa
aaaaaaaaakaabaaaaaaaaaaaabeaaaaaaaaadaebabeaaaaaaaaacambaaaaaaak
ocaabaaaaaaaaaaaagijcaaaaaaaaaaaagaaaaaaagijcaiaebaaaaaaaaaaaaaa
ahaaaaaadcaaaaakhccabaaaaaaaaaaaagaabaaaaaaaaaaajgahbaaaaaaaaaaa
egiccaaaaaaaaaaaahaaaaaadgaaaaaficcabaaaaaaaaaaaabeaaaaaaaaaiadp
doaaaaab"
}
SubProgram "opengl " {
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
"!!GLSL"
}
SubProgram "d3d9 " {
// Stats: 15 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
Vector 0 [_Color]
Float 2 [_node_1057]
Vector 1 [_node_4617]
"ps_3_0
def c3, 0.200000003, 10, 11, -10
def c4, 1, 0, 0, 0
dcl_texcoord v0.xy
add r0.xy, c3, v0
pow r1.x, r0.x, c2.x
pow r1.y, r0.y, c2.x
add r0.x, r1.y, r1.x
rsq r0.x, r0.x
rcp r0.x, r0.x
mad r0.x, r0.x, c3.z, c3.w
mov r1.xyz, c1
add r0.yzw, -r1.xxyz, c0.xxyz
mad oC0.xyz, r0.x, r0.yzww, c1
mov oC0.w, c4.x

"
}
SubProgram "d3d11 " {
// Stats: 9 math
Keywords { "DIRECTIONAL" "SHADOWS_SCREEN" "LIGHTMAP_OFF" "DIRLIGHTMAP_OFF" "DYNAMICLIGHTMAP_OFF" }
ConstBuffer "$Globals" 144
Vector 96 [_Color]
Vector 112 [_node_4617]
Float 128 [_node_1057]
BindCB "$Globals" 0
"ps_4_0
root12:aaabaaaa
eefiecedbabakleflijnjmcmgkldbcbdippjnhehabaaaaaaceacaaaaadaaaaaa
cmaaaaaaieaaaaaaliaaaaaaejfdeheofaaaaaaaacaaaaaaaiaaaaaadiaaaaaa
aaaaaaaaabaaaaaaadaaaaaaaaaaaaaaapaaaaaaeeaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaabaaaaaaadadaaaafdfgfpfaepfdejfeejepeoaafeeffiedepepfcee
aaklklklepfdeheocmaaaaaaabaaaaaaaiaaaaaacaaaaaaaaaaaaaaaaaaaaaaa
adaaaaaaaaaaaaaaapaaaaaafdfgfpfegbhcghgfheaaklklfdeieefcgeabaaaa
eaaaaaaafjaaaaaafjaaaaaeegiocaaaaaaaaaaaajaaaaaagcbaaaaddcbabaaa
abaaaaaagfaaaaadpccabaaaaaaaaaaagiaaaaacabaaaaaaaaaaaaakdcaabaaa
aaaaaaaaegbabaaaabaaaaaaaceaaaaamnmmemdoaaaacaebaaaaaaaaaaaaaaaa
cpaaaaafdcaabaaaaaaaaaaaegaabaaaaaaaaaaadiaaaaaidcaabaaaaaaaaaaa
egaabaaaaaaaaaaaagiacaaaaaaaaaaaaiaaaaaabjaaaaafdcaabaaaaaaaaaaa
egaabaaaaaaaaaaaaaaaaaahbcaabaaaaaaaaaaabkaabaaaaaaaaaaaakaabaaa
aaaaaaaaelaaaaafbcaabaaaaaaaaaaaakaabaaaaaaaaaaadcaaaaajbcaabaaa
aaaaaaaaakaabaaaaaaaaaaaabeaaaaaaaaadaebabeaaaaaaaaacambaaaaaaak
ocaabaaaaaaaaaaaagijcaaaaaaaaaaaagaaaaaaagijcaiaebaaaaaaaaaaaaaa
ahaaaaaadcaaaaakhccabaaaaaaaaaaaagaabaaaaaaaaaaajgahbaaaaaaaaaaa
egiccaaaaaaaaaaaahaaaaaadgaaaaaficcabaaaaaaaaaaaabeaaaaaaaaaiadp
doaaaaab"
}
}
}
}
Fallback "Diffuse"
}