From f4d361e1e9e27c360ca06c512b4df28d8a46982a Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 22 Mar 2023 22:52:43 +0800 Subject: [PATCH] Particle bug fix and raccoon dust particle fix --- Assets/Scenes/Level2.shade | 20 +- .../Player/PlayerStates/UT_PlayerWalkState.cs | 8 +- Assets/Shaders/ParticleEmit_CS.glsl | 9 +- Assets/Shaders/ParticleEmit_CS.shshaderb | Bin 12373 -> 12469 bytes .../ParticleUpdateGrowThenShrink_CS.glsl | 173 ++++++++++++++++++ .../ParticleUpdateGrowThenShrink_CS.shshaderb | Bin 0 -> 8797 bytes ...leUpdateGrowThenShrink_CS.shshaderb.shmeta | 3 + .../Inspector/SHEditorComponentView.hpp | 13 +- .../src/Serialization/SHYAMLConverters.h | 5 +- 9 files changed, 209 insertions(+), 22 deletions(-) create mode 100644 Assets/Shaders/ParticleUpdateGrowThenShrink_CS.glsl create mode 100644 Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb create mode 100644 Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb.shmeta diff --git a/Assets/Scenes/Level2.shade b/Assets/Scenes/Level2.shade index 7a052425..ada9fb8a 100644 --- a/Assets/Scenes/Level2.shade +++ b/Assets/Scenes/Level2.shade @@ -3128,23 +3128,23 @@ Scale: {x: 1.00000012, y: 1, z: 1.00000012} IsActive: true classSHADE::SHParticleEmitterComponent: - Emission Count: 4 + Emission Count: 2 Is Passive: false Emission Interval: 0 - Min Life: 0 - Max Life: 0.5 + Min Life: 0.100000001 + Max Life: 2 Minimum Speed: 1 Maximum Speed: 1.5 - Minimum Size: 0 - Maximum Size: 0.5 - Size Decay: 0.907999992 - Angular Ranges And Offset: {x: 6.19999981, y: 3.1400001, z: 0, w: 1.70000005} + Minimum Size: 0.100000001 + Maximum Size: 0.100000001 + Size Decay: 0.907000005 + Angular Ranges And Offset: {x: 0.779999971, y: 0, z: -1.57070005, w: 0} Rotation Speed: 0.805999994 Rotation Decay: 0 - Texture Asset ID: 0 - Custom Update Shader Asset ID: 0 + Texture Asset ID: 56224060 + Custom Update Shader Asset ID: 42141152 Color Tint: {x: 1, y: 1, z: 1, w: 1} - Acceleration: {x: 0, y: 0.0500000007, z: 0.100000001} + Acceleration: {x: 0, y: 0, z: 0} IsActive: true Scripts: ~ - EID: 239 diff --git a/Assets/Scripts/Gameplay/Player/PlayerStates/UT_PlayerWalkState.cs b/Assets/Scripts/Gameplay/Player/PlayerStates/UT_PlayerWalkState.cs index ad79b3de..68802e1f 100644 --- a/Assets/Scripts/Gameplay/Player/PlayerStates/UT_PlayerWalkState.cs +++ b/Assets/Scripts/Gameplay/Player/PlayerStates/UT_PlayerWalkState.cs @@ -1,4 +1,4 @@ -using SHADE; +using SHADE; using SHADE_Scripting.Audio; using System; @@ -48,6 +48,12 @@ public class PlayerWalkState : BaseState if (timer > delay) { + + if (machine.GetScript().tranform.LocalEulerAngles.y > 0.0f) + machine.GetScript().smoke.AngularOffsets = new Vector2(machine.GetScript().tranform.LocalEulerAngles.y - (MathF.PI * 1.5f), machine.GetScript().smoke.AngularOffsets.y); + else + machine.GetScript().smoke.AngularOffsets = new Vector2(machine.GetScript().tranform.LocalEulerAngles.y + (MathF.PI * 0.5f), machine.GetScript().smoke.AngularOffsets.y); + AudioHandler.audioClipHandlers["footsteps"].Play(); machine.GetScript().smoke.Emit(); timer = 0; diff --git a/Assets/Shaders/ParticleEmit_CS.glsl b/Assets/Shaders/ParticleEmit_CS.glsl index b2f81a05..96ad1ef4 100644 --- a/Assets/Shaders/ParticleEmit_CS.glsl +++ b/Assets/Shaders/ParticleEmit_CS.glsl @@ -139,19 +139,20 @@ void main() // emit particle from emitter position particle.position = vec4 (emitterPosition.xyz, 1.0f); - vec2 eulerAngles = vec2 (rand(seed) * angularRangesAndOffsets.x + angularRangesAndOffsets.z, - rand(seed) * angularRangesAndOffsets.y + angularRangesAndOffsets.w); + vec2 eulerAngles = vec2 ((rand(seed) - 0.5f) * angularRangesAndOffsets.x + angularRangesAndOffsets.z, + (rand(seed) - 0.5f) * angularRangesAndOffsets.y + angularRangesAndOffsets.w); // Set its velocity // particle.velocity.xyz = vec3 (cos(eulerAngles.x) * cos(eulerAngles.y), // sin(eulerAngles.x) * cos(eulerAngles.y), // sin(eulerAngles.y)); + float heading = eulerAngles.x; float bank = eulerAngles.y; float cb = cos(bank); float sb = sin(bank); - float ch = cos (eulerAngles.x); - float sh = sin (eulerAngles.x); + float ch = cos (heading); + float sh = sin (heading); float cp = cos (0.0f); float sp = sin (0.0f); diff --git a/Assets/Shaders/ParticleEmit_CS.shshaderb b/Assets/Shaders/ParticleEmit_CS.shshaderb index 08972d9d58d1df32985ed1f5e2f34e3e4cab437d..fb9286830cd2ba91c967e89314ee056044e14492 100644 GIT binary patch literal 12469 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 wg0)eP^J05> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (word >> 22u) ^ word; +} + +// Used to advance the PCG state. +uint rand_pcg(inout uint rng_state) +{ + uint state = rng_state; + rng_state = rng_state * 747796405u + 2891336453u; + uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; + return (word >> 22u) ^ word; +} + +// Advances the prng state and returns the corresponding random float. +float rand(inout uint state) +{ + uint x = rand_pcg(state); + state = x; + return float(x)*uintBitsToFloat(0x2f800004u); +} + +void main() +{ + uint index = gl_GlobalInvocationID.x; + + ParticleData particle = inputParticles.data[index]; + + if (particle.life > 0.0f) + { + + // update position from velocity + particle.position.xyz += particle.velocity.xyz * genericDataBuffer.data.dt; + particle.velocity += particle.acceleration; + particle.life -= genericDataBuffer.data.dt; + particle.orientationSpeedDecay.x += particle.orientationSpeedDecay.y; + // particle.scaleAndDecay.x *= particle.scaleAndDecay.z; + // particle.scaleAndDecay.y *= particle.scaleAndDecay.w; + + if (particle.position.w == 0.0f) + { + particle.scaleAndDecay.x *= particle.scaleAndDecay.z; + particle.scaleAndDecay.y *= particle.scaleAndDecay.w; + if (particle.scaleAndDecay.x < 0.0f) + { + particle.scaleAndDecay.x = 0.0f; + particle.scaleAndDecay.y = 0.0f; + } + } + else + { + particle.scaleAndDecay.x /= particle.scaleAndDecay.z; + particle.scaleAndDecay.y /= particle.scaleAndDecay.w; + if (particle.scaleAndDecay.x > 0.2f) + particle.position.w = 0.0f; + } + + + if (particle.orientationSpeedDecay.y > 0.0f) + { + particle.orientationSpeedDecay.y -= particle.orientationSpeedDecay.z * genericDataBuffer.data.dt; + if (particle.orientationSpeedDecay.y < 0.0f) + particle.orientationSpeedDecay.y = 0.0f; + } + + if (particle.life < 0.0f || particle.scaleAndDecay.x < 0.0f || particle.scaleAndDecay.y < 0.0f) + { + particle.life = 0.0f; + particle.position.x = 9999.0f; + + outputParticles.data[index] = particle; + freelist.freeIndices[atomicAdd(freelist.freeCount, 1)] = int (index); + return; + } + + uint drawIndex = atomicAdd (indirectArgs.instanceCount, 1); + indices[drawIndex] = index; + + } + + outputParticles.data[index] = particle; +} \ No newline at end of file diff --git a/Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb b/Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..babded600cd786cf4bf9d0c29d585b9d2000099c GIT binary patch literal 8797 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 M>)7~l@6M1s05ghwsQ>@~ literal 0 HcmV?d00001 diff --git a/Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb.shmeta b/Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb.shmeta new file mode 100644 index 00000000..bf67f4ee --- /dev/null +++ b/Assets/Shaders/ParticleUpdateGrowThenShrink_CS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: ParticleUpdateGrowThenShrink_CS +ID: 42141152 +Type: 2 diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 208134bf..961e321a 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -913,12 +913,6 @@ namespace SHADE { comp->SetTextureAssetID(val); }); - ImGui::SameLine(); - if (ImGui::Button("Reset")) - { - component->SetTextureAssetID(0); - component->SetTextureIndex(0); - } if (SHDragDrop::BeginTarget()) { @@ -940,6 +934,13 @@ namespace SHADE SHDragDrop::EndTarget(); } } + ImGui::SameLine(); + if (ImGui::Button("Reset")) + { + component->SetTextureAssetID(0); + component->SetTextureIndex(0); + } + SHEditorWidgets::InputText("Custom Update Shader", [comp = component]() { diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index 8805ed41..de57e45d 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -576,6 +576,9 @@ namespace YAML if (node[MAX_SPEED_TAG.data()].IsDefined()) rhs.SetMaxSpeed (node[MAX_SPEED_TAG.data()].as()); + if (node[MIN_SIZE_TAG.data()].IsDefined()) + rhs.SetMinSize(node[MIN_SIZE_TAG.data()].as()); + if (node[MAX_SIZE_TAG.data()].IsDefined()) rhs.SetMaxSize(node[MAX_SIZE_TAG.data()].as()); @@ -619,7 +622,7 @@ namespace YAML //gfxSystem->BuildTextures(); rhs.SetCustomUpdateShader(shaderModule); - rhs.SetTextureAssetID(id); + rhs.SetCustomUpdateShaderAssetID(id); } return true;