diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..d4fc839 --- /dev/null +++ b/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6f09602f3a6b7405ea7442b35c2a4fbb +folderAsset: yes +timeCreated: 1468815682 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/UVFreeEditor.dll b/Editor/UVFreeEditor.dll new file mode 100644 index 0000000..89043e4 Binary files /dev/null and b/Editor/UVFreeEditor.dll differ diff --git a/Editor/UVFreeEditor.dll.meta b/Editor/UVFreeEditor.dll.meta new file mode 100644 index 0000000..57d93bd --- /dev/null +++ b/Editor/UVFreeEditor.dll.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: d03878683a68041af88d924c2e79de2f +timeCreated: 1473226195 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/logo.png b/Editor/logo.png new file mode 100644 index 0000000..6bc42e4 Binary files /dev/null and b/Editor/logo.png differ diff --git a/Editor/logo.png.meta b/Editor/logo.png.meta new file mode 100644 index 0000000..64ee794 --- /dev/null +++ b/Editor/logo.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: f5e24a42b35314313b7e868962e68ee8 +timeCreated: 1472715304 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Examples.meta b/Examples.meta new file mode 100644 index 0000000..dfa4b11 --- /dev/null +++ b/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 592f517a928434ee38226db6765777f6 +folderAsset: yes +timeCreated: 1468815694 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs.meta b/Prefabs.meta new file mode 100644 index 0000000..448599d --- /dev/null +++ b/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 111b1c413faca4ef9ae0b42a3cbf23c7 +folderAsset: yes +timeCreated: 1476081269 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs/Projector-Material.mat b/Prefabs/Projector-Material.mat new file mode 100644 index 0000000..fee5933 --- /dev/null +++ b/Prefabs/Projector-Material.mat @@ -0,0 +1,115 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Projector-Material + m_Shader: {fileID: 4800000, guid: 8d43f3e027a044774ba58c9c8626f45f, type: 3} + m_ShaderKeywords: _EMISSION _SHADE_ON _UVFREE_DOWN_NONE _UVFREE_UP_NONE _UVFREE_UV_FREE + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTexBottom: + m_Texture: {fileID: 0} + m_Scale: {x: 2, y: 2} + m_Offset: {x: 0, y: 0} + - _MainTexTop: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ProjectorFalloffTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ProjectorTex: + m_Texture: {fileID: 2800000, guid: 231f337e2f9e74ee4be704d009f49a7a, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ShadeTex: + m_Texture: {fileID: 8900000, guid: 3479905d2afba40e59f668c77312b2ce, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0 + - _AmbientPower: 1 + - _Bottom: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _Diffuse: 0 + - _DiffusePower: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _PowerBottom: 0.786 + - _PowerTop: 0 + - _Shade: 1 + - _ShadePower: 1 + - _Shadow: 0 + - _ShadowPower: 0.2 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Top: 0 + - _UVFREE_UV: 0 + - _UVSec: 0 + - _UVSpace: 0 + - _VertexColor: 0 + - _VertexColorPower: 1 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorBottom: {r: 1, g: 1, b: 1, a: 1} + - _ColorTop: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _ShadeColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Prefabs/Projector-Material.mat.meta b/Prefabs/Projector-Material.mat.meta new file mode 100644 index 0000000..74b406d --- /dev/null +++ b/Prefabs/Projector-Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c010b36dad694e389e0b35bf350784c +timeCreated: 1476259808 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs/Projector-Template.prefab b/Prefabs/Projector-Template.prefab new file mode 100644 index 0000000..9561ad2 --- /dev/null +++ b/Prefabs/Projector-Template.prefab @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000012511090030} + m_IsPrefabParent: 1 +--- !u!1 &1000012511090030 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000013342182990} + - component: {fileID: 119000011956960372} + m_Layer: 11 + m_Name: Projector-Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000013342182990 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012511090030} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.049, y: 1.896, z: -0.019} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1.0000002} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!119 &119000011956960372 +Projector: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012511090030} + m_Enabled: 1 + serializedVersion: 2 + m_NearClipPlane: 0.1 + m_FarClipPlane: 2 + m_FieldOfView: 60 + m_AspectRatio: 1 + m_Orthographic: 1 + m_OrthographicSize: 1 + m_Material: {fileID: 2100000, guid: 6c010b36dad694e389e0b35bf350784c, type: 2} + m_IgnoreLayers: + serializedVersion: 2 + m_Bits: 0 diff --git a/Prefabs/Projector-Template.prefab.meta b/Prefabs/Projector-Template.prefab.meta new file mode 100644 index 0000000..928897e --- /dev/null +++ b/Prefabs/Projector-Template.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aac72b8de5dcb4e2ba148db702c0cdd5 +timeCreated: 1476344065 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders.meta b/Shaders.meta new file mode 100644 index 0000000..fbb548e --- /dev/null +++ b/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 175d9e3e3cc7d40229d2dc76475c801c +folderAsset: yes +timeCreated: 1468815658 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core.meta b/Shaders/Core.meta new file mode 100644 index 0000000..57dea6f --- /dev/null +++ b/Shaders/Core.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8ce9ff13ebda6473f95ea941e5534cb7 +folderAsset: yes +timeCreated: 1472188275 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeCommon.cginc b/Shaders/Core/UVFreeCommon.cginc new file mode 100644 index 0000000..47b0e17 --- /dev/null +++ b/Shaders/Core/UVFreeCommon.cginc @@ -0,0 +1,7 @@ +#ifndef DC_UVFREE_COMMON_INCLUDED +#define DC_UVFREE_COMMON_INCLUDED + +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeVertexColor.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeMain.cginc" + +#endif // DC_UVFREE_COMMON_INCLUDED \ No newline at end of file diff --git a/Shaders/Core/UVFreeCommon.cginc.meta b/Shaders/Core/UVFreeCommon.cginc.meta new file mode 100644 index 0000000..cc413c2 --- /dev/null +++ b/Shaders/Core/UVFreeCommon.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: db616f0af7e064eeaa36fa8067daff7e +timeCreated: 1472188568 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeForceVertexColor.cginc b/Shaders/Core/UVFreeForceVertexColor.cginc new file mode 100644 index 0000000..e038cbb --- /dev/null +++ b/Shaders/Core/UVFreeForceVertexColor.cginc @@ -0,0 +1,16 @@ +uniform half _VertexColorPower; +#define DC_UVFREE_VCOLOR fixed4 v_color; +#define DC_UVFREE_INPUT \ + fixed4 color : COLOR; +#define DC_UVFREE_OUPUT(id1,id2)\ + float4 vertex : VERTEX;\ + _DC_UVFREE_WORLD_POS\ + half3 objNormal : NORMAL;\ + fixed4 v_color : COLOR; +#define DC_UVFREE_TRANSFER(output,tex)\ + output.vertex = v.vertex;\ + _DC_UVFREE_WORLD_POS_TRANSFER(output)\ + output.objNormal = v.normal;\ + output.v_color=lerp(fixed4(1,1,1,1),v.color,_VertexColorPower); +#define DC_UNFREE_VERTEX_ALPHA(input_color) input_color.a*=i.v_color.a; +#define DC_UVFREE_FINAL(input,col) col.rgb*=input.v_color.rgb; \ No newline at end of file diff --git a/Shaders/Core/UVFreeForceVertexColor.cginc.meta b/Shaders/Core/UVFreeForceVertexColor.cginc.meta new file mode 100644 index 0000000..cc83601 --- /dev/null +++ b/Shaders/Core/UVFreeForceVertexColor.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f06985c5ce96849d4ba0ae9ec3e161a9 +timeCreated: 1474187647 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeMain.cginc b/Shaders/Core/UVFreeMain.cginc new file mode 100644 index 0000000..8de3c32 --- /dev/null +++ b/Shaders/Core/UVFreeMain.cginc @@ -0,0 +1,145 @@ +// Fix for Unity 5.4 upgrade +//UNITY_SHADER_NO_UPGRADE +#if UNITY_VERSION >= 540 + #define _Object2World unity_ObjectToWorld + // #define _World2Object unity_WorldToObject +#endif + +uniform int _UVSecMain; +uniform half _Shininess; +uniform sampler2D _BumpMap; +uniform half _BumpScale; + +#if _UVFREE_UP_TOP || _UVFREE_UP_FRONT || _UVFREE_UP_LEFT +uniform float _PowerTop; +uniform fixed4 _ColorTop; +uniform sampler2D _MainTexTop; +uniform fixed4 _MainTexTop_ST; +uniform half _ShininessTop; +uniform sampler2D _BumpMapTop; +uniform half _BumpScaleTop; +#endif + +#if _UVFREE_DOWN_BOTTOM || _UVFREE_DOWN_BACK || _UVFREE_DOWN_RIGHT +uniform float _PowerBottom; +uniform fixed4 _ColorBottom; +uniform sampler2D _MainTexBottom; +uniform fixed4 _MainTexBottom_ST; +uniform half _ShininessBottom; +uniform sampler2D _BumpMapBottom; +uniform half _BumpScaleBottom; +#endif + +#if _UVFREE_WORLDSPACE + #define DC_UVFREE_WORLD_POS float3 worldPos; + #define _DC_UVFREE_WORLD_POS float3 worldPos : COLOR3; + #define _DC_UVFREE_WORLD_POS_TRANSFER(output) output.worldPos = mul(_Object2World, v.vertex.xyz); + #define DC_UVFREE_SETUP(input_normal)\ + half3 uv_normal = UnityObjectToWorldNormal(input_normal);\ + half3 blend = abs(uv_normal);\ + blend /= dot(blend,1.0); + #define DC_UVFREE_UV_APPLY(input,tex)\ + _DC_UVFREE_UV_APPLY(i.worldPos,tex); + + #define _DC_UVFREE_UV_APPLY(pos,tex)\ + float2 tex##_uv_raw_x = pos.xy*tex##_ST.xy+tex##_ST.zw;\ + float2 tex##_uv_raw_y = pos.xz*tex##_ST.xy+tex##_ST.zw;\ + float2 tex##_uv_raw_z = pos.zy*tex##_ST.xy+tex##_ST.zw;\ + float4 tex##_uv_x = float4(tex##_uv_raw_x,4,0);\ + float4 tex##_uv_y = float4(tex##_uv_raw_y,4,0);\ + float4 tex##_uv_z = float4(tex##_uv_raw_z,4,0);\ + float lz = clamp((blend.z-0.45)*10,0,1);\ + float ly = clamp((blend.y-0.45)*10,0,1); +#else + #define DC_UVFREE_WORLD_POS + #define _DC_UVFREE_WORLD_POS + #define _DC_UVFREE_WORLD_POS_TRANSFER(output) + #define DC_UVFREE_SETUP(input_normal)\ + half3 uv_normal = normalize(input_normal);\ + half3 blend = abs(uv_normal);\ + blend /= dot(blend,1.0); + #define DC_UVFREE_UV_APPLY(input,tex)\ + _DC_UVFREE_UV_APPLY(input.vertex,tex); + + #define _DC_UVFREE_UV_APPLY(pos,tex)\ + float2 tex##_uv_raw_x = pos.xy*tex##_ST.xy+tex##_ST.zw;\ + float2 tex##_uv_raw_y = pos.xz*tex##_ST.xy+tex##_ST.zw;\ + float2 tex##_uv_raw_z = pos.zy*tex##_ST.xy+tex##_ST.zw;\ + float4 tex##_uv_x = float4(tex##_uv_raw_x,4,0);\ + float4 tex##_uv_y = float4(tex##_uv_raw_y,4,0);\ + float4 tex##_uv_z = float4(tex##_uv_raw_z,4,0);\ + float lz = clamp((blend.z-0.45)*10,0,1);\ + float ly = clamp((blend.y-0.45)*10,0,1); +#endif + +#define DC_UVFREE_APPLY_MAIN_TEX(col) DC_UVFREE_TEX_APPLY(col,_MainTex,_MainTex); + +#define DC_UVFREE_TEX_APPLY_LOD(col,tex,uv)\ + fixed4 tex##_z = tex2Dlod(tex, uv##_uv_z);\ + fixed4 tex##_x = tex2Dlod(tex, uv##_uv_x);\ + fixed4 tex##_y = tex2Dlod(tex, uv##_uv_y);\ + col = lerp(tex##_z,tex##_x,lz);\ + col = lerp(col,tex##_y,ly);DC_UNFREE_VERTEX_ALPHA(col); + +#define DC_UVFREE_TEX_APPLY(col,tex,uv)\ + fixed4 tex##_z = tex2D(tex, uv##_uv_raw_z);\ + fixed4 tex##_x = tex2D(tex, uv##_uv_raw_x);\ + fixed4 tex##_y = tex2D(tex, uv##_uv_raw_y);\ + col = lerp(tex##_z,tex##_x,lz);\ + col = lerp(col,tex##_y,ly); + +//#define DC_UVFREE_NORMAL_APPLY(col,tex,bump)\ +// fixed3 bump##_z = UnpackNormal(tex2Dlod(bump, tex##_uv_z));\ +// fixed3 bump##_x = UnpackNormal(tex2Dlod(bump, tex##_uv_x));\ +// fixed3 bump##_y = UnpackNormal(tex2Dlod(bump, tex##_uv_y));\ +// col = lerp(bump##_z,bump##_x,lz);\ +// col = lerp(col,bump##_y,ly); + +#define DC_UVFREE_SCALE_NORMAL_APPLY(col,tex,uv,scale)\ + half3 tex##_n_z = UnpackScaleNormal(tex2Dlod(tex, uv##_uv_z),scale);\ + half3 tex##_n_x = UnpackScaleNormal(tex2Dlod(tex, uv##_uv_x),scale);\ + half3 tex##_n_y = UnpackScaleNormal(tex2Dlod(tex, uv##_uv_y),scale);\ + col = lerp(tex##_n_z,tex##_n_x,lz);\ + col = lerp(col,tex##_n_y,ly); + +#define DC_UVFREE_METALLICGLOSS_APPLY(col,tex,uv)\ + half2 tex##_m_z = tex2Dlod(tex, uv##_uv_z).ra;\ + half2 tex##_m_x = tex2Dlod(tex, uv##_uv_x).ra;\ + half2 tex##_m_y = tex2Dlod(tex, uv##_uv_y).ra;\ + col = lerp(tex##_m_z,tex##_m_x,lz);\ + col = lerp(col,tex##_m_y,ly); + +#define DC_UVFREE_OCC_APPLY(col,tex,uv)\ + half tex##_o_z = tex2Dlod(tex, uv##_uv_z).r;\ + half tex##_o_x = tex2Dlod(tex, uv##_uv_x).r;\ + half tex##_o_y = tex2Dlod(tex, uv##_uv_y).r;\ + col = lerp(tex##_o_z,tex##_o_x,lz);\ + col = lerp(col,tex##_o_y,ly); + +#define _DC_UVFREE_POWER(b,power) clamp((b-((1-power)+0.1)/1.1)*5,0,1) + +// Y +#define DC_UVFREE_VALUE_Y(col,input_col,power)\ + col = lerp(col,input_col,_DC_UVFREE_POWER(blend.y,(power*input_col.a))); + +#define DC_UVFREE_LERP_RATIO_Y(col,input_col,power,r)\ + r = _DC_UVFREE_POWER(blend.y,(power*input_col.a));\ + col = lerp(col,input_col,r); + +// X +#define DC_UVFREE_VALUE_X(col,input_col,power)\ + col = lerp(col,input_col,_DC_UVFREE_POWER(blend.x,(power*input_col.a))); + +#define DC_UVFREE_LERP_RATIO_X(col,input_col,power,r)\ + r = _DC_UVFREE_POWER(blend.x,(power*input_col.a));\ + col = lerp(col,input_col,r); + +// Z +#define DC_UVFREE_VALUE_Z(col,input_col,power)\ + col = lerp(col,input_col,_DC_UVFREE_POWER(blend.z,(power*input_col.a))); + +#define DC_UVFREE_LERP_RATIO_Z(col,input_col,power,r)\ + r = _DC_UVFREE_POWER(blend.z,(power*input_col.a));\ + col = lerp(col,input_col,r); + +#define DC_UVFREE_LERP(col,input_col,r) col = lerp(col,input_col,r); \ No newline at end of file diff --git a/Shaders/Core/UVFreeMain.cginc.meta b/Shaders/Core/UVFreeMain.cginc.meta new file mode 100644 index 0000000..d09501a --- /dev/null +++ b/Shaders/Core/UVFreeMain.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5920e2b8d20bf4aee8053543654569e6 +timeCreated: 1474189778 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeStandard.cginc b/Shaders/Core/UVFreeStandard.cginc new file mode 100644 index 0000000..edbe902 --- /dev/null +++ b/Shaders/Core/UVFreeStandard.cginc @@ -0,0 +1,174 @@ +uniform sampler2D _MainTex; +uniform half4 _MainTex_ST; +uniform fixed4 _Color; + +uniform half _Glossiness; +uniform half _GlossinessTop; +uniform half _GlossinessBottom; + +uniform float _Top; +uniform float _Bottom; + +uniform float _PowerTop; +uniform fixed4 _ColorTop; +uniform sampler2D _MainTexTop; +uniform fixed4 _MainTexTop_ST; +uniform half _ShininessTop; +uniform sampler2D _BumpMapTop; +uniform half _BumpScaleTop; + +uniform float _PowerBottom; +uniform fixed4 _ColorBottom; +uniform sampler2D _MainTexBottom; +uniform fixed4 _MainTexBottom_ST; +uniform half _ShininessBottom; +uniform sampler2D _BumpMapBottom; +uniform half _BumpScaleBottom; + +struct Input { + float4 vertex; + half3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout UV_FREE_STANDARD_OUTPUT o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = _Color; + DC_UVFREE_UV_APPLY(i,_MainTex) + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + fixed3 n = fixed3(0.5,0.5,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + DC_UVFREE_MS + DC_UVFREE_OCC + + // X + // #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + // #if _UVFREE_UP_LEFT + if(_Top==3){ + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + DC_UVFREE_MS_UP + DC_UVFREE_OCC_UP + } + // #endif + } else { + // #if _UVFREE_DOWN_RIGHT + if(_Bottom==3){ + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + DC_UVFREE_MS_DOWN + DC_UVFREE_OCC_DOWN + } + // #endif + } + // #endif + // Z + // #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + // #if _UVFREE_UP_FRONT + if(_Top==2){ + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + DC_UVFREE_MS_UP + DC_UVFREE_OCC_UP + } + // #endif + } else { + // #if _UVFREE_DOWN_BACK + if(_Bottom==2){ + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + DC_UVFREE_MS_DOWN + DC_UVFREE_OCC_DOWN + } + // #endif + } + // #endif + // Y + // #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0) + { + // #if _UVFREE_UP_TOP + if(_Top==1){ + fixed4 top_c = _ColorTop;half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + DC_UVFREE_MS_UP + DC_UVFREE_OCC_UP + } + // #endif + + } else { + + // #if _UVFREE_DOWN_BOTTOM + if(_Bottom==1){ + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + DC_UVFREE_MS_DOWN + DC_UVFREE_OCC_DOWN + } + // #endif + } + // #endif + + DC_UVFREE_FINAL(i,c.rgb) + DC_UVFREE_APPLY_MS + // DC_UVFREE_APPLY_OCC + o.Albedo = c.rgb; + o.Normal = n.rgb; + o.Alpha = c.a; +} \ No newline at end of file diff --git a/Shaders/Core/UVFreeStandard.cginc.meta b/Shaders/Core/UVFreeStandard.cginc.meta new file mode 100644 index 0000000..a8362ec --- /dev/null +++ b/Shaders/Core/UVFreeStandard.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1bdfad89cd8c84176b9dcb4630bb478b +timeCreated: 1472955885 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeStandardMetallic.cginc b/Shaders/Core/UVFreeStandardMetallic.cginc new file mode 100644 index 0000000..1fea3f0 --- /dev/null +++ b/Shaders/Core/UVFreeStandardMetallic.cginc @@ -0,0 +1,42 @@ +uniform half _Metallic; +uniform sampler2D _MetallicGlossMap; +uniform half _MetallicTop; +uniform sampler2D _MetallicGlossMapTop; +uniform half _MetallicBottom; +uniform sampler2D _MetallicGlossMapBottom; + +#define UV_FREE_STANDARD_OUTPUT SurfaceOutputStandard + +#if _METALLICGLOSSMAP + #define DC_UVFREE_MS\ + fixed2 mg = half2(_Metallic, _Glossiness);\ + DC_UVFREE_METALLICGLOSS_APPLY(mg,_MetallicGlossMap,_MainTex) +#else + #define DC_UVFREE_MS fixed2 mg = half2(_Metallic, _Glossiness); +#endif + +#if _METALLICGLOSSMAP_TOP + #define DC_UVFREE_MS_UP\ + half2 top_mg = half2(_MetallicTop, _GlossinessTop);\ + DC_UVFREE_METALLICGLOSS_APPLY(top_mg,_MetallicGlossMapTop,_MainTexTop)\ + DC_UVFREE_LERP(mg,top_mg,ratio) +#else + #define DC_UVFREE_MS_UP\ + half2 top_mg = half2(_MetallicTop, _GlossinessTop);\ + DC_UVFREE_LERP(mg,top_mg,ratio) +#endif + +#if _METALLICGLOSSMAP_BOTTOM + #define DC_UVFREE_MS_DOWN\ + half2 bottom_mg = half2(_MetallicBottom, _GlossinessBottom);\ + DC_UVFREE_METALLICGLOSS_APPLY(bottom_mg,_MetallicGlossMapBottom,_MainTexBottom)\ + DC_UVFREE_LERP(mg,bottom_mg,ratio) +#else + #define DC_UVFREE_MS_DOWN\ + half2 bottom_mg = half2(_MetallicBottom, _GlossinessBottom);\ + DC_UVFREE_LERP(mg,bottom_mg,ratio) +#endif + +#define DC_UVFREE_APPLY_MS\ + o.Metallic = mg.x;\ + o.Smoothness = mg.y; \ No newline at end of file diff --git a/Shaders/Core/UVFreeStandardMetallic.cginc.meta b/Shaders/Core/UVFreeStandardMetallic.cginc.meta new file mode 100644 index 0000000..1fc83ce --- /dev/null +++ b/Shaders/Core/UVFreeStandardMetallic.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8e86631cf35c04caa91d72cb04c42853 +timeCreated: 1474208752 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeStandardNoOcc.cginc b/Shaders/Core/UVFreeStandardNoOcc.cginc new file mode 100644 index 0000000..630d1b6 --- /dev/null +++ b/Shaders/Core/UVFreeStandardNoOcc.cginc @@ -0,0 +1,4 @@ +#define DC_UVFREE_OCC +#define DC_UVFREE_OCC_UP +#define DC_UVFREE_OCC_DOWN +#define DC_UVFREE_APPLY_OCC \ No newline at end of file diff --git a/Shaders/Core/UVFreeStandardNoOcc.cginc.meta b/Shaders/Core/UVFreeStandardNoOcc.cginc.meta new file mode 100644 index 0000000..3953286 --- /dev/null +++ b/Shaders/Core/UVFreeStandardNoOcc.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe2cae79d143c473396a6c60110209f8 +timeCreated: 1474206850 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeStandardOcc.cginc b/Shaders/Core/UVFreeStandardOcc.cginc new file mode 100644 index 0000000..17227af --- /dev/null +++ b/Shaders/Core/UVFreeStandardOcc.cginc @@ -0,0 +1,25 @@ +uniform half _OcclusionStrength; +uniform sampler2D _OcclusionMap; +uniform half _OcclusionStrengthTop; +uniform sampler2D _OcclusionMapTop; +uniform half _OcclusionStrengthBottom; +uniform sampler2D _OcclusionMapBottom; + +#define DC_UVFREE_OCC\ + half oc = 1;\ + DC_UVFREE_OCC_APPLY(oc,_OcclusionMap,_MainTex)\ + oc=lerp(1,oc,_OcclusionStrength); + +#define DC_UVFREE_OCC_UP\ + half top_occ = 1;\ + DC_UVFREE_OCC_APPLY(top_occ,_OcclusionMapTop,_MainTexTop)\ + top_occ=lerp(1,top_occ,_OcclusionStrengthTop);\ + DC_UVFREE_LERP(oc,top_occ,ratio); + +#define DC_UVFREE_OCC_DOWN\ + half bottom_occ = 1;\ + DC_UVFREE_OCC_APPLY(bottom_occ,_OcclusionMapBottom,_MainTexBottom);\ + bottom_occ=lerp(1,bottom_occ,_OcclusionStrengthBottom);\ + DC_UVFREE_LERP(oc,bottom_occ,ratio); + +#define DC_UVFREE_APPLY_OCC o.Occlusion=oc; \ No newline at end of file diff --git a/Shaders/Core/UVFreeStandardOcc.cginc.meta b/Shaders/Core/UVFreeStandardOcc.cginc.meta new file mode 100644 index 0000000..72c8f54 --- /dev/null +++ b/Shaders/Core/UVFreeStandardOcc.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b75fa804389a44273bfffa9cfca02662 +timeCreated: 1474206850 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeStandardProjector.cginc b/Shaders/Core/UVFreeStandardProjector.cginc new file mode 100644 index 0000000..bde4292 --- /dev/null +++ b/Shaders/Core/UVFreeStandardProjector.cginc @@ -0,0 +1,166 @@ +uniform sampler2D _MainTex; +uniform half4 _MainTex_ST; +uniform fixed4 _Color; + +uniform half _Glossiness; +uniform half _GlossinessTop; +uniform half _GlossinessBottom; + +uniform float _Top; +uniform float _Bottom; + +uniform float _PowerTop; +uniform fixed4 _ColorTop; +uniform sampler2D _MainTexTop; +uniform fixed4 _MainTexTop_ST; +uniform half _ShininessTop; +uniform sampler2D _BumpMapTop; +uniform half _BumpScaleTop; + +uniform float _PowerBottom; +uniform fixed4 _ColorBottom; +uniform sampler2D _MainTexBottom; +uniform fixed4 _MainTexBottom_ST; +uniform half _ShininessBottom; +uniform sampler2D _BumpMapBottom; +uniform half _BumpScaleBottom; + +uniform sampler2D _ProjectorTex; +uniform sampler2D _ProjectorFalloffTex; +uniform float4x4 unity_Projector; +uniform float4x4 unity_ProjectorClip; + +struct Input { + float4 vertex; + half3 objNormal; + DC_UVFREE_WORLD_POS + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout UV_FREE_STANDARD_OUTPUT o) { + + DC_UVFREE_SETUP(i.objNormal); + + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(mul (unity_Projector, i.vertex))); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(mul (unity_ProjectorClip, i.vertex))); + + fixed4 c = _Color; + DC_UVFREE_UV_APPLY(i,_MainTex) + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + fixed3 n = fixed3(0.5,0.5,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + DC_UVFREE_MS + DC_UVFREE_OCC + + // X + if(uv_normal.x>0){ + if(_Top==3){ + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + DC_UVFREE_MS_UP + DC_UVFREE_OCC_UP + } + } else { + if(_Bottom==3){ + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + DC_UVFREE_MS_DOWN + DC_UVFREE_OCC_DOWN + } + } + // Z + if(uv_normal.z>0){ + if(_Top==2){ + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + DC_UVFREE_MS_UP + DC_UVFREE_OCC_UP + } + } else { + if(_Bottom==2){ + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + DC_UVFREE_MS_DOWN + DC_UVFREE_OCC_DOWN + } + } + // Y + if(uv_normal.y>0) + { + if(_Top==1){ + fixed4 top_c = _ColorTop;half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + DC_UVFREE_MS_UP + DC_UVFREE_OCC_UP + } + } else { + if(_Bottom==1){ + fixed4 bottom_c = fixed4(1,1,1,1); + float ratio=1; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + DC_UVFREE_MS_DOWN + DC_UVFREE_OCC_DOWN + } + } + + + DC_UVFREE_FINAL(i,c.rgb) + DC_UVFREE_APPLY_MS + DC_UVFREE_APPLY_OCC + + float pa = projectorColor.a*projectorFalloff.a; + + o.Normal = n.rgb; + o.Albedo = c.rgb; + o.Alpha = pa*c.a; +} \ No newline at end of file diff --git a/Shaders/Core/UVFreeStandardProjector.cginc.meta b/Shaders/Core/UVFreeStandardProjector.cginc.meta new file mode 100644 index 0000000..281950e --- /dev/null +++ b/Shaders/Core/UVFreeStandardProjector.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: afe3220d5591d4d70aab1e0a422277af +timeCreated: 1472955885 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeStandardSpecular.cginc b/Shaders/Core/UVFreeStandardSpecular.cginc new file mode 100644 index 0000000..ab2a0fa --- /dev/null +++ b/Shaders/Core/UVFreeStandardSpecular.cginc @@ -0,0 +1,45 @@ +//uniform half3 _SpecColor; +uniform sampler2D _SpecGlossMap; +uniform half3 _SpecColorTop; +uniform sampler2D _SpecGlossMapTop; +uniform half3 _SpecColorBottom; +uniform sampler2D _SpecGlossMapBottom; + +#define UV_FREE_STANDARD_OUTPUT SurfaceOutputStandardSpecular + +#if _SPECGLOSSMAP + #define DC_UVFREE_MS\ + half4 sg = fixed4(_SpecColor.rgb, _Glossiness);\ + DC_UVFREE_TEX_APPLY(sg,_SpecGlossMap,_MainTex) + +#else + #define DC_UVFREE_MS half4 sg = fixed4(_SpecColor.rgb, _Glossiness); +#endif + +#if _SPECGLOSSMAP_TOP + #define DC_UVFREE_MS_UP\ + half4 top_sg = half4(_SpecColorTop.rgb, _GlossinessTop);\ + DC_UVFREE_TEX_APPLY_LOD(top_sg,_SpecGlossMapTop,_MainTexTop)\ + DC_UVFREE_LERP(sg,top_sg,ratio); +#else + #define DC_UVFREE_MS_UP\ + half4 top_sg = half4(_SpecColorTop.rgb, _GlossinessTop);\ + DC_UVFREE_LERP(sg,top_sg,ratio); +#endif + +#if _SPECGLOSSMAP_BOTTOM + #define DC_UVFREE_MS_DOWN\ + half4 bottom_sg = half4(_SpecColorBottom.rgb, _GlossinessBottom);\ + DC_UVFREE_TEX_APPLY_LOD(bottom_sg,_SpecGlossMapBottom,_MainTexBottom)\ + DC_UVFREE_LERP(sg,bottom_sg,ratio); + +#else + #define DC_UVFREE_MS_DOWN\ + half4 bottom_sg = half4(_SpecColorBottom.rgb, _GlossinessBottom);\ + DC_UVFREE_LERP(sg,bottom_sg,ratio); + +#endif + +#define DC_UVFREE_APPLY_MS\ + o.Specular = sg.rgb;\ + o.Smoothness = sg.a; \ No newline at end of file diff --git a/Shaders/Core/UVFreeStandardSpecular.cginc.meta b/Shaders/Core/UVFreeStandardSpecular.cginc.meta new file mode 100644 index 0000000..463815b --- /dev/null +++ b/Shaders/Core/UVFreeStandardSpecular.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 51c2db575c9454252a7e1d696e55730b +timeCreated: 1474250610 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Core/UVFreeVertexColor.cginc b/Shaders/Core/UVFreeVertexColor.cginc new file mode 100644 index 0000000..059506c --- /dev/null +++ b/Shaders/Core/UVFreeVertexColor.cginc @@ -0,0 +1,31 @@ +#if _UVFREE_VERTEX_COLOR + uniform half _VertexColorPower; + #define DC_UVFREE_VCOLOR fixed4 v_color; + #define DC_UVFREE_INPUT \ + fixed4 color : COLOR; + #define DC_UVFREE_OUPUT(id1,id2)\ + float4 vertex : VERTEX;\ + _DC_UVFREE_WORLD_POS\ + half3 objNormal : NORMAL;\ + fixed4 v_color : COLOR; + #define DC_UVFREE_TRANSFER(output,tex)\ + output.vertex = v.vertex;\ + _DC_UVFREE_WORLD_POS_TRANSFER(output)\ + output.objNormal = v.normal;\ + output.v_color=lerp(fixed4(1,1,1,1),v.color,_VertexColorPower); + #define DC_UNFREE_VERTEX_ALPHA(input_color) input_color.a*=i.v_color.a; + #define DC_UVFREE_FINAL(input,col) col.rgb*=input.v_color.rgb; +#else + #define DC_UVFREE_VCOLOR + #define DC_UVFREE_INPUT + #define DC_UVFREE_OUPUT(id1,id2)\ + float4 vertex : VERTEX;\ + _DC_UVFREE_WORLD_POS\ + half3 objNormal : NORMAL; + #define DC_UVFREE_TRANSFER(output,tex)\ + output.vertex = v.vertex;\ + _DC_UVFREE_WORLD_POS_TRANSFER(output)\ + output.objNormal = v.normal; + #define DC_UNFREE_VERTEX_ALPHA + #define DC_UVFREE_FINAL(input,col) +#endif diff --git a/Shaders/Core/UVFreeVertexColor.cginc.meta b/Shaders/Core/UVFreeVertexColor.cginc.meta new file mode 100644 index 0000000..b798500 --- /dev/null +++ b/Shaders/Core/UVFreeVertexColor.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4f8dc8469530c4ff79615b2161d039d5 +timeCreated: 1474187647 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile.meta b/Shaders/Mobile.meta new file mode 100644 index 0000000..c2b6bc6 --- /dev/null +++ b/Shaders/Mobile.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ec5e580f3463e45d0ba493d040490eaf +folderAsset: yes +timeCreated: 1472184018 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight-Projector.shader b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight-Projector.shader new file mode 100644 index 0000000..aa7fdd1 --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight-Projector.shader @@ -0,0 +1,221 @@ +// Upgrade NOTE: replaced '_Projector' with 'unity_Projector' +// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip' + +// Simplified Bumped Specular shader. Differences from regular Bumped Specular one: +// - no Main Color nor Specular Color +// - specular lighting directions are approximated per vertex +// - writes zero to alpha channel +// - Normalmap uses Tiling/Offset of the Base texture +// - no Deferred Lighting support +// - no Lightmap support +// - fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "Digicrafts/UV-Free/Mobile/Projector/Bumped Specular (1 Directional Light)" { +Properties { + _Shininess ("Shininess", Range (0.03, 1)) = 0.078125 + _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpScale("Scale", Float) = 1.0 + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + + _ShininessTop ("_ShininessTop", Range (0.03, 1)) = 0.078125 + _ShininessBottom ("_ShininessBottom", Range (0.03, 1)) = 0.078125 + + _ProjectorTex ("Projector Texture", 2D) = "white" {} + _ProjectorFalloffTex ("Falloff Texture", 2D) = "white" {} + +} +SubShader { +Tags { "RenderType"="Transparent" "Queue"="Transparent"} +ZWrite Off +ColorMask RGB +Blend SrcAlpha OneMinusSrcAlpha +Offset -1, -1 + +CGPROGRAM +#pragma surface surf MobileBlinnPhong exclude_path:prepass nolightmap noforwardadd halfasview novertexlights vertex:vert alpha +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +#include "../Core/UVFreeCommon.cginc" + +uniform sampler2D _MainTex; +uniform fixed4 _MainTex_ST; +uniform fixed4 _Color; + +uniform sampler2D _ProjectorTex; +uniform sampler2D _ProjectorFalloffTex; +uniform float4x4 unity_Projector; +uniform float4x4 unity_ProjectorClip; + +inline fixed4 LightingMobileBlinnPhong (SurfaceOutput s, fixed3 lightDir, fixed3 halfDir, fixed atten) +{ + fixed diff = max (0, dot (s.Normal, lightDir)); + fixed nh = max (0, dot (s.Normal, halfDir)); + fixed spec = pow (nh, s.Specular*128) * s.Gloss; + + fixed4 c; + c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten; + c.a=s.Alpha; + return c; +} + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(mul (unity_Projector, i.vertex))); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(mul (unity_ProjectorClip, i.vertex))); + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_TEX_APPLY(c,_MainTex,_MainTex); + c*=_Color; + + fixed3 n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + o.Specular = _Shininess; + +// Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + + float pa = projectorColor.a*projectorFalloff.a; + + o.Albedo = c.rgb; + o.Gloss = c.a; + o.Alpha = pa*c.a; + o.Normal = n.rgb; +} +ENDCG +} +FallBack "Mobile/VertexLit" +CustomEditor "UVFreeMobileShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight-Projector.shader.meta b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight-Projector.shader.meta new file mode 100644 index 0000000..24a5fdf --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight-Projector.shader.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: e159fc3483f974f68a54e394d5d0eaa2 +timeCreated: 1476342663 +licenseType: Store +ShaderImporter: + defaultTextures: + - _MainTex: {instanceID: 0} + - _BumpMap: {instanceID: 0} + - _MainTexTop: {instanceID: 0} + - _MainTexBottom: {instanceID: 0} + - _BumpMapTop: {instanceID: 0} + - _BumpMapBottom: {instanceID: 0} + - _ProjectorTex: {fileID: 2800000, guid: 995ffc3e6c2e34c7aab060fd76bd4359, type: 3} + - _ProjectorFalloffTex: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight.shader b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight.shader new file mode 100644 index 0000000..5fc7dee --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight.shader @@ -0,0 +1,201 @@ +// Simplified Bumped Specular shader. Differences from regular Bumped Specular one: +// - no Main Color nor Specular Color +// - specular lighting directions are approximated per vertex +// - writes zero to alpha channel +// - Normalmap uses Tiling/Offset of the Base texture +// - no Deferred Lighting support +// - no Lightmap support +// - supports ONLY 1 directional light. Other lights are completely ignored. + +Shader "Digicrafts/UV-Free/Mobile/Bumped Specular (1 Directional Light)" { +Properties { + _Shininess ("Shininess", Range (0.03, 1)) = 0.078125 + _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpScale("Scale", Float) = 1.0 + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + + _ShininessTop ("_ShininessTop", Range (0.03, 1)) = 0.078125 + _ShininessBottom ("_ShininessBottom", Range (0.03, 1)) = 0.078125 + +} +SubShader { + Tags { "RenderType"="Opaque" } + LOD 250 + +CGPROGRAM +#pragma surface surf MobileBlinnPhong exclude_path:prepass nolightmap noforwardadd halfasview novertexlights vertex:vert +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +#include "../Core/UVFreeCommon.cginc" + +uniform sampler2D _MainTex; +uniform fixed4 _MainTex_ST; +uniform fixed4 _Color; + +inline fixed4 LightingMobileBlinnPhong (SurfaceOutput s, fixed3 lightDir, fixed3 halfDir, fixed atten) +{ + fixed diff = max (0, dot (s.Normal, lightDir)); + fixed nh = max (0, dot (s.Normal, halfDir)); + fixed spec = pow (nh, s.Specular*128) * s.Gloss; + + fixed4 c; + c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten; + UNITY_OPAQUE_ALPHA(c.a); + return c; +} + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_TEX_APPLY(c,_MainTex,_MainTex); + c*=_Color; + + fixed3 n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + o.Specular = _Shininess; + +// Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + o.Albedo = c.rgb; + o.Alpha = c.a; + o.Gloss = c.a; + o.Normal = n.rgb; +} +ENDCG +} +FallBack "Mobile/VertexLit" +CustomEditor "UVFreeMobileShaderGUI" +} diff --git a/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight.shader.meta b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight.shader.meta new file mode 100644 index 0000000..7f97baf --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec-1DirectionalLight.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 91939e5f0d6b94e80bda2738690583bc +timeCreated: 1472188367 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-BumpSpec-Projector.shader b/Shaders/Mobile/Mobile-BumpSpec-Projector.shader new file mode 100644 index 0000000..678bf8a --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec-Projector.shader @@ -0,0 +1,223 @@ +// Upgrade NOTE: replaced '_Projector' with 'unity_Projector' +// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip' + +// Simplified Bumped Specular shader. Differences from regular Bumped Specular one: +// - no Main Color nor Specular Color +// - specular lighting directions are approximated per vertex +// - writes zero to alpha channel +// - Normalmap uses Tiling/Offset of the Base texture +// - no Deferred Lighting support +// - no Lightmap support +// - fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "Digicrafts/UV-Free/Mobile/Projector/Bumped Specular" { +Properties { + _Shininess ("Shininess", Range (0.03, 1)) = 0.078125 + _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpScale("Scale", Float) = 1.0 + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + + _ShininessTop ("_ShininessTop", Range (0.03, 1)) = 0.078125 + _ShininessBottom ("_ShininessBottom", Range (0.03, 1)) = 0.078125 + + _ProjectorTex ("Projector Texture", 2D) = "white" {} + _ProjectorFalloffTex ("Falloff Texture", 2D) = "white" {} + +} +SubShader { +Tags { "RenderType"="Transparent" "Queue"="Transparent"} +ZWrite Off +ColorMask RGB +Blend SrcAlpha OneMinusSrcAlpha +Offset -1, -1 + +CGPROGRAM +#pragma surface surf MobileBlinnPhong exclude_path:prepass nolightmap noforwardadd halfasview interpolateview vertex:vert alpha +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +//#pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 +#include "../Core/UVFreeCommon.cginc" + +uniform sampler2D _MainTex; +uniform fixed4 _MainTex_ST; +uniform fixed4 _Color; + +uniform sampler2D _ProjectorTex; +uniform sampler2D _ProjectorFalloffTex; +uniform float4x4 unity_Projector; +uniform float4x4 unity_ProjectorClip; + +inline fixed4 LightingMobileBlinnPhong (SurfaceOutput s, fixed3 lightDir, fixed3 halfDir, fixed atten) +{ + fixed diff = max (0, dot (s.Normal, lightDir)); + fixed nh = max (0, dot (s.Normal, halfDir)); + fixed spec = pow (nh, s.Specular*128) * s.Gloss; + + fixed4 c; + c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten; + c.a=s.Alpha; + return c; +} + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(mul (unity_Projector, i.vertex))); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(mul (unity_ProjectorClip, i.vertex))); + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_TEX_APPLY(c,_MainTex,_MainTex); + c*=_Color; + + fixed3 n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + o.Specular = _Shininess; + +// Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + + float pa = projectorColor.a*projectorFalloff.a; + + // o.Specular *=pc.a; + o.Albedo = c.rgb; + o.Gloss = c.a; + o.Alpha = pa*c.a; + o.Normal = n.rgb; +} +ENDCG +} +FallBack "Mobile/VertexLit" +CustomEditor "UVFreeMobileShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Mobile/Mobile-BumpSpec-Projector.shader.meta b/Shaders/Mobile/Mobile-BumpSpec-Projector.shader.meta new file mode 100644 index 0000000..9897a59 --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec-Projector.shader.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: fe9cdece8f8984a6a869eb346d92a995 +timeCreated: 1476342663 +licenseType: Store +ShaderImporter: + defaultTextures: + - _MainTex: {instanceID: 0} + - _BumpMap: {instanceID: 0} + - _MainTexTop: {instanceID: 0} + - _MainTexBottom: {instanceID: 0} + - _BumpMapTop: {instanceID: 0} + - _BumpMapBottom: {instanceID: 0} + - _ProjectorTex: {fileID: 2800000, guid: 995ffc3e6c2e34c7aab060fd76bd4359, type: 3} + - _ProjectorFalloffTex: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-BumpSpec.shader b/Shaders/Mobile/Mobile-BumpSpec.shader new file mode 100644 index 0000000..eed4a2b --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec.shader @@ -0,0 +1,202 @@ +// Simplified Bumped Specular shader. Differences from regular Bumped Specular one: +// - no Main Color nor Specular Color +// - specular lighting directions are approximated per vertex +// - writes zero to alpha channel +// - Normalmap uses Tiling/Offset of the Base texture +// - no Deferred Lighting support +// - no Lightmap support +// - fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "Digicrafts/UV-Free/Mobile/Bumped Specular" { +Properties { + _Shininess ("Shininess", Range (0.03, 1)) = 0.078125 + _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpScale("Scale", Float) = 1.0 + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + + _ShininessTop ("_ShininessTop", Range (0.03, 1)) = 0.078125 + _ShininessBottom ("_ShininessBottom", Range (0.03, 1)) = 0.078125 + +} +SubShader { + Tags { "RenderType"="Opaque" } + LOD 250 + +CGPROGRAM +#pragma surface surf MobileBlinnPhong exclude_path:prepass nolightmap noforwardadd halfasview interpolateview vertex:vert +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +//#pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 +#include "../Core/UVFreeCommon.cginc" + +uniform sampler2D _MainTex; +uniform fixed4 _MainTex_ST; +uniform fixed4 _Color; + +inline fixed4 LightingMobileBlinnPhong (SurfaceOutput s, fixed3 lightDir, fixed3 halfDir, fixed atten) +{ + fixed diff = max (0, dot (s.Normal, lightDir)); + fixed nh = max (0, dot (s.Normal, halfDir)); + fixed spec = pow (nh, s.Specular*128) * s.Gloss; + + fixed4 c; + c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * atten; + UNITY_OPAQUE_ALPHA(c.a); + return c; +} + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_TEX_APPLY(c,_MainTex,_MainTex); + c*=_Color; + + fixed3 n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + o.Specular = _Shininess; + +// Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessTop,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + DC_UVFREE_LERP(o.Specular,_ShininessBottom,ratio); + + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + o.Albedo = c.rgb; + o.Gloss = c.a; + o.Alpha = c.a; + o.Normal = n.rgb; +} +ENDCG +} +FallBack "Mobile/VertexLit" +CustomEditor "UVFreeMobileShaderGUI" +} diff --git a/Shaders/Mobile/Mobile-BumpSpec.shader.meta b/Shaders/Mobile/Mobile-BumpSpec.shader.meta new file mode 100644 index 0000000..8c32f07 --- /dev/null +++ b/Shaders/Mobile/Mobile-BumpSpec.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3dd76ae3f716f45a5aba69a756317ccf +timeCreated: 1472188367 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-Bumped-Projector.shader b/Shaders/Mobile/Mobile-Bumped-Projector.shader new file mode 100644 index 0000000..21e10d5 --- /dev/null +++ b/Shaders/Mobile/Mobile-Bumped-Projector.shader @@ -0,0 +1,184 @@ +Shader "Digicrafts/UV-Free/Mobile/Projector/Bumped Diffuse" { +Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpScale("Scale", Float) = 1.0 + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + + _ProjectorTex ("Projector Texture", 2D) = "white" {} + _ProjectorFalloffTex ("Falloff Texture", 2D) = "white" {} + +} +SubShader { +Tags { "RenderType"="Transparent" "Queue"="Transparent"} +ZWrite Off +ColorMask RGB +Blend SrcAlpha OneMinusSrcAlpha +Offset -1, -1 + +CGPROGRAM +#pragma surface surf Lambert noforwardadd vertex:vert alpha +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +//#pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 +#include "../Core/UVFreeCommon.cginc" + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +uniform sampler2D _MainTex; +uniform half4 _MainTex_ST; +uniform fixed4 _Color; + +uniform sampler2D _ProjectorTex; +uniform sampler2D _ProjectorFalloffTex; +uniform float4x4 unity_Projector; +uniform float4x4 unity_ProjectorClip; + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(mul (unity_Projector, i.vertex))); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(mul (unity_ProjectorClip, i.vertex))); + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex) + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + fixed3 n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFTLEFT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + + float pa = projectorColor.a*projectorFalloff.a; + + o.Normal = n.rgb;//*pc.a;//lerp(float3(0,0,1), n.rgb, pa); + o.Albedo = c.rgb; + o.Alpha = pa*c.a; +} +ENDCG +} +CustomEditor "UVFreeMobileShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Mobile/Mobile-Bumped-Projector.shader.meta b/Shaders/Mobile/Mobile-Bumped-Projector.shader.meta new file mode 100644 index 0000000..9475a0d --- /dev/null +++ b/Shaders/Mobile/Mobile-Bumped-Projector.shader.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: d84ca1ee3f520440ea163a4cbf984a8a +timeCreated: 1476342618 +licenseType: Store +ShaderImporter: + defaultTextures: + - _MainTex: {instanceID: 0} + - _BumpMap: {instanceID: 0} + - _MainTexTop: {instanceID: 0} + - _MainTexBottom: {instanceID: 0} + - _BumpMapTop: {instanceID: 0} + - _BumpMapBottom: {instanceID: 0} + - _ProjectorTex: {fileID: 2800000, guid: 995ffc3e6c2e34c7aab060fd76bd4359, type: 3} + - _ProjectorFalloffTex: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-Bumped.shader b/Shaders/Mobile/Mobile-Bumped.shader new file mode 100644 index 0000000..a380a81 --- /dev/null +++ b/Shaders/Mobile/Mobile-Bumped.shader @@ -0,0 +1,173 @@ +// Simplified Bumped shader. Differences from regular Bumped one: +// - no Main Color +// - Normalmap uses Tiling/Offset of the Base texture +// - fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "Digicrafts/UV-Free/Mobile/Bumped Diffuse" { +Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpScale("Scale", Float) = 1.0 + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + +} +SubShader { + Tags { "RenderType"="Opaque" } + LOD 250 +//ZWrite On +CGPROGRAM +#pragma surface surf Lambert noforwardadd vertex:vert //alpha +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +//#pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 +#include "../Core/UVFreeCommon.cginc" + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +uniform sampler2D _MainTex; +uniform half4 _MainTex_ST; +uniform fixed4 _Color; + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex) + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + fixed3 n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(n,_BumpMap,_MainTex,_BumpScale); + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFTLEFT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_X(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_X(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Z(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Z(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_LERP_RATIO_Y(c,(top_c*_ColorTop),_PowerTop,ratio); + + fixed3 top_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(top_n,_BumpMapTop,_MainTexTop,_BumpScaleTop); + DC_UVFREE_LERP(n,top_n,ratio); + + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1);half ratio; + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_LERP_RATIO_Y(c,(bottom_c*_ColorBottom),_PowerBottom,ratio); + + fixed3 bottom_n = fixed3(1,1,1); + DC_UVFREE_SCALE_NORMAL_APPLY(bottom_n,_BumpMapBottom,_MainTexBottom,_BumpScaleBottom); + DC_UVFREE_LERP(n,bottom_n,ratio); + + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + o.Normal = n.rgb; + o.Albedo = c.rgb; + o.Alpha = c.a; +} +ENDCG +} +//FallBack "Mobile/Diffuse" +CustomEditor "UVFreeMobileShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Mobile/Mobile-Bumped.shader.meta b/Shaders/Mobile/Mobile-Bumped.shader.meta new file mode 100644 index 0000000..3997d45 --- /dev/null +++ b/Shaders/Mobile/Mobile-Bumped.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3c9e4b9b346884ab48e78836e56a62ad +timeCreated: 1472188367 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-Diffuse-Projector.shader b/Shaders/Mobile/Mobile-Diffuse-Projector.shader new file mode 100644 index 0000000..ec84eb9 --- /dev/null +++ b/Shaders/Mobile/Mobile-Diffuse-Projector.shader @@ -0,0 +1,151 @@ +// Upgrade NOTE: replaced '_Projector' with 'unity_Projector' +// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip' + +// Simplified Diffuse shader. Differences from regular Diffuse one: +// - no Main Color +// - fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "Digicrafts/UV-Free/Mobile/Projector/Diffuse" { +Properties { + + _MainTex ("Base (RGB)", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _ProjectorTex ("Projector Texture", 2D) = "white" {} + _ProjectorFalloffTex ("Falloff Texture", 2D) = "white" {} +} +SubShader { +Tags { "RenderType"="Transparent" "Queue"="Transparent"} +ZWrite Off +ColorMask RGB +Blend SrcAlpha OneMinusSrcAlpha +Offset -1, -1 + +CGPROGRAM +#pragma surface surf Lambert noforwardadd vertex:vert alpha +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +//#pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 +#include "../Core/UVFreeCommon.cginc" + +uniform sampler2D _MainTex; +uniform fixed4 _MainTex_ST; +uniform fixed4 _Color; + +uniform sampler2D _ProjectorTex; +uniform sampler2D _ProjectorFalloffTex; + +uniform float4x4 unity_Projector; +uniform float4x4 unity_ProjectorClip; + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(mul (unity_Projector, i.vertex))); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(mul (unity_ProjectorClip, i.vertex))); + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + float pa = projectorColor.a*projectorFalloff.a; + + DC_UVFREE_FINAL(i,c.rgb) + o.Albedo = c.rgb; + o.Alpha = pa*c.a; +} +ENDCG +} +Fallback "Mobile/VertexLit" +CustomEditor "UVFreeMobileShaderGUI" +} diff --git a/Shaders/Mobile/Mobile-Diffuse-Projector.shader.meta b/Shaders/Mobile/Mobile-Diffuse-Projector.shader.meta new file mode 100644 index 0000000..4cc1fae --- /dev/null +++ b/Shaders/Mobile/Mobile-Diffuse-Projector.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 668ce533ebee5410a831688de722cd9e +timeCreated: 1475643340 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Mobile/Mobile-Diffuse.shader b/Shaders/Mobile/Mobile-Diffuse.shader new file mode 100644 index 0000000..8725162 --- /dev/null +++ b/Shaders/Mobile/Mobile-Diffuse.shader @@ -0,0 +1,132 @@ +// Simplified Diffuse shader. Differences from regular Diffuse one: +// - no Main Color +// - fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "Digicrafts/UV-Free/Mobile/Diffuse" { +Properties { + + _MainTex ("Base (RGB)", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + +} +SubShader { + Tags { "RenderType"="Opaque" } + LOD 150 + +CGPROGRAM +#pragma surface surf Lambert noforwardadd vertex:vert alpha +#pragma target 3.0 + +#pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT +#pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR +//#pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 +#include "../Core/UVFreeCommon.cginc" + +uniform sampler2D _MainTex; +uniform fixed4 _MainTex_ST; +uniform fixed4 _Color; + +struct Input { + float4 vertex; + float3 objNormal; + DC_UVFREE_WORLD_POS + DC_UVFREE_VCOLOR + INTERNAL_DATA +}; + +void vert (inout appdata_full v, out Input o) { + UNITY_INITIALIZE_OUTPUT(Input,o); + DC_UVFREE_TRANSFER(o,_MainTex) +} + +void surf (Input i, inout SurfaceOutput o) { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + o.Albedo = c.rgb; + o.Alpha = c.a; +} +ENDCG +} +Fallback "Mobile/VertexLit" +CustomEditor "UVFreeMobileShaderGUI" +} diff --git a/Shaders/Mobile/Mobile-Diffuse.shader.meta b/Shaders/Mobile/Mobile-Diffuse.shader.meta new file mode 100644 index 0000000..d0d3ccb --- /dev/null +++ b/Shaders/Mobile/Mobile-Diffuse.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ec87b96573b3a4fd7ae638b09de431df +timeCreated: 1472184139 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Standard.meta b/Shaders/Standard.meta new file mode 100644 index 0000000..591bc54 --- /dev/null +++ b/Shaders/Standard.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3353f5a4d64fe4a0da20948b83f05255 +folderAsset: yes +timeCreated: 1472366651 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Standard/Standard.shader b/Shaders/Standard/Standard.shader new file mode 100644 index 0000000..fb74fe6 --- /dev/null +++ b/Shaders/Standard/Standard.shader @@ -0,0 +1,87 @@ +Shader "Digicrafts/UV-Free/Standard/Standard" { +Properties { + + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMap("Metallic", 2D) = "white" {} + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _GlossinessTop("Smoothness", Range(0.0, 1.0)) = 0.5 + [Gamma] _MetallicTop("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMapTop("Metallic", 2D) = "white" {} + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + + _GlossinessBottom("Smoothness", Range(0.0, 1.0)) = 0.5 + [Gamma] _MetallicBottom("Metallic", Range(0.0, 1.0)) = 0.0 + _MetallicGlossMapBottom("Metallic", 2D) = "white" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + +// _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0 +// _OcclusionMap("Occlusion", 2D) = "white" {} +// _OcclusionStrengthTop("Strength", Range(0.0, 1.0)) = 1.0 +// _OcclusionMapTop("Occlusion", 2D) = "white" {} +// _OcclusionStrengthBottom("Strength", Range(0.0, 1.0)) = 1.0 +// _OcclusionMapBottom("Occlusion", 2D) = "white" {} + + // Blending state + [HideInInspector] _Mode ("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 +} +SubShader { +Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } +LOD 300 +Blend [_SrcBlend] [_DstBlend] +ZWrite [_ZWrite] + +CGPROGRAM +#pragma surface surf Standard vertex:vert +#pragma target 3.0 + +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR + +// Standard shader feature variants +#pragma shader_feature _NORMALMAP +#pragma shader_feature _METALLICGLOSSMAP +#pragma shader_feature _METALLICGLOSSMAP_TOP +#pragma shader_feature _METALLICGLOSSMAP_BOTTOM + +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeVertexColor.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeStandardNoOcc.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeMain.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeStandardMetallic.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeStandard.cginc" + + +ENDCG +} +Fallback "Diffuse" +CustomEditor "UVFreeStandardShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Standard/Standard.shader.meta b/Shaders/Standard/Standard.shader.meta new file mode 100644 index 0000000..65950c1 --- /dev/null +++ b/Shaders/Standard/Standard.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 303251a2c62c040998add69284c481f0 +timeCreated: 1472637690 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Standard/StandardSpecular.shader b/Shaders/Standard/StandardSpecular.shader new file mode 100644 index 0000000..78e5abc --- /dev/null +++ b/Shaders/Standard/StandardSpecular.shader @@ -0,0 +1,78 @@ +Shader "Digicrafts/UV-Free/Standard/Standard (Specular)" { +Properties { + + _Color("Color", Color) = (1,1,1,1) + _MainTex("Albedo", 2D) = "white" {} + + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + + _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5 + _SpecColor("Specular", Color) = (0.2,0.2,0.2) + _SpecGlossMap("Specular", 2D) = "white" {} + + _BumpScale("Scale", Float) = 1.0 + _BumpMap("Normal Map", 2D) = "bump" {} + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _GlossinessTop("Smoothness", Range(0.0, 1.0)) = 0.5 + _SpecColorTop("Specular", Color) = (0.2,0.2,0.2) + _SpecGlossMapTop("Specular", 2D) = "white" {} + _BumpScaleTop("Scale", Float) = 1.0 + _BumpMapTop ("_BumpMapTop", 2D) = "bump" {} + + _GlossinessBottom("Smoothness", Range(0.0, 1.0)) = 0.5 + _SpecColorBottom("Specular", Color) = (0.2,0.2,0.2) + _SpecGlossMapBottom("Specular", 2D) = "white" {} + _BumpScaleBottom("Scale", Float) = 1.0 + _BumpMapBottom ("_BumpMapBottom", 2D) = "bump" {} + + // Blending state + [HideInInspector] _Mode ("__mode", Float) = 0.0 + [HideInInspector] _SrcBlend ("__src", Float) = 1.0 + [HideInInspector] _DstBlend ("__dst", Float) = 0.0 + [HideInInspector] _ZWrite ("__zw", Float) = 1.0 +} +SubShader { + Tags { "RenderType"="Opaque" "PerformanceChecks"="False" } + LOD 300 + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + +CGPROGRAM +#pragma surface surf StandardSpecular vertex:vert +#pragma target 3.0 + +#pragma shader_feature _UVFREE_WORLDSPACE +#pragma shader_feature _UVFREE_VERTEX_COLOR + +// Standard shader feature variants +#pragma shader_feature _NORMALMAP +#pragma shader_feature _SPECGLOSSMAP +#pragma shader_feature _SPECGLOSSMAP_TOP +#pragma shader_feature _SPECGLOSSMAP_BOTTOM + +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeVertexColor.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeStandardNoOcc.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeMain.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeStandardSpecular.cginc" +#include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeStandard.cginc" + +ENDCG +} +CustomEditor "UVFreeStandardShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Standard/StandardSpecular.shader.meta b/Shaders/Standard/StandardSpecular.shader.meta new file mode 100644 index 0000000..e6f2349 --- /dev/null +++ b/Shaders/Standard/StandardSpecular.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 93fe439b3f5ac447fb4ebb8ca3a00bc5 +timeCreated: 1472958171 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Toon.meta b/Shaders/Toon.meta new file mode 100644 index 0000000..a6a6707 --- /dev/null +++ b/Shaders/Toon.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8d3d20eb00a824621a0dfd301658e111 +folderAsset: yes +timeCreated: 1472216996 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Toon/ToonOutline-Projector.shader b/Shaders/Toon/ToonOutline-Projector.shader new file mode 100644 index 0000000..4c84371 --- /dev/null +++ b/Shaders/Toon/ToonOutline-Projector.shader @@ -0,0 +1,318 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Upgrade NOTE: replaced '_Projector' with 'unity_Projector' +// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip' + +Shader "Digicrafts/UV-Free/Toon/Outline-Projector" +{ + Properties + { + _MainTex ("_MainTex", 2D) = "white" {} + _Color ("_Color", Color) = (1,1,1,1) + // _OutlineColor ("_OutlineColor", Color) = (0,0,0,0) + // _OutlineWidth ("_OutlineWidth", Range (0, 10)) = 0.5 + [Toggle] _Shade ("Eanble", Float) = 1 + _ShadeTex ("_ShadeTex", CUBE) = "gray" {} + _ShadePower ("_ShadePower",Range(0,1)) = 1 + _ShadeColor ("_ShadeColor", Color) = (1,1,1,1) + [Toggle] _Shadow ("_Shadow", Float) = 0 + _ShadowPower ("_ShadowPower",Range(0,1)) = 0.2 + [Toggle] _Diffuse ("_Diffuse", Float) = 0 + _DiffusePower ("_DiffusePower",Range(0,1)) = 1 + [Toggle] _Ambient ("_Ambient", Float) = 0 + _AmbientPower ("_AmbientPower",Range(0,1)) = 1 + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _ProjectorTex ("Projector Texture", 2D) = "white" {} + _ProjectorFalloffTex ("Falloff Texture", 2D) = "white" {} + } + SubShader + { + // base + Pass + { + Name "BASE" + Tags { "RenderType"="Transparent" "Queue"="Transparent"} + ZWrite Off + ColorMask RGB + Blend SrcAlpha OneMinusSrcAlpha + Offset -1, -1 + LOD 100 + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + // make fog work + #pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight alpha + #pragma multi_compile_fog + #pragma shader_feature _DIFFUSE_ON + #pragma multi_compile _AMBIENT_ON + #pragma shader_feature _SHADOW_ON + #pragma shader_feature _SHADE_ON + + #include "UnityCG.cginc" + #include "UnityLightingCommon.cginc" + #include "AutoLight.cginc" + + #pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT + #pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT + #pragma shader_feature _UVFREE_WORLDSPACE + #pragma shader_feature _UVFREE_VERTEX_COLOR +// #pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 + #include "../Core/UVFreeCommon.cginc" + + sampler2D _MainTex; + float4 _MainTex_ST; + uniform fixed4 _Color; + + #if _DIFFUSE_ON + uniform fixed4 _DiffuseColor; + uniform float _DiffusePower; + #endif + + // #if _AMBIENT_ON + uniform float _AmbientPower; + // #endif + + #if _SHADOW_ON + uniform fixed4 _ShadowColor; + uniform fixed _ShadowPower; + #endif + + #if _SHADE_ON + samplerCUBE _ShadeTex; + uniform fixed _ShadePower; + uniform fixed _SpecToonEffectPower; + uniform fixed3 _ShadeColor; + #endif + + uniform sampler2D _ProjectorTex; + uniform sampler2D _ProjectorFalloffTex; + uniform float4x4 unity_Projector; + uniform float4x4 unity_ProjectorClip; + + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + DC_UVFREE_INPUT + }; + + struct v2f + { + float4 pos : SV_POSITION; + + #if _DIFFUSE_ON + fixed3 diff : COLOR1; + #endif + + // #if _AMBIENT_ON + fixed3 ambient : COLOR2; + // #endif + + #if _SHADOW_ON + SHADOW_COORDS(3) + #endif + + #if _SHADE_ON + float3 cubenormal : NORMAL1; + #endif + + UNITY_FOG_COORDS(5) + DC_UVFREE_OUPUT(6,7) + + float4 projector : TEXCOORD8; + float4 projectorFalloff : TEXCOORD9; + + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + + DC_UVFREE_TRANSFER(o,_MainTex) + + #if _SHADE_ON + o.cubenormal = mul (UNITY_MATRIX_MV, float4(v.normal,0)); + #endif + + #if _DIFFUSE_ON + half nl = max(0, dot(UnityObjectToWorldNormal(o.objNormal), _WorldSpaceLightPos0.xyz)); + o.diff = nl * _LightColor0 * _DiffusePower; + #endif + + // #if _AMBIENT_ON + o.ambient = ShadeSH9(half4(UnityObjectToWorldNormal(o.objNormal),1)) * _AmbientPower; + // #endif + + #if _SHADOW_ON + TRANSFER_SHADOW(o) + #endif + + UNITY_TRANSFER_FOG(o,o.pos); + + o.projector = mul (unity_Projector, v.vertex); + o.projectorFalloff = mul (unity_ProjectorClip, v.vertex); + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + DC_UVFREE_SETUP(i.objNormal) + + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(i.projector)); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(i.projectorFalloff)); + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + + #if _SHADOW_ON + fixed shadow = clamp(SHADOW_ATTENUATION(i)+1-_ShadowPower,0,1); + #if _SHADOWTOONEFFECT_ON + shadow = round(shadow*_ShadowToonEffectPower)/_ShadowToonEffectPower; + #endif + #else + fixed shadow = 1; + #endif + + #if _SHADE_ON + fixed4 cube = clamp(texCUBE(_ShadeTex, i.cubenormal),(1-_ShadePower),1); + c.rgb = cube.rgb*c.rgb;//lerp(fixed4(0,0,0,0),_ShadeColor + #endif + + #if _DIFFUSE_ON && _AMBIENT_ON + c.rgb=c.rgb*i.diff*shadow+i.ambient; + #else + #if _DIFFUSE_ON + c.rgb*=i.diff*shadow; + #else + #if _AMBIENT_ON + c.rgb=c.rgb*shadow+i.ambient; + #else + c.rgb=c.rgb*shadow; + #endif + #endif + #endif + + #if _SHADOW_ON + c.rgb = c.rgb + (1-shadow)*_ShadowColor.rgb*_ShadowPower; + #endif + + DC_UVFREE_FINAL(i,c) + UNITY_APPLY_FOG(i.fogCoord,c); + + float kkk = projectorColor.a*projectorFalloff.a; + c = lerp(fixed4(1,1,1,0), c, projectorColor.a*projectorFalloff.a); + + return c; + } + ENDCG + } + + // shadow pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #include "UnityCG.cginc" + + struct v2f { + V2F_SHADOW_CASTER; + }; + + v2f vert( appdata_base v ) + { + v2f o; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + return o; + } + + float4 frag( v2f i ) : SV_Target + { + SHADOW_CASTER_FRAGMENT(i) + } + ENDCG + + } + } +CustomEditor "UVFreeToonShaderGUI" +} diff --git a/Shaders/Toon/ToonOutline-Projector.shader.meta b/Shaders/Toon/ToonOutline-Projector.shader.meta new file mode 100644 index 0000000..ab9bcef --- /dev/null +++ b/Shaders/Toon/ToonOutline-Projector.shader.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 6761f4a7963b54fe5a050ac6da524560 +timeCreated: 1476342875 +licenseType: Store +ShaderImporter: + defaultTextures: + - _MainTex: {instanceID: 0} + - _ShadeTex: {instanceID: 0} + - _MainTexTop: {instanceID: 0} + - _MainTexBottom: {instanceID: 0} + - _ProjectorTex: {fileID: 2800000, guid: 995ffc3e6c2e34c7aab060fd76bd4359, type: 3} + - _ProjectorFalloffTex: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Toon/ToonOutline.shader b/Shaders/Toon/ToonOutline.shader new file mode 100644 index 0000000..e6ec22c --- /dev/null +++ b/Shaders/Toon/ToonOutline.shader @@ -0,0 +1,351 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Digicrafts/UV-Free/Toon/Outline" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + _OutlineColor ("Outline Color", Color) = (0,0,0,0) + _OutlineWidth ("Outline Width", Range (0, 10)) = 0.5 + [Toggle] _Shade ("Eanble", Float) = 1 + _ShadeTex ("Texture", CUBE) = "gray" {} + _ShadePower ("Power",Range(0,1)) = 1 + _ShadeColor ("Outline Color", Color) = (1,1,1,1) + [Toggle] _Shadow ("Eanble", Float) = 0 + _ShadowPower ("Shadow Power",Range(0,1)) = 0.2 + [Toggle] _Diffuse ("Diffuse", Float) = 0 + _DiffusePower ("Power",Range(0,1)) = 1 + [Toggle] _Ambient ("Ambient", Float) = 0 + _AmbientPower ("Power",Range(0,1)) = 1 + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + } + SubShader + { + // Outline pass + Pass + { + Name "OUTLINE" + Cull Front + + CGPROGRAM + #include "UnityCG.cginc" + #pragma vertex vert + #pragma fragment frag + + uniform fixed _OutlineWidth; + uniform fixed4 _OutlineColor; + + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + }; + struct v2f + { + float4 pos : POSITION; + float4 color : COLOR; + UNITY_FOG_COORDS(0) + }; + v2f vert(appdata v) + { + v2f o; + if(_OutlineWidth!=0){ + o.pos = UnityObjectToClipPos (v.vertex); + float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal); + float2 offset = normalize(TransformViewToProjection(norm.xy)); + float ortho = 100; + float persp = 10; + if(UNITY_MATRIX_P[3][3]==0){ + o.pos.xy += offset * _OutlineWidth / persp; + }else{ + o.pos.xy += offset * _OutlineWidth / ortho; + } + } else { + o.pos = fixed4(0,0,0,0); + o.color = _OutlineColor; + } + UNITY_TRANSFER_FOG(o,o.pos); + return o; + } + + half4 frag(v2f i) :COLOR + { + fixed4 c = fixed4(i.color.rgb,i.color.a); + UNITY_APPLY_FOG(i.fogCoord,c); + return c; + } + ENDCG + } + // base + Pass + { + Name "BASE" + Tags { + "LightMode"="ForwardBase" + "RenderType"="Opaque" + } + LOD 100 + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + // make fog work + #pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight + #pragma multi_compile_fog + #pragma shader_feature _DIFFUSE_ON + #pragma shader_feature _AMBIENT_ON + #pragma shader_feature _SHADOW_ON + #pragma shader_feature _SHADE_ON + + #include "UnityCG.cginc" + #include "UnityLightingCommon.cginc" + #include "AutoLight.cginc" + + #pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT + #pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT + #pragma shader_feature _UVFREE_WORLDSPACE + #pragma shader_feature _UVFREE_VERTEX_COLOR +// #pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 + #include "../Core/UVFreeCommon.cginc" + + sampler2D _MainTex; + float4 _MainTex_ST; + uniform fixed4 _Color; + + #if _DIFFUSE_ON + uniform fixed4 _DiffuseColor; + uniform float _DiffusePower; + #endif + + #if _AMBIENT_ON + uniform float _AmbientPower; + #endif + + #if _SHADOW_ON + uniform fixed4 _ShadowColor; + uniform fixed _ShadowPower; + #endif + + #if _SHADE_ON + samplerCUBE _ShadeTex; + uniform fixed _ShadePower; + uniform fixed _SpecToonEffectPower; + uniform fixed3 _ShadeColor; + #endif + + struct appdata + { + float4 vertex : POSITION; + float3 normal : NORMAL; + DC_UVFREE_INPUT + }; + + struct v2f + { + float4 pos : SV_POSITION; + + #if _DIFFUSE_ON + fixed3 diff : COLOR1; + #endif + + #if _AMBIENT_ON + fixed3 ambient : COLOR2; + #endif + + #if _SHADOW_ON + SHADOW_COORDS(3) + #endif + + #if _SHADE_ON + float3 cubenormal : NORMAL1; + #endif + + UNITY_FOG_COORDS(5) + + DC_UVFREE_OUPUT(6,7) + + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + + DC_UVFREE_TRANSFER(o,_MainTex) + + #if _SHADE_ON + o.cubenormal = mul (UNITY_MATRIX_MV, float4(v.normal,0)); + #endif + + #if _DIFFUSE_ON + half nl = max(0, dot(UnityObjectToWorldNormal(o.objNormal), _WorldSpaceLightPos0.xyz)); + o.diff = nl * _LightColor0 * _DiffusePower; + #endif + + #if _AMBIENT_ON + o.ambient = ShadeSH9(half4(o.worldNormal,1)) * _AmbientPower; + #endif + + #if _SHADOW_ON + TRANSFER_SHADOW(o) + #endif + + UNITY_TRANSFER_FOG(o,o.pos); + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + + #if _SHADOW_ON + fixed shadow = clamp(SHADOW_ATTENUATION(i)+1-_ShadowPower,0,1); + #if _SHADOWTOONEFFECT_ON + shadow = round(shadow*_ShadowToonEffectPower)/_ShadowToonEffectPower; + #endif + #else + fixed shadow = 1; + #endif + + #if _SHADE_ON + fixed4 cube = clamp(texCUBE(_ShadeTex, i.cubenormal),(1-_ShadePower),1); + c.rgb = cube.rgb*c.rgb;//lerp(fixed4(0,0,0,0),_ShadeColor + #endif + + #if _DIFFUSE_ON && _AMBIENT_ON + c.rgb=c.rgb*i.diff*shadow+i.ambient; + #else + #if _DIFFUSE_ON + c.rgb*=i.diff*shadow; + #else + #if _AMBIENT_ON + c.rgb=c.rgb*shadow+i.ambient; + #else + c.rgb=c.rgb*shadow; + #endif + #endif + #endif + + #if _SHADOW_ON + c.rgb = c.rgb + (1-shadow)*_ShadowColor.rgb*_ShadowPower; + #endif + + DC_UVFREE_FINAL(i,c) + UNITY_APPLY_FOG(i.fogCoord,c); + + return c; + } + ENDCG + } + + // shadow pass + Pass { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #include "UnityCG.cginc" + + struct v2f { + V2F_SHADOW_CASTER; + }; + + v2f vert( appdata_base v ) + { + v2f o; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + return o; + } + + float4 frag( v2f i ) : SV_Target + { + SHADOW_CASTER_FRAGMENT(i) + } + ENDCG + + } + } +CustomEditor "UVFreeToonShaderGUI" +} diff --git a/Shaders/Toon/ToonOutline.shader.meta b/Shaders/Toon/ToonOutline.shader.meta new file mode 100644 index 0000000..f92fdcc --- /dev/null +++ b/Shaders/Toon/ToonOutline.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 81980bb3afbce4292a38430ebf6f52dd +timeCreated: 1472264688 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Unlit.meta b/Shaders/Unlit.meta new file mode 100644 index 0000000..038efb7 --- /dev/null +++ b/Shaders/Unlit.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b936a54c6cf904ca4ab675138da9b6c4 +folderAsset: yes +timeCreated: 1472216996 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Unlit/Unlit-Alpha.shader b/Shaders/Unlit/Unlit-Alpha.shader new file mode 100644 index 0000000..20bd57c --- /dev/null +++ b/Shaders/Unlit/Unlit-Alpha.shader @@ -0,0 +1,152 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Unlit alpha-blended shader. +// - no lighting +// - no lightmap support +// - no per-material color + +Shader "Digicrafts/UV-Free/Unlit/Transparent" { +Properties { + _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + +} + +SubShader { + Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} + LOD 100 + + ZWrite Off + Blend SrcAlpha OneMinusSrcAlpha + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + #pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT + #pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT + #pragma shader_feature _UVFREE_WORLDSPACE + #pragma shader_feature _UVFREE_VERTEX_COLOR +// #pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 + #include "../Core/UVFreeCommon.cginc" + + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform fixed4 _Color; + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + DC_UVFREE_INPUT + }; + + struct v2f { + float4 pos : SV_POSITION; + DC_UVFREE_OUPUT(1,2) + UNITY_FOG_COORDS(3) + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + DC_UVFREE_TRANSFER(o,_MainTex) + UNITY_TRANSFER_FOG(o,o.pos); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + DC_UVFREE_FINAL(i,c.rgb) + UNITY_APPLY_FOG(i.fogCoord, c); + return c; + } + + ENDCG + } +} +CustomEditor "UVFreeMobileShaderGUI" +} diff --git a/Shaders/Unlit/Unlit-Alpha.shader.meta b/Shaders/Unlit/Unlit-Alpha.shader.meta new file mode 100644 index 0000000..3b25932 --- /dev/null +++ b/Shaders/Unlit/Unlit-Alpha.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2dcbbb7d9460443f78f12e27e48198a3 +timeCreated: 1472264688 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Unlit/Unlit-AlphaTest.shader b/Shaders/Unlit/Unlit-AlphaTest.shader new file mode 100644 index 0000000..fe856f1 --- /dev/null +++ b/Shaders/Unlit/Unlit-AlphaTest.shader @@ -0,0 +1,154 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Unlit alpha-cutout shader. +// - no lighting +// - no lightmap support +// - no per-material color + +Shader "Digicrafts/UV-Free/Unlit/Transparent Cutout" { +Properties { + _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + +} +SubShader { + Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"} + LOD 100 + + Lighting Off + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + #pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT + #pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT + #pragma shader_feature _UVFREE_WORLDSPACE + #pragma shader_feature _UVFREE_VERTEX_COLOR +// #pragma shader_feature _UVFREE_UV_FREE _UVFREE_UV_UV0 _UVFREE_UV_UV1 + #include "../Core/UVFreeCommon.cginc" + + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform fixed4 _Color; + uniform fixed _Cutoff; + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + DC_UVFREE_INPUT + }; + + struct v2f { + float4 pos : SV_POSITION; + DC_UVFREE_OUPUT(1,2) + UNITY_FOG_COORDS(3) + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + DC_UVFREE_TRANSFER(o,_MainTex) + UNITY_TRANSFER_FOG(o,o.pos); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + + DC_UVFREE_SETUP(i.objNormal) + + fixed4 c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + + clip(c.a - _Cutoff); + DC_UVFREE_FINAL(i,c.rgb) + UNITY_APPLY_FOG(i.fogCoord, c); + return c; + } + + ENDCG + } +} +CustomEditor "UVFreeMobileShaderGUI" +} diff --git a/Shaders/Unlit/Unlit-AlphaTest.shader.meta b/Shaders/Unlit/Unlit-AlphaTest.shader.meta new file mode 100644 index 0000000..4d66d9f --- /dev/null +++ b/Shaders/Unlit/Unlit-AlphaTest.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ef0b42d7a3cf74526bb32e6ec78361a2 +timeCreated: 1472264688 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Unlit/Unlit-Normal.shader b/Shaders/Unlit/Unlit-Normal.shader new file mode 100644 index 0000000..e9af27b --- /dev/null +++ b/Shaders/Unlit/Unlit-Normal.shader @@ -0,0 +1,153 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Unlit shader. Simplest possible textured shader. +// - no lighting +// - no lightmap support +// - no per-material color +Shader "Digicrafts/UV-Free/Unlit/Texture" { +Properties { + + _MainTex ("Base (RGB)", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + +} + +SubShader { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + #pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT + #pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT + #pragma shader_feature _UVFREE_WORLDSPACE + #pragma shader_feature _UVFREE_VERTEX_COLOR + #include "../Core/UVFreeCommon.cginc" + + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform fixed4 _Color; + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + DC_UVFREE_INPUT + }; + + struct v2f { + float4 pos : SV_POSITION; + DC_UVFREE_OUPUT(1,2) + UNITY_FOG_COORDS(3) + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + DC_UVFREE_TRANSFER(o,_MainTex) + UNITY_TRANSFER_FOG(o,o.pos); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + + DC_UVFREE_SETUP(i.objNormal) +// #if _UVFREE_VERTEX_COLOR +// fixed4 c = fixed4(i.v_color.a,i.v_color.a,i.v_color.a,1); +// #else + fixed4 c = fixed4(1,1,1,1); +// #endif + + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + + DC_UVFREE_FINAL(i,c) + UNITY_APPLY_FOG(i.fogCoord, c); + UNITY_OPAQUE_ALPHA(c.a); + return c; + } + + ENDCG + } +} +CustomEditor "UVFreeMobileShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Unlit/Unlit-Normal.shader.meta b/Shaders/Unlit/Unlit-Normal.shader.meta new file mode 100644 index 0000000..261dcb8 --- /dev/null +++ b/Shaders/Unlit/Unlit-Normal.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 488c491f0a9dd44a3ae6abd65f562502 +timeCreated: 1472216996 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Shaders/Unlit/Unlit-Projector.shader b/Shaders/Unlit/Unlit-Projector.shader new file mode 100644 index 0000000..f04fafb --- /dev/null +++ b/Shaders/Unlit/Unlit-Projector.shader @@ -0,0 +1,170 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +// Upgrade NOTE: replaced '_Projector' with 'unity_Projector' +// Upgrade NOTE: replaced '_ProjectorClip' with 'unity_ProjectorClip' + +// Unlit shader. Simplest possible textured shader. +// - no lighting +// - no lightmap support +// - no per-material color +Shader "Digicrafts/UV-Free/Unlit/Projector" { +Properties { + + _MainTex ("Base (RGB)", 2D) = "white" {} + _Color ("Main Color", Color) = (1,1,1,1) + + // UV-Free Properties + [Toggle(_UVFREE_WORLDSPACE)] _UVSpace ("_UVSpace", Float) = 0 + [KeywordEnum(Free,UV0,UV1)] _UVFREE_UV ("_UVFREE_UV", Float) = 0 + [Toggle(_UVFREE_VERTEX_COLOR)] _VertexColor ("_VertexColor", Float) = 0 + _VertexColorPower ("_VertexColorPower", Range(0,5)) = 1 + + _Top ("_Top", Float) = 0 + _PowerTop ("_PowerTop", Range(0,1)) = 0.5 + _ColorTop ("_ColorTop", Color) = (1,1,1,1) + _MainTexTop ("_MainTexTop", 2D) = "white" {} + + _Bottom ("_Bottom", Float) = 0 + _PowerBottom ("_PowerBottom", Range(0,1)) = 0.5 + _ColorBottom ("_ColorBottom", Color) = (1,1,1,1) + _MainTexBottom ("_MainTexBottom", 2D) = "white" {} + + _ProjectorTex ("Projector Texture", 2D) = "white" {} + _ProjectorFalloffTex ("Falloff Texture", 2D) = "white" {} +} + +SubShader { + + Tags { "RenderType"="Transparent" "Queue"="Transparent"} + ZWrite Off + ColorMask RGB + Blend SrcAlpha OneMinusSrcAlpha + Offset -1, -1 + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + #pragma shader_feature _UVFREE_UP_NONE _UVFREE_UP_TOP _UVFREE_UP_FRONT _UVFREE_UP_LEFT + #pragma shader_feature _UVFREE_DOWN_NONE _UVFREE_DOWN_BOTTOM _UVFREE_DOWN_BACK _UVFREE_DOWN_RIGHT + #pragma shader_feature _UVFREE_WORLDSPACE + #pragma shader_feature _UVFREE_VERTEX_COLOR + #include "Assets/Digicrafts/UVFree/Shaders/Core/UVFreeCommon.cginc" + + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform fixed4 _Color; + + uniform sampler2D _ProjectorTex; + uniform sampler2D _ProjectorFalloffTex; + uniform float4x4 unity_Projector; + uniform float4x4 unity_ProjectorClip; + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + DC_UVFREE_INPUT + }; + + struct v2f { + float4 pos : SV_POSITION; + DC_UVFREE_OUPUT(1,2) + UNITY_FOG_COORDS(3) + float4 projector : TEXCOORD3; + float4 projectorFalloff : TEXCOORD4; + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = UnityObjectToClipPos(v.vertex); + DC_UVFREE_TRANSFER(o,_MainTex) + UNITY_TRANSFER_FOG(o,o.pos); + o.projector = mul (unity_Projector, v.vertex); + o.projectorFalloff = mul (unity_ProjectorClip, v.vertex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 projectorColor = tex2Dproj (_ProjectorTex, UNITY_PROJ_COORD(i.projector)); + fixed4 projectorFalloff = tex2Dproj (_ProjectorFalloffTex, UNITY_PROJ_COORD(i.projectorFalloff)); + + DC_UVFREE_SETUP(i.objNormal) + fixed4 c = fixed4(1,1,1,1); + + DC_UVFREE_UV_APPLY(i,_MainTex); + DC_UVFREE_APPLY_MAIN_TEX(c) + c*=_Color; + + // Add top/bottom + #if _UVFREE_UP_LEFT || _UVFREE_DOWN_RIGHT + if(uv_normal.x>0){ + #if _UVFREE_UP_LEFT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_X(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_RIGHT + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_X(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_FRONT || _UVFREE_DOWN_BACK + if(uv_normal.z>0){ + #if _UVFREE_UP_FRONT + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Z(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BACK + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Z(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + #if _UVFREE_UP_TOP || _UVFREE_DOWN_BOTTOM + if(uv_normal.y>0){ + #if _UVFREE_UP_TOP + fixed4 top_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexTop); + DC_UVFREE_TEX_APPLY_LOD(top_c,_MainTexTop,_MainTexTop); + DC_UVFREE_VALUE_Y(c,(top_c*_ColorTop),_PowerTop); + #endif + } else { + #if _UVFREE_DOWN_BOTTOM + fixed4 bottom_c = fixed4(1,1,1,1); + DC_UVFREE_UV_APPLY(i,_MainTexBottom); + DC_UVFREE_TEX_APPLY_LOD(bottom_c,_MainTexBottom,_MainTexBottom); + DC_UVFREE_VALUE_Y(c,(bottom_c*_ColorBottom),_PowerBottom); + #endif + } + #endif + + DC_UVFREE_FINAL(i,c) + UNITY_APPLY_FOG(i.fogCoord, c); + + c = lerp(fixed4(1,1,1,0), c, projectorColor.a*projectorFalloff.a); + + return c; + } + + ENDCG + } +} +CustomEditor "UVFreeMobileShaderGUI" +} \ No newline at end of file diff --git a/Shaders/Unlit/Unlit-Projector.shader.meta b/Shaders/Unlit/Unlit-Projector.shader.meta new file mode 100644 index 0000000..fb73de6 --- /dev/null +++ b/Shaders/Unlit/Unlit-Projector.shader.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 8d43f3e027a044774ba58c9c8626f45f +timeCreated: 1476259922 +licenseType: Store +ShaderImporter: + defaultTextures: + - _MainTex: {instanceID: 0} + - _MainTexTop: {instanceID: 0} + - _MainTexBottom: {instanceID: 0} + - _ProjectorTex: {fileID: 2800000, guid: 231f337e2f9e74ee4be704d009f49a7a, type: 3} + - _ProjectorFalloffTex: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Textures.meta b/Textures.meta new file mode 100644 index 0000000..ab6ab0a --- /dev/null +++ b/Textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: feb1c2982215c4c2883720065c31b18c +folderAsset: yes +timeCreated: 1472032276 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/readme.pdf b/readme.pdf new file mode 100644 index 0000000..7c4d071 Binary files /dev/null and b/readme.pdf differ diff --git a/readme.pdf.meta b/readme.pdf.meta new file mode 100644 index 0000000..dc48fb1 --- /dev/null +++ b/readme.pdf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd18f0001d5be493da763c36cb8cdf5b +timeCreated: 1473259904 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: