├── .gitignore ├── Editor.meta ├── Editor ├── Data.meta └── Data │ ├── Nodes.meta │ └── Nodes │ ├── Math.meta │ ├── Math │ ├── Interpolation.meta │ └── Interpolation │ │ ├── Easing.meta │ │ └── Easing │ │ ├── EasingNode.cs │ │ ├── EasingNode.cs.meta │ │ ├── EasingType.cs │ │ └── EasingType.cs.meta │ ├── Procedural.meta │ └── Procedural │ ├── Shape.meta │ └── Shape │ ├── StarNode.cs │ └── StarNode.cs.meta ├── LICENSE ├── LICENSE.meta ├── README.md └── README.md.meta /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | /[Bb]uilds/ 6 | /Assets/AssetStoreTools* 7 | 8 | # Visual Studio 2015 cache directory 9 | /.vs/ 10 | 11 | # Autogenerated VS/MD/Consulo solution and project files 12 | ExportedObj/ 13 | .consulo/ 14 | *.csproj 15 | *.unityproj 16 | *.sln 17 | *.suo 18 | *.tmp 19 | *.user 20 | *.userprefs 21 | *.pidb 22 | *.booproj 23 | *.svd 24 | *.pdb 25 | 26 | # Unity3D generated meta files 27 | *.pidb.meta 28 | 29 | # Unity3D Generated File On Crash Reports 30 | sysinfo.txt 31 | 32 | # Builds 33 | *.apk 34 | *.unitypackage 35 | -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78030e0dcea2f87449599131c22f9517 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0034c817d2db82345be7c15969c06ea5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 13ad3b80943135a4c939b74b77e2463e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 64034ffb894c6124eb17db0be1eaf3b0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math/Interpolation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d183bc05f89cde4eb4e84e3833bd019 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math/Interpolation/Easing.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7cdceb9ffd6e2f8468d2a954ddc697c5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math/Interpolation/Easing/EasingNode.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using UnityEditor.Graphing; 3 | using UnityEditor.ShaderGraph; 4 | using UnityEditor.ShaderGraph.Drawing.Controls; 5 | using UnityEngine; 6 | 7 | [Title("Math", "Interpolation", "Easing")] 8 | public class EasingNode : CodeFunctionNode 9 | { 10 | public override bool hasPreview { get { return true; } } 11 | 12 | public EasingNode() 13 | { 14 | name = "Easing"; 15 | } 16 | 17 | public override string documentationURL 18 | { 19 | get { return "https://github.com/andydbc/shadergraph-custom-nodes"; } 20 | } 21 | 22 | [SerializeField] 23 | EasingType m_EasingType = EasingType.Linear; 24 | 25 | [EnumControl("Type")] 26 | public EasingType Type 27 | { 28 | get { return m_EasingType; } 29 | set 30 | { 31 | if (m_EasingType == value) 32 | return; 33 | 34 | m_EasingType = value; 35 | Dirty(ModificationScope.Graph); 36 | } 37 | } 38 | 39 | string GetTypeName() 40 | { 41 | return System.Enum.GetName(typeof(EasingType), m_EasingType); 42 | } 43 | 44 | protected override MethodInfo GetFunctionToConvert() 45 | { 46 | return GetType().GetMethod(string.Format("Easing_{0}", GetTypeName()), BindingFlags.Static | BindingFlags.NonPublic); 47 | } 48 | 49 | static string Easing_Linear( 50 | [Slot(0, Binding.None)] Vector1 In, 51 | [Slot(2, Binding.None)] out Vector1 Out) 52 | { 53 | return "{ Out = In; }"; 54 | } 55 | 56 | static string Easing_QuadraticIn( 57 | [Slot(0, Binding.None)] Vector1 In, 58 | [Slot(2, Binding.None)] out Vector1 Out) 59 | { 60 | return @"{ 61 | Out = In * In; 62 | }"; 63 | } 64 | 65 | static string Easing_QuadraticOut( 66 | [Slot(0, Binding.None)] Vector1 In, 67 | [Slot(2, Binding.None)] out Vector1 Out) 68 | { 69 | return @"{ 70 | Out = -In * (In - 2.0); 71 | }"; 72 | } 73 | 74 | static string Easing_QuadraticInOut( 75 | [Slot(0, Binding.None)] Vector1 In, 76 | [Slot(2, Binding.None)] out Vector1 Out) 77 | { 78 | return @"{ 79 | float p = 2.0 * In * In; 80 | Out = In < 0.5 ? p : -p + (4.0 * In) - 1.0; 81 | }"; 82 | } 83 | 84 | static string Easing_CubicIn( 85 | [Slot(0, Binding.None)] Vector1 In, 86 | [Slot(2, Binding.None)] out Vector1 Out) 87 | { 88 | return @"{ 89 | Out = In * In * In; 90 | }"; 91 | } 92 | 93 | static string Easing_CubicOut( 94 | [Slot(0, Binding.None)] Vector1 In, 95 | [Slot(2, Binding.None)] out Vector1 Out) 96 | { 97 | return @"{ 98 | float f = In - 1.0; 99 | Out = f * f * f + 1.0; 100 | }"; 101 | } 102 | 103 | static string Easing_CubicInOut( 104 | [Slot(0, Binding.None)] Vector1 In, 105 | [Slot(2, Binding.None)] out Vector1 Out) 106 | { 107 | return @"{ 108 | Out = In < 0.5 109 | ? 4.0 * In * In * In 110 | : 0.5 * pow(2.0 * In - 2.0, 3.0) + 1.0; 111 | }"; 112 | } 113 | 114 | static string Easing_QuarticIn( 115 | [Slot(0, Binding.None)] Vector1 In, 116 | [Slot(2, Binding.None)] out Vector1 Out) 117 | { 118 | return @"{ 119 | Out = pow(In, 4.0); 120 | }"; 121 | } 122 | 123 | static string Easing_QuarticOut( 124 | [Slot(0, Binding.None)] Vector1 In, 125 | [Slot(2, Binding.None)] out Vector1 Out) 126 | { 127 | return @"{ 128 | Out = pow(In - 1.0, 3.0) * (1.0 - In) + 1.0; 129 | }"; 130 | } 131 | 132 | static string Easing_QuarticInOut( 133 | [Slot(0, Binding.None)] Vector1 In, 134 | [Slot(2, Binding.None)] out Vector1 Out) 135 | { 136 | return @"{ 137 | Out = In < 0.5 138 | ? +8.0 * pow(In, 4.0) 139 | : -8.0 * pow(In - 1.0, 4.0) + 1.0; 140 | }"; 141 | } 142 | 143 | static string Easing_QuinticIn( 144 | [Slot(0, Binding.None)] Vector1 In, 145 | [Slot(2, Binding.None)] out Vector1 Out) 146 | { 147 | return @"{ 148 | Out = pow(In, 5.0); 149 | }"; 150 | } 151 | 152 | static string Easing_QuinticOut( 153 | [Slot(0, Binding.None)] Vector1 In, 154 | [Slot(2, Binding.None)] out Vector1 Out) 155 | { 156 | return @"{ 157 | float f = In - 1; 158 | Out = f * f * f * f * f + 1; 159 | }"; 160 | } 161 | 162 | static string Easing_QuinticInOut( 163 | [Slot(0, Binding.None)] Vector1 In, 164 | [Slot(2, Binding.None)] out Vector1 Out) 165 | { 166 | return @"{ 167 | float f = (2.0 * In) - 2.0; 168 | Out = In < 0.5 169 | ? 16 * pow(In, 5) 170 | : 0.5 * pow(f, 5) + 1.0; 171 | }"; 172 | } 173 | 174 | static string Easing_SinIn( 175 | [Slot(0, Binding.None)] Vector1 In, 176 | [Slot(2, Binding.None)] out Vector1 Out) 177 | { 178 | return @"{ 179 | float half_pi = 1.5707963267948966; 180 | Out = sin((In - 1.0) * half_pi) + 1.0; 181 | }"; 182 | } 183 | 184 | static string Easing_SinOut( 185 | [Slot(0, Binding.None)] Vector1 In, 186 | [Slot(2, Binding.None)] out Vector1 Out) 187 | { 188 | return @"{ 189 | float half_pi = 1.5707963267948966; 190 | Out = sin(In * half_pi); 191 | }"; 192 | } 193 | 194 | static string Easing_SinInOut( 195 | [Slot(0, Binding.None)] Vector1 In, 196 | [Slot(2, Binding.None)] out Vector1 Out) 197 | { 198 | return @"{ 199 | float pi = 3.141592653589793; 200 | Out = -0.5 * (cos(pi * In) - 1.0); 201 | }"; 202 | } 203 | 204 | static string Easing_ExponentialIn( 205 | [Slot(0, Binding.None)] Vector1 In, 206 | [Slot(2, Binding.None)] out Vector1 Out) 207 | { 208 | return @"{ 209 | Out = (In == 0.0) 210 | ? In 211 | : pow(2.0, 10.0 * (In - 1.0)); 212 | }"; 213 | } 214 | 215 | static string Easing_ExponentialOut( 216 | [Slot(0, Binding.None)] Vector1 In, 217 | [Slot(2, Binding.None)] out Vector1 Out) 218 | { 219 | return @"{ 220 | Out = (In == 1.0) 221 | ? In 222 | : 1.0 - pow(2.0, -10.0 * In); 223 | }"; 224 | } 225 | 226 | static string Easing_ExponentialInOut( 227 | [Slot(0, Binding.None)] Vector1 In, 228 | [Slot(2, Binding.None)] out Vector1 Out) 229 | { 230 | return @"{ 231 | Out = In == 0.0 || In == 1.0 232 | ? In 233 | : In < 0.5 234 | ? +0.5 * pow(2.0, (20.0 * In) - 10.0) 235 | : -0.5 * pow(2.0, 10.0 - (In * 20.0)) + 1.0; 236 | }"; 237 | } 238 | 239 | static string Easing_CircularIn( 240 | [Slot(0, Binding.None)] Vector1 In, 241 | [Slot(2, Binding.None)] out Vector1 Out) 242 | { 243 | return @"{ 244 | Out = 1.0 - sqrt(1.0 - In * In); 245 | }"; 246 | } 247 | 248 | static string Easing_CircularOut( 249 | [Slot(0, Binding.None)] Vector1 In, 250 | [Slot(2, Binding.None)] out Vector1 Out) 251 | { 252 | return @"{ 253 | Out = sqrt((2.0 - In) * In); 254 | }"; 255 | } 256 | 257 | static string Easing_CircularInOut( 258 | [Slot(0, Binding.None)] Vector1 In, 259 | [Slot(2, Binding.None)] out Vector1 Out) 260 | { 261 | return @"{ 262 | Out = In < 0.5 263 | ? 0.5 * (1.0 - sqrt(1.0 - 4.0 * In * In)) 264 | : 0.5 * (sqrt((3.0 - 2.0 * In) * (2.0 * In - 1.0)) + 1.0); 265 | }"; 266 | } 267 | 268 | static string Easing_ElasticIn( 269 | [Slot(0, Binding.None)] Vector1 In, 270 | [Slot(2, Binding.None)] out Vector1 Out) 271 | { 272 | return @"{ 273 | float half_pi = 1.5707963267948966; 274 | Out = sin(13.0 * In * half_pi) * pow(2.0, 10.0 * (In - 1.0)); 275 | }"; 276 | } 277 | 278 | static string Easing_ElasticOut( 279 | [Slot(0, Binding.None)] Vector1 In, 280 | [Slot(2, Binding.None)] out Vector1 Out) 281 | { 282 | return @"{ 283 | float half_pi = 1.5707963267948966; 284 | Out = sin(-13.0 * (In + 1.0) * half_pi) * pow(2.0, -10.0 * In) + 1.0; 285 | }"; 286 | } 287 | 288 | static string Easing_ElasticInOut( 289 | [Slot(0, Binding.None)] Vector1 In, 290 | [Slot(2, Binding.None)] out Vector1 Out) 291 | { 292 | return @"{ 293 | float half_pi = 1.5707963267948966; 294 | Out = In < 0.5 295 | ? 0.5 * sin(+13.0 * half_pi * 2.0 * In) * pow(2.0, 10.0 * (2.0 * In - 1.0)) 296 | : 0.5 * sin(-13.0 * half_pi * ((2.0 * In - 1.0) + 1.0)) * pow(2.0, -10.0 * (2.0 * In - 1.0)) + 1.0; 297 | }"; 298 | } 299 | 300 | static string Easing_BackIn( 301 | [Slot(0, Binding.None)] Vector1 In, 302 | [Slot(2, Binding.None)] out Vector1 Out) 303 | { 304 | return @"{ 305 | float pi = 3.141592653589793; 306 | Out = pow(In, 3.0) - In * sin(In * pi); 307 | }"; 308 | } 309 | 310 | static string Easing_BackOut( 311 | [Slot(0, Binding.None)] Vector1 In, 312 | [Slot(2, Binding.None)] out Vector1 Out) 313 | { 314 | return @"{ 315 | float pi = 3.141592653589793; 316 | float f = 1.0 - In; 317 | Out = 1.0 - (pow(f, 3.0) - f * sin(f * pi)); 318 | }"; 319 | } 320 | 321 | static string Easing_BackInOut( 322 | [Slot(0, Binding.None)] Vector1 In, 323 | [Slot(2, Binding.None)] out Vector1 Out) 324 | { 325 | return @"{ 326 | float pi = 3.141592653589793; 327 | float f = In < 0.5 328 | ? 2.0 * In 329 | : 1.0 - (2.0 * In - 1.0); 330 | 331 | float g = pow(f, 3.0) - f * sin(f * pi); 332 | 333 | Out = In < 0.5 334 | ? 0.5 * g 335 | : 0.5 * (1.0 - g) + 0.5; 336 | }"; 337 | } 338 | 339 | static string Easing_BounceIn( 340 | [Slot(0, Binding.None)] Vector1 In, 341 | [Slot(2, Binding.None)] out Vector1 Out) 342 | { 343 | return @"{ 344 | Out = 1.0 - easing_custom_bounce_out(1.0 - In); 345 | }"; 346 | } 347 | 348 | static string Easing_BounceOut( 349 | [Slot(0, Binding.None)] Vector1 In, 350 | [Slot(2, Binding.None)] out Vector1 Out) 351 | { 352 | return @"{ 353 | Out = easing_custom_bounce_out(In); 354 | }"; 355 | } 356 | 357 | static string Easing_BounceInOut( 358 | [Slot(0, Binding.None)] Vector1 In, 359 | [Slot(2, Binding.None)] out Vector1 Out) 360 | { 361 | return @"{ 362 | Out = In < 0.5 363 | ? 0.5 * (1.0 - easing_custom_bounce_out(1.0 - In * 2.0)) 364 | : 0.5 * easing_custom_bounce_out(In * 2.0 - 1.0) + 0.5; 365 | }"; 366 | } 367 | 368 | public override void GenerateNodeFunction(FunctionRegistry registry, GenerationMode generationMode) 369 | { 370 | registry.ProvideFunction("easing_custom_bounce_out", s => s.Append(@" 371 | float easing_custom_bounce_out(float t) 372 | { 373 | const float a = 4.0 / 11.0; 374 | const float b = 8.0 / 11.0; 375 | const float c = 9.0 / 10.0; 376 | 377 | const float ca = 4356.0 / 361.0; 378 | const float cb = 35442.0 / 1805.0; 379 | const float cc = 16061.0 / 1805.0; 380 | 381 | float t2 = t * t; 382 | 383 | return t < a 384 | ? 7.5625 * t2 385 | : t < b 386 | ? 9.075 * t2 - 9.9 * t + 3.4 387 | : t < c 388 | ? ca * t2 - cb * t + cc 389 | : 10.8 * t * t - 20.52 * t + 10.72; 390 | } 391 | ")); 392 | 393 | base.GenerateNodeFunction(registry, generationMode); 394 | } 395 | } 396 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math/Interpolation/Easing/EasingNode.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a065ee78f18ede54b8fd806d2155bc0c 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math/Interpolation/Easing/EasingType.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | public enum EasingType 6 | { 7 | Linear, 8 | QuadraticIn, 9 | QuadraticOut, 10 | QuadraticInOut, 11 | CubicIn, 12 | CubicOut, 13 | CubicInOut, 14 | QuarticIn, 15 | QuarticOut, 16 | QuarticInOut, 17 | QuinticIn, 18 | QuinticOut, 19 | QuinticInOut, 20 | SinIn, 21 | SinOut, 22 | SinInOut, 23 | ExponentialIn, 24 | ExponentialOut, 25 | ExponentialInOut, 26 | CircularIn, 27 | CircularOut, 28 | CircularInOut, 29 | ElasticIn, 30 | ElasticOut, 31 | ElasticInOut, 32 | BackIn, 33 | BackOut, 34 | BackInOut, 35 | BounceIn, 36 | BounceOut, 37 | BounceInOut 38 | } 39 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Math/Interpolation/Easing/EasingType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3bf8d51e44b0b7241b1c8e362960c213 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Procedural.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8836fa75365fffa43afbc0cbb378b453 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Procedural/Shape.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a67f1967f86cb0d4d8dea31e0683558c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Data/Nodes/Procedural/Shape/StarNode.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using UnityEditor.ShaderGraph; 3 | using UnityEngine; 4 | 5 | [Title("Procedural", "Shape", "Star")] 6 | public class StarNode : CodeFunctionNode 7 | { 8 | public override bool hasPreview { get { return true; } } 9 | 10 | public StarNode() 11 | { 12 | name = "Star"; 13 | } 14 | 15 | public override string documentationURL 16 | { 17 | get { return "https://github.com/andydbc/shadergraph-custom-nodes"; } 18 | } 19 | 20 | protected override MethodInfo GetFunctionToConvert() 21 | { 22 | return GetType().GetMethod("StarFunction", BindingFlags.Static | BindingFlags.NonPublic); 23 | } 24 | 25 | static string StarFunction( 26 | [Slot(0, Binding.MeshUV0)] Vector2 UV, 27 | [Slot(1, Binding.None, 6, 0, 0, 0)] Vector1 Sides, 28 | [Slot(2, Binding.None, 0.5f, 0, 0, 0)] Vector1 Scale, 29 | [Slot(3, Binding.None)] out DynamicDimensionVector Out) 30 | { 31 | return @" 32 | { 33 | // based on : https://www.shadertoy.com/view/ldyczd 34 | 35 | float pi = 3.14159265359; 36 | 37 | {precision} N = Sides; 38 | {precision} r = .5; 39 | {precision}2 U = ((UV - 0.5) * 2.) * 1/Scale; 40 | 41 | {precision} a = atan2(U.x, U.y); 42 | {precision} l = length(U); 43 | {precision} b = pi/N; 44 | {precision} tb = tan(b); 45 | 46 | {precision} s = (r * tb)/(sqrt(1.+tb*tb)-r); 47 | 48 | {precision} b2 = 2.*b; 49 | a = (a-b2*floor(a/b2)) -b; 50 | U = l * float2(cos(a),sin(a)) / cos(b); 51 | U.y = abs(U.y); 52 | U.x -= 1.; 53 | 54 | Out = step(0.001, -(s*U.x+U.y)/sqrt(1.+s*s)); 55 | }"; 56 | } 57 | } -------------------------------------------------------------------------------- /Editor/Data/Nodes/Procedural/Shape/StarNode.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf23cc68526c3b247a4d7d6e8a57dc07 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Andy Duboc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4d229bc703360034ca99e9e0db055347 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shader Graph Nodes 2 | 3 | Collection of Shader Graph custom nodes. 4 | 5 | ### Math > Interpolation > Easing 6 | 7 | Add support for Robert Penner's easing function. 8 | 9 | 10 | 11 | ### Procedural > Shape > Star 12 | 13 | Add support for a procedural star shape 14 | 15 | 16 | 17 | ## System Requirements 18 | 19 | - Unity 2018.1 or later 20 | 21 | ## License 22 | 23 | Licensed under the [Open Source MIT license](http://en.wikipedia.org/wiki/MIT_License). 24 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98efe624029c2bb48bdf0a4a25052c33 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------