Преглед на файлове

Upgrading PkFx assets to 19.5 to match the latest PopcornFx plugin

Signed-off-by: AMZN-Gene <[email protected]>
AMZN-Gene преди 1 година
родител
ревизия
47980a706b
променени са 92 файла, в които са добавени 1420 реда и са изтрити 176 реда
  1. 1 1
      PopcornFX/Editor/AnimationTracks/Circle.pkcf
  2. 1 1
      PopcornFX/Editor/AnimationTracks/PingPong.pkcf
  3. 2 2
      PopcornFX/Editor/Presets/Effects/Basic.pkfx
  4. 2 2
      PopcornFX/Editor/Presets/Effects/FX_Simple.pkfx
  5. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Animated_Mesh.pkma
  6. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Billboard.pkma
  7. 109 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Decal.pkma
  8. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Light.pkma
  9. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Mesh.pkma
  10. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Ribbon.pkma
  11. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Sound.pkma
  12. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Default_Triangle.pkma
  13. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Distortion_Billboard.pkma
  14. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Distortion_Ribbon.pkma
  15. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Diffuse.pkma
  16. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Distortion.pkma
  17. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Emissive.pkma
  18. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Opaque.pkma
  19. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Tinted.pkma
  20. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Decal/Decal_Diffuse.pkma
  21. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Decal/Decal_Emissive.pkma
  22. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Light/Light_Default.pkma
  23. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Mesh/Mesh_Emissive.pkma
  24. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Mesh/Mesh_Opaque.pkma
  25. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Mesh/Mesh_Tinted.pkma
  26. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Diffuse.pkma
  27. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Distortion.pkma
  28. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Emissive.pkma
  29. 1 7
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Opaque.pkma
  30. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Tinted.pkma
  31. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Diffuse.pkma
  32. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Distortion.pkma
  33. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Emissive.pkma
  34. 1 7
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Opaque.pkma
  35. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Tinted.pkma
  36. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Sound/Sound_Default.pkma
  37. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Diffuse.pkma
  38. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Distortion.pkma
  39. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Emissive.pkma
  40. 1 13
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Opaque.pkma
  41. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Tinted.pkma
  42. 210 1
      PopcornFX/Library/PopcornFXCore/Materials/Interface/Editor.pkri
  43. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Interface/Experimental.pkri
  44. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Interface/MeshAnim.pkri
  45. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Interface/SkeletalAnimationTexture.pkri
  46. 111 7
      PopcornFX/Library/PopcornFXCore/Materials/Opaque_Billboard.pkma
  47. 111 7
      PopcornFX/Library/PopcornFXCore/Materials/Opaque_Ribbon.pkma
  48. 1 1
      PopcornFX/Library/PopcornFXCore/Materials/Opaque_Triangle.pkma
  49. 105 1
      PopcornFX/Library/PopcornFXCore/Materials/Transparent_Mesh.pkma
  50. 5 3
      PopcornFX/Library/PopcornFXCore/Shaders/Default_Billboard.frag
  51. 4 2
      PopcornFX/Library/PopcornFXCore/Shaders/Default_Ribbon.frag
  52. 4 2
      PopcornFX/Library/PopcornFXCore/Shaders/Default_Triangle.frag
  53. 7 4
      PopcornFX/Library/PopcornFXCore/Shaders/Experimental/includes/PKLighting.h
  54. 8 8
      PopcornFX/Library/PopcornFXCore/Shaders/Opaque_Billboard.frag
  55. 8 8
      PopcornFX/Library/PopcornFXCore/Shaders/Opaque_Ribbon.frag
  56. 4 2
      PopcornFX/Library/PopcornFXCore/Shaders/Particle_Master.frag
  57. 1 1
      PopcornFX/Library/PopcornFXCore/Templates/Color.pkfx
  58. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Core.pkfx
  59. 1 1
      PopcornFX/Library/PopcornFXCore/Templates/CurvePresets.pkfx
  60. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Debug.pkfx
  61. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Dynamics.pkfx
  62. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Events.pkfx
  63. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Legacy.pkfx
  64. 1 1
      PopcornFX/Library/PopcornFXCore/Templates/Placement.pkfx
  65. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Samplers.pkfx
  66. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Trails.pkfx
  67. 2 2
      PopcornFX/Library/PopcornFXCore/Templates/Utils.pkfx
  68. 1 1
      PopcornFX/Library/SpaceSoldiers_Gun_Impact.pkfx
  69. 1 1
      PopcornFX/Library/Straight_Shot_Effect.pkfx
  70. 1 1
      PopcornFX/Library/Test_Simple.pkfx
  71. 1 1
      PopcornFX/Meshes/Anim/Circle.pkcf
  72. 2 2
      PopcornFX/Particles/BubbleGun/FX_BubbleGun_Blast.pkfx
  73. 2 2
      PopcornFX/Particles/BubbleGun/FX_BubbleGun_Explosion.pkfx
  74. 2 2
      PopcornFX/Particles/BubbleGun/FX_BubbleGun_Projectile.pkfx
  75. 1 1
      PopcornFX/Particles/DefenseTurret/FX_DefenseTurret_Blast.pkfx
  76. 1 1
      PopcornFX/Particles/DefenseTurret/FX_DefenseTurret_Explosion.pkfx
  77. 1 1
      PopcornFX/Particles/DefenseTurret/FX_DefenseTurret_Projectile.pkfx
  78. 1 1
      PopcornFX/Particles/EnergyBallTrap/FX_EnergyBallTrap_BuildUp.pkfx
  79. 2 2
      PopcornFX/Particles/EnergyBallTrap/FX_EnergyBallTrap_Explosion.pkfx
  80. 2 2
      PopcornFX/Particles/EnergyBallTrap/FX_EnergyBallTrap_Projectile.pkfx
  81. 2 2
      PopcornFX/Particles/FX_JumpPad.pkfx
  82. 2 2
      PopcornFX/Particles/LaserPistol/FX_LaserPistol.pkfx
  83. 2 2
      PopcornFX/Particles/LaserPistol/FX_LaserPistol_Blast.pkfx
  84. 2 2
      PopcornFX/Particles/LaserPistol/FX_LaserPistol_Display.pkfx
  85. 2 2
      PopcornFX/Particles/LaserPistol/FX_LaserPistol_Explosion.pkfx
  86. 2 2
      PopcornFX/Particles/LaserPistol/FX_LaserPistol_Ray.pkfx
  87. 2 2
      PopcornFX/Particles/MalfunctionningShieldGenerator/FX_EnergyCollector.pkfx
  88. 2 2
      PopcornFX/Particles/MalfunctionningShieldGenerator/FX_MalfunctionningShieldGenerator_BuildUp.pkfx
  89. 2 2
      PopcornFX/Particles/MalfunctionningShieldGenerator/FX_MalfunctionningShieldGenerator_Explosion.pkfx
  90. 2 2
      PopcornFX/Particles/MalfunctionningShieldGenerator/FX_MalfunctionningShieldGenerator_Idle.pkfx
  91. 2 2
      PopcornFX/Particles/VFX_SpeedPowerUp.pkfx
  92. 5 1
      PopcornFX/PopcornProject.pkproj

+ 1 - 1
PopcornFX/Editor/AnimationTracks/Circle.pkcf

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 COvenBakeConfig_Mesh	$82362157
 COvenBakeConfig_Mesh	$82362157
 {
 {
 	ImportGeometry = false;
 	ImportGeometry = false;

+ 1 - 1
PopcornFX/Editor/AnimationTracks/PingPong.pkcf

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 COvenBakeConfig_Mesh	$A6D04D13
 COvenBakeConfig_Mesh	$A6D04D13
 {
 {
 	ImportGeometry = false;
 	ImportGeometry = false;

+ 2 - 2
PopcornFX/Editor/Presets/Effects/Basic.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:1eb68d4a04eea0e2d23eee019c9cbdc977f2c62988782bf401918ca7399dfeae
-size 29690
+oid sha256:a6031d7a91e44abfa582803a5b1a3c5cc2fe2a5e411fbd5762e05e91f8c7e598
+size 29711

+ 2 - 2
PopcornFX/Editor/Presets/Effects/FX_Simple.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:ea2c0a0a6a9464f41dd53b26ffcacc464668d6150c06272ec69b513229173819
-size 31013
+oid sha256:f3cf633d4789320ee029c0771b9a0b188cb0fab43e42a2908a65bf033d48e62c
+size 31034

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Animated_Mesh.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$A8FC2215",
 		"$A8FC2215",
+		"$F8D90E2B",
 		"$18565271",
 		"$18565271",
 		"$8F7B32AE",
 		"$8F7B32AE",
 		"$35A36C4E",
 		"$35A36C4E",
@@ -23,6 +24,7 @@ CParticleRendererMaterial	$6B70D015
 		"$1A35A1FF",
 		"$1A35A1FF",
 		"$F22CBF26",
 		"$F22CBF26",
 	};
 	};
+	NodeGraph = "$BA187922";
 }
 }
 CParticleRendererFeatureDesc	$A8FC2215
 CParticleRendererFeatureDesc	$A8FC2215
 {
 {
@@ -135,3 +137,105 @@ CParticleRendererFeatureDesc	$53BDE3A8
 	RendererFeatureName = "Culling";
 	RendererFeatureName = "Culling";
 	Mandatory = true;
 	Mandatory = true;
 }
 }
+CParticleNodeGraph	$BA187922
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$1E37A14B",
+		"$B15FA829",
+		"$FE0A3A08",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleRendererFeatureDesc	$F8D90E2B
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplateExport	$1E37A14B
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$7F840888",
+	};
+	OutputPins = {
+		"$14C216D9",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$7F840888
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$1E37A14B";
+}
+CParticleNodePinOut	$14C216D9
+{
+	SelfName = "Value";
+	Owner = "$1E37A14B";
+	ConnectedPins = {
+		"$78AF92A3",
+	};
+}
+CParticleNodeTemplate	$B15FA829
+{
+	InputPins = {
+		"$78AF92A3",
+	};
+	OutputPins = {
+		"$4F721505",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$78AF92A3
+{
+	SelfName = "Value";
+	Owner = "$B15FA829";
+	ConnectedPins = {
+		"$14C216D9",
+	};
+}
+CParticleNodePinOut	$4F721505
+{
+	SelfName = "Value";
+	Owner = "$B15FA829";
+	ConnectedPins = {
+		"$E24BF44E",
+	};
+}
+CParticleNodeTemplateExport	$FE0A3A08
+{
+	InputPins = {
+		"$E24BF44E",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$E24BF44E
+{
+	SelfName = "Value";
+	Owner = "$FE0A3A08";
+	ConnectedPins = {
+		"$4F721505",
+	};
+}

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Billboard.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$191F1761",
 		"$191F1761",
+		"$262FC99E",
 		"$5F3F8D5F",
 		"$5F3F8D5F",
 		"$3D324B43",
 		"$3D324B43",
 		"$D857A09F",
 		"$D857A09F",
@@ -19,6 +20,7 @@ CParticleRendererMaterial	$6B70D015
 		"$EAC726E3",
 		"$EAC726E3",
 		"$7FB4AB5F",
 		"$7FB4AB5F",
 	};
 	};
+	NodeGraph = "$56E6AB5C";
 }
 }
 CParticleRendererFeatureDesc	$191F1761
 CParticleRendererFeatureDesc	$191F1761
 {
 {
@@ -108,3 +110,105 @@ CParticleRendererFeatureDesc	$7FB4AB5F
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "EmissiveRamp";
 	RendererFeatureName = "EmissiveRamp";
 }
 }
+CParticleNodeGraph	$56E6AB5C
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$DA9BC1EB",
+		"$98A2733F",
+		"$D4C794E9",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleNodeTemplateExport	$DA9BC1EB
+{
+	InputPins = {
+		"$747AA164",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$747AA164
+{
+	SelfName = "Value";
+	Owner = "$DA9BC1EB";
+	ConnectedPins = {
+		"$94195BE2",
+	};
+}
+CParticleRendererFeatureDesc	$262FC99E
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplate	$98A2733F
+{
+	InputPins = {
+		"$A94EBB12",
+	};
+	OutputPins = {
+		"$94195BE2",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$A94EBB12
+{
+	SelfName = "Value";
+	Owner = "$98A2733F";
+	ConnectedPins = {
+		"$9C23FE5F",
+	};
+}
+CParticleNodePinOut	$94195BE2
+{
+	SelfName = "Value";
+	Owner = "$98A2733F";
+	ConnectedPins = {
+		"$747AA164",
+	};
+}
+CParticleNodeTemplateExport	$D4C794E9
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$76E6842A",
+	};
+	OutputPins = {
+		"$9C23FE5F",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinOut	$9C23FE5F
+{
+	SelfName = "Value";
+	Owner = "$D4C794E9";
+	ConnectedPins = {
+		"$A94EBB12",
+	};
+}
+CParticleNodePinIn	$76E6842A
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$D4C794E9";
+}

+ 109 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Decal.pkma

@@ -1,14 +1,16 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$191F1761",
 		"$191F1761",
+		"$1FB37679",
 		"$D857A09F",
 		"$D857A09F",
 		"$4B933A29",
 		"$4B933A29",
 		"$35A36C4E",
 		"$35A36C4E",
 		"$EAC726E3",
 		"$EAC726E3",
 		"$2DCA11C6",
 		"$2DCA11C6",
 	};
 	};
+	NodeGraph = "$F580548F";
 }
 }
 CParticleRendererFeatureDesc	$191F1761
 CParticleRendererFeatureDesc	$191F1761
 {
 {
@@ -48,3 +50,109 @@ CParticleRendererFeatureDesc	$2DCA11C6
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "Atlas";
 	RendererFeatureName = "Atlas";
 }
 }
+CParticleNodeGraph	$F580548F
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$5BCFACB1",
+		"$26668946",
+		"$62C57B13",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleNodePinOut	$BFA3B61D
+{
+	SelfName = "Value";
+}
+CParticleRendererFeatureDesc	$1FB37679
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplateExport	$5BCFACB1
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$741E3597",
+	};
+	OutputPins = {
+		"$BA824358",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$741E3597
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$5BCFACB1";
+}
+CParticleNodePinOut	$BA824358
+{
+	SelfName = "Value";
+	Owner = "$5BCFACB1";
+	ConnectedPins = {
+		"$B56B8351",
+	};
+}
+CParticleNodeTemplate	$26668946
+{
+	InputPins = {
+		"$B56B8351",
+	};
+	OutputPins = {
+		"$CB00D172",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$B56B8351
+{
+	SelfName = "Value";
+	Owner = "$26668946";
+	ConnectedPins = {
+		"$BA824358",
+	};
+}
+CParticleNodePinOut	$CB00D172
+{
+	SelfName = "Value";
+	Owner = "$26668946";
+	ConnectedPins = {
+		"$544B9E7B",
+	};
+}
+CParticleNodeTemplateExport	$62C57B13
+{
+	InputPins = {
+		"$544B9E7B",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$544B9E7B
+{
+	SelfName = "Value";
+	Owner = "$62C57B13";
+	ConnectedPins = {
+		"$CB00D172",
+	};
+}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Light.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Mesh.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$A8FC2215",
 		"$A8FC2215",
+		"$C4A58F03",
 		"$18565271",
 		"$18565271",
 		"$8F7B32AE",
 		"$8F7B32AE",
 		"$9154DFA0",
 		"$9154DFA0",
@@ -19,6 +20,7 @@ CParticleRendererMaterial	$6B70D015
 		"$1A35A1FF",
 		"$1A35A1FF",
 		"$D72B521A",
 		"$D72B521A",
 	};
 	};
+	NodeGraph = "$26A743ED";
 }
 }
 CParticleRendererFeatureDesc	$A8FC2215
 CParticleRendererFeatureDesc	$A8FC2215
 {
 {
@@ -109,3 +111,105 @@ CParticleRendererFeatureDesc	$E2963AA1
 	RendererFeatureName = "Culling";
 	RendererFeatureName = "Culling";
 	Mandatory = true;
 	Mandatory = true;
 }
 }
+CParticleRendererFeatureDesc	$C4A58F03
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeGraph	$26A743ED
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$01CF4FF9",
+		"$AFFE6ADB",
+		"$0A87AE9F",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleNodeTemplateExport	$01CF4FF9
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$6F738218",
+	};
+	OutputPins = {
+		"$0C1C60C4",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$6F738218
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$01CF4FF9";
+}
+CParticleNodePinOut	$0C1C60C4
+{
+	SelfName = "Value";
+	Owner = "$01CF4FF9";
+	ConnectedPins = {
+		"$75968322",
+	};
+}
+CParticleNodeTemplate	$AFFE6ADB
+{
+	InputPins = {
+		"$75968322",
+	};
+	OutputPins = {
+		"$F979FA4B",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$75968322
+{
+	SelfName = "Value";
+	Owner = "$AFFE6ADB";
+	ConnectedPins = {
+		"$0C1C60C4",
+	};
+}
+CParticleNodePinOut	$F979FA4B
+{
+	SelfName = "Value";
+	Owner = "$AFFE6ADB";
+	ConnectedPins = {
+		"$42C67615",
+	};
+}
+CParticleNodeTemplateExport	$0A87AE9F
+{
+	InputPins = {
+		"$42C67615",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$42C67615
+{
+	SelfName = "Value";
+	Owner = "$0A87AE9F";
+	ConnectedPins = {
+		"$F979FA4B",
+	};
+}

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Ribbon.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$FB5367C7",
 		"$FB5367C7",
+		"$2E5E8753",
 		"$83FDC6C2",
 		"$83FDC6C2",
 		"$156D23DE",
 		"$156D23DE",
 		"$D857A09F",
 		"$D857A09F",
@@ -22,6 +23,7 @@ CParticleRendererMaterial	$6B70D015
 		"$9154DFA0",
 		"$9154DFA0",
 		"$84382E2F",
 		"$84382E2F",
 	};
 	};
+	NodeGraph = "$E43066A5";
 }
 }
 CParticleRendererFeatureDesc	$FB5367C7
 CParticleRendererFeatureDesc	$FB5367C7
 {
 {
@@ -126,3 +128,105 @@ CParticleRendererFeatureDesc	$84382E2F
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "EmissiveRamp";
 	RendererFeatureName = "EmissiveRamp";
 }
 }
+CParticleRendererFeatureDesc	$2E5E8753
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeGraph	$E43066A5
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$D12EF51E",
+		"$C88B0B46",
+		"$23B61487",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleNodeTemplate	$D12EF51E
+{
+	InputPins = {
+		"$B9810B46",
+	};
+	OutputPins = {
+		"$2AB3821E",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$B9810B46
+{
+	SelfName = "Value";
+	Owner = "$D12EF51E";
+	ConnectedPins = {
+		"$B74E1DB8",
+	};
+}
+CParticleNodePinOut	$2AB3821E
+{
+	SelfName = "Value";
+	Owner = "$D12EF51E";
+	ConnectedPins = {
+		"$EEDDB046",
+	};
+}
+CParticleNodeTemplateExport	$C88B0B46
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$723F86E7",
+	};
+	OutputPins = {
+		"$B74E1DB8",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$723F86E7
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$C88B0B46";
+}
+CParticleNodePinOut	$B74E1DB8
+{
+	SelfName = "Value";
+	Owner = "$C88B0B46";
+	ConnectedPins = {
+		"$B9810B46",
+	};
+}
+CParticleNodeTemplateExport	$23B61487
+{
+	InputPins = {
+		"$EEDDB046",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$EEDDB046
+{
+	SelfName = "Value";
+	Owner = "$23B61487";
+	ConnectedPins = {
+		"$2AB3821E",
+	};
+}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Sound.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Default_Triangle.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Distortion_Billboard.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$E8631443",
 		"$E8631443",
+		"$D25F542C",
 		"$D0BFBDD9",
 		"$D0BFBDD9",
 		"$D857A09F",
 		"$D857A09F",
 		"$DDEAB83F",
 		"$DDEAB83F",
@@ -16,6 +17,7 @@ CParticleRendererMaterial	$6B70D015
 		"$07F6ADCE",
 		"$07F6ADCE",
 		"$4E5BBEB1",
 		"$4E5BBEB1",
 	};
 	};
+	NodeGraph = "$FA62A490";
 }
 }
 CParticleRendererFeatureDesc	$E8631443
 CParticleRendererFeatureDesc	$E8631443
 {
 {
@@ -89,3 +91,105 @@ CRHIMaterialShaders	$89AA45AB
 {
 {
 	FragmentShader = "Library/PopcornFXCore/Shaders/Particle_Master.frag";
 	FragmentShader = "Library/PopcornFXCore/Shaders/Particle_Master.frag";
 }
 }
+CParticleNodeGraph	$FA62A490
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$09E5E2D0",
+		"$08BA6A72",
+		"$4DCA1912",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleRendererFeatureDesc	$D25F542C
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplateExport	$09E5E2D0
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$1B6EAC7E",
+	};
+	OutputPins = {
+		"$E440CEE2",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$1B6EAC7E
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$09E5E2D0";
+}
+CParticleNodePinOut	$E440CEE2
+{
+	SelfName = "Value";
+	Owner = "$09E5E2D0";
+	ConnectedPins = {
+		"$889EBD7B",
+	};
+}
+CParticleNodeTemplate	$08BA6A72
+{
+	InputPins = {
+		"$889EBD7B",
+	};
+	OutputPins = {
+		"$F3A5CC34",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$889EBD7B
+{
+	SelfName = "Value";
+	Owner = "$08BA6A72";
+	ConnectedPins = {
+		"$E440CEE2",
+	};
+}
+CParticleNodePinOut	$F3A5CC34
+{
+	SelfName = "Value";
+	Owner = "$08BA6A72";
+	ConnectedPins = {
+		"$AD71D99F",
+	};
+}
+CParticleNodeTemplateExport	$4DCA1912
+{
+	InputPins = {
+		"$AD71D99F",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$AD71D99F
+{
+	SelfName = "Value";
+	Owner = "$4DCA1912";
+	ConnectedPins = {
+		"$F3A5CC34",
+	};
+}

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Distortion_Ribbon.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$35A36C4E",
 		"$35A36C4E",
+		"$558F3559",
 		"$D0BFBDD9",
 		"$D0BFBDD9",
 		"$D857A09F",
 		"$D857A09F",
 		"$DDEAB83F",
 		"$DDEAB83F",
@@ -19,6 +20,7 @@ CParticleRendererMaterial	$6B70D015
 		"$B3A8235C",
 		"$B3A8235C",
 		"$7B20F85D",
 		"$7B20F85D",
 	};
 	};
+	NodeGraph = "$A9947853";
 }
 }
 CParticleRendererFeatureDesc	$D0BFBDD9
 CParticleRendererFeatureDesc	$D0BFBDD9
 {
 {
@@ -107,3 +109,105 @@ CParticleRendererFeatureDesc	$D6EB29BC
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "TransformUVs";
 	RendererFeatureName = "TransformUVs";
 }
 }
+CParticleNodeGraph	$A9947853
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$FCA99156",
+		"$06C7924F",
+		"$D08B4945",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleRendererFeatureDesc	$558F3559
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplateExport	$FCA99156
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$BB64A244",
+	};
+	OutputPins = {
+		"$BBB55392",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$BB64A244
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$FCA99156";
+}
+CParticleNodePinOut	$BBB55392
+{
+	SelfName = "Value";
+	Owner = "$FCA99156";
+	ConnectedPins = {
+		"$FFB1B0E7",
+	};
+}
+CParticleNodeTemplate	$06C7924F
+{
+	InputPins = {
+		"$FFB1B0E7",
+	};
+	OutputPins = {
+		"$D1CA8C0A",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$FFB1B0E7
+{
+	SelfName = "Value";
+	Owner = "$06C7924F";
+	ConnectedPins = {
+		"$BBB55392",
+	};
+}
+CParticleNodePinOut	$D1CA8C0A
+{
+	SelfName = "Value";
+	Owner = "$06C7924F";
+	ConnectedPins = {
+		"$0701F31C",
+	};
+}
+CParticleNodeTemplateExport	$D08B4945
+{
+	InputPins = {
+		"$0701F31C",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$0701F31C
+{
+	SelfName = "Value";
+	Owner = "$D08B4945";
+	ConnectedPins = {
+		"$D1CA8C0A",
+	};
+}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Diffuse.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Distortion.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Emissive.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Opaque.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Billboard/Billboard_Tinted.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Decal/Decal_Diffuse.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Decal/Decal_Emissive.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Light/Light_Default.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Mesh/Mesh_Emissive.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Mesh/Mesh_Opaque.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Mesh/Mesh_Tinted.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Diffuse.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Distortion.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Emissive.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 7
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Opaque.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
@@ -17,7 +17,6 @@ CParticleRendererMaterial	$6B70D015
 		"$DCD8B8C4",
 		"$DCD8B8C4",
 		"$DCD8A7E7",
 		"$DCD8A7E7",
 		"$860D8229",
 		"$860D8229",
-		"$D5F9BFE4",
 	};
 	};
 }
 }
 CParticleRendererFeatureDesc	$191A1915
 CParticleRendererFeatureDesc	$191A1915
@@ -109,8 +108,3 @@ CParticleRendererFeatureDesc	$860D8229
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
 	RendererFeatureName = "TextureRepeat";
 	RendererFeatureName = "TextureRepeat";
 }
 }
-CParticleRendererFeatureDesc	$D5F9BFE4
-{
-	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
-	RendererFeatureName = "Dithering";
-}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_CorrectDeformation_Tinted.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Diffuse.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Distortion.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Emissive.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 7
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Opaque.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
@@ -17,7 +17,6 @@ CParticleRendererMaterial	$6B70D015
 		"$EAC726E3",
 		"$EAC726E3",
 		"$DCD8B8C4",
 		"$DCD8B8C4",
 		"$860D8229",
 		"$860D8229",
-		"$166128F6",
 	};
 	};
 }
 }
 CParticleRendererFeatureDesc	$191A1915
 CParticleRendererFeatureDesc	$191A1915
@@ -103,8 +102,3 @@ CParticleRendererFeatureDesc	$860D8229
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
 	RendererFeatureName = "TextureRepeat";
 	RendererFeatureName = "TextureRepeat";
 }
 }
-CParticleRendererFeatureDesc	$166128F6
-{
-	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
-	RendererFeatureName = "Dithering";
-}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Ribbon/Ribbon_Tinted.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Sound/Sound_Default.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Diffuse.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Distortion.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Emissive.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 1 - 13
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Opaque.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
@@ -17,9 +17,7 @@ CParticleRendererMaterial	$6B70D015
 		"$FD189ED3",
 		"$FD189ED3",
 		"$DA06D7A4",
 		"$DA06D7A4",
 		"$860D8229",
 		"$860D8229",
-		"$A2478C51",
 	};
 	};
-	NodeGraph = "$9EC1D3AA";
 }
 }
 CParticleRendererFeatureDesc	$191F1761
 CParticleRendererFeatureDesc	$191F1761
 {
 {
@@ -104,13 +102,3 @@ CParticleRendererFeatureDesc	$860D8229
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
 	RendererFeatureName = "TextureRepeat";
 	RendererFeatureName = "TextureRepeat";
 }
 }
-CParticleNodeGraph	$9EC1D3AA
-{
-	CustomName = "Adapter";
-	WorkspaceZoom = -4;
-}
-CParticleRendererFeatureDesc	$A2478C51
-{
-	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Experimental.pkri";
-	RendererFeatureName = "Dithering";
-}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Experimental/Triangle/Triangle_Tinted.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 210 - 1
PopcornFX/Library/PopcornFXCore/Materials/Interface/Editor.pkri

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CEngineRendererInterface	$6B70D015
 CEngineRendererInterface	$6B70D015
 {
 {
 	InterfaceName = "Editor features";
 	InterfaceName = "Editor features";
@@ -37,6 +37,7 @@ CEngineRendererInterface	$6B70D015
 		"$A2ABAB94",
 		"$A2ABAB94",
 		"$123456AC",
 		"$123456AC",
 		"$DDECD857",
 		"$DDECD857",
+		"$4A7D66F1",
 		"$D857A09F",
 		"$D857A09F",
 		"$047497F3",
 		"$047497F3",
 		"$9154DFA0",
 		"$9154DFA0",
@@ -51,6 +52,7 @@ CEngineRendererInterface	$6B70D015
 		"$71D528E3",
 		"$71D528E3",
 		"$E75E73C7",
 		"$E75E73C7",
 		"$8D50578F",
 		"$8D50578F",
+		"$14F128A7",
 	};
 	};
 }
 }
 CParticleRendererFeature	$81861AB7
 CParticleRendererFeature	$81861AB7
@@ -2568,6 +2570,8 @@ CRHIRenderingSettings	$6DF50834
 		"$A2DFDBD4",
 		"$A2DFDBD4",
 		"$DBCFAF80",
 		"$DBCFAF80",
 		"$46727B95",
 		"$46727B95",
+		"$1051A2E8",
+		"$3D9C9762",
 	};
 	};
 }
 }
 CRHIRenderingFeature	$EA67A6E3
 CRHIRenderingFeature	$EA67A6E3
@@ -5153,3 +5157,208 @@ CParticleNodePinOut	$C7C72EFA
 	SelfName = "Value";
 	SelfName = "Value";
 	Owner = "$44ED3089";
 	Owner = "$44ED3089";
 }
 }
+CParticleRendererFeature	$14F128A7
+{
+	FeatureName = "ComputeVelocity";
+	Feature = "$FD60B428";
+	Properties = {
+		"$1FD66E5F",
+	};
+}
+CParticleNodeTemplateExport	$FD60B428
+{
+	InputPins = {
+		"$14E77F02",
+	};
+	OutputPins = {
+		"$FAF0B67D",
+	};
+	ExportedName = "ComputeVelocity";
+	ExportedType = bool;
+	Type = Input;
+	InputType = Property;
+}
+CParticleNodePinIn	$14E77F02
+{
+	SelfName = "DefaultValue";
+	Owner = "$FD60B428";
+}
+CParticleNodePinOut	$FAF0B67D
+{
+	SelfName = "Value";
+	Owner = "$FD60B428";
+}
+CRHIRenderingFeature	$1051A2E8
+{
+	FeatureName = "ComputeVelocity";
+}
+CParticleNodeTemplateExport	$1FD66E5F
+{
+	Description = {
+		"@eng:Previous frame position of the particle.",
+	};
+	InputPins = {
+		"$4A2AE2B5",
+	};
+	OutputPins = {
+		"$DE6E30A8",
+	};
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:ComputeVelocity",
+	};
+	PinRules = Rule1;
+	RuleResult = Hidden;
+	DependentProperty = "General.Position";
+	RuleFunction = Visible;
+}
+CParticleNodePinIn	$4A2AE2B5
+{
+	SelfName = "DefaultValue";
+	Owner = "$1FD66E5F";
+}
+CParticleNodePinOut	$DE6E30A8
+{
+	SelfName = "Value";
+	Owner = "$1FD66E5F";
+}
+CParticleRendererFeature	$4A7D66F1
+{
+	FeatureName = "LegacyLitOpaque";
+	Feature = "$70F51C43";
+	Properties = {
+		"$42BA5EC6",
+		"$11064CCB",
+		"$AE28F402",
+	};
+}
+CParticleNodeTemplateExport	$70F51C43
+{
+	InputPins = {
+		"$335F1F91",
+	};
+	OutputPins = {
+		"$7407BDF3",
+	};
+	ExportedName = "LegacyLitOpaque";
+	ExportedType = bool;
+	Type = Input;
+	InputType = Property;
+}
+CParticleNodePinIn	$335F1F91
+{
+	SelfName = "DefaultValue";
+	Owner = "$70F51C43";
+}
+CParticleNodePinOut	$7407BDF3
+{
+	SelfName = "Value";
+	Owner = "$70F51C43";
+}
+CRHIRenderingFeature	$3D9C9762
+{
+	FeatureName = "LegacyLitOpaque";
+	UseUV = true;
+	UseNormal = true;
+	UseTangent = true;
+	UseSceneLightingInfo = true;
+	PropertiesAsShaderConstants = {
+		"NormalMap",
+		"SpecularMap",
+	};
+	TexturesUsedAsLookUp = {
+		"NormalMap",
+	};
+}
+CParticleNodeTemplateExport	$42BA5EC6
+{
+	Description = {
+		"@eng:Texture map representing tangent-space normals to be used for lighting",
+	};
+	InputPins = {
+		"$378D8F7C",
+	};
+	OutputPins = {
+		"$F4EECB3F",
+	};
+	ExportedName = "LegacyLitOpaque.NormalMap";
+	ExportedType = dataImage;
+	Type = Input;
+	CategoryName = {
+		"@eng:LegacyLitOpaque",
+	};
+	DefaultValueData = "Library/PopcornFXCore/Materials/DefaultTextures/NMap_Flat.dds";
+}
+CParticleNodePinIn	$378D8F7C
+{
+	SelfName = "DefaultValue";
+	Owner = "$42BA5EC6";
+}
+CParticleNodePinOut	$F4EECB3F
+{
+	SelfName = "Value";
+	Owner = "$42BA5EC6";
+}
+CParticleNodeTemplateExport	$11064CCB
+{
+	Description = {
+		"@eng:Can cast shadows (not implemented in editor)",
+	};
+	InputPins = {
+		"$6E04C968",
+	};
+	OutputPins = {
+		"$021D646B",
+	};
+	ExportedName = "LegacyLitOpaque.CastShadows";
+	ExportedType = bool;
+	Type = Input;
+	InputType = Property;
+	CategoryName = {
+		"@eng:LegacyLitOpaque",
+	};
+}
+CParticleNodePinIn	$6E04C968
+{
+	SelfName = "DefaultValue";
+	Owner = "$11064CCB";
+}
+CParticleNodePinOut	$021D646B
+{
+	SelfName = "Value";
+	Owner = "$11064CCB";
+}
+CParticleNodeTemplateExport	$AE28F402
+{
+	Description = {
+		"@eng:Source map used in specular lighting computation",
+	};
+	InputPins = {
+		"$A0C8ADF0",
+	};
+	OutputPins = {
+		"$5A6AC521",
+	};
+	ExportedName = "LegacyLitOpaque.SpecularMap";
+	ExportedType = dataImage;
+	Type = Input;
+	CategoryName = {
+		"@eng:LegacyLitOpaque",
+	};
+	DefaultValueData = "Library/PopcornFXCore/Materials/DefaultTextures/Black.dds";
+}
+CParticleNodePinOut	$5A6AC521
+{
+	SelfName = "Value";
+	Owner = "$AE28F402";
+}
+CParticleNodePinIn	$A0C8ADF0
+{
+	SelfName = "DefaultValue";
+	Owner = "$AE28F402";
+}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Interface/Experimental.pkri

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CEngineRendererInterface	$6B70D015
 CEngineRendererInterface	$6B70D015
 {
 {
 	InterfaceName = "Experimental material features";
 	InterfaceName = "Experimental material features";

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Interface/MeshAnim.pkri

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CEngineRendererInterface	$6B70D015
 CEngineRendererInterface	$6B70D015
 {
 {
 	InterfaceName = "Mesh Anim";
 	InterfaceName = "Mesh Anim";

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Interface/SkeletalAnimationTexture.pkri

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CEngineRendererInterface	$6B70D015
 CEngineRendererInterface	$6B70D015
 {
 {
 	InterfaceName = "Skeletal Animation Texture";
 	InterfaceName = "Skeletal Animation Texture";

+ 111 - 7
PopcornFX/Library/PopcornFXCore/Materials/Opaque_Billboard.pkma

@@ -1,13 +1,14 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$191F1761",
 		"$191F1761",
+		"$9C38A267",
 		"$3D324B43",
 		"$3D324B43",
 		"$D857A09F",
 		"$D857A09F",
 		"$35A36C4E",
 		"$35A36C4E",
 		"$EA3837ED",
 		"$EA3837ED",
-		"$02499109",
+		"$BD7D33A6",
 		"$1DB717AE",
 		"$1DB717AE",
 		"$1098ED35",
 		"$1098ED35",
 		"$CAD62F46",
 		"$CAD62F46",
@@ -18,6 +19,7 @@ CParticleRendererMaterial	$6B70D015
 		"$EAC726E3",
 		"$EAC726E3",
 		"$F936652D",
 		"$F936652D",
 	};
 	};
+	NodeGraph = "$CD99CCED";
 }
 }
 CParticleRendererFeatureDesc	$191F1761
 CParticleRendererFeatureDesc	$191F1761
 {
 {
@@ -58,11 +60,6 @@ CParticleRendererFeatureDesc	$EA3837ED
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "Lit";
 	RendererFeatureName = "Lit";
 }
 }
-CParticleRendererFeatureDesc	$02499109
-{
-	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
-	RendererFeatureName = "LegacyLit";
-}
 CParticleRendererFeatureDesc	$1DB717AE
 CParticleRendererFeatureDesc	$1DB717AE
 {
 {
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
@@ -102,3 +99,110 @@ CParticleRendererFeatureDesc	$F936652D
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "EmissiveRamp";
 	RendererFeatureName = "EmissiveRamp";
 }
 }
+CParticleNodeGraph	$CD99CCED
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$36A1B3F6",
+		"$B51D569B",
+		"$0E630FFE",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleRendererFeatureDesc	$9C38A267
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplateExport	$36A1B3F6
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$B00D6E02",
+	};
+	OutputPins = {
+		"$66FAB033",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$B00D6E02
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$36A1B3F6";
+}
+CParticleNodePinOut	$66FAB033
+{
+	SelfName = "Value";
+	Owner = "$36A1B3F6";
+	ConnectedPins = {
+		"$B32883E7",
+	};
+}
+CParticleNodeTemplate	$B51D569B
+{
+	InputPins = {
+		"$B32883E7",
+	};
+	OutputPins = {
+		"$182F6D66",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$B32883E7
+{
+	SelfName = "Value";
+	Owner = "$B51D569B";
+	ConnectedPins = {
+		"$66FAB033",
+	};
+}
+CParticleNodePinOut	$182F6D66
+{
+	SelfName = "Value";
+	Owner = "$B51D569B";
+	ConnectedPins = {
+		"$CA703AFB",
+	};
+}
+CParticleNodeTemplateExport	$0E630FFE
+{
+	InputPins = {
+		"$CA703AFB",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$CA703AFB
+{
+	SelfName = "Value";
+	Owner = "$0E630FFE";
+	ConnectedPins = {
+		"$182F6D66",
+	};
+}
+CParticleRendererFeatureDesc	$BD7D33A6
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "LegacyLitOpaque";
+}

+ 111 - 7
PopcornFX/Library/PopcornFXCore/Materials/Opaque_Ribbon.pkma

@@ -1,13 +1,14 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$35A36C4E",
 		"$35A36C4E",
+		"$AF945AB8",
 		"$D857A09F",
 		"$D857A09F",
 		"$3D324B43",
 		"$3D324B43",
 		"$D279714D",
 		"$D279714D",
 		"$EA3837ED",
 		"$EA3837ED",
-		"$02499109",
+		"$B1B7BA3B",
 		"$4B933A29",
 		"$4B933A29",
 		"$9154DFA0",
 		"$9154DFA0",
 		"$EAC726E3",
 		"$EAC726E3",
@@ -21,6 +22,7 @@ CParticleRendererMaterial	$6B70D015
 		"$BEDF8936",
 		"$BEDF8936",
 		"$3011D520",
 		"$3011D520",
 	};
 	};
+	NodeGraph = "$26DE5A17";
 }
 }
 CParticleRendererFeatureDesc	$35A36C4E
 CParticleRendererFeatureDesc	$35A36C4E
 {
 {
@@ -51,11 +53,6 @@ CParticleRendererFeatureDesc	$EA3837ED
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "Lit";
 	RendererFeatureName = "Lit";
 }
 }
-CParticleRendererFeatureDesc	$02499109
-{
-	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
-	RendererFeatureName = "LegacyLit";
-}
 CParticleRendererFeatureDesc	$1098ED35
 CParticleRendererFeatureDesc	$1098ED35
 {
 {
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
@@ -120,3 +117,110 @@ CParticleRendererFeatureDesc	$3011D520
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
 	RendererFeatureName = "EmissiveRamp";
 	RendererFeatureName = "EmissiveRamp";
 }
 }
+CParticleNodeGraph	$26DE5A17
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$74A78CD5",
+		"$92341F7D",
+		"$26765F0E",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleRendererFeatureDesc	$AF945AB8
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeTemplateExport	$74A78CD5
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$2C71D024",
+	};
+	OutputPins = {
+		"$DCC4327D",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$2C71D024
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$74A78CD5";
+}
+CParticleNodePinOut	$DCC4327D
+{
+	SelfName = "Value";
+	Owner = "$74A78CD5";
+	ConnectedPins = {
+		"$0EB80E28",
+	};
+}
+CParticleNodeTemplate	$92341F7D
+{
+	InputPins = {
+		"$0EB80E28",
+	};
+	OutputPins = {
+		"$534DB097",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$0EB80E28
+{
+	SelfName = "Value";
+	Owner = "$92341F7D";
+	ConnectedPins = {
+		"$DCC4327D",
+	};
+}
+CParticleNodePinOut	$534DB097
+{
+	SelfName = "Value";
+	Owner = "$92341F7D";
+	ConnectedPins = {
+		"$80CE492A",
+	};
+}
+CParticleNodeTemplateExport	$26765F0E
+{
+	InputPins = {
+		"$80CE492A",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$80CE492A
+{
+	SelfName = "Value";
+	Owner = "$26765F0E";
+	ConnectedPins = {
+		"$534DB097",
+	};
+}
+CParticleRendererFeatureDesc	$B1B7BA3B
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "LegacyLitOpaque";
+}

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Materials/Opaque_Triangle.pkma

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {

+ 105 - 1
PopcornFX/Library/PopcornFXCore/Materials/Transparent_Mesh.pkma

@@ -1,8 +1,9 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 CParticleRendererMaterial	$6B70D015
 CParticleRendererMaterial	$6B70D015
 {
 {
 	RendererFeatures = {
 	RendererFeatures = {
 		"$4126ECB5",
 		"$4126ECB5",
+		"$4A4A4170",
 		"$CF8BEC2E",
 		"$CF8BEC2E",
 		"$BF96EAFE",
 		"$BF96EAFE",
 		"$35A36C4E",
 		"$35A36C4E",
@@ -18,6 +19,7 @@ CParticleRendererMaterial	$6B70D015
 		"$30A73448",
 		"$30A73448",
 		"$D46EA531",
 		"$D46EA531",
 	};
 	};
+	NodeGraph = "$1429F371";
 }
 }
 CParticleRendererFeatureDesc	$4126ECB5
 CParticleRendererFeatureDesc	$4126ECB5
 {
 {
@@ -103,3 +105,105 @@ CParticleRendererFeatureDesc	$B15452BE
 	RendererFeatureName = "Culling";
 	RendererFeatureName = "Culling";
 	Mandatory = true;
 	Mandatory = true;
 }
 }
+CParticleRendererFeatureDesc	$4A4A4170
+{
+	RendererInterfacePath = "Library/PopcornFXCore/Materials/Interface/Editor.pkri";
+	RendererFeatureName = "ComputeVelocity";
+	Mandatory = true;
+}
+CParticleNodeGraph	$1429F371
+{
+	CustomName = "Adapter";
+	Nodes = {
+		"$1D049D0B",
+		"$83C8CB74",
+		"$004AFAD0",
+	};
+	WorkspaceZoom = -4;
+}
+CParticleNodeTemplateExport	$1D049D0B
+{
+	Description = {
+		"@eng:Billboard center in world coordinates",
+	};
+	InputPins = {
+		"$7373276A",
+	};
+	OutputPins = {
+		"$600CC215",
+	};
+	WorkspacePosition = int2(-638, 0);
+	ExportedName = "General.Position";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Input;
+	VisibleByDefault = true;
+	TransformSpace = World;
+	TransformMode = Position;
+	CategoryName = {
+		"@eng:General",
+	};
+}
+CParticleNodePinIn	$7373276A
+{
+	SelfName = "DefaultValue";
+	Visible = false;
+	Owner = "$1D049D0B";
+}
+CParticleNodePinOut	$600CC215
+{
+	SelfName = "Value";
+	Owner = "$1D049D0B";
+	ConnectedPins = {
+		"$9D3FADCA",
+	};
+}
+CParticleNodeTemplate	$83C8CB74
+{
+	InputPins = {
+		"$9D3FADCA",
+	};
+	OutputPins = {
+		"$F11D634F",
+	};
+	WorkspacePosition = int2(-176, 0);
+	SubGraphFilePath = "Library/PopcornFXCore/Templates/Core.pkfx";
+	SubGraphName = "PreviousFrameValue";
+}
+CParticleNodePinIn	$9D3FADCA
+{
+	SelfName = "Value";
+	Owner = "$83C8CB74";
+	ConnectedPins = {
+		"$600CC215",
+	};
+}
+CParticleNodePinOut	$F11D634F
+{
+	SelfName = "Value";
+	Owner = "$83C8CB74";
+	ConnectedPins = {
+		"$9CE6187D",
+	};
+}
+CParticleNodeTemplateExport	$004AFAD0
+{
+	InputPins = {
+		"$9CE6187D",
+	};
+	WorkspacePosition = int2(330, 0);
+	ExportedName = "ComputeVelocity.PreviousPosition";
+	ExportedType = float3;
+	Semantic = 3D_Coordinate;
+	Type = Output;
+	TransformSpace = World;
+	TransformMode = Position;
+}
+CParticleNodePinIn	$9CE6187D
+{
+	SelfName = "Value";
+	Owner = "$004AFAD0";
+	ConnectedPins = {
+		"$F11D634F",
+	};
+}

+ 5 - 3
PopcornFX/Library/PopcornFXCore/Shaders/Default_Billboard.frag

@@ -46,19 +46,21 @@ vec3	computeBRDF(vec3 surfToLight, vec3 surfToView, vec3 surfaceNormal, float ro
 {
 {
 	vec3    halfVec = normalize(surfToLight + surfToView);
 	vec3    halfVec = normalize(surfToLight + surfToView);
 
 
-	float   NoL = max(0.0f, dot(surfToLight, surfaceNormal));
+	float   NoL = dot(surfToLight, surfaceNormal);
 
 
 #if     defined(HAS_NormalWrap)
 #if     defined(HAS_NormalWrap)
-	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor);
+	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor) * 0.5f;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 #endif
 #endif
 
 
+	NoL = max(0.0f, NoL);
+
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 
 
 	vec3    surfaceMetalColor = mix(METAL_FRESNEL_FACTOR, surfaceColor, metalness);
 	vec3    surfaceMetalColor = mix(METAL_FRESNEL_FACTOR, surfaceColor, metalness);
 
 
-	vec3    F  = fresnelSchlick(surfaceMetalColor, max(0.0f, dot(halfVec, surfToView)));
+	vec3    F = fresnelSchlick(surfaceMetalColor, max(0.0f, dot(halfVec, surfToView)));
 	float   D = normalDistFuncGGX(specIntensity, roughness);
 	float   D = normalDistFuncGGX(specIntensity, roughness);
 	float   G = schlickGGX(NoL, NoV, roughness);
 	float   G = schlickGGX(NoL, NoV, roughness);
 
 

+ 4 - 2
PopcornFX/Library/PopcornFXCore/Shaders/Default_Ribbon.frag

@@ -65,13 +65,15 @@ vec3 computeBRDF(vec3 surfToLight, vec3 surfToView, vec3 surfaceNormal, float ro
 {
 {
 	vec3    halfVec = normalize(surfToLight + surfToView);
 	vec3    halfVec = normalize(surfToLight + surfToView);
 
 
-	float   NoL = max(0.0f, dot(surfToLight, surfaceNormal));
+	float   NoL = dot(surfToLight, surfaceNormal);
 
 
 #if     defined(HAS_NormalWrap)
 #if     defined(HAS_NormalWrap)
-	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor);
+	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor) * 0.5f;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 #endif
 #endif
 
 
+	NoL = max(0.0f, NoL);
+
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 
 

+ 4 - 2
PopcornFX/Library/PopcornFXCore/Shaders/Default_Triangle.frag

@@ -46,13 +46,15 @@ vec3	computeBRDF(vec3 surfToLight, vec3 surfToView, vec3 surfaceNormal, float ro
 {
 {
 	vec3    halfVec = normalize(surfToLight + surfToView);
 	vec3    halfVec = normalize(surfToLight + surfToView);
 
 
-	float   NoL = max(0.0f, dot(surfToLight, surfaceNormal));
+	float   NoL = dot(surfToLight, surfaceNormal);
 
 
 #if     defined(HAS_NormalWrap)
 #if     defined(HAS_NormalWrap)
-	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor);
+	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor) * 0.5f;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 #endif
 #endif
 
 
+	NoL = max(0.0f, NoL);
+
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 
 

+ 7 - 4
PopcornFX/Library/PopcornFXCore/Shaders/Experimental/includes/PKLighting.h

@@ -37,12 +37,15 @@ vec3	FresnelSchlick(vec3 surfaceMetalColor, float cosTheta)
 void	ApplyLightBRDF(INOUT(SFragSurface) fSurf, vec3 surfToLight, vec3 surfToView, vec3 lightColor, vec3 surfaceDiffuseColor, float attenuation, float litMask FS_ARGS)
 void	ApplyLightBRDF(INOUT(SFragSurface) fSurf, vec3 surfToLight, vec3 surfToView, vec3 lightColor, vec3 surfaceDiffuseColor, float attenuation, float litMask FS_ARGS)
 {
 {
 	vec3	halfVec = normalize(surfToLight + surfToView);
 	vec3	halfVec = normalize(surfToLight + surfToView);
-	float	NoL = max(0.0f, dot(surfToLight, fSurf.m_Normal)) * attenuation;
+	
+	float   NoL = dot(surfToLight, fSurf.m_Normal);
 
 
-#	if defined(HAS_NormalWrap)
-	float	normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor);
+#if     defined(HAS_NormalWrap)
+	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor) * 0.5f;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
-#	endif
+#endif
+
+	NoL = max(0.0f, NoL) * attenuation;
 
 
 	float	specIntensity = max(0.0f, dot(halfVec, fSurf.m_Normal));
 	float	specIntensity = max(0.0f, dot(halfVec, fSurf.m_Normal));
 	float	NoV = max(EPSILON, dot(surfToView, fSurf.m_Normal)); // Weird behavior when this is near 0
 	float	NoV = max(EPSILON, dot(surfToView, fSurf.m_Normal)); // Weird behavior when this is near 0

+ 8 - 8
PopcornFX/Library/PopcornFXCore/Shaders/Opaque_Billboard.frag

@@ -28,7 +28,7 @@ void     FragmentMain(IN(SFragmentInput) fInput, OUT(SFragmentOutput) fOutput FS
     color = vec4(1.0f, 1.0f, 1.0f, 0.1f);
     color = vec4(1.0f, 1.0f, 1.0f, 0.1f);
 #endif
 #endif
 
 
-#if     defined(HAS_Diffuse) || defined(HAS_Lit) || defined(HAS_LegacyLit) || defined(HAS_Emissive) // has texture sampling
+#if     defined(HAS_Diffuse) || defined(HAS_Lit) || defined(HAS_LegacyLitOpaque) || defined(HAS_Emissive) // has texture sampling
 
 
 	vec2    fragUV0 = fInput.fragUV0;
 	vec2    fragUV0 = fInput.fragUV0;
 
 
@@ -199,20 +199,20 @@ void     FragmentMain(IN(SFragmentInput) fInput, OUT(SFragmentOutput) fOutput FS
 	metalness = GET_CONSTANT(Material, Lit_Metalness);
 	metalness = GET_CONSTANT(Material, Lit_Metalness);
 	metalness *= roughMetal.y;
 	metalness *= roughMetal.y;
 
 
-#elif   defined(HAS_LegacyLit)
+#elif   defined(HAS_LegacyLitOpaque)
 
 
 #if defined(HAS_TransformUVs)
 #if defined(HAS_TransformUVs)
-	vec3 normalTex =  SAMPLEGRAD(LegacyLit_NormalMap, fragUV0, dUVdx, dUVdy).xyz;
+	vec3 normalTex =  SAMPLEGRAD(LegacyLitOpaque_NormalMap, fragUV0, dUVdx, dUVdy).xyz;
 #else
 #else
-	vec3 normalTex =  SAMPLE(LegacyLit_NormalMap, fragUV0).xyz;
+	vec3 normalTex =  SAMPLE(LegacyLitOpaque_NormalMap, fragUV0).xyz;
 #endif
 #endif
 #if defined(HAS_Atlas)
 #if defined(HAS_Atlas)
 	if (blendingType >= 1)
 	if (blendingType >= 1)
 	{
 	{
 #if defined(HAS_TransformUVs)
 #if defined(HAS_TransformUVs)
-		vec3 normalTex2 =  SAMPLEGRAD(LegacyLit_NormalMap, fragUV1, dUVdx, dUVdy).xyz;
+		vec3 normalTex2 =  SAMPLEGRAD(LegacyLitOpaque_NormalMap, fragUV1, dUVdx, dUVdy).xyz;
 #else
 #else
-		vec3 normalTex2 =  SAMPLE(LegacyLit_NormalMap, fragUV1).xyz;
+		vec3 normalTex2 =  SAMPLE(LegacyLitOpaque_NormalMap, fragUV1).xyz;
 #endif
 #endif
 		normalTex = mix(normalTex, normalTex2, blendMix);
 		normalTex = mix(normalTex, normalTex2, blendMix);
 	}
 	}
@@ -239,11 +239,11 @@ void     FragmentMain(IN(SFragmentInput) fInput, OUT(SFragmentOutput) fOutput FS
 	// In the old lighting feature, we stored the specular and glossiness in the specular map.
 	// In the old lighting feature, we stored the specular and glossiness in the specular map.
 	// To mimic something similar, we just set the roughness to (1.0 - specularValue) * 0.7 + 0.3 to avoid very sharp specular which did not exist before
 	// To mimic something similar, we just set the roughness to (1.0 - specularValue) * 0.7 + 0.3 to avoid very sharp specular which did not exist before
 	// The metalness is always 0.
 	// The metalness is always 0.
-	roughness = (1.0 - SAMPLE(LegacyLit_SpecularMap, fragUV0).x) * 0.7 + 0.3;
+	roughness = (1.0 - SAMPLE(LegacyLitOpaque_SpecularMap, fragUV0).x) * 0.7 + 0.3;
 #if defined(HAS_Atlas)
 #if defined(HAS_Atlas)
 	if (blendingType >= 1)
 	if (blendingType >= 1)
 	{
 	{
-		float roughness2 = (1.0 - SAMPLE(LegacyLit_SpecularMap, fragUV1).x) * 0.7 + 0.3;
+		float roughness2 = (1.0 - SAMPLE(LegacyLitOpaque_SpecularMap, fragUV1).x) * 0.7 + 0.3;
 		roughness = mix(roughness, roughness2, blendMix);
 		roughness = mix(roughness, roughness2, blendMix);
 	}
 	}
 #endif
 #endif

+ 8 - 8
PopcornFX/Library/PopcornFXCore/Shaders/Opaque_Ribbon.frag

@@ -45,7 +45,7 @@ void     FragmentMain(IN(SFragmentInput) fInput, OUT(SFragmentOutput) fOutput FS
     color = vec4(1.0f, 1.0f, 1.0f, 0.1f);
     color = vec4(1.0f, 1.0f, 1.0f, 0.1f);
 #endif
 #endif
 
 
-#if     defined(HAS_Diffuse) || defined(HAS_Lit) || defined(HAS_LegacyLit) || defined(HAS_Emissive) // has texture sampling
+#if     defined(HAS_Diffuse) || defined(HAS_Lit) || defined(HAS_LegacyLitOpaque) || defined(HAS_Emissive) // has texture sampling
 
 
 	vec2    fragUV0 = applyCorrectDeformation(fInput, fInput.fragUV0);
 	vec2    fragUV0 = applyCorrectDeformation(fInput, fInput.fragUV0);
 
 
@@ -219,20 +219,20 @@ void     FragmentMain(IN(SFragmentInput) fInput, OUT(SFragmentOutput) fOutput FS
 	metalness = GET_CONSTANT(Material, Lit_Metalness);
 	metalness = GET_CONSTANT(Material, Lit_Metalness);
 	metalness *= roughMetal.y;
 	metalness *= roughMetal.y;
 
 
-#elif   defined(HAS_LegacyLit)
+#elif   defined(HAS_LegacyLitOpaque)
 
 
 #if defined(HAS_TransformUVs)
 #if defined(HAS_TransformUVs)
-	vec3 normalTex =  SAMPLEGRAD(LegacyLit_NormalMap, fragUV0, dUVdx, dUVdy).xyz;
+	vec3 normalTex =  SAMPLEGRAD(LegacyLitOpaque_NormalMap, fragUV0, dUVdx, dUVdy).xyz;
 #else
 #else
-	vec3 normalTex =  SAMPLE(LegacyLit_NormalMap, fragUV0).xyz;
+	vec3 normalTex =  SAMPLE(LegacyLitOpaque_NormalMap, fragUV0).xyz;
 #endif
 #endif
 #if defined(HAS_Atlas)
 #if defined(HAS_Atlas)
 	if (blendingType >= 1)
 	if (blendingType >= 1)
 	{
 	{
 #if defined(HAS_TransformUVs)
 #if defined(HAS_TransformUVs)
-		vec3 normalTex2 =  SAMPLEGRAD(LegacyLit_NormalMap, fragUV1, dUVdx, dUVdy).xyz;
+		vec3 normalTex2 =  SAMPLEGRAD(LegacyLitOpaque_NormalMap, fragUV1, dUVdx, dUVdy).xyz;
 #else
 #else
-		vec3 normalTex2 =  SAMPLE(LegacyLit_NormalMap, fragUV1).xyz;
+		vec3 normalTex2 =  SAMPLE(LegacyLitOpaque_NormalMap, fragUV1).xyz;
 #endif
 #endif
 		normalTex = mix(normalTex, normalTex2, blendMix);
 		normalTex = mix(normalTex, normalTex2, blendMix);
 	}
 	}
@@ -259,11 +259,11 @@ void     FragmentMain(IN(SFragmentInput) fInput, OUT(SFragmentOutput) fOutput FS
 	// In the old lighting feature, we stored the specular and glossiness in the specular map.
 	// In the old lighting feature, we stored the specular and glossiness in the specular map.
 	// To mimic something similar, we just set the roughness to (1.0 - specularValue) * 0.7 + 0.3 to avoid very sharp specular which did not exist before
 	// To mimic something similar, we just set the roughness to (1.0 - specularValue) * 0.7 + 0.3 to avoid very sharp specular which did not exist before
 	// The metalness is always 0.
 	// The metalness is always 0.
-	roughness = (1.0 - SAMPLE(LegacyLit_SpecularMap, fragUV0).x) * 0.7 + 0.3;
+	roughness = (1.0 - SAMPLE(LegacyLitOpaque_SpecularMap, fragUV0).x) * 0.7 + 0.3;
 #if defined(HAS_Atlas)
 #if defined(HAS_Atlas)
 	if (blendingType >= 1)
 	if (blendingType >= 1)
 	{
 	{
-		float roughness2 = (1.0 - SAMPLE(LegacyLit_SpecularMap, fragUV1).x) * 0.7 + 0.3;
+		float roughness2 = (1.0 - SAMPLE(LegacyLitOpaque_SpecularMap, fragUV1).x) * 0.7 + 0.3;
 		roughness = mix(roughness, roughness2, blendMix);
 		roughness = mix(roughness, roughness2, blendMix);
 	}
 	}
 #endif
 #endif

+ 4 - 2
PopcornFX/Library/PopcornFXCore/Shaders/Particle_Master.frag

@@ -56,13 +56,15 @@ vec3	computeBRDF(vec3 surfToLight, vec3 surfToView, vec3 surfaceNormal, float ro
 {
 {
 	vec3    halfVec = normalize(surfToLight + surfToView);
 	vec3    halfVec = normalize(surfToLight + surfToView);
 
 
-	float   NoL = max(0.0f, dot(surfToLight, surfaceNormal));
+	float   NoL = dot(surfToLight, surfaceNormal);
 
 
 #if     defined(HAS_NormalWrap)
 #if     defined(HAS_NormalWrap)
-	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor);
+	float   normalWrapFactor = GET_CONSTANT(Material, NormalWrap_WrapFactor) * 0.5f;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 	NoL = normalWrapFactor + (1.0f - normalWrapFactor) * NoL;
 #endif
 #endif
 
 
+	NoL = max(0.0f, NoL);
+
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   specIntensity = max(0.0f, dot(halfVec, surfaceNormal));
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 	float   NoV = max(EPSILON, dot(surfToView, surfaceNormal)); // Weird behavior when this is near 0
 
 

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Templates/Color.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:bd93b2525530cc4f922cc410d2383b0f60352b57c42b24365947c587f68f2720
+oid sha256:fd684ef8d89c8edec6b790582c2fe84d597f3aebf1640a1c2ff7d3276670c592
 size 117248
 size 117248

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Core.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:1be33df434eba8c6047aec00b724c063ee048e69626d4c42f5362208751f4f0e
-size 656869
+oid sha256:79da57bafe6dde8411fb9438c6efaf4735f9a4c08bb70795341ec4d5c16bc92b
+size 660494

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Templates/CurvePresets.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:d861ac9ac3510b5c4b85d82010182cb3c400f4a25fe236c73048bc8a2c31ccf6
+oid sha256:5928e14f4e06c52c764eca8bc321d2629c6ffa6d003ef49690f51c29b1d64337
 size 20815
 size 20815

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Debug.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:aaf34e886380ada65021818ff9123266c93eec7291141f49583a937a3ce502ad
-size 129277
+oid sha256:6e494ba34e165f865dd95e9ab09068e1092a8dfd9359ccb8ad8b0503573b4fe9
+size 109017

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Dynamics.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:638169220a74f3d6cf661603f99ede798c47267bac1a7ec6e4193ae01a8210ae
-size 717437
+oid sha256:02b0963e09047552a9440739f8f77524fbd35fd69a49bccd1a9239cdb0e18ee1
+size 719352

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Events.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:66507a1671051b8e214feef3cb5a1bc411f63c06fddd78fbd262edd51194f1fd
-size 382003
+oid sha256:36eb0c5b905b6d82a25bc4cbe610b8522066d71f58c78b33c5f3caf4d64019a8
+size 386685

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Legacy.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:4d22f11c332e75280b2939934924a496b78a7d3a0167a12281b004f09448313f
-size 795328
+oid sha256:aec50a2455dd4a63de538d0a54a2a50511835adf84a89f06f02fb78c5fb48f1c
+size 795329

+ 1 - 1
PopcornFX/Library/PopcornFXCore/Templates/Placement.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:f52fe95b8f613bb8e58c8eff18e7c508c39e534a7ad21bdee6cf73064580c497
+oid sha256:36e1e74d6850110d8cfc94e3c46ed22558d5573e70cc65c43376612ccf885355
 size 195955
 size 195955

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Samplers.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:377132b875efa030f0662b6887a929f886ea35865df6af6a67501d5ae0cd7c02
-size 348531
+oid sha256:a579801dae10a090458d1fb297efc4e5228a2e0eaeab331263bb6a43f68ad350
+size 524248

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Trails.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:367303ec06ead73155f8297655a1db511237817608f1bd970cbdb367e4452faf
-size 113547
+oid sha256:e40445beb65487979fdccd161e037e9029dd2e57967cf1c7baa5837b0b343831
+size 113815

+ 2 - 2
PopcornFX/Library/PopcornFXCore/Templates/Utils.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:406486d3fbedaa41f57c5286f25bbe86d43b8148f77265b5e5beb3560d7cfa20
-size 474306
+oid sha256:e951ce190d02a24c72b9380a00dc8c5daa616ec1d0357aa1043cb7de8afa74b9
+size 477466

+ 1 - 1
PopcornFX/Library/SpaceSoldiers_Gun_Impact.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:5a7d87f393bf7e48b4604842326928702b71459c94d0a3111b3e294845693389
+oid sha256:c6d55a1754f2ec13d22ece8661420f7f57bd5f77da503a4397dde62659f15f1d
 size 128916
 size 128916

+ 1 - 1
PopcornFX/Library/Straight_Shot_Effect.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:699729e5b01a1021c1f4d3436f72cb0bff206c818244df886cf08e57265a157c
+oid sha256:1464ddca623627cc59b565fad00e43efb0e08ebdb0343321f542cd5e61f923cf
 size 180603
 size 180603

+ 1 - 1
PopcornFX/Library/Test_Simple.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:40e3c1d13916a7ef877f748c3b2f53f2be7980cc15b25d6d77be28f39dfa4c23
+oid sha256:4129287bab660eca5fedaaede2f6d54311c77f3c752ae9e670db2ac8abddb88c
 size 30102
 size 30102

+ 1 - 1
PopcornFX/Meshes/Anim/Circle.pkcf

@@ -1,4 +1,4 @@
-Version = 2.18.0.18760;
+Version = 2.19.0.20559;
 COvenBakeConfig_Mesh	$82362157
 COvenBakeConfig_Mesh	$82362157
 {
 {
 	ImportGeometry = false;
 	ImportGeometry = false;

+ 2 - 2
PopcornFX/Particles/BubbleGun/FX_BubbleGun_Blast.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:5253ff1bb44b91ff87543c3511ea72e55487cc3a5fefafada9fbaee3cd98b079
-size 472147
+oid sha256:fce8dcdceb4783bc247dc5ce710c37dc68e1275908b8595020712bbd8ab0df9f
+size 472148

+ 2 - 2
PopcornFX/Particles/BubbleGun/FX_BubbleGun_Explosion.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:6751b0c6bcd2d0139d043362e94deebdd9336fc3e77d4acf243ac240dc7a0934
-size 439022
+oid sha256:6fd2b1e353a44b3efbd30b77adaf4d5a1ff11c436a0e3abe2d014697bf99ca9f
+size 439023

+ 2 - 2
PopcornFX/Particles/BubbleGun/FX_BubbleGun_Projectile.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:450d0682291aa4f84ed4f0684f197b7316d5acd590f3d68f159db2b3f23f6e68
-size 548939
+oid sha256:9bf50712c6b0ee3733088af857b80d7a3202165edf8cb93a82364e678be78a38
+size 548940

+ 1 - 1
PopcornFX/Particles/DefenseTurret/FX_DefenseTurret_Blast.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:8f50235f86164d9cf18c0ca170e49950c3e54cdc66aa9b45d4d32fdc872770d5
+oid sha256:4a2f8b864a74f4c479f562d1d0e5756c5f6793166a6f3367429b6774727489d6
 size 138857
 size 138857

+ 1 - 1
PopcornFX/Particles/DefenseTurret/FX_DefenseTurret_Explosion.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:dd3af94bb4105b5f43fe0ed4a07f4e466a7dfcede43b64e0466239b719cbd4f5
+oid sha256:45346e2a68b9b38d5135c925f353daba7909f605eff08312f9c5010283cc93df
 size 206081
 size 206081

+ 1 - 1
PopcornFX/Particles/DefenseTurret/FX_DefenseTurret_Projectile.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:20a342432533c38ae2f2beeec26b07f03d45c6de4e7589b3625d7b77271a68af
+oid sha256:0f21ab6f3f59a352157ace61b40a4f23ff704ae6b6b94a20178d6bce51d0e6f8
 size 159140
 size 159140

+ 1 - 1
PopcornFX/Particles/EnergyBallTrap/FX_EnergyBallTrap_BuildUp.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:12bedc098e35068f0cb4ae0f4d5014f5d5a1e919baec2efedb197cda390040a3
+oid sha256:961b13117a91044c096e7e263df7d5d204f0d2b5d6f502a1eabceccca9d2a27b
 size 270326
 size 270326

+ 2 - 2
PopcornFX/Particles/EnergyBallTrap/FX_EnergyBallTrap_Explosion.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:c0d7e65f6e9bb0c97a4ff97c2b3ae363a3f0d5ab110aa6b6d17618a8ad85f7f5
-size 650480
+oid sha256:30c69bbfa13e1e4fd3755e7b51a3659c39f31e16aba0c9855f9f3096d28dd0f3
+size 650483

+ 2 - 2
PopcornFX/Particles/EnergyBallTrap/FX_EnergyBallTrap_Projectile.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:50215a77d6960b2ec3df38b987db639dd8757369ebb8bfd0ff5f755f81d68fb6
-size 404809
+oid sha256:2cb6e8e69c2ac5aafc9e3405d418b5f3fb177288be9fec4d308642799a7e9042
+size 404810

+ 2 - 2
PopcornFX/Particles/FX_JumpPad.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:d19e79a5a8480616828513ff226d20cf53bab642a286b948cd9ecbd1cd9c5bde
-size 395012
+oid sha256:853893083f3109cac113441c8ec83aee20799671d9a6d81330dec47840c70d23
+size 395020

+ 2 - 2
PopcornFX/Particles/LaserPistol/FX_LaserPistol.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:ae46819837532149d53fb2ba80e432c933578276649e07bb4887e7fa1b8187ac
-size 796522
+oid sha256:0a013c6eaaf017042c71acf1c4787340860ccb9b3d8a3dfbb27401cce1ab63c8
+size 796523

+ 2 - 2
PopcornFX/Particles/LaserPistol/FX_LaserPistol_Blast.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:6ddb30e81c37c3a2c27bc983717cd1436323e4b6b40cd3d5713bd4dd2c22712a
-size 360968
+oid sha256:21183be5fc8afa0bb0b5d665cc92e90681312b0294db50ec45e262e75b2d0e4c
+size 360969

+ 2 - 2
PopcornFX/Particles/LaserPistol/FX_LaserPistol_Display.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:e25beac3377a9686060d015e8f7bee80b732a989bc117c05775e38d1d223720a
-size 796522
+oid sha256:0049d4850f62d8589379854d46bc4f0f24fb56e405bf8b90a07817cd176b8b35
+size 796523

+ 2 - 2
PopcornFX/Particles/LaserPistol/FX_LaserPistol_Explosion.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:f13279ba659007e5f7b0194f83dd39418f1e0e8666cbcca5ac583e809479275e
-size 398423
+oid sha256:035697a0bf95f0059ac2915e4704d983ac667081488293f2f34325ef3294ce32
+size 398424

+ 2 - 2
PopcornFX/Particles/LaserPistol/FX_LaserPistol_Ray.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:60184cb4060ebac2e4cd98d9ab545e4ebab065e05980bdbfc8a35a8f4d372d14
-size 491044
+oid sha256:bdecf0cec2b5f436dbf0fa8d62eb6131b158d9c1e2ea1218ca09e01061899ae3
+size 491045

+ 2 - 2
PopcornFX/Particles/MalfunctionningShieldGenerator/FX_EnergyCollector.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:f7f60f6a2e43f8d5ad78a4fccde4d30e6a4315e7097d3eb379fd828561aab582
-size 830946
+oid sha256:34f9215335f7c50f6ef85bb2cf839b9e655648aff8dc87ab28ab76fe982ebd99
+size 830949

+ 2 - 2
PopcornFX/Particles/MalfunctionningShieldGenerator/FX_MalfunctionningShieldGenerator_BuildUp.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:f196ad3ea448a9d0f3847a1b06ee5ae2324562dd3ac396e017c7f467da45665d
-size 606033
+oid sha256:5192b2fad3c885e44ec9aa88e1f352d894d8b47581f7ecfb9a64e9577ebadf39
+size 606038

+ 2 - 2
PopcornFX/Particles/MalfunctionningShieldGenerator/FX_MalfunctionningShieldGenerator_Explosion.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:72792cbcb2fec65e44911f6749deacd6959e5067216154481d79065b608d788c
-size 1021940
+oid sha256:55d38d631751490abd3d149fde4356e287dcd63caccf47d615e4c1d706663472
+size 1021945

+ 2 - 2
PopcornFX/Particles/MalfunctionningShieldGenerator/FX_MalfunctionningShieldGenerator_Idle.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:8af4e40375d7de6f62c1a121420c8a706282f8f33e3ddc9bec23cd797f6095fa
-size 642610
+oid sha256:46b83c8da1b1967d22ded5b0dacd9f7aa638e1d8f021de96d1020ea463e3a10c
+size 642612

+ 2 - 2
PopcornFX/Particles/VFX_SpeedPowerUp.pkfx

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:03f85a1a1fffd773f14d8471c15f0d0e2e3c891d4fbfcadcb8c85885f82f7e81
-size 448255
+oid sha256:4f052692beea82cc1e064f78376c27e7686deb1832a56dbdb30cdd00ce599901
+size 448265

+ 5 - 1
PopcornFX/PopcornProject.pkproj

@@ -1,4 +1,4 @@
-Version = 2.18.1.18964;
+Version = 2.19.5.21365;
 CProjectSettings	$D857A09F
 CProjectSettings	$D857A09F
 {
 {
 	General = "$35A36C4E";
 	General = "$35A36C4E";
@@ -10,6 +10,7 @@ CProjectSettings	$D857A09F
 	Budgets = "$D279714D";
 	Budgets = "$D279714D";
 	Baking = "$5F621394";
 	Baking = "$5F621394";
 	Editor = "$41E5AFE7";
 	Editor = "$41E5AFE7";
+	Rendering = "$9D2B1A2F";
 	Documentation = "$2909A531";
 	Documentation = "$2909A531";
 }
 }
 CProjectSettingsGeneral	$35A36C4E
 CProjectSettingsGeneral	$35A36C4E
@@ -148,3 +149,6 @@ CProjectSettingsConstantItem	$D03359D5
 CEditorProject	$C01E62BC
 CEditorProject	$C01E62BC
 {
 {
 }
 }
+CProjectSettingsRendering	$9D2B1A2F
+{
+}