Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 72 additions & 1 deletion package/Shaders/Particle.hlsl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "Common/FrameBuffer.hlsli"
#include "Common/VR.hlsli"
#include "Common/SharedData.hlsli"

struct VS_INPUT
{
Expand Down Expand Up @@ -32,6 +33,7 @@ struct VS_OUTPUT
float CullDistance : SV_CullDistance0; // p11
uint EyeIndex : EYEIDX0;
#endif // VR
float3 ViewPositionVS : TEXCOORD2;
};

#ifdef VSHADER
Expand Down Expand Up @@ -111,6 +113,20 @@ VS_OUTPUT main(VS_INPUT input)
vsout.Position.xy = positionOffset + finalViewPosition.xy;
vsout.Position.zw = finalViewPosition.zw;

// Compute view-space for precipitation motion blend
# if defined(ENVCUBE)
# if defined(RAIN)
float3 viewVS = mul(WorldView[eyeIndex], msPosition).xyz;
float3 adjustedViewVS = mul(WorldView[eyeIndex], adjustedMsPosition).xyz;
float3 finalViewPositionVS = lerp(adjustedViewVS, viewVS, positionBlendParam);
vsout.ViewPositionVS = finalViewPositionVS;
# else
vsout.ViewPositionVS = mul(WorldView[eyeIndex], msPosition).xyz;
# endif
# else
vsout.ViewPositionVS = mul(WorldView[eyeIndex], msPosition).xyz;
# endif

vsout.Color.xyz = 1.0.xxx;
vsout.Color.w = fVars1.w;

Expand Down Expand Up @@ -163,6 +179,8 @@ VS_OUTPUT main(VS_INPUT input)
vsout.Position.xy = positionOffset * ScaleAdjust + viewPosition.xy;
vsout.Position.zw = viewPosition.zw;

vsout.ViewPositionVS = mul(WorldView[eyeIndex], msPosition).xyz;

float4 color1, color2;
float colorTmp1, colorTmp2;
if (tmp1 > fVars1.z) {
Expand Down Expand Up @@ -213,6 +231,15 @@ struct PS_OUTPUT
};

#ifdef PSHADER

# if defined(LIGHT_LIMIT_FIX)
# include "LightLimitFix/LightLimitFix.hlsli"
# endif

# if defined(ISL) && defined(LIGHT_LIMIT_FIX)
# include "InverseSquareLighting/InverseSquareLighting.hlsli"
# endif

SamplerState SampSourceTexture : register(s0);
# if defined(GRAYSCALE_TO_COLOR) || defined(GRAYSCALE_TO_ALPHA)
SamplerState SampGrayscaleTexture : register(s1);
Expand Down Expand Up @@ -273,7 +300,51 @@ PS_OUTPUT main(PS_INPUT input)
baseColor.w = grayScaleAlpha;
# endif

psout.Color.xyz = ColorScale * baseColor.xyz;
float3 propertyColor = 0.0;

float3 dirLightColor = SharedData::DirLightColor.xyz * 0.5;
float3 ambientColor = max(0, mul(SharedData::DirectionalAmbient, float4(0, 0, 1, 1)).xyz);

propertyColor += dirLightColor;
propertyColor += ambientColor;

float3 viewPosition = input.ViewPositionVS.xyz;
float3 worldPosition = FrameBuffer::ViewToWorld(viewPosition);

# if defined(LIGHT_LIMIT_FIX)
uint lightCount = 0;
{
float2 screenUV = FrameBuffer::ViewToUV(viewPosition, true, eyeIndex);

uint clusterIndex = 0;
if (LightLimitFix::GetClusterIndex(screenUV, viewPosition.z, clusterIndex)) {
lightCount = LightLimitFix::lightGrid[clusterIndex].lightCount;
uint lightOffset = LightLimitFix::lightGrid[clusterIndex].offset;
[loop] for (uint i = 0; i < lightCount; i++)
{
uint clusteredLightIndex = LightLimitFix::lightList[lightOffset + i];
LightLimitFix::Light light = LightLimitFix::lights[clusteredLightIndex];
if (LightLimitFix::IsLightIgnored(light) || light.lightFlags & LightLimitFix::LightFlags::Shadow) {
continue;
}
float3 lightDirection = light.positionWS[eyeIndex].xyz - worldPosition.xyz;
float lightDist = length(lightDirection);

# if defined(ISL)
float intensityMultiplier = InverseSquareLighting::GetAttenuation(lightDist, light);
# else
float intensityFactor = saturate(lightDist / light.radius);
float intensityMultiplier = 1 - intensityFactor * intensityFactor;
Comment thread
doodlum marked this conversation as resolved.
# endif

float3 lightColor = light.color.xyz * intensityMultiplier * 0.5;
propertyColor += lightColor;
Comment thread
doodlum marked this conversation as resolved.
}
}
}
# endif

psout.Color.xyz = propertyColor * baseColor.xyz;
psout.Color.w = baseColor.w;
psout.Normal.w = baseColor.w;
psout.Normal.xyz = float3(0, 1, 0);
Expand Down