diff --git a/Assets/automata/Automata.unity b/Assets/automata/Automata.unity index 080ed51..7cc6bae 100644 --- a/Assets/automata/Automata.unity +++ b/Assets/automata/Automata.unity @@ -847,7 +847,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!65 &1377711729 BoxCollider: m_ObjectHideFlags: 0 @@ -1550,7 +1550,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2044521647} m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} - m_LocalPosition: {x: -2.402, y: 0.506, z: 0.292} + m_LocalPosition: {x: -2.402, y: 0.506, z: 0.196} m_LocalScale: {x: 0.125, y: 0.125, z: 0.125} m_Children: [] m_Father: {fileID: 0} @@ -1579,7 +1579,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &2129299479 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/automata/Lenia/lenia.shader b/Assets/automata/Lenia/lenia.shader index 49f08f0..359260d 100644 --- a/Assets/automata/Lenia/lenia.shader +++ b/Assets/automata/Lenia/lenia.shader @@ -5,7 +5,7 @@ _LastFrame ("Texture", 2D) = "white" {} _GrowtCenter ("Growth fn center (mu)", Range(0, 1)) = 0.2 _GrowthWidth ("Growth fn width (sigma / std deviation)", Range(0, 1)) = 0.07 - _Speed ("Speed factor", Range(0.001, 0.5)) = 0.1 + _Speed ("Speed factor", Range(0.3, 5)) = 1 } SubShader { @@ -74,8 +74,6 @@ return exp(-((u-mu) * (u-mu)) / (2 * sigma * sigma)) * 2.0 - 1.0; } - - inline half value(float2 center, float x, float y) { return tex2D(_LastFrame, center + float2(x, y)).r; } @@ -86,14 +84,14 @@ const float resolution = 512.0; const float d = 1.0 / resolution; - // Defines RADIUS Radius Kernel total_max + // Defines RADIUS Kernel total_max #include "lenia_generated_kernel.cginc" float total = 0.0; [unroll(RADIUS)] - for (int y = 0; y < Radius; y++) { + for (int y = 0; y < RADIUS; y++) { [unroll(RADIUS)] - for (int x = 1; x <= Radius; x++) { + for (int x = 1; x <= RADIUS; x++) { const float xx = (float)x * d; const float yy = (float)y * d; total += value(i.uv, xx, yy) * Kernel[y][x-1]; @@ -102,23 +100,11 @@ total += value(i.uv, yy, -xx) * Kernel[y][x-1]; } } - // */ - /* - float total_max = 0; - float total = 0; - for (int x = -Radius; x <= Radius; x++) { - for (int y = -Radius; y <= Radius; y++) { - float dist = sqrt(x*x+y*y); - float kval = kernel(dist); - total_max += kval; - total += value(i.uv, x*d, y*d) * kval; - } - } - // */ float old_state = value(i.uv, 0.0, 0.0) ; float count = total / total_max; - float state = activation(count) * _Speed + old_state; + const float step = _Speed * unity_DeltaTime.x; + float state = activation(count) * step + old_state; state = clamp(state, 0, 1); // kernel visualization: lookup table (SLOW) @@ -139,10 +125,10 @@ // kernel visualisation: real size // float2 p = (i.uv - 0.5) * resolution; - // float k = kernel(length(p)) * (max(abs(p.x), abs(p.y)) <= _Radius); + // float k = kernel(length(p)) * (max(abs(p.x), abs(p.y)) <= RADIUS); // kernel visualisation: fill square - // float k = kernel(length(i.uv - 0.5) * _Radius * 2); + // float k = kernel(length(i.uv - 0.5) * RADIUS * 2); // float a = activation(i.uv.x); // float4 col = float4(state, k, a, 1); diff --git a/Assets/automata/Lenia/lenia_generated_kernel.cginc b/Assets/automata/Lenia/lenia_generated_kernel.cginc index 5bb2204..b98614d 100644 --- a/Assets/automata/Lenia/lenia_generated_kernel.cginc +++ b/Assets/automata/Lenia/lenia_generated_kernel.cginc @@ -1,5 +1,4 @@ // generated by the rust program -const int Radius = 20; #define RADIUS 20 const half Kernel[21][20] = { {0.00, 0.04, 0.10, 0.20, 0.38, 0.60, 0.80, 0.96, 0.98, 0.88, 0.68, 0.46, 0.26, 0.12, 0.06, 0.02, 0.00, 0.00, 0.00, 0.00, }, diff --git a/Assets/automata/Lenia/lenia_sim.mat b/Assets/automata/Lenia/lenia_sim.mat index 0b70646..0e01792 100644 --- a/Assets/automata/Lenia/lenia_sim.mat +++ b/Assets/automata/Lenia/lenia_sim.mat @@ -81,7 +81,7 @@ Material: - _Radius: 13 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 - - _Speed: 0.1 + - _Speed: 2 - _SrcBlend: 1 - _UVSec: 0 - _ZWrite: 1 diff --git a/Assets/automata/WireWorld/wireworld.shader b/Assets/automata/WireWorld/wireworld.shader index 7141105..9c93a40 100644 --- a/Assets/automata/WireWorld/wireworld.shader +++ b/Assets/automata/WireWorld/wireworld.shader @@ -23,13 +23,14 @@ { float4 vertex : POSITION; float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float2 uv : TEXCOORD0; - float4 vertex : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO }; sampler2D _LastFrame; @@ -38,9 +39,12 @@ v2f vert (appdata v) { v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; - return o; } @@ -86,7 +90,7 @@ if (t > 0.9) { return float4(0, 0, 0, 1); } - t = t + 0.02; + t += unity_DeltaTime.x * 4; return float4(t, t, t, 1); } diff --git a/Assets/automata/gol.shader b/Assets/automata/gol.shader index 15ffdf0..63650a9 100644 --- a/Assets/automata/gol.shader +++ b/Assets/automata/gol.shader @@ -1,75 +1,81 @@ Shader "CrispyPin/gol" { - Properties - { - _LastFrame ("Texture", 2D) = "white" {} - } - SubShader - { - Tags { "RenderType"="Opaque" } - LOD 100 + Properties + { + _LastFrame ("Texture", 2D) = "white" {} + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag - #include "UnityCG.cginc" + #include "UnityCG.cginc" - struct appdata - { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - }; + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; - struct v2f - { - float2 uv : TEXCOORD0; - float4 vertex : SV_POSITION; - }; + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; - sampler2D _LastFrame; + sampler2D _LastFrame; - v2f vert (appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.uv = v.uv; - return o; - } + v2f vert (appdata v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - int state(half2 uv, half x, half y){ - return tex2D(_LastFrame, uv + half2(x, y)).r > 0; - } + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + return o; + } - fixed4 frag (v2f i) : SV_Target - { - const half d = 1.0/256.0; + int state(half2 uv, half x, half y){ + return tex2D(_LastFrame, uv + half2(x, y)).r > 0; + } - int count = state(i.uv, -d, -d)+ - state(i.uv, 0, -d)+ - state(i.uv, d, -d)+ - state(i.uv, -d, 0)+ - state(i.uv, d, 0)+ - state(i.uv, -d, d)+ - state(i.uv, 0, d)+ - state(i.uv, d, d); - half this = tex2D(_LastFrame, i.uv).r; - half state; + fixed4 frag (v2f i) : SV_Target + { + const half d = 1.0/256.0; - if (this.r > 0){ - state = count > 1 && count < 4; - // col = count > 0 && count < 6; // mazetric - } - else { - state = count == 3; - } + int count = state(i.uv, -d, -d)+ + state(i.uv, 0, -d)+ + state(i.uv, d, -d)+ + state(i.uv, -d, 0)+ + state(i.uv, d, 0)+ + state(i.uv, -d, d)+ + state(i.uv, 0, d)+ + state(i.uv, d, d); + half this = tex2D(_LastFrame, i.uv).r; + half state; - float4 col = float4(i.uv * state, 0.5 * state, 1); - return col; - } - ENDCG - } - } + if (this.r > 0){ + state = count > 1 && count < 4; + // col = count > 0 && count < 6; // mazetric + } + else { + state = count == 3; + } + + float4 col = float4(i.uv * state, 0.5 * state, 1); + return col; + } + ENDCG + } + } } diff --git a/Assets/pen/UnlitWithColor.shader b/Assets/pen/UnlitWithColor.shader index e4d2c3d..b34d0d5 100644 --- a/Assets/pen/UnlitWithColor.shader +++ b/Assets/pen/UnlitWithColor.shader @@ -1,53 +1,58 @@ Shader "Custom/UnlitWithColor" { - Properties - { - _Color ("Color", Color) = (1,1,1,1) - _MainTex ("Texture", 2D) = "white" {} - } - SubShader - { - Tags { "RenderType" = "Opaque" } - LOD 100 + Properties + { + _Color ("Color", Color) = (1,1,1,1) + _MainTex ("Texture", 2D) = "white" {} + } + SubShader + { + Tags { "RenderType" = "Opaque" } + LOD 100 - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag - #include "UnityCG.cginc" + #include "UnityCG.cginc" - struct appdata - { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - }; + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; - struct v2f - { - float2 uv : TEXCOORD0; - float4 vertex : SV_POSITION; - }; + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; - sampler2D _MainTex; - float4 _MainTex_ST; - fixed4 _Color; + sampler2D _MainTex; + float4 _MainTex_ST; + fixed4 _Color; - v2f vert (appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - o.uv = TRANSFORM_TEX(v.uv, _MainTex); - return o; - } + v2f vert (appdata v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - fixed4 frag (v2f i) : SV_Target - { - fixed4 col = tex2D(_MainTex, i.uv); - return col * _Color; - } - ENDCG - } - } + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + return tex2D(_MainTex, i.uv) * _Color; + } + ENDCG + } + } } diff --git a/Assets/test/uninit.shader b/Assets/test/uninit.shader index 6ea9393..33e783f 100644 --- a/Assets/test/uninit.shader +++ b/Assets/test/uninit.shader @@ -1,45 +1,51 @@ Shader "CrispyPin/uninit" { - Properties - { - } - SubShader - { - Tags { "RenderType"="Transparent" } - LOD 100 + Properties + { + } + SubShader + { + Tags { "RenderType"="Transparent" } + LOD 100 - Pass - { - CGPROGRAM - #pragma vertex vert - #pragma fragment frag + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag - #include "UnityCG.cginc" + #include "UnityCG.cginc" - struct appdata - { - float4 vertex : POSITION; - }; + struct appdata + { + float4 vertex : POSITION; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; - struct v2f - { - float4 vertex : SV_POSITION; - }; + struct v2f + { + float4 vertex : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; - v2f vert (appdata v) - { - v2f o; - o.vertex = UnityObjectToClipPos(v.vertex); - return o; - } + v2f vert (appdata v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - fixed4 frag (v2f i) : SV_Target - { - fixed4 col; - col.a = 0.5f; - return col; - } - ENDCG - } - } + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col; + col.a = 0.5f; + return col; + } + ENDCG + } + } } diff --git a/lenia-kernel/src/main.rs b/lenia-kernel/src/main.rs index aa010ed..6cf0754 100644 --- a/lenia-kernel/src/main.rs +++ b/lenia-kernel/src/main.rs @@ -15,7 +15,6 @@ fn main() { let mut total_max = 0.0; println!("// generated by the rust program"); - println!("const int Radius = {};", radius); println!("#define RADIUS {}", radius); println!("const half Kernel[{}][{}] = {{", radius + 1, radius); for y in 0..=radius {