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.
62 lines
2.1 KiB
62 lines
2.1 KiB
using UnityEngine.Experimental.Rendering;
|
|
using UnityEngine.Rendering.RenderGraphModule;
|
|
|
|
namespace UnityEngine.Rendering.HighDefinition
|
|
{
|
|
public partial class HDRenderPipeline
|
|
{
|
|
Vector4[] m_PackedCoeffsProbe = new Vector4[7];
|
|
|
|
// Ref: "Efficient Evaluation of Irradiance Environment Maps" from ShaderX 2
|
|
static Vector3 SHEvalLinearL0L1(Vector3 N, Vector4 shAr, Vector4 shAg, Vector4 shAb)
|
|
{
|
|
Vector4 vA = new Vector4(N.x, N.y, N.z, 1.0f);
|
|
|
|
Vector3 x1;
|
|
// Linear (L1) + constant (L0) polynomial terms
|
|
x1.x = Vector4.Dot(shAr, vA);
|
|
x1.y = Vector4.Dot(shAg, vA);
|
|
x1.z = Vector4.Dot(shAb, vA);
|
|
|
|
return x1;
|
|
}
|
|
|
|
static Vector3 SHEvalLinearL2(Vector3 N, Vector4 shBr, Vector4 shBg, Vector4 shBb, Vector4 shC)
|
|
{
|
|
Vector3 x2;
|
|
// 4 of the quadratic (L2) polynomials
|
|
Vector4 vB = new Vector4(N.x * N.y, N.y * N.z, N.z * N.z, N.z * N.x);
|
|
x2.x = Vector4.Dot(shBr, vB);
|
|
x2.y = Vector4.Dot(shBg, vB);
|
|
x2.z = Vector4.Dot(shBb, vB);
|
|
|
|
// Final (5th) quadratic (L2) polynomial
|
|
float vC = N.x * N.x - N.y * N.y;
|
|
Vector3 x3 = new Vector3(0.0f, 0.0f, 0.0f);
|
|
x3.x = shC.x * vC;
|
|
x3.y = shC.y * vC;
|
|
x3.z = shC.z * vC;
|
|
return x2 + x3;
|
|
}
|
|
|
|
static Vector3 EvaluateAmbientProbe(in Vector4[] packedCoeffs, Vector3 direction)
|
|
{
|
|
Vector4 shAr = packedCoeffs[0];
|
|
Vector4 shAg = packedCoeffs[1];
|
|
Vector4 shAb = packedCoeffs[2];
|
|
Vector4 shBr = packedCoeffs[3];
|
|
Vector4 shBg = packedCoeffs[4];
|
|
Vector4 shBb = packedCoeffs[5];
|
|
Vector4 shCr = packedCoeffs[6];
|
|
|
|
// Linear + constant polynomial terms
|
|
Vector3 res = SHEvalLinearL0L1(direction, shAr, shAg, shAb);
|
|
|
|
// Quadratic polynomials
|
|
res += SHEvalLinearL2(direction, shBr, shBg, shBb, shCr);
|
|
|
|
// Return the result
|
|
return res;
|
|
}
|
|
}
|
|
}
|