From aa0c9d08e0e59667efde72c900e7749709c33ba4 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 20 Mar 2023 10:50:18 +0800 Subject: [PATCH] Updated particle shaders to include rotation - Fixed compute shader hot reloading - Vertex/Fragment shader hot reloading still broken :/ --- .../Shaders/ParticleUpdateRandomAcc_CS.glsl | 146 ++++++++++++++++++ .../ParticleUpdateRandomAcc_CS.shshaderb | Bin 0 -> 9093 bytes ...articleUpdateRandomAcc_CS.shshaderb.shmeta | 3 + Assets/Shaders/ParticleUpdate_CS.glsl | 2 + Assets/Shaders/ParticleUpdate_CS.shshaderb | Bin 6689 -> 7037 bytes Assets/Shaders/Particle_VS.glsl | 2 +- Assets/Shaders/Particle_VS.shshaderb | Bin 6585 -> 6609 bytes Assets/Shaders/ShinyHighlight_VS.shshaderb | Bin 6141 -> 5913 bytes .../Inspector/SHEditorComponentView.hpp | 4 +- .../src/Graphics/Pipeline/SHVkPipeline.cpp | 2 + .../src/Graphics/Shaders/SHVkShaderModule.cpp | 4 +- 11 files changed, 158 insertions(+), 5 deletions(-) create mode 100644 Assets/Shaders/ParticleUpdateRandomAcc_CS.glsl create mode 100644 Assets/Shaders/ParticleUpdateRandomAcc_CS.shshaderb create mode 100644 Assets/Shaders/ParticleUpdateRandomAcc_CS.shshaderb.shmeta diff --git a/Assets/Shaders/ParticleUpdateRandomAcc_CS.glsl b/Assets/Shaders/ParticleUpdateRandomAcc_CS.glsl new file mode 100644 index 00000000..bf500255 --- /dev/null +++ b/Assets/Shaders/ParticleUpdateRandomAcc_CS.glsl @@ -0,0 +1,146 @@ +#version 450 + +layout(local_size_x = 128) in; + +struct DrawArraysIndirectArgs +{ + uint count; + uint instanceCount; + uint first; + uint baseInstance; +}; + +struct ParticleData +{ + vec4 position; + vec4 orientationSpeedDecay; + vec4 velocity; + vec4 acceleration; + vec4 scaleAndDecay; + float life; + uint textureIndex; +}; + +struct GenericData +{ + //! Delta time + float dt; + + //! Elapsed time of the application + float elapsedTime; + + //! Viewport width of the scene (excluding imgui, that means smaller than window) + uint viewportWidth; + + //! Ditto but for height + uint viewportHeight; +}; + +layout(set = 1, binding = 0) uniform CameraData +{ + vec4 position; + mat4 vpMat; + mat4 viewMat; + mat4 projMat; +} cameraData; + + +layout (set = 0, binding = 0) uniform GenericDataBuffer +{ + GenericData data; +} genericDataBuffer; + +layout (std430, set = 2, binding = 1) coherent restrict readonly buffer ParticlesInputBuffer +{ + ParticleData data[]; +} inputParticles; + +// output buffer not needed +layout (std430, set = 2, binding = 2) coherent restrict buffer ParticlesOutputBuffer +{ + ParticleData data[]; +} outputParticles; + +layout (std430, set = 2, binding = 3) coherent restrict buffer ParticlesFreelistBuffer +{ + int freeCount; + int freeIndices[]; + +} freelist; + +layout (std430, set = 2, binding = 4) coherent restrict buffer IndicesData +{ + uint indices[]; +}; + +layout (std140, set = 2, binding = 5) coherent restrict buffer IndirectDrawArgs +{ + DrawArraysIndirectArgs indirectArgs; +}; + +// push constants +layout(std140, push_constant) uniform EmitterPushConstant +{ + vec4 emitterPosition; + uint emissionCount; + +} emitterPushConstant; + +uint pcg_hash(uint seed) +{ + uint state = seed * 747796405u + 2891336453u; + uint word = ((state >> ((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]; + + // Get seed for randomization + uint pixel_index = uint (particle.position.x + particle.position.y + floatBitsToUint(genericDataBuffer.data.elapsedTime) * (gl_GlobalInvocationID.x + 1)); + uint seed = pcg_hash (pixel_index); + + if (particle.life > 0.0f) + { + // update position from velocity + particle.position += particle.velocity * genericDataBuffer.data.dt; + particle.velocity += vec4 (rand(seed) * particle.acceleration.x, rand(seed) * particle.acceleration.y, rand(seed) * particle.acceleration.z, 1.0f); + particle.life -= genericDataBuffer.data.dt; + + 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/ParticleUpdateRandomAcc_CS.shshaderb b/Assets/Shaders/ParticleUpdateRandomAcc_CS.shshaderb new file mode 100644 index 0000000000000000000000000000000000000000..370f996537732a4324d4303ed533ffecc20b12fd GIT binary patch literal 9093 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 N#JyG5&pY%W_#b0#hU@?U diff --git a/Assets/Shaders/Particle_VS.glsl b/Assets/Shaders/Particle_VS.glsl index 211bb4de..02830753 100644 --- a/Assets/Shaders/Particle_VS.glsl +++ b/Assets/Shaders/Particle_VS.glsl @@ -79,7 +79,7 @@ void main() ParticleData particle = outputParticles.data[indices[gl_InstanceIndex]]; vec3 normalized = normalize (particle.velocity.xyz); - float angle = 1.1f; + float angle = particle.orientationSpeedDecay.x; // float angle = atan (normalized.y, normalized.x); vec2 particleScaleData = particle.scaleAndDecay.xz; // x and y diff --git a/Assets/Shaders/Particle_VS.shshaderb b/Assets/Shaders/Particle_VS.shshaderb index 492a926c869f280ed8059f362d67f99a3df754f2..58000df23b9a92eb4eb81c7b532248e60458f5f2 100644 GIT binary patch literal 6609 zcmai$`Ja__6~~`p7C=xiP;h|&Uj_xD=7NUG4BJ4VGYCrAGFCE4no zbJ^S^=}FE>&Q1QAL&^Ec9FQbgkPKvec+b8)8z;N9jn`gxl`iKcy_u&zi->gfK@*jF zQ+X})7HBv0EOZL$d^+uP)BAUCM+E7m zk0iOfkS`Zx4UjS9sp;I$enzIc#0+G89cql-nWt*j();!4ORm7DUFlRN;O=(~Jl}7$ zHJM=p$<6T5N~c?|Hqz~tZUvQ$Ij-DpP1d{hRyMUJ zZ?Y?gkmqJ^iF>!ZIoYi=t7o3UIDXAmXQI-mKake!t1r11tkOKx@DPn}!Q-6vdG5sp z)OQM7r^N-s*}HqRGfI|epgPw%_Ee&}!)S?me;w#o#zD^KQK7IU3>#<{O&Jl(#v zV!S=;o1H0nMFaCZ+nv@uV(xPsy;|DGnoojR&mC=R=}n$NcX{_i{@?rBmwk^ozMYLM z_dxOoVwme_+R2}Eo+HPVwZ*eExBm8#;q_*BA0yW z2H~#DayEn6kJw@;{Om<+RSB~PG5-;TpKn}ju!Q-x#YRimK!NRtTiXy^>>#uYeJk9x z3@YnOGX3-$H?M1$i5kJF`K&>#2XbEFqpnY!MfmVTp}_Ju`z*()8y7Q=_dPq#`pa?Z z#vO;E2C;~9&XLQ$^s{g44Bft6>i*{N4r(`_Z`S23T!Cp9EBo1lnEQvHvRFRX-YlPf z+I?3p>vsiaPO0;Uu<)suPrcRt#KXX(*MnH>l4>s z-S3f@_ABA$b1!FbHQf5dw7(T@|Kd^W^~kI(8@L0;ZGyxkbKC?shv&Z%4}bfK%_e=E zk^9^NcOQL?8HCUFkG#gLpu!=ze$HqsT-{vT;GUtFJ*#goFynS0o5Q%BaCPH`;l_y> zr@pJeVs^XHdm#PaQP|9-ep{gr7W(aQd$R60n*+%15&B)o&N}q>B0IOx45S%uI_hFO#6vKb`GB5Gw_(fuaWIn z%vg25i7|uc3R(Y4vHu=!9_w657QdHq&$LPI`A4`pw3}D`6cl-%N47ru(EsJaW-jyk zt#lvBy(MdZ6|T*gf56Ql<{s*=71;IM0&ULD<-Y#{@ownrxn2Ru)qS_ulyu+MmXfZ0 zyrfr_2<%GuRnS^!9b}BUeqp~BIqdG~JGc%Kf2_!RLxF9A?*;QbZiK{LfxQh`tOpvU zTHnfMNMCKf6>D(D;?d*Vk^M#t5##q^53~!iW^MY}`>l{R{ceMgK-(exwCOhpABD78 zmv?Dzfx)uA{l@HrJX>R}NnO8)*^g`iR{@yO53XZbrt~Gfu0qBr8{<7rA!BNgG3xq79fy#$+pp*0{0~FoBUIv@s27;H%NaYfh3usL zo&wte*Vlc<3*57}_6FoWi=kzZd)em%q|F%Lrh3%YMmEM7MQ!g#79XKI?|ugolU&wi zt`=OIvTynb6nj2^>|WMy4IhB)={!hV)chc_vFjjfHkX+Gk?VuV^H`lq4w#fA` za^!jl*<51!N3KVZ%efv!k6hXwDrWW=vbMayj=$(amko+9KD- zkRw;rDW<=Ef&6LcIOLs+*+!k8DeU3< z*^+Pc7rvjvragQ=U-C6~`JR0NU3+}zzKHBz=Fk>*`Af*o#k;JJ^&f+a$39<1F4ymz zqNcAPYY*SAmVB+h?E5uz?cw|NlCSlbeV;_v9`%0%*}cs1Boy_36FKVF$NEpg#p7Ll z3waCV?5+DI__rbPc=O*WFmabT=Ro><#@~gUi#aRs??Ik(dFJ0Q@F$9U@f5mo;t}@) zWZ!Bz?rC)Ki2EV3vEq*uxqgIfjoPB7A0yjq2DG0!!y7YodD9;IUM#Y>R!`fI-g@||n@ z8|2>lSl`R=zeA^>s9#;bf3wpKkiYTfqc4P9=Rlk2)A=lb{JrP5Gk)*+ebN^5Iv-iT z7s#^+{szcdh{tcPB?a#Mj8~8N3y{TLB;NU72rY%gp9WhFzX%fdPCixqkGQnJ?f+sZ o@~uQJ=X)di3P?QitwI(r=Ua^~9{EO#xvT+mFYW(f7V6IJzm58byZ`_I literal 6585 zcmai%`D`lBhmYG=pPQTRC=d<@-!)C&#cb@gEwZ7}}uC?BG@3W`t`Ad^*b1diR+i9hf?w+jFR!&~KE=hX%n+<*>ZFkb6JGLN#bkj$Y z+*8O`39|ag81m$i+|Pb?O?HUs%lbOh7`-b`)vTpQ_325j#-~+jSH|G(cRf7cZ)AKT z!}^l-@R3TpQ?EACEtO6Mm5e#A+!~*#ck1KW4EvHc zDb~3jNgLzUdPkUy{aLK1RH;_eM%vDT%QojWQLQx6p=K#xZx+{!tx-S737pN*QfZK^{MU6`qVbPPqFj&IWyUW zEqa>ZGPEW;nO=Qv1r zvOR~8`?F_>d$*%G(Wx}6=bphq{F>wKu}Y)|Lp0t?73Z|qb1yES zz8!4saV{9n-reIRUvID239uve^!`2dLx=Sj`!sxWWsKXEC-W|gxz0V~+}ATc(z?B3 zygloiohf-m1M@sv?eTlX+~*W}wX}~lKMiI*cebphJNXs5%ex=)|K8W0?0v-XZEIw? z`;r%lVXh--JAb6}967G6EgnmA>u(l_BN zHf`?j%(QJ!^MmwmoB=QGdCtAo=BiEI>;B{)=!eeMIORXgx%jSJY5+^!-+|eXd^`OO z!d+M9YzngB~y`R%G|HUh{8*yJEl4W53YL`-#PVz8}i_ zsk@)~?a$v|XTJ(^R`F~`K5G!`f}B_QsOuAF5kCD>SRQAevsiaPOwg=v`Nh^1`icTG)*4qrF8$vQw?1+G z)qNj{X@4i&eD388u7z8lnD*=7_Aef_-h|BBxSBIFZY?Axnd4TtIXwTRc&vwuO(%Vv zk^5|byN|xc48o`TM_yx=P~i|` zQ{P@-F}oe;U6B5_6*hCJ-%;p;g}w)FPu3l0vme<#Lcbf?S%>}sWak$80pwoD{1v$Q zoLksy$nLK$-hkdXb8@5pW61h@MvKw?Uh^E|Z2dOZF20&9+9o0IqW4n@oPP&0J#2yB zU-H!^Za)4s$Z{E{kM&vSLr@oFJtyJLCch{7_mjGKkbOLX?#z4-dJgKR3QW82PVM&Z znfeVBXYy-g`xP@*{d9pD`$8e>e+ByQ;pVZ4|U&xVmEOsE-b7cuWaHfBF$jJkdi^Il|Qyqgj8K4fF=hKy0yFJj)0Y>f9hVm^p$jPFKc)b%rF zCVUh!#=CEfclRF1m;;b8>iQYuysMBg%EovvQ^=SaWQ@9gQO6-`G`6WG*rNBiDn-@H`j%bw#fA` za^!jl*<51!N3KVZ%efv!k6hXwF6w^_SzF|O9NFCSp{P?#zsUVjX!bjb6{UqeG{}gvg{Zo)W;`VvGz=k-pCy}3mPC?$Km~GVgnZh2v zpDp=Df8qN%Y}&*3^Ce$%JB#rB07mt0uj9jkY zImJF-LDn9=UoH7sf7$nI=-R{g>m^_7FZ+H2U3=9346=KfLtE7UP2{Nm8D#5!8ZI8s z)whs0LeAd0Z-svw5|3y3I|U~0GUp6Pf6w^4kaIC-1^zwAb1u*P`vv|)aW8&=Zk%|; zJ&WwKT8{f6x_HDrhit6)qeZSCAzP!isOiVZ_8Pf=f^1FYIsOz~JaRveY@B$+{S4Wf z%5gtO7mv7KAR8+lHT@FVy0pc;7c*}^{5OzuuR+$_2mdW3uFnhb-$AD#&&C|;`e=U{ z{zu5W=Up<#N%)^2@tDJ(k?lKvBVIuka|QMnWHHY*u)h|V=R88i-iucutlVd!T%1u1V#Po`u&@oZif7Jn}t3Ha$NwerBCNG8}d8OcV~RZ%|+H0^STIG zzgNgJ5B?U&S%}BC)Pe$ce#Wau{Kd#(uM+S4FM$?9;?IFChF=PadncbQej~0ZaQnXu pihN6v%lY1lz627Fd;`eh<$TM~#UtNHF_-0F?xp=d%tGC{{TGG6hUWkP diff --git a/Assets/Shaders/ShinyHighlight_VS.shshaderb b/Assets/Shaders/ShinyHighlight_VS.shshaderb index 95eac304277d9591e76c296a0c74bea47b4eb2ad..3b7e8d728a411274e97343f18c285a4b3359b2c5 100644 GIT binary patch delta 54 zcmeyXKT}VPQ9zsl449de*%=rZ8MqjD8BR?UGiBtT=wrEYq6o|8w=5}4n;Y2!ST-B- HoZ$ul3;zrM delta 271 zcmbQK_g7zx@ryVE7%(#_vokO-GH@~QGF+G_X38iu(Z`bW3{dVI5TD=JB+lZ-%D~0| z5=nH*&r9{pOUX=5Ee2@@iGx&u#lurG(=$ro;^%?lX_-aEB~U%76`QBCq%rBbGq8Zo zk^{~QlVvx8sln-(u eNDL%@7RpwF%7geIYe4cK^%6k({AM@q%iI9e-7ZQ1 diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 4aa03a4b..0fc66afb 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -865,11 +865,11 @@ namespace SHADE SHEditorWidgets::DragFloat("Rotation Speed", [comp = component]() { - return comp->GetMaxSpeed(); + return comp->GetRotationSpeed(); }, [comp = component](float val) { - comp->SetMaxSpeed(val); + comp->SetRotationSpeed(val); }); SHEditorWidgets::DragInt("Texture Index", diff --git a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp index 38944882..f2f8db7a 100644 --- a/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp +++ b/SHADE_Engine/src/Graphics/Pipeline/SHVkPipeline.cpp @@ -299,6 +299,8 @@ namespace SHADE , created{ false } { + if (pipelineLayout) + pipelineLayout->AddCallback([this]() {ConstructPipeline(); }); } diff --git a/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.cpp b/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.cpp index 49188181..8f41d24a 100644 --- a/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.cpp +++ b/SHADE_Engine/src/Graphics/Shaders/SHVkShaderModule.cpp @@ -94,8 +94,8 @@ namespace SHADE Recompile(); - //for (auto& callback : onChangeCallbacks) - // callback(); + for (auto& callback : onChangeCallbacks) + callback(); } void SHVkShaderModule::AddCallback(ChangeCallback&& callback) noexcept