55 lines
1.5 KiB
HLSL
55 lines
1.5 KiB
HLSL
#ifndef STARS_INCLUDED
|
|
#define STARS_INCLUDED
|
|
|
|
#include "JCommon.cginc"
|
|
|
|
void CalculateStarsColor(
|
|
float4 localPos,
|
|
float starsStartPosition, float starsEndPosition,
|
|
fixed4 starsColor, fixed starsOpacity,
|
|
float starsDensity,
|
|
float starsSize,
|
|
fixed starsGlow,
|
|
fixed starsTwinkle,
|
|
out fixed4 color)
|
|
{
|
|
float cellCount = starsDensity*50;
|
|
float cellSize = 1/cellCount;
|
|
|
|
float3 cellCenter = floor(localPos.xyz/cellSize)*cellSize + 0.5*cellSize*float3(1,1,1);
|
|
float rand = RandomValue(cellCenter.xyz) - 0.5;
|
|
float3 starPos = cellCenter + float3(1,1,1)*cellSize*rand;
|
|
float sqrDistance = SqrDistance(localPos.xyz, starPos);
|
|
float sqrDistanceThreshold = 0.00001*starsSize*starsSize;
|
|
|
|
fixed4 clear = fixed4(0,0,0,0);
|
|
fixed4 white = fixed4(1,1,1,1);
|
|
|
|
color = lerp(clear, white, sqrDistance <= sqrDistanceThreshold);
|
|
color *= starsColor;
|
|
color.a *= 2*(1 + starsGlow)*(rand + 0.5);
|
|
float wave = TriangleWave(rand*_Time.y*starsTwinkle)*0.5 + 0.5;
|
|
color.a *= lerp(0.5, 1, (1-wave));
|
|
color.a *= starsOpacity;
|
|
|
|
color = lerp(clear, color, cellCenter.y >= starsStartPosition);
|
|
color = lerp(clear, color, cellCenter.y <= starsEndPosition);
|
|
color = lerp(clear, color, rand <= starsDensity);
|
|
}
|
|
|
|
void CalculateStarsColorBaked(
|
|
float4 localPos,
|
|
samplerCUBE starsCubemap,
|
|
sampler2D starsTwinkleMap,
|
|
fixed starsOpacity,
|
|
out fixed4 color)
|
|
{
|
|
float2 span = float2(1,1)*_Time.y*0.1;
|
|
fixed twinkle = tex2D(starsTwinkleMap, localPos.xy + span).r;
|
|
|
|
color = texCUBE(starsCubemap, localPos.xyz);
|
|
color.a *= twinkle;
|
|
color.a *= starsOpacity;
|
|
}
|
|
|
|
#endif |