Files
MinFt/Client/Assets/Shader/CrystalRayM_3Samples.hlsl
2026-04-27 12:07:32 +08:00

51 lines
2.4 KiB
HLSL

void MyCustomRaymarching_float( float3 ViewDirection,
float3 Position,
float Refraction,
float3 NormalVector,
float StepLength,
UnityTexture2D CustomVolumeNoise,
UnitySamplerState CustomVolumeNoiseSampler,
float VolumeNoiseScale,
float NoiseStrength,
float NoisePow,
float3 CameraWP,
float RefractionSurfaceNoise,
UnityTexture2D VolumeNoise,
float VolumeNoise2Exp,
float VolumeNoise2Scale,
float VolumeNoise2Multiply,
float4x4 ObjectToWorldPosition,
float LinearMaskScale,
float LinearMaskNegate,
float LinearMaskOffset,
float3 LinearMaskVector,
float3 LinearMaskVectorWorldOffset,
out float2 outputpom
)
{
float step = 0.0;
float final = 0.0;
float final2 = 0.0;
float3 sampledPosition;
for (int i = 0; i < 3; i++)
{
sampledPosition = Position + refract(normalize(ViewDirection), NormalVector, saturate(1-(1.0/Refraction * RefractionSurfaceNoise))) * step;
float2 sampledCustomNoise =SAMPLE_TEXTURE2D(CustomVolumeNoise, CustomVolumeNoiseSampler, sampledPosition.xy * VolumeNoiseScale) * SAMPLE_TEXTURE2D(CustomVolumeNoise, CustomVolumeNoiseSampler, sampledPosition.zy * VolumeNoiseScale + float2(144.23, 5444.12));
sampledCustomNoise *= SAMPLE_TEXTURE2D(CustomVolumeNoise, CustomVolumeNoiseSampler, sampledPosition.xz * VolumeNoiseScale + float2(3127.11, 1522.12));
//float sampledDarkenCustomNoise = SAMPLE_TEXTURE2D(VolumeNoise, CustomVolumeNoiseSampler, sampledPosition.xy * VolumeNoise2Scale) * SAMPLE_TEXTURE2D(VolumeNoise, CustomVolumeNoiseSampler, sampledPosition.zy * VolumeNoise2Scale + float2(144.23, 5444.12));
//sampledDarkenCustomNoise *= SAMPLE_TEXTURE2D(VolumeNoise, CustomVolumeNoiseSampler, sampledPosition.xz * VolumeNoise2Scale + float2(3127.11, 1522.12));
float linearMask = saturate(saturate((dot(sampledPosition - LinearMaskVectorWorldOffset, LinearMaskVector) + LinearMaskOffset) * LinearMaskScale) + LinearMaskNegate);
final += pow(saturate((pow(sampledCustomNoise.x, NoisePow) * NoiseStrength * 2.75)), 1.25) * saturate(1.0-(i/20.0)) * linearMask;
final2 += pow(sampledCustomNoise.y, VolumeNoise2Exp * 0.75) * VolumeNoise2Multiply * 3.0 * linearMask;
step += (StepLength/3.0);
}
outputpom.x = final;
outputpom.y = final2;
}