You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.7 KiB
63 lines
1.7 KiB
#ifndef UNITY_PATH_TRACING_SAMPLING_INCLUDED
|
|
#define UNITY_PATH_TRACING_SAMPLING_INCLUDED
|
|
|
|
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingSampling.hlsl"
|
|
|
|
float GetSample(uint2 coord, uint index, uint dim)
|
|
{
|
|
// If we go past the number of stored samples per dim, just shift all to the next pair of dimensions
|
|
dim += (index / 256) * 2;
|
|
|
|
return GetBNDSequenceSample(coord, index, dim);
|
|
}
|
|
|
|
float4 GetSample4D(uint2 coord, uint index, uint dim)
|
|
{
|
|
// If we go past the number of stored samples per dim, just shift all to the next pair of dimensions
|
|
dim += (index / 256) * 2;
|
|
|
|
float4 randomSample;
|
|
randomSample.x = GetBNDSequenceSample(coord, index, dim);
|
|
randomSample.y = GetBNDSequenceSample(coord, index, dim + 1);
|
|
randomSample.z = GetBNDSequenceSample(coord, index, dim + 2);
|
|
randomSample.w = GetBNDSequenceSample(coord, index, dim + 3);
|
|
|
|
return randomSample;
|
|
}
|
|
|
|
bool RussianRouletteTest(float threshold, float value, float rand, out float factor, bool skip = false)
|
|
{
|
|
if (skip || value >= threshold)
|
|
{
|
|
factor = 1.0;
|
|
return true;
|
|
}
|
|
|
|
if (rand * threshold >= value)
|
|
{
|
|
factor = 1.0;
|
|
return false;
|
|
}
|
|
|
|
factor = threshold / value;
|
|
|
|
return true;
|
|
}
|
|
|
|
float PowerHeuristic(float f, float b)
|
|
{
|
|
return Sq(f) / (Sq(f) + Sq(b));
|
|
}
|
|
|
|
float RescaleSampleUnder(float inputSample, float threshold)
|
|
{
|
|
return inputSample / threshold;
|
|
}
|
|
|
|
float RescaleSampleOver(float inputSample, float threshold)
|
|
{
|
|
// Make sure we never reach 1.0 due to numerical imprecision
|
|
return min((inputSample - threshold) / (1.0 - threshold), 0.99999);
|
|
}
|
|
|
|
#endif // UNITY_PATH_TRACING_SAMPLING_INCLUDED
|