├── .gitignore ├── Assets ├── Caustics.meta ├── Caustics │ ├── Caustics.cs │ ├── Caustics.cs.meta │ ├── Caustics.mat │ ├── Caustics.mat.meta │ ├── Caustics.shader │ ├── Caustics.shader.meta │ ├── CausticsGen.mat │ ├── CausticsGen.mat.meta │ ├── CausticsGen.shader │ ├── CausticsGen.shader.meta │ ├── First.unity │ ├── First.unity.meta │ ├── Height.png │ ├── Height.png.meta │ ├── RTUtil.cs │ ├── RTUtil.cs.meta │ ├── Tile.png │ ├── Tile.png.meta │ ├── lX8OAQV.jpg │ └── lX8OAQV.jpg.meta ├── Menbrane.meta └── Menbrane │ ├── Brush.mat │ ├── Brush.mat.meta │ ├── Brush.png │ ├── Brush.png.meta │ ├── Brush.shader │ ├── Brush.shader.meta │ ├── Color.mat │ ├── Color.mat.meta │ ├── Color.shader │ ├── Color.shader.meta │ ├── Menbrane.cs │ ├── Menbrane.cs.meta │ ├── Menbrane.mat │ ├── Menbrane.mat.meta │ ├── Menbrane.shader │ ├── Menbrane.shader.meta │ ├── Menbrane.unity │ ├── Menbrane.unity.meta │ ├── NormalGen.mat │ ├── NormalGen.mat.meta │ ├── NormalGen.shader │ ├── NormalGen.shader.meta │ ├── Ticker.cs │ └── Ticker.cs.meta ├── Html └── Img │ └── Screenshot_Demo01.png ├── ProjectSettings ├── AudioManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── NavMeshLayers.asset ├── NetworkManager.asset ├── Physics2DSettings.asset ├── ProjectSettings.asset ├── QualitySettings.asset ├── TagManager.asset └── TimeManager.asset └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | 4 | /Assets/Standard Assets/ 5 | 6 | # Autogenerated VS/MD solution and project files 7 | /*.csproj 8 | /*.unityproj 9 | /*.sln 10 | /*.suo 11 | /*.user 12 | /*.userprefs 13 | /*.pidb 14 | /*.booproj 15 | -------------------------------------------------------------------------------- /Assets/Caustics.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f9afa290125a841479ae3b9547e76667 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Caustics/Caustics.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | public class Caustics : MonoBehaviour { 5 | public const string SHADER_CAUSTIC_Y_TEX0 = "_CausticYTex0"; 6 | public const string SHADER_CAUSTIC_Y_TEX1 = "_CausticYTex1"; 7 | public const string SHADER_CAUSTIC_TEX = "_CausticTex"; 8 | public const string SHADER_BUMP_TEX = "_BumpMap"; 9 | 10 | public const string SHADER_NOFFSET = "_NOffset"; 11 | public const string SHADER_CAUSTICS_TEXEL_SIZE = "_Caustics_TS"; 12 | public const string SHADER_UV_C_OFFSET = "_UvC_Offset"; 13 | public const string SHADER_REFRACTION_FACTOR = "_Refraction"; 14 | public const string SHADER_HEIGHT = "_Height"; 15 | public const string SHADER_LIGHT_DIR = "_LightDir"; 16 | public const string SHADER_VIEW_DIR = "_ViewDir"; 17 | 18 | public int n = 512; 19 | public Material genMat; 20 | public Data data; 21 | 22 | private Vector4 _texelSize; 23 | private RenderTexture _causticYTex0; 24 | private RenderTexture _causticYTex1; 25 | private RenderTexture _causticTex; 26 | 27 | void OnDisable() { Release(); } 28 | void Update () { 29 | CheckInit(); 30 | 31 | data.Normalize(); 32 | genMat.SetVector(SHADER_CAUSTICS_TEXEL_SIZE, _texelSize); 33 | genMat.SetVector(SHADER_UV_C_OFFSET, data.UvCOffset()); 34 | genMat.SetFloat(SHADER_REFRACTION_FACTOR, data.RefractionFactor); 35 | genMat.SetFloat(SHADER_HEIGHT, data.Height); 36 | genMat.SetVector(SHADER_LIGHT_DIR, data.LightDir); 37 | genMat.SetTexture(SHADER_BUMP_TEX, renderer.sharedMaterial.GetTexture(SHADER_BUMP_TEX)); 38 | 39 | genMat.SetInt(SHADER_NOFFSET, -3); 40 | _causticYTex0.DiscardContents(); 41 | Graphics.Blit(null, _causticYTex0, genMat, 0); 42 | 43 | genMat.SetInt(SHADER_NOFFSET, 1); 44 | _causticYTex1.DiscardContents(); 45 | Graphics.Blit(null, _causticYTex1, genMat, 0); 46 | 47 | genMat.SetTexture(SHADER_CAUSTIC_Y_TEX0, _causticYTex0); 48 | genMat.SetTexture(SHADER_CAUSTIC_Y_TEX1, _causticYTex1); 49 | _causticTex.DiscardContents(); 50 | Graphics.Blit(null, _causticTex, genMat, 1); 51 | 52 | var m = renderer.sharedMaterial; 53 | m.SetFloat(SHADER_REFRACTION_FACTOR, data.RefractionFactor); 54 | m.SetFloat(SHADER_HEIGHT, data.Height); 55 | m.SetVector(SHADER_VIEW_DIR, data.ViewDir); 56 | m.SetTexture(SHADER_CAUSTIC_TEX, _causticTex); 57 | } 58 | 59 | void CheckInit() { 60 | if (_causticYTex0 != null && _causticYTex0.width == n) 61 | return; 62 | 63 | Release(); 64 | 65 | _texelSize = new Vector4(1f / n, 1f / n, n, n); 66 | 67 | _causticYTex0 = new RenderTexture(n, n, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); 68 | _causticYTex1 = new RenderTexture(n, n, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); 69 | _causticTex = new RenderTexture(n, n, 0, RenderTextureFormat.RFloat, RenderTextureReadWrite.Linear); 70 | _causticTex.wrapMode = TextureWrapMode.Repeat; 71 | _causticYTex0.Create(); 72 | _causticYTex1.Create(); 73 | _causticTex.Create(); 74 | } 75 | void Release() { 76 | if (_causticYTex0 != null) 77 | _causticYTex0.Release(); 78 | if (_causticYTex1 != null) 79 | _causticYTex1.Release(); 80 | if (_causticTex != null) 81 | _causticTex.Release(); 82 | } 83 | 84 | [System.Serializable] 85 | public struct Data { 86 | public static readonly Vector3 N = new Vector3(0, 0, -1); 87 | 88 | public float RefractionFactor; 89 | public float Height; 90 | public Vector3 LightDir; 91 | public Vector3 ViewDir; 92 | 93 | public void Normalize() { 94 | this.LightDir.Normalize(); 95 | this.ViewDir.Normalize(); 96 | } 97 | public Vector2 UvCOffset() { 98 | var rr = RTUtil.Refract(LightDir, N, RefractionFactor); 99 | var invZ = 1f/rr.z; 100 | return new Vector2(-rr.x * invZ * Height, -rr.y * invZ * Height); 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Assets/Caustics/Caustics.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a72185a9b7f96754d81247a8d5eadfb3 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Assets/Caustics/Caustics.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Caustics 10 | m_Shader: {fileID: 4800000, guid: e66a8fae1e2bcde45ae4d2bbb0c30693, type: 3} 11 | m_ShaderKeywords: [] 12 | m_CustomRenderQueue: -1 13 | m_SavedProperties: 14 | serializedVersion: 2 15 | m_TexEnvs: 16 | data: 17 | first: 18 | name: _MainTex 19 | second: 20 | m_Texture: {fileID: 2800000, guid: 119351555a3cd1a459e0f2ee12d90c44, type: 3} 21 | m_Scale: {x: 1, y: 1} 22 | m_Offset: {x: 0, y: 0} 23 | data: 24 | first: 25 | name: _BumpMap 26 | second: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | data: 31 | first: 32 | name: _CausticTex 33 | second: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | data: 38 | first: 39 | name: _CausticTex0 40 | second: 41 | m_Texture: {fileID: 0} 42 | m_Scale: {x: 1, y: 1} 43 | m_Offset: {x: 0, y: 0} 44 | data: 45 | first: 46 | name: _CausticTex1 47 | second: 48 | m_Texture: {fileID: 0} 49 | m_Scale: {x: 1, y: 1} 50 | m_Offset: {x: 0, y: 0} 51 | data: 52 | first: 53 | name: _Caustics0 54 | second: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | data: 59 | first: 60 | name: _Caustics1 61 | second: 62 | m_Texture: {fileID: 0} 63 | m_Scale: {x: 1, y: 1} 64 | m_Offset: {x: 0, y: 0} 65 | m_Floats: 66 | data: 67 | first: 68 | name: _Refraction 69 | second: .751800001 70 | data: 71 | first: 72 | name: _Height 73 | second: .0399999991 74 | data: 75 | first: 76 | name: _IFact 77 | second: 1.83000004 78 | m_Colors: 79 | data: 80 | first: 81 | name: _Color 82 | second: {r: 1, g: 1, b: 1, a: 1} 83 | data: 84 | first: 85 | name: _IFact 86 | second: {r: .689999998, g: .560000002, b: 0, a: 0} 87 | data: 88 | first: 89 | name: _ViewDir 90 | second: {r: 0, g: 0, b: 1, a: 0} 91 | data: 92 | first: 93 | name: _CausticColor 94 | second: {r: .999574006, g: 1, b: .847058833, a: 1} 95 | -------------------------------------------------------------------------------- /Assets/Caustics/Caustics.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 794329cf75b910849b13c24487b13fbb 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Caustics/Caustics.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/Caustics" { 2 | Properties { 3 | _MainTex ("Base (RGB)", 2D) = "black" {} 4 | _BumpMap ("Normal Map", 2D) = "white" {} 5 | _CausticTex ("Caustics Map", 2D) = "black" {} 6 | _ViewDir ("View Dir", Vector) = (0, 0, 1, 0) 7 | _IFact ("Intensity Factor", Vector) = (0.1, 1, 0, 0) 8 | _Refraction ("Refraction Factor", Float) = 0.7518 9 | _Height ("Height", Float) = 0.1 10 | } 11 | SubShader { 12 | Tags { "RenderType"="Opaque" } 13 | LOD 200 14 | 15 | Pass { 16 | CGPROGRAM 17 | //#define PACKED_NORMAL 18 | #pragma target 5.0 19 | #pragma vertex vert 20 | #pragma fragment frag 21 | #include "UnityCG.cginc" 22 | 23 | float4 _MainTex_ST; 24 | float4 _BumpMap_ST; 25 | float4 _CausticTex_ST; 26 | float4 _MainTex_TexelSize; 27 | float4 _BumpMap_TexelSize; 28 | float4 _CausticTex_TexelSize; 29 | 30 | sampler2D _MainTex; 31 | sampler2D _BumpMap; 32 | sampler2D _CausticTex; 33 | float3 _ViewDir; 34 | float2 _IFact; 35 | float _Refraction; 36 | float _Height; 37 | 38 | struct Input { 39 | float4 vertex : POSITION; 40 | float2 uv : TEXCOORD0; 41 | }; 42 | struct vs2ps { 43 | float4 vertex : POSITION; 44 | float2 uv : TEXCOORD0; 45 | }; 46 | 47 | vs2ps vert(Input IN) { 48 | vs2ps OUT; 49 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 50 | OUT.uv = IN.uv; 51 | return OUT; 52 | } 53 | 54 | float4 frag(vs2ps IN) : COLOR { 55 | #ifdef PACKED_NORMAL 56 | float3 n = UnpackNormal(tex2D(_BumpMap, IN.uv, _BumpMap)); 57 | n.z *= -1; 58 | #else 59 | float3 n = tex2D(_BumpMap, IN.uv).xyz; 60 | #endif 61 | float3 rr = refract(_ViewDir, n, _Refraction); 62 | rr.xy /= rr.z; 63 | 64 | float2 uvG = IN.uv + rr.xy * _Height; 65 | float4 cMain = tex2D(_MainTex, uvG); 66 | float caustic = tex2D(_CausticTex, uvG).r; 67 | return dot(_IFact, float2(1, caustic)) * cMain; 68 | } 69 | ENDCG 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /Assets/Caustics/Caustics.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e66a8fae1e2bcde45ae4d2bbb0c30693 3 | ShaderImporter: 4 | defaultTextures: [] 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Caustics/CausticsGen.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: CausticsGen 10 | m_Shader: {fileID: 4800000, guid: 4672dfab7686d6d4b9ca43040b1ba655, type: 3} 11 | m_ShaderKeywords: [] 12 | m_CustomRenderQueue: -1 13 | m_SavedProperties: 14 | serializedVersion: 2 15 | m_TexEnvs: 16 | data: 17 | first: 18 | name: _MainTex 19 | second: 20 | m_Texture: {fileID: 0} 21 | m_Scale: {x: 1, y: 1} 22 | m_Offset: {x: 0, y: 0} 23 | data: 24 | first: 25 | name: _BumpMap 26 | second: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: 31 | data: 32 | first: 33 | name: _Refraction 34 | second: .751800001 35 | data: 36 | first: 37 | name: _Height 38 | second: .0399999991 39 | m_Colors: 40 | data: 41 | first: 42 | name: _LightDir 43 | second: {r: 0, g: 0, b: 1, a: 0} 44 | data: 45 | first: 46 | name: _Color 47 | second: {r: 1, g: 1, b: 1, a: 1} 48 | -------------------------------------------------------------------------------- /Assets/Caustics/CausticsGen.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 99ad2e7a8db131c40a567451fadefa4a 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Caustics/CausticsGen.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/CausticsGen" { 2 | Properties { 3 | _BumpMap ("Normal Map", 2D) = "white" {} 4 | _Refraction ("Refraction Factor", Float) = 0.7518 5 | _Height ("Height", Float) = 0.1 6 | _LightDir ("Light Direction", Vector) = (0, 0, 1, 0) 7 | } 8 | SubShader { 9 | Tags { "RenderType"="Opaque" } 10 | ZWrite Off ZTest Always Cull Off Fog { Mode Off } 11 | 12 | Pass { 13 | CGPROGRAM 14 | //#define PACKED_NORMAL 15 | #define N 4 16 | #pragma target 5.0 17 | #pragma vertex vert 18 | #pragma fragment frag 19 | #include "UnityCG.cginc" 20 | 21 | float4 _BumpMap_TexelSize; 22 | 23 | sampler2D _BumpMap; 24 | float4 _Caustics_TS; 25 | float2 _UvC_Offset; 26 | float _Refraction; 27 | float _Height; 28 | float3 _LightDir; 29 | int _NOffset; 30 | 31 | struct Input { 32 | float4 vertex : POSITION; 33 | float2 uv : TEXCOORD0; 34 | 35 | }; 36 | struct vs2ps { 37 | float4 vertex : POSITION; 38 | float2 uvC : TEXCOORD0; 39 | float2 pG : TEXCOORD1; 40 | }; 41 | 42 | vs2ps vert(Input IN) { 43 | vs2ps OUT; 44 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 45 | OUT.uvC = IN.uv + _UvC_Offset; 46 | OUT.pG = IN.uv * _Caustics_TS.zw; 47 | return OUT; 48 | } 49 | 50 | float2 GetIntersection(float2 uvC) { 51 | #ifdef PACKED_NORMAL 52 | float3 n = UnpackNormal(tex2D(_BumpMap, uvC)); 53 | n.z *= -1; 54 | #else 55 | float3 n = tex2D(_BumpMap, uvC).xyz; 56 | #endif 57 | float3 rr = refract(_LightDir, n, _Refraction); 58 | rr.xy /= rr.z; 59 | 60 | return uvC + rr.xy * _Height; 61 | } 62 | float4 frag(vs2ps IN) : COLOR { 63 | float I[N]; 64 | float pGy[N]; 65 | for (int i = 0; i < N; i++) { 66 | I[i] = 0.0; 67 | pGy[i] = IN.pG.y + (i + _NOffset); 68 | } 69 | 70 | for (int i = 0; i < N; i++) { 71 | float2 uvC = IN.uvC + (i + _NOffset) * _Caustics_TS.xy; 72 | float2 pIntersect = GetIntersection(uvC) * _Caustics_TS.zw; 73 | float ax = max(0, 1 - abs(IN.pG.x - pIntersect.x)); 74 | for (int j = 0; j < N; j++) { 75 | float ay = max(0, 1 - abs(pGy[j] - pIntersect.y)); 76 | I[j] += ax * ay; 77 | } 78 | } 79 | 80 | return float4(I[0], I[1], I[2], I[3]); 81 | } 82 | ENDCG 83 | } 84 | 85 | Pass { 86 | CGPROGRAM 87 | #pragma target 5.0 88 | #pragma vertex vert 89 | #pragma fragment frag 90 | #include "UnityCG.cginc" 91 | 92 | float4 _CausticYTex0_TexelSize; 93 | 94 | sampler2D _CausticYTex0; 95 | sampler2D _CausticYTex1; 96 | 97 | struct Input { 98 | float4 vertex : POSITION; 99 | float2 uv : TEXCOORD0; 100 | }; 101 | struct vs2ps { 102 | float4 vertex : POSITION; 103 | float2 uv : TEXCOORD0; 104 | }; 105 | 106 | vs2ps vert(Input IN) { 107 | vs2ps OUT; 108 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 109 | OUT.uv = IN.uv; 110 | return OUT; 111 | } 112 | float4 frag(vs2ps IN) : COLOR { 113 | float2 dx = _CausticYTex0_TexelSize.xy; 114 | float I = 0.0; 115 | I += tex2D(_CausticYTex0, IN.uv + float2(0, +3) * dx).r; 116 | I += tex2D(_CausticYTex0, IN.uv + float2(0, +2) * dx).g; 117 | I += tex2D(_CausticYTex0, IN.uv + float2(0, +1) * dx).b; 118 | I += tex2D(_CausticYTex0, IN.uv).a; 119 | I += tex2D(_CausticYTex1, IN.uv + float2(0, -1) * dx).r; 120 | I += tex2D(_CausticYTex1, IN.uv + float2(0, -2) * dx).g; 121 | I += tex2D(_CausticYTex1, IN.uv + float2(0, -3) * dx).b; 122 | 123 | return float4(I, 0, 0, 1); 124 | } 125 | ENDCG 126 | } 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /Assets/Caustics/CausticsGen.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4672dfab7686d6d4b9ca43040b1ba655 3 | ShaderImporter: 4 | defaultTextures: [] 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Caustics/First.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | SceneSettings: 5 | m_ObjectHideFlags: 0 6 | m_PVSData: 7 | m_PVSObjectsArray: [] 8 | m_PVSPortalsArray: [] 9 | m_OcclusionBakeSettings: 10 | smallestOccluder: 5 11 | smallestHole: .25 12 | backfaceThreshold: 100 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_Fog: 0 16 | m_FogColor: {r: .5, g: .5, b: .5, a: 1} 17 | m_FogMode: 3 18 | m_FogDensity: .00999999978 19 | m_LinearFogStart: 0 20 | m_LinearFogEnd: 300 21 | m_AmbientLight: {r: .200000003, g: .200000003, b: .200000003, a: 1} 22 | m_SkyboxMaterial: {fileID: 0} 23 | m_HaloStrength: .5 24 | m_FlareStrength: 1 25 | m_FlareFadeSpeed: 3 26 | m_HaloTexture: {fileID: 0} 27 | m_SpotCookie: {fileID: 0} 28 | m_ObjectHideFlags: 0 29 | --- !u!127 &3 30 | LevelGameManager: 31 | m_ObjectHideFlags: 0 32 | --- !u!157 &4 33 | LightmapSettings: 34 | m_ObjectHideFlags: 0 35 | m_LightProbes: {fileID: 0} 36 | m_Lightmaps: [] 37 | m_LightmapsMode: 1 38 | m_BakedColorSpace: 0 39 | m_UseDualLightmapsInForward: 0 40 | m_LightmapEditorSettings: 41 | m_Resolution: 50 42 | m_LastUsedResolution: 0 43 | m_TextureWidth: 1024 44 | m_TextureHeight: 1024 45 | m_BounceBoost: 1 46 | m_BounceIntensity: 1 47 | m_SkyLightColor: {r: .860000014, g: .930000007, b: 1, a: 1} 48 | m_SkyLightIntensity: 0 49 | m_Quality: 0 50 | m_Bounces: 1 51 | m_FinalGatherRays: 1000 52 | m_FinalGatherContrastThreshold: .0500000007 53 | m_FinalGatherGradientThreshold: 0 54 | m_FinalGatherInterpolationPoints: 15 55 | m_AOAmount: 0 56 | m_AOMaxDistance: .100000001 57 | m_AOContrast: 1 58 | m_LODSurfaceMappingDistance: 1 59 | m_Padding: 0 60 | m_TextureCompression: 0 61 | m_LockAtlas: 0 62 | --- !u!196 &5 63 | NavMeshSettings: 64 | m_ObjectHideFlags: 0 65 | m_BuildSettings: 66 | agentRadius: .5 67 | agentHeight: 2 68 | agentSlope: 45 69 | agentClimb: .400000006 70 | ledgeDropHeight: 0 71 | maxJumpAcrossDistance: 0 72 | accuratePlacement: 0 73 | minRegionArea: 2 74 | widthInaccuracy: 16.666666 75 | heightInaccuracy: 10 76 | m_NavMesh: {fileID: 0} 77 | --- !u!1 &186712075 78 | GameObject: 79 | m_ObjectHideFlags: 0 80 | m_PrefabParentObject: {fileID: 0} 81 | m_PrefabInternal: {fileID: 0} 82 | serializedVersion: 4 83 | m_Component: 84 | - 4: {fileID: 186712078} 85 | - 33: {fileID: 186712077} 86 | - 23: {fileID: 186712076} 87 | - 64: {fileID: 186712081} 88 | - 114: {fileID: 186712080} 89 | - 114: {fileID: 186712079} 90 | m_Layer: 0 91 | m_Name: Quad 92 | m_TagString: Untagged 93 | m_Icon: {fileID: 0} 94 | m_NavMeshLayer: 0 95 | m_StaticEditorFlags: 0 96 | m_IsActive: 1 97 | --- !u!23 &186712076 98 | Renderer: 99 | m_ObjectHideFlags: 0 100 | m_PrefabParentObject: {fileID: 0} 101 | m_PrefabInternal: {fileID: 0} 102 | m_GameObject: {fileID: 186712075} 103 | m_Enabled: 1 104 | m_CastShadows: 0 105 | m_ReceiveShadows: 0 106 | m_LightmapIndex: 255 107 | m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} 108 | m_Materials: 109 | - {fileID: 2100000, guid: 794329cf75b910849b13c24487b13fbb, type: 2} 110 | m_SubsetIndices: 111 | m_StaticBatchRoot: {fileID: 0} 112 | m_UseLightProbes: 0 113 | m_LightProbeAnchor: {fileID: 0} 114 | m_ScaleInLightmap: 1 115 | m_SortingLayerID: 0 116 | m_SortingOrder: 0 117 | --- !u!33 &186712077 118 | MeshFilter: 119 | m_ObjectHideFlags: 0 120 | m_PrefabParentObject: {fileID: 0} 121 | m_PrefabInternal: {fileID: 0} 122 | m_GameObject: {fileID: 186712075} 123 | m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} 124 | --- !u!4 &186712078 125 | Transform: 126 | m_ObjectHideFlags: 0 127 | m_PrefabParentObject: {fileID: 0} 128 | m_PrefabInternal: {fileID: 0} 129 | m_GameObject: {fileID: 186712075} 130 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 131 | m_LocalPosition: {x: 0, y: 0, z: 0} 132 | m_LocalScale: {x: 10, y: 10, z: 1} 133 | m_Children: [] 134 | m_Father: {fileID: 0} 135 | m_RootOrder: 1 136 | --- !u!114 &186712079 137 | MonoBehaviour: 138 | m_ObjectHideFlags: 0 139 | m_PrefabParentObject: {fileID: 0} 140 | m_PrefabInternal: {fileID: 0} 141 | m_GameObject: {fileID: 186712075} 142 | m_Enabled: 1 143 | m_EditorHideFlags: 0 144 | m_Script: {fileID: 11500000, guid: a72185a9b7f96754d81247a8d5eadfb3, type: 3} 145 | m_Name: 146 | m_EditorClassIdentifier: 147 | n: 256 148 | genMat: {fileID: 2100000, guid: 99ad2e7a8db131c40a567451fadefa4a, type: 2} 149 | data: 150 | RefractionFactor: .751800001 151 | Height: .0399999991 152 | LightDir: {x: 0, y: 0, z: 1} 153 | ViewDir: {x: 0, y: 0, z: 1} 154 | --- !u!114 &186712080 155 | MonoBehaviour: 156 | m_ObjectHideFlags: 0 157 | m_PrefabParentObject: {fileID: 0} 158 | m_PrefabInternal: {fileID: 0} 159 | m_GameObject: {fileID: 186712075} 160 | m_Enabled: 1 161 | m_EditorHideFlags: 0 162 | m_Script: {fileID: 11500000, guid: 25f7d297d30eaf44cbd7020b453a67da, type: 3} 163 | m_Name: 164 | m_EditorClassIdentifier: 165 | sim: {fileID: 2100000, guid: 4b8dfbae77b2ce5409725fc25ace6a43, type: 2} 166 | brushMat: {fileID: 2100000, guid: 29db29e198e67a049859f0916ea7c444, type: 2} 167 | nGrids: 256 168 | l: 20 169 | fps: 100 170 | tension: 3 171 | density: 10 172 | --- !u!64 &186712081 173 | MeshCollider: 174 | m_ObjectHideFlags: 0 175 | m_PrefabParentObject: {fileID: 0} 176 | m_PrefabInternal: {fileID: 0} 177 | m_GameObject: {fileID: 186712075} 178 | m_Material: {fileID: 0} 179 | m_IsTrigger: 0 180 | m_Enabled: 1 181 | serializedVersion: 2 182 | m_SmoothSphereCollisions: 0 183 | m_Convex: 0 184 | m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} 185 | --- !u!1 &888964134 186 | GameObject: 187 | m_ObjectHideFlags: 0 188 | m_PrefabParentObject: {fileID: 0} 189 | m_PrefabInternal: {fileID: 0} 190 | serializedVersion: 4 191 | m_Component: 192 | - 4: {fileID: 888964139} 193 | - 20: {fileID: 888964138} 194 | - 92: {fileID: 888964137} 195 | - 124: {fileID: 888964136} 196 | - 81: {fileID: 888964135} 197 | m_Layer: 0 198 | m_Name: Main Camera 199 | m_TagString: MainCamera 200 | m_Icon: {fileID: 0} 201 | m_NavMeshLayer: 0 202 | m_StaticEditorFlags: 0 203 | m_IsActive: 1 204 | --- !u!81 &888964135 205 | AudioListener: 206 | m_ObjectHideFlags: 0 207 | m_PrefabParentObject: {fileID: 0} 208 | m_PrefabInternal: {fileID: 0} 209 | m_GameObject: {fileID: 888964134} 210 | m_Enabled: 1 211 | --- !u!124 &888964136 212 | Behaviour: 213 | m_ObjectHideFlags: 0 214 | m_PrefabParentObject: {fileID: 0} 215 | m_PrefabInternal: {fileID: 0} 216 | m_GameObject: {fileID: 888964134} 217 | m_Enabled: 1 218 | --- !u!92 &888964137 219 | Behaviour: 220 | m_ObjectHideFlags: 0 221 | m_PrefabParentObject: {fileID: 0} 222 | m_PrefabInternal: {fileID: 0} 223 | m_GameObject: {fileID: 888964134} 224 | m_Enabled: 1 225 | --- !u!20 &888964138 226 | Camera: 227 | m_ObjectHideFlags: 0 228 | m_PrefabParentObject: {fileID: 0} 229 | m_PrefabInternal: {fileID: 0} 230 | m_GameObject: {fileID: 888964134} 231 | m_Enabled: 1 232 | serializedVersion: 2 233 | m_ClearFlags: 1 234 | m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438} 235 | m_NormalizedViewPortRect: 236 | serializedVersion: 2 237 | x: 0 238 | y: 0 239 | width: 1 240 | height: 1 241 | near clip plane: .300000012 242 | far clip plane: 1000 243 | field of view: 60 244 | orthographic: 1 245 | orthographic size: 5 246 | m_Depth: -1 247 | m_CullingMask: 248 | serializedVersion: 2 249 | m_Bits: 4294967295 250 | m_RenderingPath: -1 251 | m_TargetTexture: {fileID: 0} 252 | m_TargetDisplay: 0 253 | m_HDR: 0 254 | m_OcclusionCulling: 1 255 | m_StereoConvergence: 10 256 | m_StereoSeparation: .0219999999 257 | --- !u!4 &888964139 258 | Transform: 259 | m_ObjectHideFlags: 0 260 | m_PrefabParentObject: {fileID: 0} 261 | m_PrefabInternal: {fileID: 0} 262 | m_GameObject: {fileID: 888964134} 263 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 264 | m_LocalPosition: {x: 0, y: 0, z: -10} 265 | m_LocalScale: {x: 1, y: 1, z: 1} 266 | m_Children: [] 267 | m_Father: {fileID: 0} 268 | m_RootOrder: 0 269 | -------------------------------------------------------------------------------- /Assets/Caustics/First.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 27f5902b4c1785443ac5a57d3b674ff9 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Caustics/Height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nobnak/CausticsUnity/e8cd911262dda717850eee3e22a25bdc2ec78b09/Assets/Caustics/Height.png -------------------------------------------------------------------------------- /Assets/Caustics/Height.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7dbe74005baa635408e3482588b39c68 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 1 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 1 17 | externalNormalMap: 1 18 | heightScale: .201000005 19 | normalMapFilter: 1 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | seamlessCubemap: 0 24 | textureFormat: -1 25 | maxTextureSize: 4096 26 | textureSettings: 27 | filterMode: -1 28 | aniso: 9 29 | mipBias: -1 30 | wrapMode: -1 31 | nPOTScale: 1 32 | lightmap: 0 33 | compressionQuality: 50 34 | spriteMode: 0 35 | spriteExtrude: 1 36 | spriteMeshType: 1 37 | alignment: 0 38 | spritePivot: {x: .5, y: .5} 39 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 40 | spritePixelsToUnits: 100 41 | alphaIsTransparency: 0 42 | textureType: 1 43 | buildTargetSettings: [] 44 | spriteSheet: 45 | sprites: [] 46 | spritePackingTag: 47 | userData: 48 | -------------------------------------------------------------------------------- /Assets/Caustics/RTUtil.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | public static class RTUtil { 5 | 6 | public static Vector3 Refract(Vector3 l, Vector3 n, float r) { 7 | var c = -Vector3.Dot(l, n); 8 | return r * l + (r * c - Mathf.Sqrt(1f - r * r * (1f - c * c))) * n; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Assets/Caustics/RTUtil.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d387c8d6219ca0b4482d2502186b5b6e 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Assets/Caustics/Tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nobnak/CausticsUnity/e8cd911262dda717850eee3e22a25bdc2ec78b09/Assets/Caustics/Tile.png -------------------------------------------------------------------------------- /Assets/Caustics/Tile.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 119351555a3cd1a459e0f2ee12d90c44 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: .25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | seamlessCubemap: 0 24 | textureFormat: -1 25 | maxTextureSize: 2048 26 | textureSettings: 27 | filterMode: -1 28 | aniso: -1 29 | mipBias: -1 30 | wrapMode: -1 31 | nPOTScale: 1 32 | lightmap: 0 33 | compressionQuality: 50 34 | spriteMode: 0 35 | spriteExtrude: 1 36 | spriteMeshType: 1 37 | alignment: 0 38 | spritePivot: {x: .5, y: .5} 39 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 40 | spritePixelsToUnits: 100 41 | alphaIsTransparency: 0 42 | textureType: -1 43 | buildTargetSettings: [] 44 | spriteSheet: 45 | sprites: [] 46 | spritePackingTag: 47 | userData: 48 | -------------------------------------------------------------------------------- /Assets/Caustics/lX8OAQV.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nobnak/CausticsUnity/e8cd911262dda717850eee3e22a25bdc2ec78b09/Assets/Caustics/lX8OAQV.jpg -------------------------------------------------------------------------------- /Assets/Caustics/lX8OAQV.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2622a97b373aca54eab69da0804dec49 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: .25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | seamlessCubemap: 0 24 | textureFormat: -1 25 | maxTextureSize: 2048 26 | textureSettings: 27 | filterMode: 2 28 | aniso: 9 29 | mipBias: -1 30 | wrapMode: -1 31 | nPOTScale: 1 32 | lightmap: 0 33 | compressionQuality: 50 34 | spriteMode: 0 35 | spriteExtrude: 1 36 | spriteMeshType: 1 37 | alignment: 0 38 | spritePivot: {x: .5, y: .5} 39 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 40 | spritePixelsToUnits: 100 41 | alphaIsTransparency: 0 42 | textureType: -1 43 | buildTargetSettings: [] 44 | spriteSheet: 45 | sprites: [] 46 | spritePackingTag: 47 | userData: 48 | -------------------------------------------------------------------------------- /Assets/Menbrane.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c880baaa28313684bb6f3001acc7866c 3 | folderAsset: yes 4 | DefaultImporter: 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Menbrane/Brush.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Brush 10 | m_Shader: {fileID: 4800000, guid: 06acbf52bde1ec24496b90e08f231115, type: 3} 11 | m_ShaderKeywords: [] 12 | m_CustomRenderQueue: -1 13 | m_SavedProperties: 14 | serializedVersion: 2 15 | m_TexEnvs: 16 | data: 17 | first: 18 | name: _MainTex 19 | second: 20 | m_Texture: {fileID: 2800000, guid: e1cbe1ca1b84db24690b433532ac5f1b, type: 3} 21 | m_Scale: {x: 1, y: 1} 22 | m_Offset: {x: 0, y: 0} 23 | data: 24 | first: 25 | name: _BrushTex 26 | second: 27 | m_Texture: {fileID: 2800000, guid: e1cbe1ca1b84db24690b433532ac5f1b, type: 3} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | m_Floats: 31 | data: 32 | first: 33 | name: _Gain 34 | second: 1 35 | m_Colors: 36 | data: 37 | first: 38 | name: _Color 39 | second: {r: 1, g: 1, b: 1, a: 1} 40 | -------------------------------------------------------------------------------- /Assets/Menbrane/Brush.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 29db29e198e67a049859f0916ea7c444 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Menbrane/Brush.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nobnak/CausticsUnity/e8cd911262dda717850eee3e22a25bdc2ec78b09/Assets/Menbrane/Brush.png -------------------------------------------------------------------------------- /Assets/Menbrane/Brush.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e1cbe1ca1b84db24690b433532ac5f1b 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | serializedVersion: 2 6 | mipmaps: 7 | mipMapMode: 0 8 | enableMipMap: 1 9 | linearTexture: 0 10 | correctGamma: 0 11 | fadeOut: 0 12 | borderMipMap: 0 13 | mipMapFadeDistanceStart: 1 14 | mipMapFadeDistanceEnd: 3 15 | bumpmap: 16 | convertToNormalMap: 0 17 | externalNormalMap: 0 18 | heightScale: .25 19 | normalMapFilter: 0 20 | isReadable: 0 21 | grayScaleToAlpha: 0 22 | generateCubemap: 0 23 | seamlessCubemap: 0 24 | textureFormat: -1 25 | maxTextureSize: 1024 26 | textureSettings: 27 | filterMode: -1 28 | aniso: -1 29 | mipBias: -1 30 | wrapMode: -1 31 | nPOTScale: 1 32 | lightmap: 0 33 | compressionQuality: 50 34 | spriteMode: 0 35 | spriteExtrude: 1 36 | spriteMeshType: 1 37 | alignment: 0 38 | spritePivot: {x: .5, y: .5} 39 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 40 | spritePixelsToUnits: 100 41 | alphaIsTransparency: 0 42 | textureType: -1 43 | buildTargetSettings: [] 44 | spriteSheet: 45 | sprites: [] 46 | spritePackingTag: 47 | userData: 48 | -------------------------------------------------------------------------------- /Assets/Menbrane/Brush.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/Brush" { 2 | Properties { 3 | _MainTex ("Brush", 2D) = "black" {} 4 | _Gain ("Gain", Float) = 1.0 5 | } 6 | SubShader { 7 | ZTest Always Cull Off ZWrite Off Fog { Mode Off } 8 | Blend SrcAlpha One 9 | 10 | Pass { 11 | CGPROGRAM 12 | #pragma vertex vert 13 | #pragma fragment frag 14 | #include "UnityCG.cginc" 15 | 16 | sampler2D _MainTex; 17 | float _Gain; 18 | 19 | struct appdata { 20 | float4 vertex : POSITION; 21 | float2 uv : TEXCOORD0; 22 | }; 23 | struct vs2ps { 24 | float4 vertex : POSITION; 25 | float2 uv : TEXCOORD0; 26 | }; 27 | 28 | vs2ps vert(appdata IN) { 29 | vs2ps OUT; 30 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 31 | OUT.uv = IN.uv; 32 | return OUT; 33 | } 34 | float4 frag(vs2ps IN) : COLOR { 35 | float4 c = tex2D(_MainTex, IN.uv); 36 | c.a *= _Gain; 37 | return c; 38 | } 39 | ENDCG 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Assets/Menbrane/Brush.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 06acbf52bde1ec24496b90e08f231115 3 | ShaderImporter: 4 | defaultTextures: [] 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Menbrane/Color.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Color 10 | m_Shader: {fileID: 4800000, guid: 1fed5006e2a5f72469bc2f2c68066b0c, type: 3} 11 | m_ShaderKeywords: [] 12 | m_CustomRenderQueue: -1 13 | m_SavedProperties: 14 | serializedVersion: 2 15 | m_TexEnvs: 16 | data: 17 | first: 18 | name: _MainTex 19 | second: 20 | m_Texture: {fileID: 0} 21 | m_Scale: {x: 1, y: 1} 22 | m_Offset: {x: 0, y: 0} 23 | m_Floats: {} 24 | m_Colors: 25 | data: 26 | first: 27 | name: _Color 28 | second: {r: 1, g: 1, b: 1, a: 1} 29 | -------------------------------------------------------------------------------- /Assets/Menbrane/Color.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f07c72a4d6dcb80459f4309834d7fd56 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Menbrane/Color.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/Color" { 2 | Properties { 3 | _MainTex ("Base (RGB)", 2D) = "white" {} 4 | _Color ("Color", Color) = (1, 1, 1, 1) 5 | } 6 | SubShader { 7 | Tags { "RenderType"="Opaque" } 8 | LOD 200 9 | 10 | Pass { 11 | CGPROGRAM 12 | #pragma target 5.0 13 | #pragma vertex vert 14 | #pragma fragment frag 15 | #include "UnityCG.cginc" 16 | 17 | sampler2D _MainTex; 18 | float4 _Color; 19 | 20 | struct Input { 21 | float4 vertex : POSITION; 22 | float2 uv : TEXCOORD0; 23 | }; 24 | 25 | Input vert(Input IN) { 26 | Input OUT; 27 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 28 | OUT.uv = IN.uv; 29 | return OUT; 30 | } 31 | 32 | float4 frag(Input IN) : COLOR { 33 | float4 c = tex2D(_MainTex, IN.uv); 34 | return c * _Color; 35 | } 36 | ENDCG 37 | } 38 | } 39 | FallBack "Diffuse" 40 | } 41 | -------------------------------------------------------------------------------- /Assets/Menbrane/Color.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1fed5006e2a5f72469bc2f2c68066b0c 3 | ShaderImporter: 4 | defaultTextures: [] 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | namespace nobnak.Menbrane { 5 | 6 | public class Menbrane : MonoBehaviour { 7 | public const string SHADER_BUMP_TEX = "_BumpMap"; 8 | public const string SHADER_DT = "_Dt"; 9 | public const string SHADER_DX = "_Dx"; 10 | public const string SHADER_T = "_T"; 11 | 12 | public Material sim; 13 | public Material brushMat; 14 | public int nGrids = 256; 15 | public float l = 4; 16 | public int fps = 30; 17 | public float tension = 3; 18 | public float density = 10; 19 | 20 | private RenderTexture _hvTex0, _hvTex1; 21 | private RenderTexture _nTex; 22 | private Ticker _ticker; 23 | 24 | void OnDestroy() { 25 | Release(); 26 | } 27 | void Start() { 28 | _ticker = new Ticker(fps); 29 | } 30 | void Update() { 31 | CheckInit(); 32 | 33 | var dt = 1f / fps; 34 | var nSteps = _ticker.Count(); 35 | var dx = l / nGrids; 36 | var mass = density * dx * dx; 37 | 38 | sim.SetFloat(SHADER_DX, dx); 39 | sim.SetFloat(SHADER_DT, dt); 40 | sim.SetFloat(SHADER_T, tension / mass); 41 | 42 | if (Input.GetMouseButton(0)) { 43 | var ray = Camera.main.ScreenPointToRay(Input.mousePosition); 44 | RaycastHit hit; 45 | if (collider.Raycast(ray, out hit, float.MaxValue)) { 46 | var pxPos = nGrids * hit.textureCoord; 47 | var projMat = Matrix4x4.Ortho(0f, nGrids, 0f, nGrids, -1f, 1f); 48 | var brushTex = brushMat.mainTexture; 49 | var brushSize = 0.128f * nGrids; 50 | var paintRect = new Rect(pxPos.x - 0.5f * brushSize, pxPos.y - 0.5f * brushSize, 51 | brushSize, brushSize); 52 | 53 | GL.PushMatrix(); 54 | GL.LoadIdentity(); 55 | GL.LoadProjectionMatrix(projMat); 56 | RenderTexture.active = _hvTex0; 57 | Graphics.DrawTexture(paintRect, brushTex, brushMat); 58 | RenderTexture.active = null; 59 | GL.PopMatrix(); 60 | } 61 | } 62 | 63 | for (var i = 0; i < nSteps; i++) { 64 | Graphics.Blit(_hvTex0, _hvTex1, sim, 0); 65 | Swap(); 66 | Graphics.Blit(_hvTex0, _nTex, sim, 1); 67 | } 68 | 69 | var mat = renderer.sharedMaterial; 70 | mat.SetTexture(SHADER_BUMP_TEX, _nTex); 71 | } 72 | 73 | void Release() { 74 | if (_hvTex0 != null) 75 | _hvTex0.Release(); 76 | if (_hvTex1 != null) 77 | _hvTex1.Release(); 78 | if (_nTex != null) 79 | _nTex.Release(); 80 | } 81 | void Swap() { 82 | var tmpRtex = _hvTex0; _hvTex0 = _hvTex1; _hvTex1 = tmpRtex; 83 | } 84 | void CheckInit() { 85 | if (_hvTex0 != null && _hvTex0.width == nGrids) 86 | return; 87 | 88 | Release(); 89 | _hvTex0 = new RenderTexture(nGrids, nGrids, 0, RenderTextureFormat.RGFloat, RenderTextureReadWrite.Linear); 90 | _hvTex1 = new RenderTexture(nGrids, nGrids, 0, RenderTextureFormat.RGFloat, RenderTextureReadWrite.Linear); 91 | _nTex = new RenderTexture(nGrids, nGrids, 0, RenderTextureFormat.ARGBFloat, RenderTextureReadWrite.Linear); 92 | _hvTex0.wrapMode = _hvTex1.wrapMode = _nTex.wrapMode = TextureWrapMode.Repeat; 93 | _hvTex0.Create(); 94 | _hvTex1.Create(); 95 | _nTex.Create(); 96 | 97 | RenderTexture.active = _hvTex0; 98 | GL.Clear(true, true, Color.black); 99 | RenderTexture.active = _hvTex1; 100 | GL.Clear(true, true, Color.black); 101 | RenderTexture.active = null; 102 | } 103 | } 104 | } -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 25f7d297d30eaf44cbd7020b453a67da 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Menbrane 10 | m_Shader: {fileID: 4800000, guid: d5cf430eed8c80743aed2a0079d0c770, type: 3} 11 | m_ShaderKeywords: [] 12 | m_CustomRenderQueue: -1 13 | m_SavedProperties: 14 | serializedVersion: 2 15 | m_TexEnvs: 16 | data: 17 | first: 18 | name: _MainTex 19 | second: 20 | m_Texture: {fileID: 0} 21 | m_Scale: {x: 1, y: 1} 22 | m_Offset: {x: 0, y: 0} 23 | m_Floats: 24 | data: 25 | first: 26 | name: _T 27 | second: 49.1520004 28 | data: 29 | first: 30 | name: _Dt 31 | second: .00999999978 32 | data: 33 | first: 34 | name: _Dx 35 | second: .078125 36 | data: 37 | first: 38 | name: _Gain 39 | second: .99000001 40 | m_Colors: 41 | data: 42 | first: 43 | name: _Color 44 | second: {r: 1, g: 1, b: 1, a: 1} 45 | data: 46 | first: 47 | name: _K 48 | second: {r: 0, g: .5, b: 0, a: 0} 49 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4b8dfbae77b2ce5409725fc25ace6a43 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/Menbrane" { 2 | Properties { 3 | _MainTex ("Base (RGB)", 2D) = "white" {} 4 | _T ("Tension", Float) = 1.0 5 | _Dt ("Delta T", Float) = 0.01 6 | _Dx ("Delta X", Float) = 0.01 7 | _K ("Damping", Vector) = (0, 0, 0, 0) 8 | _Gain ("Height Gain", Float) = 1 9 | } 10 | SubShader { 11 | ZTest Always Cull Off ZWrite Off Fog { Mode Off } 12 | 13 | CGINCLUDE 14 | #include "UnityCG.cginc" 15 | 16 | sampler2D _MainTex; 17 | float4 _MainTex_TexelSize; 18 | float _T; 19 | float _Dt; 20 | float _Dx; 21 | float4 _K; 22 | float _Gain; 23 | 24 | struct appdata { 25 | float4 vertex : POSITION; 26 | float2 uv : TEXCOORD0; 27 | }; 28 | struct vs2ps { 29 | float4 vertex : POSITION; 30 | float2 uv : TEXCOORD0; 31 | }; 32 | 33 | vs2ps vert(appdata IN) { 34 | vs2ps OUT; 35 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 36 | OUT.uv = IN.uv; 37 | return OUT; 38 | } 39 | ENDCG 40 | 41 | Pass { 42 | CGPROGRAM 43 | #pragma target 5.0 44 | #pragma vertex vert 45 | #pragma fragment frag 46 | 47 | float4 frag(vs2ps IN) : COLOR { 48 | float2 dTex = _MainTex_TexelSize.xy; 49 | float4 h1 = tex2D(_MainTex, IN.uv); 50 | float4 h_x2 = tex2D(_MainTex, IN.uv + float2( 1, 0) * dTex); 51 | float4 h_x0 = tex2D(_MainTex, IN.uv + float2(-1, 0) * dTex); 52 | float4 h_y2 = tex2D(_MainTex, IN.uv + float2( 0, 1) * dTex); 53 | float4 h_y0 = tex2D(_MainTex, IN.uv + float2( 0, -1) * dTex); 54 | 55 | // h(t), v(t) 56 | float h = h1.x; 57 | float v = h1.y; 58 | float dhdx = (h_x2.x + h_x0.x + h_y2.x + h_y0.x - 4.0 * h) / _Dx; 59 | float f = _T * dhdx; 60 | v = (v + f * _Dt) * (1.0 - _K.y * _Dt); 61 | h = (h + v * _Dt) * (1.0 - _K.x * _Dt); 62 | return float4(h, v, 0, 0); 63 | } 64 | ENDCG 65 | } 66 | Pass { 67 | CGPROGRAM 68 | #pragma target 5.0 69 | #pragma vertex vert 70 | #pragma fragment frag 71 | 72 | float4 frag(vs2ps IN) : COLOR { 73 | float2 dtex = _MainTex_TexelSize.xy; 74 | float hx0 = tex2D(_MainTex, IN.uv + float2(-0.5, 0) * dtex).r; 75 | float hx1 = tex2D(_MainTex, IN.uv + float2(+0.5, 0) * dtex).r; 76 | float hy0 = tex2D(_MainTex, IN.uv + float2(0, -0.5) * dtex).r; 77 | float hy1 = tex2D(_MainTex, IN.uv + float2(0, +0.5) * dtex).r; 78 | 79 | float dhdx = _Gain * (hx1 - hx0) / _Dx; 80 | float dhdy = _Gain * (hy1 - hy0) / _Dx; 81 | float3 n = normalize(float3(-dhdx, -dhdy, 1.0)); 82 | //return float4(0.5 * (n + 1.0), 1.0); 83 | return float4(n, 1.0); 84 | } 85 | ENDCG 86 | } 87 | } 88 | FallBack "Diffuse" 89 | } 90 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d5cf430eed8c80743aed2a0079d0c770 3 | ShaderImporter: 4 | defaultTextures: [] 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | SceneSettings: 5 | m_ObjectHideFlags: 0 6 | m_PVSData: 7 | m_PVSObjectsArray: [] 8 | m_PVSPortalsArray: [] 9 | m_OcclusionBakeSettings: 10 | smallestOccluder: 5 11 | smallestHole: .25 12 | backfaceThreshold: 100 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_Fog: 0 16 | m_FogColor: {r: .5, g: .5, b: .5, a: 1} 17 | m_FogMode: 3 18 | m_FogDensity: .00999999978 19 | m_LinearFogStart: 0 20 | m_LinearFogEnd: 300 21 | m_AmbientLight: {r: .200000003, g: .200000003, b: .200000003, a: 1} 22 | m_SkyboxMaterial: {fileID: 0} 23 | m_HaloStrength: .5 24 | m_FlareStrength: 1 25 | m_FlareFadeSpeed: 3 26 | m_HaloTexture: {fileID: 0} 27 | m_SpotCookie: {fileID: 0} 28 | m_ObjectHideFlags: 0 29 | --- !u!127 &3 30 | LevelGameManager: 31 | m_ObjectHideFlags: 0 32 | --- !u!157 &4 33 | LightmapSettings: 34 | m_ObjectHideFlags: 0 35 | m_LightProbes: {fileID: 0} 36 | m_Lightmaps: [] 37 | m_LightmapsMode: 1 38 | m_BakedColorSpace: 0 39 | m_UseDualLightmapsInForward: 0 40 | m_LightmapEditorSettings: 41 | m_Resolution: 50 42 | m_LastUsedResolution: 0 43 | m_TextureWidth: 1024 44 | m_TextureHeight: 1024 45 | m_BounceBoost: 1 46 | m_BounceIntensity: 1 47 | m_SkyLightColor: {r: .860000014, g: .930000007, b: 1, a: 1} 48 | m_SkyLightIntensity: 0 49 | m_Quality: 0 50 | m_Bounces: 1 51 | m_FinalGatherRays: 1000 52 | m_FinalGatherContrastThreshold: .0500000007 53 | m_FinalGatherGradientThreshold: 0 54 | m_FinalGatherInterpolationPoints: 15 55 | m_AOAmount: 0 56 | m_AOMaxDistance: .100000001 57 | m_AOContrast: 1 58 | m_LODSurfaceMappingDistance: 1 59 | m_Padding: 0 60 | m_TextureCompression: 0 61 | m_LockAtlas: 0 62 | --- !u!196 &5 63 | NavMeshSettings: 64 | m_ObjectHideFlags: 0 65 | m_BuildSettings: 66 | agentRadius: .5 67 | agentHeight: 2 68 | agentSlope: 45 69 | agentClimb: .400000006 70 | ledgeDropHeight: 0 71 | maxJumpAcrossDistance: 0 72 | accuratePlacement: 0 73 | minRegionArea: 2 74 | widthInaccuracy: 16.666666 75 | heightInaccuracy: 10 76 | m_NavMesh: {fileID: 0} 77 | --- !u!1 &186712075 78 | GameObject: 79 | m_ObjectHideFlags: 0 80 | m_PrefabParentObject: {fileID: 0} 81 | m_PrefabInternal: {fileID: 0} 82 | serializedVersion: 4 83 | m_Component: 84 | - 4: {fileID: 186712078} 85 | - 33: {fileID: 186712077} 86 | - 23: {fileID: 186712076} 87 | - 114: {fileID: 186712079} 88 | - 64: {fileID: 186712080} 89 | m_Layer: 0 90 | m_Name: Quad 91 | m_TagString: Untagged 92 | m_Icon: {fileID: 0} 93 | m_NavMeshLayer: 0 94 | m_StaticEditorFlags: 0 95 | m_IsActive: 1 96 | --- !u!23 &186712076 97 | Renderer: 98 | m_ObjectHideFlags: 0 99 | m_PrefabParentObject: {fileID: 0} 100 | m_PrefabInternal: {fileID: 0} 101 | m_GameObject: {fileID: 186712075} 102 | m_Enabled: 1 103 | m_CastShadows: 0 104 | m_ReceiveShadows: 0 105 | m_LightmapIndex: 255 106 | m_LightmapTilingOffset: {x: 1, y: 1, z: 0, w: 0} 107 | m_Materials: 108 | - {fileID: 2100000, guid: f07c72a4d6dcb80459f4309834d7fd56, type: 2} 109 | m_SubsetIndices: 110 | m_StaticBatchRoot: {fileID: 0} 111 | m_UseLightProbes: 0 112 | m_LightProbeAnchor: {fileID: 0} 113 | m_ScaleInLightmap: 1 114 | m_SortingLayerID: 0 115 | m_SortingOrder: 0 116 | --- !u!33 &186712077 117 | MeshFilter: 118 | m_ObjectHideFlags: 0 119 | m_PrefabParentObject: {fileID: 0} 120 | m_PrefabInternal: {fileID: 0} 121 | m_GameObject: {fileID: 186712075} 122 | m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} 123 | --- !u!4 &186712078 124 | Transform: 125 | m_ObjectHideFlags: 0 126 | m_PrefabParentObject: {fileID: 0} 127 | m_PrefabInternal: {fileID: 0} 128 | m_GameObject: {fileID: 186712075} 129 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 130 | m_LocalPosition: {x: 0, y: 0, z: 0} 131 | m_LocalScale: {x: 10, y: 10, z: 1} 132 | m_Children: [] 133 | m_Father: {fileID: 0} 134 | m_RootOrder: 1 135 | --- !u!114 &186712079 136 | MonoBehaviour: 137 | m_ObjectHideFlags: 0 138 | m_PrefabParentObject: {fileID: 0} 139 | m_PrefabInternal: {fileID: 0} 140 | m_GameObject: {fileID: 186712075} 141 | m_Enabled: 1 142 | m_EditorHideFlags: 0 143 | m_Script: {fileID: 11500000, guid: 25f7d297d30eaf44cbd7020b453a67da, type: 3} 144 | m_Name: 145 | m_EditorClassIdentifier: 146 | sim: {fileID: 2100000, guid: 4b8dfbae77b2ce5409725fc25ace6a43, type: 2} 147 | brushMat: {fileID: 2100000, guid: 29db29e198e67a049859f0916ea7c444, type: 2} 148 | nGrids: 256 149 | l: 20 150 | fps: 200 151 | tension: 3 152 | density: 10 153 | --- !u!64 &186712080 154 | MeshCollider: 155 | m_ObjectHideFlags: 0 156 | m_PrefabParentObject: {fileID: 0} 157 | m_PrefabInternal: {fileID: 0} 158 | m_GameObject: {fileID: 186712075} 159 | m_Material: {fileID: 0} 160 | m_IsTrigger: 0 161 | m_Enabled: 1 162 | serializedVersion: 2 163 | m_SmoothSphereCollisions: 0 164 | m_Convex: 0 165 | m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} 166 | --- !u!1 &888964134 167 | GameObject: 168 | m_ObjectHideFlags: 0 169 | m_PrefabParentObject: {fileID: 0} 170 | m_PrefabInternal: {fileID: 0} 171 | serializedVersion: 4 172 | m_Component: 173 | - 4: {fileID: 888964139} 174 | - 20: {fileID: 888964138} 175 | - 92: {fileID: 888964137} 176 | - 124: {fileID: 888964136} 177 | - 81: {fileID: 888964135} 178 | m_Layer: 0 179 | m_Name: Main Camera 180 | m_TagString: MainCamera 181 | m_Icon: {fileID: 0} 182 | m_NavMeshLayer: 0 183 | m_StaticEditorFlags: 0 184 | m_IsActive: 1 185 | --- !u!81 &888964135 186 | AudioListener: 187 | m_ObjectHideFlags: 0 188 | m_PrefabParentObject: {fileID: 0} 189 | m_PrefabInternal: {fileID: 0} 190 | m_GameObject: {fileID: 888964134} 191 | m_Enabled: 1 192 | --- !u!124 &888964136 193 | Behaviour: 194 | m_ObjectHideFlags: 0 195 | m_PrefabParentObject: {fileID: 0} 196 | m_PrefabInternal: {fileID: 0} 197 | m_GameObject: {fileID: 888964134} 198 | m_Enabled: 1 199 | --- !u!92 &888964137 200 | Behaviour: 201 | m_ObjectHideFlags: 0 202 | m_PrefabParentObject: {fileID: 0} 203 | m_PrefabInternal: {fileID: 0} 204 | m_GameObject: {fileID: 888964134} 205 | m_Enabled: 1 206 | --- !u!20 &888964138 207 | Camera: 208 | m_ObjectHideFlags: 0 209 | m_PrefabParentObject: {fileID: 0} 210 | m_PrefabInternal: {fileID: 0} 211 | m_GameObject: {fileID: 888964134} 212 | m_Enabled: 1 213 | serializedVersion: 2 214 | m_ClearFlags: 1 215 | m_BackGroundColor: {r: .192156866, g: .301960796, b: .474509805, a: .0196078438} 216 | m_NormalizedViewPortRect: 217 | serializedVersion: 2 218 | x: 0 219 | y: 0 220 | width: 1 221 | height: 1 222 | near clip plane: .300000012 223 | far clip plane: 1000 224 | field of view: 60 225 | orthographic: 1 226 | orthographic size: 5 227 | m_Depth: -1 228 | m_CullingMask: 229 | serializedVersion: 2 230 | m_Bits: 4294967295 231 | m_RenderingPath: -1 232 | m_TargetTexture: {fileID: 0} 233 | m_TargetDisplay: 0 234 | m_HDR: 0 235 | m_OcclusionCulling: 1 236 | m_StereoConvergence: 10 237 | m_StereoSeparation: .0219999999 238 | --- !u!4 &888964139 239 | Transform: 240 | m_ObjectHideFlags: 0 241 | m_PrefabParentObject: {fileID: 0} 242 | m_PrefabInternal: {fileID: 0} 243 | m_GameObject: {fileID: 888964134} 244 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 245 | m_LocalPosition: {x: 0, y: 0, z: -10} 246 | m_LocalScale: {x: 1, y: 1, z: 1} 247 | m_Children: [] 248 | m_Father: {fileID: 0} 249 | m_RootOrder: 0 250 | -------------------------------------------------------------------------------- /Assets/Menbrane/Menbrane.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2eede079bc68ca04db85d669407894a6 3 | DefaultImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Menbrane/NormalGen.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 3 6 | m_ObjectHideFlags: 0 7 | m_PrefabParentObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: NormalGen 10 | m_Shader: {fileID: 4800000, guid: 937191dd7ee8d074e944e9a6d3fc8fd4, type: 3} 11 | m_ShaderKeywords: [] 12 | m_CustomRenderQueue: -1 13 | m_SavedProperties: 14 | serializedVersion: 2 15 | m_TexEnvs: 16 | data: 17 | first: 18 | name: _MainTex 19 | second: 20 | m_Texture: {fileID: 0} 21 | m_Scale: {x: 1, y: 1} 22 | m_Offset: {x: 0, y: 0} 23 | m_Floats: 24 | data: 25 | first: 26 | name: _Dx 27 | second: .078125 28 | data: 29 | first: 30 | name: _Gain 31 | second: .579999983 32 | m_Colors: 33 | data: 34 | first: 35 | name: _Color 36 | second: {r: 1, g: 1, b: 1, a: 1} 37 | -------------------------------------------------------------------------------- /Assets/Menbrane/NormalGen.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f790ee854aa07a94fad4f120a3a047c0 3 | NativeFormatImporter: 4 | userData: 5 | -------------------------------------------------------------------------------- /Assets/Menbrane/NormalGen.shader: -------------------------------------------------------------------------------- 1 | Shader "Custom/NormalGen" { 2 | Properties { 3 | _MainTex ("Base (RGB)", 2D) = "white" {} 4 | _Dx ("Delta X", Float) = 1 5 | _Gain ("Height Gain", Float) = 1 6 | } 7 | SubShader { 8 | Tags { "RenderType"="Opaque" } 9 | LOD 200 10 | 11 | Pass { 12 | CGPROGRAM 13 | #pragma target 5.0 14 | #pragma vertex vert 15 | #pragma fragment frag 16 | #include "UnityCG.cginc" 17 | 18 | float4 _MainTex_TexelSize; 19 | 20 | sampler2D _MainTex; 21 | float _Dx; 22 | float _Gain; 23 | 24 | struct Input { 25 | float4 vertex : POSITION; 26 | float2 uv : TEXCOORD0; 27 | }; 28 | 29 | Input vert(Input IN) { 30 | Input OUT; 31 | OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex); 32 | OUT.uv = IN.uv; 33 | return OUT; 34 | } 35 | 36 | float4 frag(Input IN) : COLOR { 37 | float2 dtex = _MainTex_TexelSize.xy; 38 | float hx0 = tex2D(_MainTex, IN.uv + float2(-0.5, 0) * dtex).r; 39 | float hx1 = tex2D(_MainTex, IN.uv + float2(+0.5, 0) * dtex).r; 40 | float hy0 = tex2D(_MainTex, IN.uv + float2(0, -0.5) * dtex).r; 41 | float hy1 = tex2D(_MainTex, IN.uv + float2(0, +0.5) * dtex).r; 42 | 43 | float dhdx = _Gain * (hx1 - hx0) / _Dx; 44 | float dhdy = _Gain * (hy1 - hy0) / _Dx; 45 | float3 n = normalize(float3(-dhdx, -dhdy, 1.0)); 46 | return float4(0.5 * (n + 1.0), 1.0); 47 | } 48 | ENDCG 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Assets/Menbrane/NormalGen.shader.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 937191dd7ee8d074e944e9a6d3fc8fd4 3 | ShaderImporter: 4 | defaultTextures: [] 5 | userData: 6 | -------------------------------------------------------------------------------- /Assets/Menbrane/Ticker.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | 4 | public class Ticker { 5 | public readonly float Fps; 6 | public readonly float Dt; 7 | 8 | private float _tPrev = 0; 9 | 10 | public Ticker(float fps) { 11 | Dt = 1f / fps; 12 | _tPrev = Time.timeSinceLevelLoad; 13 | } 14 | 15 | public int Count() { 16 | var nSteps = Mathf.FloorToInt((Time.timeSinceLevelLoad - _tPrev) / Dt); 17 | _tPrev += nSteps * Dt; 18 | return nSteps; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Assets/Menbrane/Ticker.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4102b17fd2cdb554192b524ba8c4353d 3 | MonoImporter: 4 | serializedVersion: 2 5 | defaultReferences: [] 6 | executionOrder: 0 7 | icon: {instanceID: 0} 8 | userData: 9 | -------------------------------------------------------------------------------- /Html/Img/Screenshot_Demo01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nobnak/CausticsUnity/e8cd911262dda717850eee3e22a25bdc2ec78b09/Html/Img/Screenshot_Demo01.png -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | m_SpeedOfSound: 347 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_DSPBufferSize: 0 12 | m_DisableAudio: 0 13 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | m_Gravity: {x: 0, y: -9.81000042, z: 0} 7 | m_DefaultMaterial: {fileID: 0} 8 | m_BounceThreshold: 2 9 | m_SleepVelocity: .150000006 10 | m_SleepAngularVelocity: .140000001 11 | m_MaxAngularVelocity: 7 12 | m_MinPenetrationForPenalty: .00999999978 13 | m_SolverIterationCount: 6 14 | m_RaycastsHitTriggers: 1 15 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 16 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_WebSecurityEmulationEnabled: 0 10 | m_WebSecurityEmulationHostUrl: http://www.mydomain.com/mygame.unity3d 11 | m_DefaultBehaviorMode: 0 12 | m_SpritePackerMode: 0 13 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | m_AlwaysIncludedShaders: 7 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 8 | -------------------------------------------------------------------------------- /ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | m_Axes: 7 | - serializedVersion: 3 8 | m_Name: Horizontal 9 | descriptiveName: 10 | descriptiveNegativeName: 11 | negativeButton: left 12 | positiveButton: right 13 | altNegativeButton: a 14 | altPositiveButton: d 15 | gravity: 3 16 | dead: .00100000005 17 | sensitivity: 3 18 | snap: 1 19 | invert: 0 20 | type: 0 21 | axis: 0 22 | joyNum: 0 23 | - serializedVersion: 3 24 | m_Name: Vertical 25 | descriptiveName: 26 | descriptiveNegativeName: 27 | negativeButton: down 28 | positiveButton: up 29 | altNegativeButton: s 30 | altPositiveButton: w 31 | gravity: 3 32 | dead: .00100000005 33 | sensitivity: 3 34 | snap: 1 35 | invert: 0 36 | type: 0 37 | axis: 0 38 | joyNum: 0 39 | - serializedVersion: 3 40 | m_Name: Fire1 41 | descriptiveName: 42 | descriptiveNegativeName: 43 | negativeButton: 44 | positiveButton: left ctrl 45 | altNegativeButton: 46 | altPositiveButton: mouse 0 47 | gravity: 1000 48 | dead: .00100000005 49 | sensitivity: 1000 50 | snap: 0 51 | invert: 0 52 | type: 0 53 | axis: 0 54 | joyNum: 0 55 | - serializedVersion: 3 56 | m_Name: Fire2 57 | descriptiveName: 58 | descriptiveNegativeName: 59 | negativeButton: 60 | positiveButton: left alt 61 | altNegativeButton: 62 | altPositiveButton: mouse 1 63 | gravity: 1000 64 | dead: .00100000005 65 | sensitivity: 1000 66 | snap: 0 67 | invert: 0 68 | type: 0 69 | axis: 0 70 | joyNum: 0 71 | - serializedVersion: 3 72 | m_Name: Fire3 73 | descriptiveName: 74 | descriptiveNegativeName: 75 | negativeButton: 76 | positiveButton: left cmd 77 | altNegativeButton: 78 | altPositiveButton: mouse 2 79 | gravity: 1000 80 | dead: .00100000005 81 | sensitivity: 1000 82 | snap: 0 83 | invert: 0 84 | type: 0 85 | axis: 0 86 | joyNum: 0 87 | - serializedVersion: 3 88 | m_Name: Jump 89 | descriptiveName: 90 | descriptiveNegativeName: 91 | negativeButton: 92 | positiveButton: space 93 | altNegativeButton: 94 | altPositiveButton: 95 | gravity: 1000 96 | dead: .00100000005 97 | sensitivity: 1000 98 | snap: 0 99 | invert: 0 100 | type: 0 101 | axis: 0 102 | joyNum: 0 103 | - serializedVersion: 3 104 | m_Name: Mouse X 105 | descriptiveName: 106 | descriptiveNegativeName: 107 | negativeButton: 108 | positiveButton: 109 | altNegativeButton: 110 | altPositiveButton: 111 | gravity: 0 112 | dead: 0 113 | sensitivity: .100000001 114 | snap: 0 115 | invert: 0 116 | type: 1 117 | axis: 0 118 | joyNum: 0 119 | - serializedVersion: 3 120 | m_Name: Mouse Y 121 | descriptiveName: 122 | descriptiveNegativeName: 123 | negativeButton: 124 | positiveButton: 125 | altNegativeButton: 126 | altPositiveButton: 127 | gravity: 0 128 | dead: 0 129 | sensitivity: .100000001 130 | snap: 0 131 | invert: 0 132 | type: 1 133 | axis: 1 134 | joyNum: 0 135 | - serializedVersion: 3 136 | m_Name: Mouse ScrollWheel 137 | descriptiveName: 138 | descriptiveNegativeName: 139 | negativeButton: 140 | positiveButton: 141 | altNegativeButton: 142 | altPositiveButton: 143 | gravity: 0 144 | dead: 0 145 | sensitivity: .100000001 146 | snap: 0 147 | invert: 0 148 | type: 1 149 | axis: 2 150 | joyNum: 0 151 | - serializedVersion: 3 152 | m_Name: Horizontal 153 | descriptiveName: 154 | descriptiveNegativeName: 155 | negativeButton: 156 | positiveButton: 157 | altNegativeButton: 158 | altPositiveButton: 159 | gravity: 0 160 | dead: .189999998 161 | sensitivity: 1 162 | snap: 0 163 | invert: 0 164 | type: 2 165 | axis: 0 166 | joyNum: 0 167 | - serializedVersion: 3 168 | m_Name: Vertical 169 | descriptiveName: 170 | descriptiveNegativeName: 171 | negativeButton: 172 | positiveButton: 173 | altNegativeButton: 174 | altPositiveButton: 175 | gravity: 0 176 | dead: .189999998 177 | sensitivity: 1 178 | snap: 0 179 | invert: 1 180 | type: 2 181 | axis: 1 182 | joyNum: 0 183 | - serializedVersion: 3 184 | m_Name: Fire1 185 | descriptiveName: 186 | descriptiveNegativeName: 187 | negativeButton: 188 | positiveButton: joystick button 0 189 | altNegativeButton: 190 | altPositiveButton: 191 | gravity: 1000 192 | dead: .00100000005 193 | sensitivity: 1000 194 | snap: 0 195 | invert: 0 196 | type: 0 197 | axis: 0 198 | joyNum: 0 199 | - serializedVersion: 3 200 | m_Name: Fire2 201 | descriptiveName: 202 | descriptiveNegativeName: 203 | negativeButton: 204 | positiveButton: joystick button 1 205 | altNegativeButton: 206 | altPositiveButton: 207 | gravity: 1000 208 | dead: .00100000005 209 | sensitivity: 1000 210 | snap: 0 211 | invert: 0 212 | type: 0 213 | axis: 0 214 | joyNum: 0 215 | - serializedVersion: 3 216 | m_Name: Fire3 217 | descriptiveName: 218 | descriptiveNegativeName: 219 | negativeButton: 220 | positiveButton: joystick button 2 221 | altNegativeButton: 222 | altPositiveButton: 223 | gravity: 1000 224 | dead: .00100000005 225 | sensitivity: 1000 226 | snap: 0 227 | invert: 0 228 | type: 0 229 | axis: 0 230 | joyNum: 0 231 | - serializedVersion: 3 232 | m_Name: Jump 233 | descriptiveName: 234 | descriptiveNegativeName: 235 | negativeButton: 236 | positiveButton: joystick button 3 237 | altNegativeButton: 238 | altPositiveButton: 239 | gravity: 1000 240 | dead: .00100000005 241 | sensitivity: 1000 242 | snap: 0 243 | invert: 0 244 | type: 0 245 | axis: 0 246 | joyNum: 0 247 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshLayers.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshLayers: 5 | m_ObjectHideFlags: 0 6 | Built-in Layer 0: 7 | name: Default 8 | cost: 1 9 | editType: 2 10 | Built-in Layer 1: 11 | name: Not Walkable 12 | cost: 1 13 | editType: 0 14 | Built-in Layer 2: 15 | name: Jump 16 | cost: 2 17 | editType: 2 18 | User Layer 0: 19 | name: 20 | cost: 1 21 | editType: 3 22 | User Layer 1: 23 | name: 24 | cost: 1 25 | editType: 3 26 | User Layer 2: 27 | name: 28 | cost: 1 29 | editType: 3 30 | User Layer 3: 31 | name: 32 | cost: 1 33 | editType: 3 34 | User Layer 4: 35 | name: 36 | cost: 1 37 | editType: 3 38 | User Layer 5: 39 | name: 40 | cost: 1 41 | editType: 3 42 | User Layer 6: 43 | name: 44 | cost: 1 45 | editType: 3 46 | User Layer 7: 47 | name: 48 | cost: 1 49 | editType: 3 50 | User Layer 8: 51 | name: 52 | cost: 1 53 | editType: 3 54 | User Layer 9: 55 | name: 56 | cost: 1 57 | editType: 3 58 | User Layer 10: 59 | name: 60 | cost: 1 61 | editType: 3 62 | User Layer 11: 63 | name: 64 | cost: 1 65 | editType: 3 66 | User Layer 12: 67 | name: 68 | cost: 1 69 | editType: 3 70 | User Layer 13: 71 | name: 72 | cost: 1 73 | editType: 3 74 | User Layer 14: 75 | name: 76 | cost: 1 77 | editType: 3 78 | User Layer 15: 79 | name: 80 | cost: 1 81 | editType: 3 82 | User Layer 16: 83 | name: 84 | cost: 1 85 | editType: 3 86 | User Layer 17: 87 | name: 88 | cost: 1 89 | editType: 3 90 | User Layer 18: 91 | name: 92 | cost: 1 93 | editType: 3 94 | User Layer 19: 95 | name: 96 | cost: 1 97 | editType: 3 98 | User Layer 20: 99 | name: 100 | cost: 1 101 | editType: 3 102 | User Layer 21: 103 | name: 104 | cost: 1 105 | editType: 3 106 | User Layer 22: 107 | name: 108 | cost: 1 109 | editType: 3 110 | User Layer 23: 111 | name: 112 | cost: 1 113 | editType: 3 114 | User Layer 24: 115 | name: 116 | cost: 1 117 | editType: 3 118 | User Layer 25: 119 | name: 120 | cost: 1 121 | editType: 3 122 | User Layer 26: 123 | name: 124 | cost: 1 125 | editType: 3 126 | User Layer 27: 127 | name: 128 | cost: 1 129 | editType: 3 130 | User Layer 28: 131 | name: 132 | cost: 1 133 | editType: 3 134 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | m_Gravity: {x: 0, y: -9.81000042} 7 | m_DefaultMaterial: {fileID: 0} 8 | m_VelocityIterations: 8 9 | m_PositionIterations: 3 10 | m_VelocityThreshold: 1 11 | m_MaxLinearCorrection: .200000003 12 | m_MaxAngularCorrection: 8 13 | m_MaxTranslationSpeed: 100 14 | m_MaxRotationSpeed: 360 15 | m_BaumgarteScale: .200000003 16 | m_BaumgarteTimeOfImpactScale: .75 17 | m_TimeToSleep: .5 18 | m_LinearSleepTolerance: .00999999978 19 | m_AngularSleepTolerance: 2 20 | m_RaycastsHitTriggers: 1 21 | m_DeleteStopsCallbacks: 1 22 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 23 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | AndroidProfiler: 0 8 | defaultScreenOrientation: 4 9 | targetDevice: 2 10 | targetGlesGraphics: 1 11 | targetResolution: 0 12 | accelerometerFrequency: 60 13 | companyName: DefaultCompany 14 | productName: Reflection 15 | defaultCursor: {fileID: 0} 16 | cursorHotspot: {x: 0, y: 0} 17 | defaultScreenWidth: 1024 18 | defaultScreenHeight: 768 19 | defaultScreenWidthWeb: 960 20 | defaultScreenHeightWeb: 600 21 | m_RenderingPath: 1 22 | m_MobileRenderingPath: 1 23 | m_ActiveColorSpace: 1 24 | m_MTRendering: 1 25 | m_MobileMTRendering: 0 26 | m_UseDX11: 1 27 | m_Stereoscopic3D: 0 28 | iosShowActivityIndicatorOnLoading: -1 29 | androidShowActivityIndicatorOnLoading: -1 30 | displayResolutionDialog: 1 31 | allowedAutorotateToPortrait: 1 32 | allowedAutorotateToPortraitUpsideDown: 1 33 | allowedAutorotateToLandscapeRight: 1 34 | allowedAutorotateToLandscapeLeft: 1 35 | useOSAutorotation: 1 36 | use32BitDisplayBuffer: 1 37 | use24BitDepthBuffer: 1 38 | defaultIsFullScreen: 1 39 | defaultIsNativeResolution: 1 40 | runInBackground: 0 41 | captureSingleScreen: 0 42 | Override IPod Music: 0 43 | Prepare IOS For Recording: 0 44 | enableHWStatistics: 1 45 | usePlayerLog: 1 46 | stripPhysics: 0 47 | forceSingleInstance: 0 48 | resizableWindow: 0 49 | useMacAppStoreValidation: 0 50 | gpuSkinning: 0 51 | xboxPIXTextureCapture: 0 52 | xboxEnableAvatar: 0 53 | xboxEnableKinect: 0 54 | xboxEnableKinectAutoTracking: 0 55 | xboxEnableFitness: 0 56 | visibleInBackground: 0 57 | macFullscreenMode: 2 58 | d3d9FullscreenMode: 1 59 | d3d11ForceExclusiveMode: 0 60 | xboxSpeechDB: 0 61 | xboxEnableHeadOrientation: 0 62 | xboxEnableGuest: 0 63 | videoMemoryForVertexBuffers: 0 64 | m_SupportedAspectRatios: 65 | 4:3: 1 66 | 5:4: 1 67 | 16:10: 1 68 | 16:9: 1 69 | Others: 1 70 | iPhoneBundleIdentifier: com.Company.ProductName 71 | metroEnableIndependentInputSource: 0 72 | metroEnableLowLatencyPresentationAPI: 0 73 | productGUID: bc749b298748bec43bfd3a881dd1a54e 74 | iPhoneBundleVersion: 1.0 75 | AndroidBundleVersionCode: 1 76 | AndroidMinSdkVersion: 9 77 | AndroidPreferredInstallLocation: 1 78 | aotOptions: 79 | apiCompatibilityLevel: 2 80 | iPhoneStrippingLevel: 0 81 | iPhoneScriptCallOptimization: 0 82 | ForceInternetPermission: 0 83 | ForceSDCardPermission: 0 84 | CreateWallpaper: 0 85 | APKExpansionFiles: 0 86 | StripUnusedMeshComponents: 0 87 | iPhoneSdkVersion: 988 88 | iPhoneTargetOSVersion: 16 89 | uIPrerenderedIcon: 0 90 | uIRequiresPersistentWiFi: 0 91 | uIStatusBarHidden: 1 92 | uIExitOnSuspend: 0 93 | uIStatusBarStyle: 0 94 | iPhoneSplashScreen: {fileID: 0} 95 | iPhoneHighResSplashScreen: {fileID: 0} 96 | iPhoneTallHighResSplashScreen: {fileID: 0} 97 | iPhone47inSplashScreen: {fileID: 0} 98 | iPhone55inPortraitSplashScreen: {fileID: 0} 99 | iPhone55inLandscapeSplashScreen: {fileID: 0} 100 | iPadPortraitSplashScreen: {fileID: 0} 101 | iPadHighResPortraitSplashScreen: {fileID: 0} 102 | iPadLandscapeSplashScreen: {fileID: 0} 103 | iPadHighResLandscapeSplashScreen: {fileID: 0} 104 | AndroidTargetDevice: 0 105 | AndroidSplashScreenScale: 0 106 | AndroidKeystoreName: 107 | AndroidKeyaliasName: 108 | resolutionDialogBanner: {fileID: 0} 109 | m_BuildTargetIcons: 110 | - m_BuildTarget: 111 | m_Icons: 112 | - m_Icon: {fileID: 0} 113 | m_Size: 128 114 | m_BuildTargetBatching: [] 115 | webPlayerTemplate: APPLICATION:Default 116 | m_TemplateCustomTags: {} 117 | XboxTitleId: 118 | XboxImageXexPath: 119 | XboxSpaPath: 120 | XboxGenerateSpa: 0 121 | XboxDeployKinectResources: 0 122 | XboxSplashScreen: {fileID: 0} 123 | xboxEnableSpeech: 0 124 | xboxAdditionalTitleMemorySize: 0 125 | xboxDeployKinectHeadOrientation: 0 126 | xboxDeployKinectHeadPosition: 0 127 | ps3TitleConfigPath: 128 | ps3DLCConfigPath: 129 | ps3ThumbnailPath: 130 | ps3BackgroundPath: 131 | ps3SoundPath: 132 | ps3TrophyCommId: 133 | ps3NpCommunicationPassphrase: 134 | ps3TrophyPackagePath: 135 | ps3BootCheckMaxSaveGameSizeKB: 128 136 | ps3TrophyCommSig: 137 | ps3SaveGameSlots: 1 138 | ps3TrialMode: 0 139 | psp2Splashimage: {fileID: 0} 140 | psp2LiveAreaGate: {fileID: 0} 141 | psp2LiveAreaBackround: {fileID: 0} 142 | psp2NPTrophyPackPath: 143 | psp2NPCommsID: 144 | psp2NPCommsPassphrase: 145 | psp2NPCommsSig: 146 | psp2ParamSfxPath: 147 | psp2PackagePassword: 148 | psp2DLCConfigPath: 149 | psp2ThumbnailPath: 150 | psp2BackgroundPath: 151 | psp2SoundPath: 152 | psp2TrophyCommId: 153 | psp2TrophyPackagePath: 154 | psp2PackagedResourcesPath: 155 | flashStrippingLevel: 2 156 | spritePackerPolicy: 157 | scriptingDefineSymbols: {} 158 | metroPackageName: Reflection 159 | metroPackageLogo: 160 | metroPackageLogo140: 161 | metroPackageLogo180: 162 | metroPackageLogo240: 163 | metroPackageVersion: 164 | metroCertificatePath: 165 | metroCertificatePassword: 166 | metroCertificateSubject: 167 | metroCertificateIssuer: 168 | metroCertificateNotAfter: 0000000000000000 169 | metroApplicationDescription: Reflection 170 | metroStoreTileLogo80: 171 | metroStoreTileLogo: 172 | metroStoreTileLogo140: 173 | metroStoreTileLogo180: 174 | metroStoreTileWideLogo80: 175 | metroStoreTileWideLogo: 176 | metroStoreTileWideLogo140: 177 | metroStoreTileWideLogo180: 178 | metroStoreTileSmallLogo80: 179 | metroStoreTileSmallLogo: 180 | metroStoreTileSmallLogo140: 181 | metroStoreTileSmallLogo180: 182 | metroStoreSmallTile80: 183 | metroStoreSmallTile: 184 | metroStoreSmallTile140: 185 | metroStoreSmallTile180: 186 | metroStoreLargeTile80: 187 | metroStoreLargeTile: 188 | metroStoreLargeTile140: 189 | metroStoreLargeTile180: 190 | metroStoreSplashScreenImage: 191 | metroStoreSplashScreenImage140: 192 | metroStoreSplashScreenImage180: 193 | metroPhoneAppIcon: 194 | metroPhoneAppIcon140: 195 | metroPhoneAppIcon240: 196 | metroPhoneSmallTile: 197 | metroPhoneSmallTile140: 198 | metroPhoneSmallTile240: 199 | metroPhoneMediumTile: 200 | metroPhoneMediumTile140: 201 | metroPhoneMediumTile240: 202 | metroPhoneWideTile: 203 | metroPhoneWideTile140: 204 | metroPhoneWideTile240: 205 | metroPhoneSplashScreenImage: 206 | metroPhoneSplashScreenImage140: 207 | metroPhoneSplashScreenImage240: 208 | metroTileShortName: 209 | metroCommandLineArgsFile: 210 | metroTileShowName: 0 211 | metroMediumTileShowName: 0 212 | metroLargeTileShowName: 0 213 | metroWideTileShowName: 0 214 | metroDefaultTileSize: 1 215 | metroTileForegroundText: 1 216 | metroTileBackgroundColor: {r: 0, g: 0, b: 0, a: 1} 217 | metroSplashScreenBackgroundColor: {r: 0, g: 0, b: 0, a: 1} 218 | metroSplashScreenUseBackgroundColor: 0 219 | metroCapabilities: {} 220 | metroUnprocessedPlugins: [] 221 | metroCompilationOverrides: 1 222 | blackberryDeviceAddress: 223 | blackberryDevicePassword: 224 | blackberryTokenPath: 225 | blackberryTokenExires: 226 | blackberryTokenAuthor: 227 | blackberryTokenAuthorId: 228 | blackberryAuthorId: 229 | blackberryCskPassword: 230 | blackberrySaveLogPath: 231 | blackberryAuthorIdOveride: 0 232 | blackberrySharedPermissions: 0 233 | blackberryCameraPermissions: 0 234 | blackberryGPSPermissions: 0 235 | blackberryDeviceIDPermissions: 0 236 | blackberryMicrophonePermissions: 0 237 | blackberryGamepadSupport: 0 238 | blackberryBuildId: 0 239 | blackberryLandscapeSplashScreen: {fileID: 0} 240 | blackberryPortraitSplashScreen: {fileID: 0} 241 | blackberrySquareSplashScreen: {fileID: 0} 242 | tizenProductDescription: 243 | tizenProductURL: 244 | tizenCertificatePath: 245 | tizenCertificatePassword: 246 | tizenGPSPermissions: 0 247 | tizenMicrophonePermissions: 0 248 | stvDeviceAddress: 249 | firstStreamedLevelWithResources: 0 250 | unityRebuildLibraryVersion: 9 251 | unityForwardCompatibleVersion: 39 252 | unityStandardAssetsVersion: 0 253 | -------------------------------------------------------------------------------- /ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 3 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Fastest 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | blendWeights: 1 18 | textureQuality: 1 19 | anisotropicTextures: 0 20 | antiAliasing: 0 21 | softParticles: 0 22 | softVegetation: 0 23 | vSyncCount: 0 24 | lodBias: .300000012 25 | maximumLODLevel: 0 26 | particleRaycastBudget: 4 27 | excludedTargetPlatforms: [] 28 | - serializedVersion: 2 29 | name: Fast 30 | pixelLightCount: 0 31 | shadows: 0 32 | shadowResolution: 0 33 | shadowProjection: 1 34 | shadowCascades: 1 35 | shadowDistance: 20 36 | blendWeights: 2 37 | textureQuality: 0 38 | anisotropicTextures: 0 39 | antiAliasing: 0 40 | softParticles: 0 41 | softVegetation: 0 42 | vSyncCount: 0 43 | lodBias: .400000006 44 | maximumLODLevel: 0 45 | particleRaycastBudget: 16 46 | excludedTargetPlatforms: [] 47 | - serializedVersion: 2 48 | name: Simple 49 | pixelLightCount: 1 50 | shadows: 1 51 | shadowResolution: 0 52 | shadowProjection: 1 53 | shadowCascades: 1 54 | shadowDistance: 20 55 | blendWeights: 2 56 | textureQuality: 0 57 | anisotropicTextures: 1 58 | antiAliasing: 0 59 | softParticles: 0 60 | softVegetation: 0 61 | vSyncCount: 0 62 | lodBias: .699999988 63 | maximumLODLevel: 0 64 | particleRaycastBudget: 64 65 | excludedTargetPlatforms: [] 66 | - serializedVersion: 2 67 | name: Good 68 | pixelLightCount: 2 69 | shadows: 2 70 | shadowResolution: 1 71 | shadowProjection: 1 72 | shadowCascades: 2 73 | shadowDistance: 40 74 | blendWeights: 2 75 | textureQuality: 0 76 | anisotropicTextures: 1 77 | antiAliasing: 0 78 | softParticles: 0 79 | softVegetation: 1 80 | vSyncCount: 1 81 | lodBias: 1 82 | maximumLODLevel: 0 83 | particleRaycastBudget: 256 84 | excludedTargetPlatforms: [] 85 | - serializedVersion: 2 86 | name: Beautiful 87 | pixelLightCount: 3 88 | shadows: 2 89 | shadowResolution: 2 90 | shadowProjection: 1 91 | shadowCascades: 2 92 | shadowDistance: 70 93 | blendWeights: 4 94 | textureQuality: 0 95 | anisotropicTextures: 2 96 | antiAliasing: 2 97 | softParticles: 1 98 | softVegetation: 1 99 | vSyncCount: 1 100 | lodBias: 1.5 101 | maximumLODLevel: 0 102 | particleRaycastBudget: 1024 103 | excludedTargetPlatforms: [] 104 | - serializedVersion: 2 105 | name: Fantastic 106 | pixelLightCount: 4 107 | shadows: 2 108 | shadowResolution: 2 109 | shadowProjection: 1 110 | shadowCascades: 4 111 | shadowDistance: 150 112 | blendWeights: 4 113 | textureQuality: 0 114 | anisotropicTextures: 2 115 | antiAliasing: 2 116 | softParticles: 1 117 | softVegetation: 1 118 | vSyncCount: 1 119 | lodBias: 2 120 | maximumLODLevel: 0 121 | particleRaycastBudget: 4096 122 | excludedTargetPlatforms: [] 123 | m_PerPlatformDefaultQuality: 124 | Android: 2 125 | BlackBerry: 2 126 | FlashPlayer: 3 127 | GLES Emulation: 3 128 | PS3: 3 129 | PS4: 3 130 | PSM: 3 131 | PSP2: 3 132 | Samsung TV: 2 133 | Standalone: 3 134 | Tizen: 2 135 | WP8: 3 136 | Web: 3 137 | Windows Store Apps: 3 138 | XBOX360: 3 139 | XboxOne: 3 140 | iPhone: 2 141 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | tags: 6 | - 7 | Builtin Layer 0: Default 8 | Builtin Layer 1: TransparentFX 9 | Builtin Layer 2: Ignore Raycast 10 | Builtin Layer 3: 11 | Builtin Layer 4: Water 12 | Builtin Layer 5: UI 13 | Builtin Layer 6: 14 | Builtin Layer 7: 15 | User Layer 8: 16 | User Layer 9: 17 | User Layer 10: 18 | User Layer 11: 19 | User Layer 12: 20 | User Layer 13: 21 | User Layer 14: 22 | User Layer 15: 23 | User Layer 16: 24 | User Layer 17: 25 | User Layer 18: 26 | User Layer 19: 27 | User Layer 20: 28 | User Layer 21: 29 | User Layer 22: 30 | User Layer 23: 31 | User Layer 24: 32 | User Layer 25: 33 | User Layer 26: 34 | User Layer 27: 35 | User Layer 28: 36 | User Layer 29: 37 | User Layer 30: 38 | User Layer 31: 39 | m_SortingLayers: 40 | - name: Default 41 | userID: 0 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: .0199999996 7 | Maximum Allowed Timestep: .333333343 8 | m_TimeScale: 1 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Water Caustics Simulation for Unity 2 | ============= 3 | * Caustics algorithm based on [1] 4 | 5 | [![ScreenShot](Html/Img/Screenshot_Demo01.png)](https://vimeo.com/110753770) 6 | 7 | # References 8 | 1. C. Yuksel and J. Keyser, “Fast real-time caustics from height fields,” Vis. Comput., vol. 25, no. 5–7, pp. 559–564, Mar. 2009. 9 | --------------------------------------------------------------------------------