VolumeVoxelizationParameters PrepareVolumeVoxelizationParameters(HDCamera hdCamera) { var parameters = new VolumeVoxelizationParameters(); parameters.viewCount = hdCamera.viewCount; parameters.numBigTileX = GetNumTileBigTileX(hdCamera); parameters.numBigTileY = GetNumTileBigTileY(hdCamera); parameters.tiledLighting = HasLightToCull() && hdCamera.frameSettings.IsEnabled(FrameSettingsField.BigTilePrepass); bool highQuality = volumetricLightingPreset == VolumetricLightingPreset.High; parameters.voxelizationCS = m_VolumeVoxelizationCS; parameters.voxelizationKernel = (parameters.tiledLighting ? 1 : 0) | (highQuality ? 2 : 0); var currFrameParams = hdCamera.vBufferParams[0]; var cvp = currFrameParams.viewportSize; parameters.resolution = new Vector4(cvp.x, cvp.y, 1.0f / cvp.x, 1.0f / cvp.y); #if UNITY_2019_1_OR_NEWER var vFoV = hdCamera.camera.GetGateFittedFieldOfView() * Mathf.Deg2Rad; #else var vFoV = hdCamera.camera.fieldOfView * Mathf.Deg2Rad; #endif // Compose the matrix which allows us to compute the world space view direction. hdCamera.GetPixelCoordToViewDirWS(parameters.resolution, ref m_PixelCoordToViewDirWS); parameters.pixelCoordToViewDirWS = m_PixelCoordToViewDirWS; // Compute texel spacing at the depth of 1 meter. parameters.unitDepthTexelSpacing = HDUtils.ComputZPlaneTexelSpacing(1.0f, vFoV, parameters.resolution.y); parameters.numVisibleVolumes = m_VisibleVolumeBounds.Count; parameters.volumeAtlas = DensityVolumeManager.manager.volumeAtlas.GetAtlas(); parameters.volumeAtlasDimensions = new Vector4(0.0f, 0.0f, 0.0f, 0.0f); if (parameters.volumeAtlas != null) { parameters.volumeAtlasDimensions.x = (float)parameters.volumeAtlas.width / parameters.volumeAtlas.depth; // 1 / number of textures parameters.volumeAtlasDimensions.y = parameters.volumeAtlas.width; parameters.volumeAtlasDimensions.z = parameters.volumeAtlas.depth; parameters.volumeAtlasDimensions.w = Mathf.Log(parameters.volumeAtlas.width, 2); // Max LoD } else { parameters.volumeAtlas = CoreUtils.blackVolumeTexture; } return(parameters); }