#ifndef BLEND_STATES #define BLEND_STATES #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolume.hlsl" APVSample BlendAPVSamples(APVSample state0, APVSample state1, half factor) { APVSample result; result.L0 = lerp(state0.L0, state1.L0, factor); result.L1_R = lerp(state0.L1_R, state1.L1_R, factor); result.L1_G = lerp(state0.L1_G, state1.L1_G, factor); result.L1_B = lerp(state0.L1_B, state1.L1_B, factor); #ifdef PROBE_VOLUMES_L2 result.L2_R = lerp(state0.L2_R, state1.L2_R, factor); result.L2_G = lerp(state0.L2_G, state1.L2_G, factor); result.L2_B = lerp(state0.L2_B, state1.L2_B, factor); result.L2_C = lerp(state0.L2_C, state1.L2_C, factor); #endif #ifdef USE_APV_PROBE_OCCLUSION result.probeOcclusion = lerp(state0.probeOcclusion, state1.probeOcclusion, factor); #endif result.status = APV_SAMPLE_STATUS_DECODED; return result; } void EncodeAndStoreAPV(APVResourcesRW apvRes, APVSample apvSample, int3 loc) { apvSample.Encode(); float4 L0_L1Rx = float4(apvSample.L0, apvSample.L1_R.x); float4 L1G_L1Ry = float4(apvSample.L1_G, apvSample.L1_R.y); float4 L1B_L1Rz = float4(apvSample.L1_B, apvSample.L1_R.z); apvRes.L0_L1Rx [loc].rgba = L0_L1Rx; apvRes.L1G_L1Ry[loc].rgba = L1G_L1Ry; apvRes.L1B_L1Rz[loc].rgba = L1B_L1Rz; #ifdef PROBE_VOLUMES_L2 apvRes.L2_0[loc].rgba = apvSample.L2_R; apvRes.L2_1[loc].rgba = apvSample.L2_G; apvRes.L2_2[loc].rgba = apvSample.L2_B; apvRes.L2_3[loc].rgba = float4(apvSample.L2_C, 0.0f); #endif #ifdef USE_APV_PROBE_OCCLUSION apvRes.ProbeOcclusion[loc].rgba = apvSample.probeOcclusion; #endif } #endif