Hello,
For the past hour I’ve been following this tutorial by Game Dev Guide. At one point in the video, he uses a GraphicsFormat. Now, after trying to find documentation about this i stumbled upon the its unity documentation, where it said that it used UnityEngine.Experimental.Rendering. I tried putting that behind the GraphicsFormat, but the only thing it does is present 30 errors from different parts of the script. Could anyone help me with this? Here’s the code:
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class CustomPostProcessPass : ScriptableRenderPass
{
private Material m_bloomMaterial;
private Material m_compositeMaterial;
const int k_MaxPyramidSize = 16;
private int[] _BloomMipUp;
private int[] _BloomMipDown;
private RTHandle[] m_BloomMipUp;
private RTHandle[] m_BloomMipDown;
private GraphicsFormat hdrFormat;
public CustomPostProcessPass(Material bloomMaterial, Material compositeMaterial) {
m_bloomMaterial = bloomMaterial;
m_compositeMaterial = compositeMaterial;
renderPassEvent = RenderPassEvent.BeforeRenderingPostProcessing;
_BloomMipUp = new int[k_MaxPyramidSize];
_BloomMipDown = new int[k_MaxPyramidSize];
m_BloomMipUp = new RTHandle[k_MaxPyramidSize];
m_BloomMipDown = new RTHandle[k_MaxPyramidSize];
for (int i = 0; i < k_MaxPyramidSize; i++)
{
ShaderConstants._BloomMipUp[i] = Shader.PropertyToID("_BloomMipUp" + i);
ShaderConstants._BloomMipDown[i] = Shader.PropertyToID("_BloomMipDown" + i);
// Get name, will get Allocated with descriptor later
m_BloomMipUp[i] = RTHandles.Alloc(ShaderConstants._BloomMipUp[i], name: "_BloomMipUp" + i);
m_BloomMipDown[i] = RTHandles.Alloc(ShaderConstants._BloomMipDown[i], name: "_BloomMipDown" + i);
}
const FormatUsage usage = FormatUsage.Linear | FormatUsage.Renderer;
if(SystemInfo.IsFormatSupported(GraphicsFormat.B10G11R11_UFloatPack32, usage)) {
hdrFormat = GraphicsFormat.B10G11R11_UFloatPack32;
}
else {
hdrFormat = QualitySettings.activeColorSpace == ColorSpace.Linear
? GraphicsFormat.R8G8B8A8_SRGB
: GraphicsFormat.R8G8B8A8_UNorm;
}
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) {
m_Descriptor = renderingData.cameraData.cameraTargetDescriptor;
}
public void SetTarget(RTHandle cameraColorTargetHandle, RTHandle cameraDepthTargetHandle) {
m_CameraColorTarget = cameraColorTargetHandle;
m_CameraDepthTarget = cameraDepthTargetHandle;
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
VolumeStack stack = VolumeManager.instance.stack;
m_BloomEffect = stack.GetComponent<BloomEffect>();
CommandBuffer cmd = CommandBufferPool.Get();
using (new ProfilingScope(cmd, new ProfilingSampler("Custom Post Process Effects"))) {
SetupBloom(cmd, m_CameraColorTarget);
}
}
private void SetupBloom(CommandBuffer cmd, RTHandle source, Material uberMaterial)
{
// Start at half-res
int downres = 1;
switch (m_Bloom.downscale.value)
{
case BloomDownscaleMode.Half:
downres = 1;
break;
case BloomDownscaleMode.Quarter:
downres = 2;
break;
default:
throw new System.ArgumentOutOfRangeException();
}
int tw = m_Descriptor.width >> downres;
int th = m_Descriptor.height >> downres;
// Determine the iteration count
int maxSize = Mathf.Max(tw, th);
int iterations = Mathf.FloorToInt(Mathf.Log(maxSize, 2f) - 1);
int mipCount = Mathf.Clamp(iterations, 1, m_Bloom.maxIterations.value);
// Pre-filtering parameters
float clamp = m_Bloom.clamp.value;
float threshold = Mathf.GammaToLinearSpace(m_Bloom.threshold.value);
float thresholdKnee = threshold * 0.5f; // Hardcoded soft knee
// Material setup
float scatter = Mathf.Lerp(0.05f, 0.95f, m_Bloom.scatter.value);
var bloomMaterial = m_Materials.bloom;
bloomMaterial.SetVector(ShaderConstants._Params, new Vector4(scatter, clamp, threshold, thresholdKnee));
CoreUtils.SetKeyword(bloomMaterial, ShaderKeywordStrings.BloomHQ, m_Bloom.highQualityFiltering.value);
CoreUtils.SetKeyword(bloomMaterial, ShaderKeywordStrings.UseRGBM, m_UseRGBM);
// Prefilter
var desc = GetCompatibleDescriptor(tw, th, m_DefaultHDRFormat);
for (int i = 0; i < mipCount; i++)
{
RenderingUtils.ReAllocateIfNeeded(ref m_BloomMipUp[i], desc, FilterMode.Bilinear, TextureWrapMode.Clamp, name: m_BloomMipUp[i].name);
RenderingUtils.ReAllocateIfNeeded(ref m_BloomMipDown[i], desc, FilterMode.Bilinear, TextureWrapMode.Clamp, name: m_BloomMipDown[i].name);
desc.width = Mathf.Max(1, desc.width >> 1);
desc.height = Mathf.Max(1, desc.height >> 1);
}
Blitter.BlitCameraTexture(cmd, source, m_BloomMipDown[0], RenderBufferLoadAction.DontCare, RenderBufferStoreAction.Store, bloomMaterial, 0);
}
}
And the error: Assets\CustomPostProcessPass.cs(15,13): error CS0246: The type or namespace name ‘GraphicsFormat’ could not be found (are you missing a using directive or an assembly reference?)