Hello,
I’m trying to do TAA using URP. It works in editor mode, but in VR I get black image.
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
var camera = renderingData.cameraData.camera;
TAAData TaaData;
if (!m_TAADatas.TryGetValue(camera, out TaaData))
{
TaaData = new TAAData();
m_TAADatas.Add(camera, TaaData);
}
var stack = VolumeManager.instance.stack;
var TaaComonent = stack.GetComponent<TemporalAntiAliasing>();
if (TaaComonent.IsActive() && !renderingData.cameraData.isSceneViewCamera)
{
UpdateTAAData(renderingData, TaaData, TaaComonent);
m_cameraSettingPass.Setup(TaaData);
renderer.EnqueuePass(m_cameraSettingPass);
m_TAAPass.Setup(TaaData, TaaComonent);
renderer.EnqueuePass(m_TAAPass);
}
else if (!TaaComonent.IsActive())
{
m_TAAPass.Clear();
}
}
void DoTemporalAntiAliasing(CameraData cameraData, CommandBuffer cmd)
{
var camera = cameraData.camera;
// Never draw in Preview
// so we have two history buffers, jitter the camera, apply Antialiasing on them -- Ahmed
if (camera.cameraType == CameraType.Preview)
return;
if (camera.stereoActiveEye == Camera.MonoOrStereoscopicEye.Right)
xrActiveEye = (int)Camera.StereoscopicEye.Right;
var colorTextureIdentifier = new RenderTargetIdentifier("_CameraColorTexture");
var descriptor = new RenderTextureDescriptor(camera.scaledPixelWidth, camera.scaledPixelHeight, RenderTextureFormat.DefaultHDR, 16);
int pp = m_HistoryPingPong[xrActiveEye];
var historyRead = EnsureRenderTarget(++pp % 2, camera, descriptor.width, descriptor.height, descriptor.colorFormat, FilterMode.Bilinear);
var historyWrite = EnsureRenderTarget(++pp % 2, camera, descriptor.width, descriptor.height, descriptor.colorFormat, FilterMode.Bilinear);
m_HistoryPingPong[xrActiveEye] = ++pp % 2;
Matrix4x4 inv_p_jitterd = Matrix4x4.Inverse(m_TaaData.projOverride);
Matrix4x4 inv_v_jitterd = Matrix4x4.Inverse(camera.worldToCameraMatrix);
Matrix4x4 previous_vp = m_TaaData.porjPreview * m_TaaData.viewPreview;
m_Material.SetMatrix(ShaderConstants._TAA_CurInvView, inv_v_jitterd);
m_Material.SetMatrix(ShaderConstants._TAA_CurInvProj, inv_p_jitterd);
m_Material.SetMatrix(ShaderConstants._TAA_PrevViewProjM, previous_vp);
m_Material.SetVector(ShaderConstants._TAA_Params, new Vector3(m_TaaData.sampleOffset.x, m_TaaData.sampleOffset.y, m_taa.feedback.value));
m_Material.SetTexture(ShaderConstants._TAA_pre_texture, historyRead);
CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.HighTAAQuality, m_taa.quality.value == MotionBlurQuality.High);
CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MiddleTAAQuality, m_taa.quality.value == MotionBlurQuality.Medium);
CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.LOWTAAQuality, m_taa.quality.value == MotionBlurQuality.Low);
cmd.Blit(colorTextureIdentifier, historyWrite, m_Material);
cmd.Blit(historyWrite, colorTextureIdentifier);
m_ResetHistory = false;
}