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.
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.
Monthly Archives: October 2015
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.
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.
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.
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.
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"
}
Star Wars Battlefront Beta
Last night I took a few hours off re-reading and tweaking my Reconfigure Book reminding myself that there is still world out here. I downloaded the public beta of Star Wars battlefront.
It is very impressive! All the Battlefront games have been good, the mix of mass open warfare, vehicles and a sense of scale all work really well with the iconic Star Wars settings. There is a lot of dying and a lot of respawning, but that is how it works. It is an infantry battle and you can treat yourself as expendable.
The beta has two planet surfaces, the second bing the ice planet Hoth. Imperial AT-AT stomp towards the base. Sentry guns and tunnels, trenches and rock faces make up the scene. Tie fighters and A-wings battle overhead. I didn’t get to fly anything, which is my preference, but that will come in time.
As a rebel fighter in the first game, seeing the imposing AT-AT slowly stomping forwards and blasters just bouncing off, backed up by stormtroopers was impressive, but suddenly Darth Vader turned up, light sabre deflecting shots as he carved through us. It was incredibly exciting. This is not my video but it does show the scene very well and an amusing moment with another hero.
The single player survival game has waves of Stormtroopers coming at you in close and personal on a very rocky and brilliantly lit Tattoine. I seemed to see the troopers up a lot closer and saw the impressive animation system at work on the NPC characters in this mode.
The game will of course be huge, but it is good to see it is as good as this already. I don’t think any of us who grew up with Star Wars in the late 70’s will ever get tired of the buzz of being in these environments. With this and Elite Dangerous on the Xbox One we have some tween memories to relive and now colour in.
AR glasses – Ray-ban
I just visited Ray-Ban’s virtual glasses modelling site. There have been a lot of ‘stick things on your face on a webcam’ applications but I was impressed with how quick, simple and accurate this one was. My regular glasses are Ray-Bans so I found the model number and tried my actual pair on virtually to see the difference.
The registration of my face even in bad lighting was incredibly quick, and yes I need a haircut!
What was impressive is that the glasses appear to have lighting and a reflection in the lens, The still does not do that justice, but it really adds something over the the cartoon stickers of other AR web cam applications. The arms of the glasses also go around the side of your head.
Here is the ‘real’ pair for comparison.
This is just a webcam on a webpage. Imagine the degree of world changing views we can create on portable holo style headsets.
Full Xbox One elite Dangerous
Over a year ago I got to play the beta, on the PC, of Elite Dangerous as one of the early backers on Kickstarter. I wrote a number of things about it and the Oculus Rift DK2 experience too.
I also got to Elite Dangerous on the Xbox One with the preview programme. This has been running for a good few months as this post where I mashed it with predators fighting in Mortal Kombat was back in July.
Elite Dangerous is now fully live on Xbox One. Having spent way more time on the preview version than on the full PC/Mac version I had built up a nice little ship and a decent buffer of cash. I was expecting to be reset completely for the full release. I had see reports we would get a cash value for our modules. Instead though, and thankyou Frontier, my ship is intact, as are my modules and my stats. The cargo I had on board suddenly said it was stolen, but that is a minor thing.
It may be some sort of gaming heresy, or cause a flame war, but I am enjoying the couch, controller big TV experience more than being sat at my laptop, even with a complicated stick arrangement. It may be because getting the right buttons to work with the VR headset and not be able to see the keyboard, the difficulty in driving the galaxy map in that configuration meant the console version seems slicker and easier. The PC has the ability to map controls to any of the multitude of buttons, for any control stick. The console only has the one controller type, (and the new fancy expensive controller too). The commands are mapped onto the buttons as menus. e.g. if you tap b it fires the boosters, if you hold b you get an onscreen menu with four directions to select landing gear, cargo scoop, lights etc. It means that you don’t have to hold that many things in your head as to which button to press. So if you don’t play for a few weeks you can still go back and the basics are there, but the on screen helps remind you. It was another problem with the VR headset on the PC that you lose any visual memory. You have to rely on finger position. Imagine trying to touch type and not be able to glance at the keys. Unless you are a real pro touch typer we all look at the keys at some point. It augments what our brain needs. The putts players of Elite will of course just know and hold the information, they will become like touch typers. I jump from game to game and I am past needing to memorise the complexity I think. It used to be fun to have obscure collections of keys but now it is less so.
Having got to keep the expensive collection of modules on the ship I got back to playing the game again last night. It hit one of this rare moments when the missions, the place in the vast depths of place and the time to just work it all aligned. It had taken months to kit the ship and get to the point of having a couple of million in the bank. As with all RPG’s there is grind required. You teeter on the edge of oblivion for a while. Then you plateau, before a new set of challenges make themselves known.
I started the session with this
A balance of 2.4million in cash and a ship that had about 5.6 million on upgrades. After just an hour of doing a few missions in the rich vein I found it was.
A balance on 3.1million. Nearly a million credits. Adding 30% to the amount I already had. If only real life skills generated this sort of return 🙂
The whole Elite experience may not be for everyone, it will be interesting how the console generation take to it. It is a game that requires a bit of a slog. The monotony is something that is part of what makes it so endearing. I do get lost in most games and films, this one even more so. I do engage in combat, when I have to, but prefer a more self defence than pirate attitude to that, most of the time. It is a pity I can’t have a crossover to Commander Epredator on the PC version. Each Commander Epredator inhabits the same universe at an economic and server level apparently. The Xbox is really a meta shard where just xbox users frequent.
Predlet 2.0 was badgering me to be able to play it too. I have set him up an account, though I just left him to it to see what the initial experience was like. After a few minutes he was back on Jurassic World Lego so I think the initial onboard experience may not be the sort of thing console owners are used to. Having been in on the beta there were very little instructional or intro parts. Training missions grew, but you just got used to fiddling around with the ship to see what happened. So For me I have a mental model of how it all works. I am still a little confused at the super cruise over shooting and rapidly accelerating at some of the space station targets but it feels like it is there to keep your attention.
Aside from the whole ultraHD thing that high end PC’s are starting to do I can see no difference in the loo and feel of the game across the platforms. So the ‘it’s better on PC’ can only really come down to how much you spend on your gaming rig. Spend more and it’s better, naturally.
I have also found that now I can multitask, as I tweeted last night, whilst travelling some of the longer distances I get to read a few pages of Reconfigure. Whilst you might get interdicted on a supercruise (that sounds odd, but it’s the words they use) I have enough time and enough defence capability to not worry too much. I put the kindle down and pick up the pad. It seems Elite Dangerous is crying out for a second screen app. It would be great to check things during hyperspace and super cruise whilst keeping the onscreen space view. The VR experience has the ability to look left and right and the terminals pop up with info, floating for you. The Xbox does that too with freelook, clicking the right stick moves to freelook. Though in reality its easer to lock and zoom into the screens. In VR you can lean forward to see the AR screens better. The photos above are of the locked in view not the floating view. So a second screen view of all that, the ships systems, reconfiguring things etc would be a great addition. I know I would use it. Of course that would not work so well on the PC and Mac, though with the Xbox becoming a Windows 10 machine the crossover might get easier?
More Hololens demos
Whilst I may have been quite focussed on my own Science Fiction vision of the future with my book writing experiment I have not been completely detached from the world. Yesterday some new demos of Microsoft’s impressive looking Hololens came out. I am still not convinced they should really call them holograms, but we can let that slide. This blended reality demo of a game, albeit a blow stuff up one, understanding the environment around it, using the walls as canvases is impressive. I still think I prefer the minecraft examples though.
They are obviously not overly keen on small companies or individuals getting their hands not eh dev kit as its $3k for the kit and only in the US and Canada. Still it’s a start.
We have yet to see the kit from Magic Leap/google.
Of course this got me thinking, my Reconfigure story, the things that happen in the physical world could easily be emulated with a Hololens. It would be great to create a Hololens powered version of my character’s experience. Not a 3d 360 immersive film but a blended reality, this is what it would feel like to be Roisin Kincade. Now that is exciting!
Getting closer to a launch? Reconfigure
The past weeks have been a very interesting one in the book writing process. It has been more like systems admin and system testing. The various printouts of Reconfigure have had a verbal read through, trying to spot the odd errors, changes in tone, pace. I have been looking out for continuity errors too. I made a few changes to the maths in it also. Every time I read it I found I could tweak it a little. Those tweaks and corrections are much lower in frequency and the book is now really in closed invitational beta. The blurb of the story is at reconfigure book.co.uk
I started to set up my Amazon account to be able to sell the book. It required a fair amount of messing around with US tax exemption forms and finding the right international IBAN numbers for bank accounts etc.
Using Apple pages I am able to export to ePub. I tried the Mac version of the Kindle conversions but the apps are a mess of Java problems. Uploading the ePub and the cover image to the book page produced a .Mobi file that can be downloaded, and also previewed on the web. So I am nearly there.
The next thing to do is set the price. At 99p Amazon take a 65% royalty and at £2.99 they take a 30% cut. I am hoping that people are happy to pay £2.99. I am sure friends and family might to help support this endeavour but I am not so sure about the general public. There seems, as in Apps, to be a trend towards 99p as a price point for any volume. The old adage of 35% of something is better than 70% of nothing applies.
There were some formatting challenges too, but I think I have them sorted.
It seems pricing can be altered and there is a sort of club that you can pay to join to do more fancy things with deals and lending etc. I am not sure I can justify that just yet.
So it seems my first public product is going to be this novel, not and app or a game. It does have a lot of dev tech and game concepts in it along with virtual worlds and alike.
Hopefully a few more people reading it will settle the nerves of wondering what I have done with the past month. Of course this could all be complete self-delusion. Let us hope not!