Graphics Reference
In-Depth Information
PS_Input result = (PS_Input)0;
// Load particle using instance Id
Particle p = particles[instanceID];
// 0-1 Vertex strip layout
// /
// 2-3
result.UV = float2(vertexID & 1, (vertexID & 2) >> 1);
result.Position = ComputePosition(p.Position, p.Radius,
result.UV * float2(2, -2) + float2(-1, 1));
result.Energy = p.Energy;
return result;
}
4.
Within ParticlePS.hlsl , we will sample the texture and create a fading value.
#include "Particle.hlsl"
Texture2D ParticleTexture : register(t0);
SamplerState linearSampler : register(s0);
float4 PSMain(PS_Input pixel) : SV_Target
{
float4 result = ParticleTexture.Sample(linearSampler,
pixel.TextureUV);
// Fade-out as approaching the near clip plane
// and as a particle loses energy between 1->0
return float4(result.xyz,
saturate(pixel.Energy) * result.w *
pixel.Position.z * pixel.Position.z);
}
5.
Within ParticleCS.hlsl , we will first add our particle's append/consume
buffers, a method for applying forces to particles and methods for generating
random numbers:
#include "Particle.hlsl"
// Append and consume buffers for particles
AppendStructuredBuffer <Particle> NewState : register(u0);
ConsumeStructuredBuffer <Particle> CurrentState :
register(u1);
// Apply ForceDirection with ForceStrength to particle
void ApplyForces(inout Particle particle)
{
 
Search WWH ::




Custom Search