{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"source": [
"# Introduction\n",
"\n",
"For more information and during the exercise there as some good refernce materials:\n",
"1. 3D Gaussian Splatting for Real-Time Radiance Field Rendering\n",
"\n",
"https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf\n",
"\n",
"2. EWA Volume Splatting:\n",
"\n",
"https://www.cs.umd.edu/~zwicker/publications/EWAVolumeSplatting-VIS01.pdf\n",
"\n",
"During the exercise we will provide more material that covers in details different aspects and theory that we use.\n",
"\n",
"# The Gaussian Rasterizer\n",
"\n",
"In this first section the goal is build a function that takes as input a set of Gaussians in screen-space and renders them using equations in the 3D Gaussian Splatting paper.\n",
"\n",
"Let's remember first the equation of a multi-variate Gaussian:\n",
"\n",
"$a(x) = oe^{-\\frac{1}{2}(x-\\mu)^T \\Sigma^{-1} (x-\\mu)}$\n",
"\n",
"where $\\mu$ is the mean, or the center of the Gaussian, and $\\Sigma$ is it's covariance matrix and $o$ is the opacity value or the amplitude of the Gaussian, in our case this can take values between [0, 1). This equation evaluates the per alpha value of the Gaussian where x is the coordinates of the pixel in screen-space.\n",
"\n",
"To render multiple Gaussians we use the alpha blending as an approximation of the volumetric rendering equation.\n",
"\n",
"$\tC(x) = \\sum_{i \\in \\mathcal{N}}c_{i}\\alpha_{i}(x)T_i(x)$\n",
"\n",
"\n",
"where $c_i$ is the color of the Gaussian and transmittance is defined as $T_i(x) = \\prod_{j=1}^{i-1}(1-\\alpha_{j}(x))$.\n",
"\n",
"\n",
"The above equations assume that the Gaussians are ordered based based on their distance from the camera.\n",
"\n",
"\n",
"\n",
"> *Question*:\n",
"Why is this ordering important and do you see that ordering in the equation above?\n",
"\n",
"\n",
"\n",
"\n"
],
"metadata": {
"id": "8WJjRzbrWvwT"
}
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"height": 435,
"base_uri": "https://localhost:8080/"
},
"id": "6KxbGZcFONsD",
"outputId": "ae2540df-58e4-47fb-81bb-0134e3e1d25c"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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HPuBAwfwwgsvDMt+XXTRRbjllltwzz334I1vfGOu7+3txf79+7F79+5g7tq+Zbahko6ODhxzzDGYM2cOli5dipNOOgk/+MEPWjrn9evXY9euXXj729+OsWPHYuzYsVizZg1++MMfYuzYsZgyZUrL5s6lp6cHb3nLW/DEE0+09PGeOnUqZs+e7eiOO+64fKmyHe7Np556CnfddRc+85nP5LpWPuZDIW1FUh0dHZgzZw5Wr16d6wYGBrB69Wr09fWNYGa2HH300ejt7XVy3rNnD9atW5fn3NfXh927d2P9+vU55u6778bAwADmzZs3ZLkRES666CLcdNNNuPvuu3H00Uc79jlz5mDcuHFO7lu2bMH27dud3Ddt2uTcyKtWrUJXV5c3QQylDAwMYN++fS2d8+mnn45NmzZh48aN+Wfu3Lk499xz83ar5s7lpZdewj//+U9MnTq1pY/3aaed5n2l4vHHH8eMGTMAtPa9mcny5csxefJkLFq0KNe18jEfEhnpNzeKyooVK6izs5Ouu+46euyxx+hzn/sc9fT0OG+xDLfs3buXNmzYQBs2bCAA9P3vf582bNhATz31FBENvuba09NDv//97+mRRx6hD3/4w+prrieffDKtW7eO7rvvPjr22GOH/DXXCy+8kLq7u+nee+91Xnf93//+l2MuuOACmj59Ot1999308MMPU19fH/X19eX27FXXM844gzZu3Eh33HEHHXnkkUP6qusVV1xBa9asoW3bttEjjzxCV1xxBVUqFfrjH//Ysjlbwt/ua9XcL730Urr33ntp27ZtdP/999P8+fNp0qRJtGvXrpbNmWjwNf+xY8fSt7/9bdq6dSv96le/ogkTJtD111+fY1r13iQafHN5+vTpdPnll3u2Vj3mQyFtR1JERD/60Y9o+vTp1NHRQaeccgo98MADI5rPPffcQwC8z+LFi4lo8FXXr3/96zRlyhTq7Oyk008/nbZs2eLEeP755+mcc86hiRMnUldXF33605+mvXv3DmneWs4AaPny5Tnm5Zdfps9//vN02GGH0YQJE+ijH/0oPfvss06cf/3rX7Rw4UIaP348TZo0iS699FJ69dVXhyzvJUuW0IwZM6ijo4OOPPJIOv3003OCatWcLZEk1Yq5n3322TR16lTq6OigN7zhDXT22Wc73zVqxZwz+cMf/kDHH388dXZ20qxZs+inP/2pY2/Ve5OI6M477yQAXj5ErX3Mmy3l/ydVSimllFJKy0pbPZMqpZRSSinltSUlSZVSSimllNKyUpJUKaWUUkopLSslSZVSSimllNKyUpJUKaWUUkopLSslSZVSSimllNKyUpJUKaWUUkopLSslSZVSSimllNKyUpJUKaWUUkopLSslSZVSSimllNKyUpJUKaWUUkopLSv/D+tEGn5kKHbsAAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import torch\n",
"import math\n",
"\n",
"def get_ndc_range(pixels):\n",
" \"\"\"Returns the Normalized Device Coordinate (NDC) range (-1, 1) for given pixels.\n",
"\n",
" Learn more:\n",
" https://www.khronos.org/opengl/wiki/Coordinate_Transformations\n",
" \"\"\"\n",
" pixels = pixels\n",
" half_pixels = pixels/2.0\n",
"\n",
" pixel_space = torch.arange(start=0, end=pixels, step=1.0) + 0.5\n",
" # Bring (0, range) -> (-1, 1)\n",
" ndc_space = (pixel_space - half_pixels)/half_pixels\n",
"\n",
" return ndc_space\n",
"\n",
"def ndc_pixel_coordinates(width, height):\n",
" \"\"\"Returns the NDC pixel coordinate, a tensor [H,W,2]\n",
"\n",
" As input we specific the width and height in pixel dimensions.\n",
" \"\"\"\n",
" # Make sure width and height are integers even if in float format.\n",
" assert(isinstance(width, int) and isinstance(height, int))\n",
"\n",
"\n",
" # NDC space is normalized between (-1, 1) in all 3 dimensions,\n",
" # Pixel coordinates are defined from the center of the pixel hence the + 0.5\n",
" x = get_ndc_range(width)\n",
" y = get_ndc_range(height)\n",
" yy, xx = torch.meshgrid(x, y, indexing='ij')\n",
"\n",
" # NDC pixel coordinates (H, W, 2)\n",
" ndc_grid = torch.stack([xx, yy], axis=-1)\n",
"\n",
" return ndc_grid\n",
"\n",
"def z_sort_gaussians(means, covariances, colors, opacities):\n",
" \"\"\"Sorts based on z a set of gaussians.\"\"\"\n",
"\n",
" sorted_indices = torch.argsort(means[:, 2])\n",
"\n",
" sorted_means = means[sorted_indices]\n",
" sorted_covariances = covariances[sorted_indices]\n",
" sorted_colors = colors[sorted_indices]\n",
" sorted_opacities = opacities[sorted_indices]\n",
"\n",
" return sorted_means, sorted_covariances , sorted_colors, sorted_opacities\n",
"\n",
"def render_alpha_blend(width, height, means, covariances, colors, opacities):\n",
" \"\"\"Renders an image from a set of Gaussians with alpha blending.\n",
"\n",
" Gaussians are assumed to be already in camera-space.\n",
" \"\"\"\n",
"\n",
" # Sort the Gaussians based on depth.\n",
" means, covariances, colors, opacities = z_sort_gaussians(means, covariances, colors, opacities)\n",
"\n",
" # Compute the pixel coodinates of an image in NDC.\n",
" ndc_grid = ndc_pixel_coordinates(width, height) # [H, W, 2]\n",
"\n",
" # Allocate tensor for the final image\n",
" img = torch.zeros((3, width, height), device=means.device) # [C, H, W]\n",
" # Allocate a helper tensor in which we store the transmittance for each pixel\n",
" T = torch.ones((1, width, height), device=means.device) # [1, H, W]\n",
"\n",
" for mean, cov, color, opacity in zip(means, covariances, colors, opacities):\n",
" xy_mean = mean[:2]\n",
" d = (ndc_grid - xy_mean[None, None, ...])\n",
" alpha = opacity[None,None,...]*torch.exp(-(1/2.0)*(d[...,None,:] @ torch.linalg.inv(cov) @ d[...,None])).squeeze()\n",
" img += T*alpha*color[...,None,None]\n",
" T = T*(1-alpha)\n",
" return img\n",
"\n",
"# For the sake of testing we make a set of Gaussians\n",
"# that are already transformed in Camera-Space\n",
"\n",
"means = torch.tensor([[-0.2, 0.0, 1.0],\n",
" [0.0, 0.0, 0.2],\n",
" [0.0, 0.0, 0.4]])\n",
"\n",
"covariances = torch.tensor([[[0.2, 0.1],\n",
" [0.1, 0.2]],\n",
"\n",
" [[0.1, 0.0],\n",
" [0.0, 0.2]],\n",
"\n",
" [[0.5, -0.3],\n",
" [-0.3, 0.2]]])\n",
"opacities = torch.tensor([[0.7], [0.7], [0.7]])\n",
"colors = torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])\n",
"\n",
"\n",
"image = render_alpha_blend(800, 800, means, covariances, colors, opacities)\n",
"\n",
"plt.imshow(image.permute(1,2,0).cpu().detach())\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"source": [
"# Cameras and 3D Trasnformations\n",
"\n",
"Next, we want to move from the toy examples to real 3-D Transformations.\n",
"\n",
"Our Rendering equation and functions will stay the same, so if they are correct you will not need to change them again. All we need is to define a camera and compute the transformation of a gaussian from world-space to camera-space.\n",
"\n",
"First let's define the matrices related to our camera transformations:\n",
"\n",
"A simplified graphics-based projection matrix because we do not care about the normalization of the z-axis:\n",
"\n",
"$\n",
"P = projection\\_matrix =\n",
"\\begin{bmatrix}\n",
"\\frac{1}{tan(\\frac{FoV_x}{2})} & 0 & 0 & 0\\\\\n",
"0 & \\frac{1}{tan(\\frac{FoV_y}{2})} & 0 & 0\\\\\n",
"0 & 0 & 1 & 0 \\\\\n",
"0 & 0 & 0 & 1 \\\\\n",
"\\end{bmatrix}\n",
"$\n",
"\n",
"And a matrix that representations an affine transformation (rotation/translation) and transforms points from world coordinates to view-space coordinates ([0., 0., 0.] at the center of the camera looking into the camera direction):\n",
"\n",
"$\n",
"V = world\\_to\\_view\\_matrix =\n",
"\\begin{bmatrix}\n",
"r_{00} & r_{01} & r_{02} & t_{x}\\\\\n",
"r_{10} & r_{11} & r_{12} & t_{y}\\\\\n",
"r_{20} & r_{21} & r_{22} & t_{z} \\\\\n",
"0 & 0 & 0 & 1 \\\\\n",
"\\end{bmatrix}\n",
"$\n",
"\n",
"if $p$ is a point in the world coordinate system them all we need to do to trasnform it in screen space is:\n",
"\n",
"$ p^{tmp} = PVp $\n",
"\n",
"$ p' = [\\frac{p^{tmp}_x}{p^{tmp}_w}, \\frac{p^{tmp}_y}{p^{tmp}_w}, \\frac{p^{tmp}_z}{p^{tmp}_w}, 1]$\n",
"\n",
"where $p'$ is the point in sceen-space coordinates.\n",
"\n",
"**Learn more about tranformations and camera matrices:**\n",
"\n",
"https://learnopengl.com/Getting-started/Camera\n",
"\n",
"https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/building-basic-perspective-projection-matrix.html"
],
"metadata": {
"id": "UWAp_M9GY1lE"
}
},
{
"cell_type": "code",
"source": [
"def world2view_from_rotation_translation(rotation, translation):\n",
" \"\"\"Constructs a world to view matrix from rotation and translation.\"\"\"\n",
" rt = torch.zeros((4, 4))\n",
" rt[:3, :3] = rotation\n",
" rt[:3, 3] = translation\n",
" rt[3, 3] = 1.0\n",
" return rt\n",
"\n",
"def get_projection_matrix(fovx, fovy):\n",
" \"\"\"Constructs a simplified projection matrix.\"\"\"\n",
" tan_half_fovy = math.tan((fovy / 2))\n",
" tan_half_fovx = math.tan((fovx / 2))\n",
"\n",
" proj_mat = torch.zeros([4, 4])\n",
"\n",
" proj_mat[0, 0] = 1.0/tan_half_fovx\n",
" proj_mat[1, 1] = 1.0/tan_half_fovy\n",
" proj_mat[3, 3] = 1.0\n",
" proj_mat[2, 2] = 1.0\n",
"\n",
" return proj_mat.type(torch.float32)\n",
"\n",
"def geom_transform_points(points, transf_matrix):\n",
" \"\"\"Homogeneous transformation of points.\n",
"\n",
" Args:\n",
" points: [P, 3]\n",
" transf_matrix: [4, 4]\n",
"\n",
" Returns:\n",
" [P, 3]\n",
" \"\"\"\n",
" P, _ = points.shape\n",
" ones = torch.ones(P, 1, dtype=points.dtype, device=points.device)\n",
" points_hom = torch.cat([points, ones], dim=1)\n",
" points_out = (transf_matrix @ points_hom[..., None]).squeeze(-1)\n",
"\n",
" denom = points_out[..., 3:] + 0.0000001\n",
" return (points_out[..., :3] / denom).squeeze(dim=0)\n",
"\n",
"\n",
"class Camera:\n",
" \"\"\"Minimal camera class\"\"\"\n",
"\n",
" def __init__(\n",
" self,\n",
" rotation: torch.Tensor,\n",
" translation: torch.Tensor,\n",
" width: int,\n",
" height: int,\n",
" fovy: float,\n",
" fovx: float,\n",
" device: str = \"cpu\",\n",
" ):\n",
" self.width = width\n",
" self.height = height\n",
" self.fovy = fovy\n",
" self.fovx = fovx\n",
"\n",
" self.proj_mat = get_projection_matrix(fovx=fovx, fovy=fovy).to(device)\n",
"\n",
" self.world_view_transform = world2view_from_rotation_translation(\n",
" rotation, translation\n",
" ).to(device)\n",
"\n",
" def project_points(self, points):\n",
" \"\"\"Projects points to NDC.\"\"\"\n",
" return geom_transform_points(points, self.proj_mat @ self.world_view_transform)\n"
],
"metadata": {
"id": "VwEshPfKZ21D"
},
"execution_count": 2,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# 3D Gaussian Transformations\n",
"\n",
"Our Goal in this section is to trasnform a Gaussian from the world coordinate system to screen-space sucht that we can use the renderer that we build in the previous sections.\n",
"\n",
"The above 3D trasnformation are part of the standard graphics pipeline but they only hold when we are transforming vertices/points that have no extent.\n",
"\n",
"How can we apply the same ideas to Gaussians that have 3D extent?\n",
"\n",
"We know that the mean of the Gaussian is a dimensionless point so everything that we described can be applied to the mean, but what about the shape of the Gaussian?\n",
"\n",
"When we transform a Gaussian from world coordinate system to screen-space we need to find the new covariance matrix that represents the shape of the Gaussian in screen-space, this is often referred to as \"splatting\" in the literature.\n",
"\n",
"Let's remember from the lecture:\n",
"$\\Sigma_{2D} = J_{proj} R \\Sigma_{3D}R^TJ_{proj}^T$\n",
"\n",
"$J_{proj}$ is the jacobian of the projection matrix and $R$ is the rotational component of the world to view matrix.\n",
"\n",
"But let's remember why this equation holds and what exactly is describing. First we need to think about how a covariance matrix is changing under and affine/linear transformation. Try to prove to yourself (or open the lecture slides why given a random variable $X$: $Î£(AX) = AÎ£(X)A^T$\n",
"\n",
"Now, the pattern becomes obvious, first of all we apply two trasnformations to \"our\" random variable $X$ which is our Gaussian distribution. The first transformation is a world to view matrix which is affine. Phew! the first one was easy. But the projection matrix is not linear.\n",
"\n",
"> Question #1:\n",
"Why the projection matrix is not linear?\n",
"\n",
">Question #2:\n",
"Since we have a linear transformation that includes a rotation and a trasnlation why we only have the rotation in the above equation?\n",
"\n",
"\n",
"To solve for the non-linear projection matrix, we linearize it by taking the first two terms of the Taylor expansion - that is where the jacobian $J_{proj}$ is coming from - .\n",
"\n",
"If we put both transformations together we get $Î£_{2D}$"
],
"metadata": {
"id": "S3dkdEKXdubz"
}
},
{
"cell_type": "code",
"source": [
"def computeJacobian(means, camera):\n",
" # Transform points to camera space\n",
" t = geom_transform_points(means, camera.world_view_transform)\n",
" l = t.norm(dim=1, keepdim=True).flatten()\n",
"\n",
" # Compute the jacobian according to (29) from EWA Volume Splatting M.Zwicker et. al (2001)\n",
" jacobian = torch.zeros(t.shape[0], 3, 3)\n",
" jacobian[:, 0, 0] = 1/t[:, 2]\n",
" jacobian[:, 0, 2] = -t[:, 0]/t[:, 2]**2\n",
" jacobian[:, 1, 1] = 1/t[:, 2]\n",
" jacobian[:, 1, 2] = -t[:, 1]/t[:, 2]**2\n",
" jacobian[:, 2, 0] = t[:, 0]/l\n",
" jacobian[:, 2, 1] = t[:, 1]/l\n",
" jacobian[:, 2, 2] = t[:, 2]/l\n",
"\n",
" return jacobian\n",
"\n",
"def covariance_from_3d_to_2d(camera, means, cov3d):\n",
"\n",
" #h_x = camera.width / (2.0 * math.tan(camera.fovx / 2.0))\n",
" #h_y = camera.height / (2.0 * math.tan(camera.fovy / 2.0))\n",
" h_x = 1.0\n",
" h_y = 1.0\n",
"\n",
" R = camera.world_view_transform[:3, :3][None, ...]\n",
"\n",
" J = computeJacobian(means, camera)\n",
" J[:,0] = J[:,0] * h_x\n",
" J[:,1] = J[:,1] * h_y\n",
"\n",
" cov = J[None, ...] @ R[None, ...] @ cov3d @ R.transpose(1,2)[None, ...] @ J.transpose(1,2)[None, ...] #+ torch.eye(3).cuda() * 0.3\n",
"\n",
" return cov[0, :,:2,:2]\n",
"\n"
],
"metadata": {
"id": "WeH3XkdyKPJj"
},
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Let's test this with 3D Gaussians\n",
"\n",
"means_3d = torch.tensor([\n",
" [-0.00, 0.0, 0.01],\n",
"\n",
" [0.0, 0.0, 0.02],\n",
"\n",
" [0.0, 0.0, 0.04]\n",
"])\n",
"\n",
"cov_3d = torch.tensor([\n",
" [[0.2, 0.0, 0.0],\n",
" [0.0, 0.2, 0.0],\n",
" [0.0, 0.0, 0.2]],\n",
"\n",
" [[1.0, 0.0, 0.0],\n",
" [0.0, 0.05, 0.0],\n",
" [0.0, 0.0, 0.1]],\n",
"\n",
" [[0.1, 0.0, 0.0],\n",
" [0.0, 0.1, 0.0],\n",
" [0.0, 0.0, 0.1]]\n",
"])\n",
"\n",
"opacities = torch.tensor([[0.7], [0.7], [0.7]])\n",
"colors = torch.tensor([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])\n",
"\n",
"R = torch.eye(3)\n",
"T = torch.tensor([0.0, 0.0, -3.0])\n",
"camera = Camera(rotation=R, translation=T, width=800, height=800, fovy=0.26, fovx=0.26)\n",
"\n",
"means_2d = camera.project_points(means_3d)\n",
"cov2d = covariance_from_3d_to_2d(camera, means_3d, cov_3d)\n",
"image = render_alpha_blend(800, 800, means_2d, cov2d, colors, opacities)\n",
"\n",
"plt.imshow(image.permute(1,2,0).cpu().detach())\n",
"plt.show()"
],
"metadata": {
"colab": {
"height": 435,
"base_uri": "https://localhost:8080/"
},
"id": "XADSuAmNPnU5",
"outputId": "7d15bb4d-a5eb-4496-ebd0-21956d94540b"
},
"execution_count": 4,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
""
],
"image/png": "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JfH16JY712REEQ/3mS981enQ4skJdnRlRVLmPwU167v/7H2s++5MqLBD0sDtN9cIFHsOpTu5tGE5O20fC97aFlAoz/zeSVTuywpeOQrke9du8N+X4uUXFUnZtX+cNPLqhMqLHLfZ80XMXEkVkUqz+6dJpNlzFxFVmoBCxyrRubcksLKCyqlbZiJF4n/y5l40evugr8RLOxMnory6QJkHP1EnHuU1xKSMUUzHXldxh221TwENiZlOXdxm2pcUH7ZR1+/AvLT5+7ZEZNoUaot1z7SsbHPYEZXyXhPliEq30boAr32Je29/kteSSaHPP+lTCRrPlXy5hOQTWiMlT3llgXsd3NbnLPO3niasMrIqK4U8sWQdrxUBtWP/iForO994441QSuHjH/+4yTty5Ag2bdqEhQsXYsGCBVi/fj3Gxsac/fbv349169Zh/vz5WLx4Ma699lqcOHGilaYUpxmpFHkjZh03b52Vl7Vt54UklFWeVidvn7ylaARk1/Wl5W0ra7aBCpQ7xwmUqVC5nW93vmZ4URLlJl933E6eOEKI72Wjh3W+rQFuPWXKo7Xula1tu44jHvt41n76dUycJ9Fu91qc+67znf9AaKml3PcaUl+Htr6+zbzPml0Q2PbzQvtk1QuVZ237qILr0D5Z5NVp9rgt0LSknnjiCfzP//k/cf755zv5n/jEJ3DPPffgzjvvxI4dO/DCCy/gve99rymfnJzEunXrcOzYMTz66KO47bbbcOutt+L6669v/iraTdZNz3vzdPr8Rc8b+mMIlRf94/D/WP28UJ1mO4F2dDxFIzGFcCcdtSv+wtZkHScyAqCs//77Eomv0xKRWSfJevni80SLLSW9r75GAG5YouuErlnc68q9b9nl5V6jlNegHe8V5Kz9vFA6azuEf/6sekXL8+qWoehx23nOJmlKUq+88go2bNiAr371qzj11FNN/vj4OL72ta/hC1/4At7xjndg5cqVuOWWW/Doo4/iscceAwD867/+K5555hncfvvtePOb34y1a9fiL//yL/HlL38Zx44da89VTSdlX9Qi9UN1WnnzFDle6E2cldfKOu34iXZ6HXpKJ+R2zgXPo6wir57b4XsEO+rkuFUsJXdXk1YZtzkqC06rN/XjczjntSKvYOftX07ofoZPmKjnHjOWdeZrnkaR87Rr7Z83lE7b7vTfYdH92lm/YjQlqU2bNmHdunUYHh528nft2oXjx487+cuXL8eyZcswMjICABgZGcF5552HgYEBU2fNmjWYmJjA3r17g+c7evQoJiYmnIUQQsjMp/TEiTvuuAPf//738cQTTyTKRkdHMXfuXPT39zv5AwMDGB0dNXVsQelyXRZiy5Yt+MxnPlO2qdNDMw9T8+qH6pQ9T9nj2dv+jKFQXitrpBwf8NrpNTrlobKYqipZN5S2RsPELtd5+gF/iMDDfpHkCxMfUpw8c7nxiF3yNggan5HyXiO36eGBw8bEBAlPUAi8f8w57Pvpvya6oXDrOflRpnPf7Pua90DdrxPat11r/7yhdNp23nVkkXf+Mvu1s37FKBVJHThwAFdffTW+/vWv43Wve12n2pRg8+bNGB8fN8uBAwc6e8KsFzXrTTwV5y963rw/IAnUSesY7HTRTqLM0sw+Rb7KJqOuOGmV2i5ThmQdEVcM9veBa7GZQ5nrNFMhALNOkvXyud8xrmKLWOdzxeqOSwnSrlm51xW4J/Z+IfFJzn1Pfw1Vsf1S2lXqfeavs/KKbPuEzptVt2h5Xt0yFD1uO8/ZJKUktWvXLhw8eBBvectbMHv2bMyePRs7duzAl770JcyePRsDAwM4duwYDh065Ow3NjaGwcFBAMDg4GBitp/e1nV8enp60Nvb6yxNE7rprb6R8o6bt87Ky/vjyPqDzCpPq5O3T95S5icR6tY6lI62pR7nS6A8a1/Y3+3m1fWPZX/ljogKdrgiKhKA3Vkrs23kIIARiBaTWJdv1RNTHq+d/RJlSEiwkY7301JNnMf6fFjoWpz7br7iAgkhSYH7XvQ1Sry+/nsk7X3SqfcmCmz7eaHyrHqh8qzt0DGLrEP7ZJFXp9njtkApSV1yySXYs2cPdu/ebZZVq1Zhw4YNJj1nzhxs377d7LNv3z7s378fQ0NDAIChoSHs2bMHBw8eNHW2bduG3t5erFixok2XhdZvXNb+Rd9AZc+VdtysPw7/OEWXsvXT/shDnYaf53cyKR2P+OUZS6LupE4rpzz7mMqIKa6vnA5Yos5apFHWuEZLAPp8AksCyhIAApKIo6iQhBL5aWWwz+XJKzqfXW7aEV2j2Ndi8iw51+PrT95TlfvaSN19TeLXqMhrE6ibJq2QvLJkVjSv3X9DNqH8LDllySeLvP6paD/XDG2SV6lnUq9//etx7rnnOnmnnHIKFi5caPIvv/xyXHPNNTjttNPQ29uLj33sYxgaGsJFF10EALj00kuxYsUKfOADH8BNN92E0dFR/Pmf/zk2bdqEnp6e9lxVHoLyz3jyyv06Ol12nXYcnUZgG15+qMynjvB/Ufz8enTcmldu5+s0MvL02k4L4mnIdtq+H6FpzEhu26NySaIhOBPNKOdbD3RnHUcLvpSSnbguM3KyOnRXFNaCxroeHbNmCUy3xbTJa3707U1u9ASrb1WN4+pziJ+uC8z8v5rE4kGUrxprQKLzKUhNGtPzRP8+lXJ/TBGAKNU4RrR2H1DF2O0x15rV2eeJJC9dNC8rndaOImV5YiorJztddu2n08irEyovctxmzxfR9m+c+OIXv4harYb169fj6NGjWLNmDb7yla+Y8lmzZuHee+/FlVdeiaGhIZxyyinYuHEjPvvZz7a7KXFH12z9rO0iaX+/ImsUTIe2y6JFYksoLT8kpSLyCeX5aX1cgXteq1x/3Y9/TvtHAAHED/mR7P+cTABxtBFlGzlZaVGxkOqxvHxhxTKw68WSqAvMz0rYS10astJtC759xL2OYN8oXrqOxhfNChqCqllt0sdVWlwNyQCNiQ5Si2QUicoXlJZa4j8h3j138rxrDEkq8YyrSMTTKRmlCahsxOVfa1o+SqSLrG0SL0ZOush2Hq30Sx5KRNp4uKlhYmICfX19jY0iA5ZpogrlF8lTJdJZeVnrtLy0OlmRRrNLxtcgqZQ6zrc01Nx6ztfq2NteWfB754DGjw1GebVo0fk1RHlopGfZaSjMAjBLrG1RmB3lzRJgts7T23UrLSraBmZF69l1hVl1XdY4zuw6MMtOC9yfk9d50aKstUK8DiFAPLdANUbQ9LqugEkF1GuNtU6fUMBkDZhUgskacCJKn6gBJ2qCSdVYn1D+diOvUTfKV9LYhkTnsNKQxkieaqwnIdEInGBSYNJ1nZZGzFWPJB0LW9Kj0Kijjv8TgXioVtxtPw1rH182iS+0bUVIZUSFjHJk1CmyzsvLSoe2y+Rl5ft1onrj4+OZ8wy6/7v7BPnRUlqdUH6RPHs7L52Vl7W2CeU1iz5HnpwAN2LSiyB7WM7elkC90HYd5qclgu2J2mGiKVjbsOrBKgtctuiEzpMoPzFEp7x0I2Kqi0JNvChKFOp1oFZXjajIytPfUNTYt5HWQ32IBKXza1F77P9j2M0N9X2JxzHRfZSalUZjberoPEEcaUXDf6IiSURfJCgKjahQWb/2q/TQIKIXQzLvuZuIGy9WWr8WeZ198OfhC0REklWellemPOtFSitHiXSZdV5eVjq0XSYvK79sHYvulxQQd3jN1Anl65uYJiZ/Oy9tH08Ca5+88izS2mkveYTkFBJMQFZGNv55rW1RaAx9+V8qm3deq/2xsJTTGeu1vnR/7cyys6Za63RCTlHn6IjLCElF4gLqdb1G9BtUsaQa36yukPgiCsD5qj2Ie7tC1+CMWEkcSZmlJqjXdRomretLLVqrKHJR0XUpQV1F4q1JFKl5goIlL+d+6+dRKf2wuOvGC2R9dsvfscDiR1FNSahdkVJoSb0Zge1Q2l/7eWn1/LKi6SLbzeaXreMxMyQFoO2iCuVnbeubH5KSnQ6JpxUppbVXp/OElSGChIisRRTMz0okojDx6tkCso+XISWx0rbIBCnbur3mUpUpN3/jEt8G3WkiWscTKmIZNZ4XNfJM2haTKNRMhNUQVUM6Oh9mG1Ha78zsn68wt168t5WK22smT2gpwVvqCnUVSUYiUSktKEE9ipjq0TOquhLU6yr6ocRIWjoK8yMoiHld4skW8b23+9LGffXe0Nb9tl+I0LYzlb/IUveOl1KWEF3OsYKCSVtC9dBkusw6L89PN7PdbH7ZOgFmjqQAt5MuW0ffQL/Mr+/XC21npe36fl5Z8s5lp1VGXkhO9n/pi4pNiydLbAExOZMisrbhbgu8fMSdur7M+G9XOdtxh2lFUHrtDf9pQdWNrOKhv3pdl8FEUHobOs+krUZF56gB+c+kxOwSC0qvIyG5iycqFcnK7BPnaxnV68ocLxYTomgKRkh2ROXfdz070LnP1r1173t8XbDSic9jFRRLptDaETGhZBlKpLPyQuu8vKLp0HaZvCJlZeqkMLMkBcQ3I0tWWXUkkB+q79ezt+36eWl4eXnSSmtfWVn52yFBFZFYmqjKiC1DUEY4UVr5bYDuOKNNp9MEoOJvhYhnwHligiWlKN9ICMo8O9JyqouCMs+d9HYspEndIBNZwTTUlp/9HErP8FPRa+W8lVTcmWvBaFE1hKTlJPHHkmqqMWFCl4knsnojmtLboqUWSc48x/KH93REZe57vG3aCQURT1bmXluZVgVHMnZZnoDataDJOn4eSqSz8ux10bKsdDPbzeaXrZPDzJOUJtSZF61jyySrvl8vazsrnSWtvLbbbfLzstKw0mnyCeU1U6fZ/QNt9KMovdZ1nY5RxWmnT7A6zHg7Gv5C/PmleiQSIyyzjoWl7CjKk5UdRcUf5IpPLNG5VHRu+5JtnCnoChBI/JxJSwcNuUzqyEoCz6u0yCKxST1+9mTPFpRIdmLnAc6Qn3P/lNU++/5Lctu5Hnud1+E3I5VmpJNXntXGvHRWXmjdTJ6fLrJdJq9IWZk6BZi5kgKS0ihbJ1RWJC9rO5RuB9MlrVBek+VOFJXWHiAhKp3nXLrfkYYW8dMBUcGdhVePpFK3pFRPCErLye69lROpiTR+Pdh+FmWNoDmYPknF7YwlJZakYKajTyJdTm4ajenhRlC2lHIEFbjH8LfFy9Pb9jqtI7e2E9GUX69d5SnnnxIptSqkGSYnzcyWlMbuvbLqIKXeVMkqJK4iMvNlFBKRfQ9CIiiSLigqUVF2hpSMaEJ1rTr2sU09WPuj8YFUIyu4nafJS1nqliRqRlSqMWIpOpJKps2kCCgzvKcF1TixchrjDimqxHBfYUlZ16ijJ1sydUSfk1KCSaUan2FSyny2aVLLCe6zrPh4Xhp66M+Sod8Wb0ncc7HewtJ4zYCkoExdXT/lgLqsiLgkkBd8U/h5aefPS/vrZkRUVkhVkVOZeiU4OSQFZEuoaL3plJXfDl88ReoVEVYoL09WWWVRZ6YjpDQp+VFUoh5iaYV+mE/3B/4PAwZG2UxnqB+d+dtaPvqZlJaPnZ5E/LzJlxVgySpqtPn5DkE8WcOcS59XOZdlrsFcS/ycx0RS0SnqyoqegPhZlBGMFUVBR1zKicDstACOzGw5mvNa24k+P9BRip+OMkSLy3uhfFGlDQva9fyZgqUEVEZCefIpu05LZwlnhstJc/JIStNpWdn5aXLSee18YfOEVFRYel1AXLZ80uqkpjPO5c/mi+s1GqsFps9vr+PO1PrKHyi3zF8knDZRVrSOo6fGetKSlmlePEfbiCn+PJaKhxKhzDMvsy9U4rYn+jRfTpGABI1IqQ4VffODsqIpxM+qABNZOdGRLyrrXAkZpYnJpCVei1fuXZAjtEDnnzkcaKeLCMZKJ2SWcv7CQsoSTJaQ8iSVlQ5tF62TlZ9X1ky9Fuh+SdmdbNn9UGDfsrIK5ZcRWFl5ha4/JCL7XGXWZctaLHciqIx1UFRI70D9fC0g3eEbd0ogbUvKy5+EdQKdjhoo1lqLqibxzEKFeFgxdnf4jdZot/KuJYqQoCMkZdaTzlpHWsoMBdoyyl17aXMPASe609cVFJgkRZUQVMra1Csiq1bKy5RlrZvJy0o3s52Wl5WfV9ZMvTbs2/2SAooLJ2vfvP2LyMovz5KTziuznYctLF9UobzpkJhV5ggmQ0Z+vrkcLSrlXaonpMal2xFVnHaH/MSVViQSW0i+uOxvizARVGLbFZV+5tWIopQjKY37dlEmHUuqISFBUlB1RM+eEE1BB6znU0kRNSItX0YSHa+xNCZNxPcnJKK0b51wBGVvW7Lyv5XCj7hMXW/dkmjaKaF2yGi6xFSkvGidDuw/MySlaUVWRffPk9p0C6uMqOy2tEta0doXj72dFi3Z+bqPd+oFykx/YLbdiRT6kkNLLCiJ0rEwTLlYv4MrKo6c7IPDl1WUFGAWdMebFFRdDxOaJRxHxddgRS3RbLuGMFxBJZ5PwZWQ3p6EW8+WkvMcyqqj25D1+Vin3eK12xNWQkZW2i6zpYaU/MRQYrMSalZKZcrbtZ2Wl5VftLxsvQ7tP7MkpckTSbv2Lyosv6yssPKwJVSkThlp+Xlw07nDc1llZeoG0qZ5Ko6MdJvSOlAdgajAthtBIc4z2+JFUbYJdRwRR1O6A7U7aFtQ7hdzqPgS/dfeXKv1QVqgEUnpzzTBHZKb9NKTkXxcOYkXMdmz+pJDfbGc7DZ4EgotWhrRv6FvoEhNlxFGwbpB4TWT12q6yHaZvFbLmqnXqf0tZqakbNJE0e79s4QV6HQy9ysrsSypZcnJ37eorPzyMnkB0djPlBJRGABx9okvwp52bgJBR1De5AmrrCGkSFASC8r/sgyIu62c+2z3tsp5DeIIovGNFTXEi/mQsHcu+3zeWczh/SWeQOFLRTJlFf+sRuD5U2Bb7LXSck/KyJk0gfiWuKKy71FU15M5vP3sW50VfbVdPs3IpqyIWhVTnhDKCKNCctLMfElpsiTS7v3z6qaV58lJ55d9I6SJKqvM7vn98+aJKy1doNyXFYDEtHITxVnljqiAlGjKfS7lRlCSFJXEpzNNiIzhbsfojnoWAOcb16Nz10VQQ2NYTiGOpuCdzzmmXlv3xB16k3imH1xRmd92siMoePKCRBMsvEXFz6PitS0sO4IKR1OOXJx7FLhAa1tS0on6zYqlXem8srz6WXnN5Bctb7ZuJ/bP4eSRlE07hZV3jDLCsuuUyW9FWv52npTstuSkbeGY0wTSiX2BeBjR219vK6+uXa5/xjx92M+eOCGRmJTTDF9STlMkecOdry6K5DTLnKtx/JolqBpUHMkBUNEB0p5K+d+P5wgK9ueZ4qG7+HmTxMJSEg/9mbz42VVWNKXFpM+ZJScBks+j9Gvk3Kt0adl1/TL/ZXBekpDYiqbLlBXZLpPXTH7ZOmXqdfoYBTk5JWXTqrDKHKOI3NKO1Ulp6eMUEZe/LZZwiogsUKZPlRCXVW52i8bExDqIsvKS0VQ85Fe3ShXisrp1/FhayeG3xMtldYb22h66avw6sMSfjYIbSZnnXNGFKoRfPCMocQXhR1RmejmSEZEtp8bzKXe7SBRV984dn8sWkhjBuPcn+teRUmwkgZXv3YbEcGGTkvFllrpfke2idZrJzysrUt5s3U4eowkoKZt2CyvvOHl1Q2+KNDnpsqL5vpRCeaHtUBtCgsq6lznbdhQVFJe3T6LfieSku/xGBx7/1JXu0PVB9E/21aOtVCn5J/OzTUfrRw96mK9xzOQvmSgjp7S3S/j4yWgqHvZzF2cWH6xhP71W4Xw/inJl5V5ncsZfVC5ufub9FDdLUup0dLvZOs3m55WVqdNM3ak4TgtQUmm0Q1hlj1NEcFl1WhVXWpuKyMxui3VcUXAmG9jb5jAp0rJPI6F6Vp6KaolJxfuJ/qYKhL6FQkdY+jhiIiv7+rJeCtMBix7icztud8JEKIrynnulkOj8rXRDUNL49nMjE3voz/3ckx09JSIp7/mUGzWFz++sPSmJdbfse+XXcYbvQjfa2s4SWVBsnchrJr9oedE6rdTv9HHaBCVVhCLy6MRxmpGWX68d4iogKoElo4ICs/P04QRwZ/vZp3LaYNVQycPGWrKmputF6agpPkYcTbmNyoxs/OMC5otj7cWWVTxhQszXKek2F5UUtBCUO8xWl1hY7hJNNxc/usrejocOtcxDQ3xh4eg2+vfHvXnemy0kHyA4MzCckZ3X9P55ZdMhpGb36eRxOgQl1QydklbesYrWb6e4sspC8krLt/+nq4fzxKsaisRgDfdJShOVnQxHU0AcRdVVQxLhaMq1qvL+Wx74T336IlpQ+jlUPNTnTj9v3IXQY7xkp21FMSJW+2ORGFHZEZGEhwHDz6QQ/yaVlafPJVa67rUjdB/g5welZl1njgwS96SdYmlVOEU7/LJiaKdIKi4lH0qqHbRLWs0cqxVx2XXLCioPq69POMv1QJwtKdGUBHaJCgTKHU5MnEYgKpZWHUBN3Nl97kWGLjh5k9K+o84dSvQFZc3mQ0NOcTQlcD7QG7hdYq4I3nfm2dPDLVGJJ56QpJRfJxoaTN03fgbmCtKWUGBGn3Ut8VW4q+Rrh/QoKiVTMsry9m1rebN1W9lnKo41DVBSnaCT0ipyvDwhlamb9Qb3+vOEjPKIdgjuZx9XBZojgSaouDCeimB3dI0zaVkhEog/JT0opeioaTckU1Dif3i3kY8oHX8dkliXEbch2cmLuaZYGN6zKWvbjYY8SYn1WaqExODk++dx5RQWk5PvvVfSJJb1nmtWQkUl11SdZuq2Y7+pOt40Q0lNBc2IpuzxihyzHfKy6+f9MVh9ui8iO0pKPNvy1/oYKnkM5wAhcQHWxIlGJS2b5NR0GGnVg0cC4gkYbidrR2dagvp5VGN4L/5sVOPbz105JaMo97zBaCokKDQiGVsszgQIlSajcJ59rclIKjTM506ciNuaFFri+ryoyV/7NyN4jMyMFMp26lWRUaeOWTEoqemi3eJKO2aR4xYRUtH69j5F/oAKDicaWVmTJLInNcTykqgHrEOZiEZPYgAUasoVFaCioTmvgRmRgC1VrUT9GaxaQkz+unHE+HrCA35up58mipTnU1pS4kopnrkn3nf4eWXWcRvfQaiPDWvtyzspI/+q7MioVH/b6Qinlc6/U+I4CYQUgpKqEp0QV9pxix67pMDsyCdYZu3nRElw3ZaIpvxjOE3z4zQ3X7ycOJqKOnOJJ1LYs/7iPZW1ZxQ5WcfTw3zK2tZ762+V0KLyBRXLyZ44IYFrtNsOk0oTVBxZ+dIJDfvp++ALzB/Wk4CMwpMliuQ711UgigqmU6Iqm9SyVjv9TkrjJBVSCEqq6nRKXGnHLnOOopFSM/sFjpEmtcZ2WFRuoBbLyZ9xFz+jAurR12fozzTpIwka3xxhD/nZHxCuwRWWPcRXD0ZQtqDEvtQEbqcdkkTK0F9COClp5ebHIoM1fGhHTckJFOK1MySo0DX56dD7o3Sf3a5OfipkQSFlQkl1I63KpdVz5JzH0YVklNnb3gQKJ4qS/GgqvXOPaitv20rbwgIQfY+ejnJizdnnrHlp3RHHkZ8dTYUW6zlUzvf2udcC67sK02VlP0+qe3n+557sKMot9/fxjxWQlSRl5F5DvCCQDq39A/j5TUVRhSu0CYqoaSipmUbaH0O75JV3nmbPmRIhhaoZbahkpJQauomOoBrPiGA9L3JFJVZkFc+0E+gZeZKQlR1F+WLSeclhPi2qRio5uy9xa+K0+FFLsWG/bGFll/nRWSiCCm+HI63oMgrRdP8+HWKgjNoOJXWyMBXRl3e63GdTelulqiX4bMrsH4iwMkXlqCBLVPZnmsJRlEA/x3Jn8dmyUoi1FXoOZcsK1nYaYrVcb6eJKjg1HclIyR8OzI+W0j7Ymy8o+5Xw04WiKJ0v3nZW3U5AEU0plBTJ/6PrgMSyzh/STEJQiOWmd7cnHkiGqPRzKHtbf3ZJz8BDMM+VTFhQcRTlb9vTzfWQX9qEiaxbpFVlSwBWOhRNhaOrsLRcUYX2sfPyBWW325GQuNcWehtOiw8ooUpBSZF8ivzRps30yzhk8NlUwWPoSC0ZSbnNSTY9LCognuiAqMO2xRQLJY6ebFHZAvW3E8+gvDTgqip7uK9INNWMrMLiSpYVE5Tf/qzoyadoflNRFAXUdVBSpD2U+eNPMZcvnLwp6fYaXlqXpssKqaLSv5jbkJWKIir7GyNcedmiSpNTHEnF+Xb73Iny6ZpyO/i8Z1PJvPBXGqUP5aVNOc8TlF+GQHnWOiudgOKZ0VBSpKMEIyHJKEvbV7l5/tqvL15OUmCN3NBXFcVysof8bOGIOaaWlh5gzF78b5ZI+76+9F7XFpK/nRRTvrhCskmbWu7mJwVlt7GZ51D2Rp53moqiSFdSy68S8xd/8RdQSjnL8uXLTfmRI0ewadMmLFy4EAsWLMD69esxNjbmHGP//v1Yt24d5s+fj8WLF+Paa6/FiRMn2nM1pOtJHeqxekPx1n6em5ZAnlUWH8JMybZ/4C/OD3/RajgvuUymLvWMsvL7pJ2/TNvFun77+/scQVn3NXlvJeP1yHkNS7wnyMlB6Ujq13/91/Gd73wnPsDs+BCf+MQn8C//8i+488470dfXh6uuugrvfe978W//9m8AgMnJSaxbtw6Dg4N49NFH8eKLL+IP/uAPMGfOHHzuc59rw+WQKpIVMYXKsqKjorMA4aTTIipEPWPy6ZgdYdkTHfRQoPsVR0ikgWRkhUDaXhfBn4ig1+HJE/E+WVFW/rdI5EdQfhkC5dnXlZ/OyitSRroTJVL00wqNSOruu+/G7t27E2Xj4+NYtGgRvvGNb+B973sfAOBHP/oR3vSmN2FkZAQXXXQR7r//fvzO7/wOXnjhBQwMDAAAbr75Zlx33XX4xS9+gblz5xZqx8TEBPr6+oo2m1SAvI7YL8/aTuvkQ2s3HXo2lCxLz1O5aQTK3La4dWHlp127eFvJobU4P01Mdt38ocG07XAevDIEyoqsk9eav+1DSXUf4+Pj6O3tTS0vNdwHAM8++yyWLFmCX/7lX8aGDRuwf/9+AMCuXbtw/PhxDA8Pm7rLly/HsmXLMDIyAgAYGRnBeeedZwQFAGvWrMHExAT27t2bes6jR49iYmLCWUh3UbbzKNI5Fen8Qp1oeImjCv/XZ8PbyWGy5E9eIPgz7f7wnD9UlzaEF9pn0jt2kXYk2593rZ0TVNZr3Op7hswMSklq9erVuPXWW/HAAw9g69ateO655/Cbv/mbOHz4MEZHRzF37lz09/c7+wwMDGB0dBQAMDo66ghKl+uyNLZs2YK+vj6zLF26tEyzSUUoO0yTVj/0P++yorLL9JKcGKDr2wILde7h7WxxJPPznkWFhVP0fPnt9a83795k3dMir42fRk4+h/lOTko9k1q7dq1Jn3/++Vi9ejXOPPNM/OM//iPmzZvX9sZpNm/ejGuuucZsT0xMUFQzEEFzz6d0OmsNJx06k31GmHJd056Z18i3n0XFU8jt51P2Nrw68TpuVd6QqHhb6RLwpRESc3peWvTp1k07V1qbktdQJJ2VR04OSg/32fT39+NXf/VX8ZOf/ASDg4M4duwYDh065NQZGxvD4OAgAGBwcDAx209v6zohenp60Nvb6yykO2m1s8nr2MpEVEAocorL615eMupI5oWiFT/y0VHOJJDIzxr6c+tmHzsUJSVn8IXzdH7+8Gj7BdUMFNjMpiVJvfLKK/j3f/93nHHGGVi5ciXmzJmD7du3m/J9+/Zh//79GBoaAgAMDQ1hz549OHjwoKmzbds29Pb2YsWKFa00hXQRZYdt/LxWRZXsbJP5yWnovsDSxBSShCuW5HOs9CnraWVJEYamv4fbZrfZ/RyUKyBf0vb1h+5nkdcgKx3aTssrUkZmBqVm9/3Jn/wJ3vWud+HMM8/ECy+8gBtuuAG7d+/GM888g0WLFuHKK6/Efffdh1tvvRW9vb342Mc+BgB49NFHATSmoL/5zW/GkiVLcNNNN2F0dBQf+MAH8Id/+IelpqBzdl/3U3a2XygvNOPPTpebBejPwgvPDrTz7dl8ofq6LKtt7hHyEetfO+V3/OLV9Ifo7LwiQ3dpdcqss9Kh7bS8MuWk+uTN7iv1TOr//b//h8suuwwvvfQSFi1ahLe//e147LHHsGjRIgDAF7/4RdRqNaxfvx5Hjx7FmjVr8JWvfMXsP2vWLNx777248sorMTQ0hFNOOQUbN27EZz/72SYvj3QrgmxRhcr9PHs7lC6zjru7vFY16uh9G/vbP9+hvGOLIyaxhGYft5ykQtt58gg/W7L3TC8PS6/MOisd2k7LK1NOZgalIqmqwEhq5jAdEVVaWbHIKFwvXD8cRaVfQ/7UiSJDn2niSgokX05Z9cLnpKBIOdoaSRFSBVqJqBDIs8viPRs1syI6HSXZ8/786CwtirLPl4zmsikTTdnpWDLZUVdITkXWeXnZbS8OBXVyQUmRaaWZYb9QfhFRAemCSoqqsbctl+xW6uOo1HPFx4vL49wyJJWWL4oywkkODeado4iUigqKEiI2lBSZdqZKVHY6TUzhsmQL0kWX/nxK72efx84tpsLsPF82ybw86TSzT7g9nRAUBXbyQUmRSjAVogKKDf+lt0DXziY+r3jHTf6+ld/2ooQ7/XIRVplIq0xeVhtC23n5RcvJzISSIpWhU6ICwpEUkC2t9FZowtFVelqCbbWPlXb9ftSV1qIy6bRvVE+vX+48Rbbz8ouWk5kLJUUqRSdE5W+nDf8hJZ0urWaiq7S9klFQkWMW3c6KmtLSzcqv6HZeftFyMrOhpEjlaKeogHQ56bK8dIjQMyX3bMWuAzl1svbLyktuh1vbCSEVaV9eftFyMvOhpEglaZeo/LxOiss9iiZfWukDiOlHzSv3P1HVioRafd5EQZFWoKRI15LX6ZcZ/kPKduviSsoi60uQmumYkx/xbV4srQzfFR3eyysrUk5OHigpUlnyoildByn1igz/Fd0uIqVikZZ95PbQ3PBf+nY7ZNRs9FS0Djl5oKRIpSn63KbZ4b/QOYrIKrTtU1xarVFUCJ2IjCgo0mkoKdIVFI2qygz/5eU1u63zQh1up8RVRgxTLae8sjJ1yMkHJUW6hlZElVbWiqx0XmiqxFQKStOKqEJ57YqSKCjSCpQU6Sra8ZwqVFZEYL6ciuRl5fs087VIZeq1EhF1Sk5l6pGTE0qKdB1FRJVXr2hUlZbfDjmlnacozc6Q63R+Xlkz9cjJCyVFupIyokJK3Twp+WWt5Bctb5apElYrZa3UJScvlBTpWorO/NN18z4o226R5e3XSTohmWZF2Gw9QgBKiswA2hFV5ZUXKQuVFx3qa5Z2iWEq5FS2LiEAJUVmCEVFpesio36zQvLLi5yjU7RjRl075dRMfUIASorMIMoM/xWp3w4hVSWSKlq3E9PFKSfSCpQUmXGUiap0feTsU6aOpkzdTjAdAmvHPoTYUFJkRlI2qiq6T150lVa36D7N0kmBUE5kOqGkyIymbFSl90GB/cpETmn7TCVTNUxHQZF2QkmRGU8zUVUz+zUjrU4y1ZKhnEgnoKTISUOrsiq7b6cnTeSdZ6qOQTmRTkJJkZOOZmVl79vs/v4xppNW21GV6yAzG0qKnLS0Iit7f810D+/l0S6pUE5kKqGkyElPq7Lyj2MzXeLqhEgoJzIdUFKERLRLVqFjhuiEFDsB5USmE0qKEI92PHcqe56qUeW2kZMLSoqQDKZKWFWAYiJVhJIipCAzUVgUE6k6lBQhTdBtM/s0lBLpNigpQtpAVaVFKZFuh5IipAN0clZfmXMR0u3Uyu7w/PPP4/d///excOFCzJs3D+eddx6efPJJUy4iuP7663HGGWdg3rx5GB4exrPPPusc4+WXX8aGDRvQ29uL/v5+XH755XjllVdavxpCugBp80LITKaUpP7zP/8TF198MebMmYP7778fzzzzDP76r/8ap556qqlz00034Utf+hJuvvlm7Ny5E6eccgrWrFmDI0eOmDobNmzA3r17sW3bNtx777145JFH8JGPfKR9V0UIIWRmICW47rrr5O1vf3tqeb1el8HBQfn85z9v8g4dOiQ9PT3yzW9+U0REnnnmGQEgTzzxhKlz//33i1JKnn/++ULtGB8fb/d/Rrlw4cKFyzQs4+Pjmf19qUjq29/+NlatWoXf+73fw+LFi3HhhRfiq1/9qil/7rnnMDo6iuHhYZPX19eH1atXY2RkBAAwMjKC/v5+rFq1ytQZHh5GrVbDzp07g+c9evQoJiYmnIUQQsjMp5SkfvrTn2Lr1q0455xz8OCDD+LKK6/EH//xH+O2224DAIyOjgIABgYGnP0GBgZM2ejoKBYvXuyUz549G6eddpqp47Nlyxb09fWZZenSpWWaTQghpEspJal6vY63vOUt+NznPocLL7wQH/nIR/BHf/RHuPnmmzvVPgDA5s2bMT4+bpYDBw509HyEEEKqQSlJnXHGGVixYoWT96Y3vQn79+8HAAwODgIAxsbGnDpjY2OmbHBwEAcPHnTKT5w4gZdfftnU8enp6UFvb6+zEEIImfmUktTFF1+Mffv2OXk//vGPceaZZwIAzj77bAwODmL79u2mfGJiAjt37sTQ0BAAYGhoCIcOHcKuXbtMnYceegj1eh2rV69u+kIIIYTMQApNp4t4/PHHZfbs2fJXf/VX8uyzz8rXv/51mT9/vtx+++2mzo033ij9/f3yrW99S37wgx/Iu9/9bjn77LPltddeM3Xe+c53yoUXXig7d+6U733ve3LOOefIZZddVrgdnN3HhQsXLjNjyZvdV0pSIiL33HOPnHvuudLT0yPLly+Xv//7v3fK6/W6fPrTn5aBgQHp6emRSy65RPbt2+fUeemll+Syyy6TBQsWSG9vr3zoQx+Sw4cPF24DJcWFCxcuM2PJk5QSEUGXMTExgb6+vuluBiGEkBYZHx/PnGdQ+muRCCGEkKmCkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlaWUpM466ywopRLLpk2bAABHjhzBpk2bsHDhQixYsADr16/H2NiYc4z9+/dj3bp1mD9/PhYvXoxrr70WJ06caN8VEUIImTlICQ4ePCgvvviiWbZt2yYA5OGHHxYRkSuuuEKWLl0q27dvlyeffFIuuugi+Y3f+A2z/4kTJ+Tcc8+V4eFheeqpp+S+++6T008/XTZv3lymGTI+Pi4AuHDhwoVLly/j4+OZ/X0pSflcffXV8iu/8itSr9fl0KFDMmfOHLnzzjtN+Q9/+EMBICMjIyIict9990mtVpPR0VFTZ+vWrdLb2ytHjx4tfF5KigsXLlxmxpInqaafSR07dgy33347PvzhD0MphV27duH48eMYHh42dZYvX45ly5ZhZGQEADAyMoLzzjsPAwMDps6aNWswMTGBvXv3pp7r6NGjmJiYcBZCCCEzn6Yldffdd+PQoUP44Ac/CAAYHR3F3Llz0d/f79QbGBjA6OioqWMLSpfrsjS2bNmCvr4+syxdurTZZhNCCOkimpbU1772NaxduxZLlixpZ3uCbN68GePj42Y5cOBAx89JCCFk+pndzE4///nP8Z3vfAf//M//bPIGBwdx7NgxHDp0yImmxsbGMDg4aOo8/vjjzrH07D9dJ0RPTw96enqaaSohhJAupqlI6pZbbsHixYuxbt06k7dy5UrMmTMH27dvN3n79u3D/v37MTQ0BAAYGhrCnj17cPDgQVNn27Zt6O3txYoVK5q9BkIIITOVkhP6ZHJyUpYtWybXXXddouyKK66QZcuWyUMPPSRPPvmkDA0NydDQkCnXU9AvvfRS2b17tzzwwAOyaNEiTkHnwoULl5N0afsU9AcffFAAyL59+xJlr732mnz0ox+VU089VebPny/vec975MUXX3Tq/OxnP5O1a9fKvHnz5PTTT5dPfvKTcvz48VJtoKS4cOHCZWYseZJSIiLoMiYmJtDX1zfdzSCEENIi4+Pj6O3tTS3nd/cRQgipLJQUIYSQykJJEUIIqSyUFCGEkMpCSRFCCKkslBQhhJDKQkkRQgipLJQUIYSQykJJEUIIqSyUFCGEkMpCSRFCCKkslBQhhJDKQkkRQgipLJQUIYSQykJJEUIIqSyUFCGEkMpCSRFCCKkslBQhhJDKQkkRQgipLJQUIYSQykJJEUIIqSyUFCGEkMpCSRFCCKkslBQhhJDKQkkRQgipLJQUIYSQykJJEUIIqSyUFCGEkMpCSRFCCKkslBQhhJDKQkkRQgipLJQUIYSQykJJEUIIqSyUFCGEkMpCSRFCCKkslBQhhJDKQkkRQgipLJQUIYSQytKVkhKR6W4CIYSQNpDXn3elpF566aXpbgIhhJA2cPjw4czy2VPUjrZy2mmnAQD279+Pvr6+aW5NOSYmJrB06VIcOHAAvb29092cwrDdUwvbPfV0a9u7td0igsOHD2PJkiWZ9bpSUrVaIwDs6+vrqhfFpre3tyvbznZPLWz31NOtbe/GdhcJMrpyuI8QQsjJASVFCCGksnSlpHp6enDDDTegp6dnuptSmm5tO9s9tbDdU0+3tr1b210UJZzPTQghpKJ0ZSRFCCHk5ICSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVpSsl9eUvfxlnnXUWXve612H16tV4/PHHp7U9jzzyCN71rndhyZIlUErh7rvvdspFBNdffz3OOOMMzJs3D8PDw3j22WedOi+//DI2bNiA3t5e9Pf34/LLL8crr7zS0XZv2bIFb33rW/H6178eixcvxu/+7u9i3759Tp0jR45g06ZNWLhwIRYsWID169djbGzMqbN//36sW7cO8+fPx+LFi3HttdfixIkTHWv31q1bcf7555tP2A8NDeH++++vdJtD3HjjjVBK4eMf/3il2/4Xf/EXUEo5y/LlyyvdZs3zzz+P3//938fChQsxb948nHfeeXjyySdNeVX/Ns8666zEPVdKYdOmTQCqfc/bjnQZd9xxh8ydO1f+1//6X7J37175oz/6I+nv75exsbFpa9N9990nf/Znfyb//M//LADkrrvucspvvPFG6evrk7vvvlv+7//9v/Lf//t/l7PPPltee+01U+ed73ynXHDBBfLYY4/J//k//0fe+MY3ymWXXdbRdq9Zs0ZuueUWefrpp2X37t3y27/927Js2TJ55ZVXTJ0rrrhCli5dKtu3b5cnn3xSLrroIvmN3/gNU37ixAk599xzZXh4WJ566im577775PTTT5fNmzd3rN3f/va35V/+5V/kxz/+sezbt0/+9E//VObMmSNPP/10Zdvs8/jjj8tZZ50l559/vlx99dUmv4ptv+GGG+TXf/3X5cUXXzTLL37xi0q3WUTk5ZdfljPPPFM++MEPys6dO+WnP/2pPPjgg/KTn/zE1Knq3+bBgwed+71t2zYBIA8//LCIVPeed4Kuk9Tb3vY22bRpk9menJyUJUuWyJYtW6axVTG+pOr1ugwODsrnP/95k3fo0CHp6emRb37zmyIi8swzzwgAeeKJJ0yd+++/X5RS8vzzz09Z2w8ePCgAZMeOHaadc+bMkTvvvNPU+eEPfygAZGRkREQagq7VajI6OmrqbN26VXp7e+Xo0aNT1vZTTz1V/uEf/qEr2nz48GE555xzZNu2bfLf/tt/M5KqattvuOEGueCCC4JlVW2ziMh1110nb3/721PLu+lv8+qrr5Zf+ZVfkXq9Xul73gm6arjv2LFj2LVrF4aHh01erVbD8PAwRkZGprFl6Tz33HMYHR112tzX14fVq1ebNo+MjKC/vx+rVq0ydYaHh1Gr1bBz584pa+v4+DiA+Fvmd+3ahePHjzttX758OZYtW+a0/bzzzsPAwICps2bNGkxMTGDv3r0db/Pk5CTuuOMOvPrqqxgaGuqKNm/atAnr1q1z2ghU+34/++yzWLJkCX75l38ZGzZswP79+yvf5m9/+9tYtWoVfu/3fg+LFy/GhRdeiK9+9aumvFv+No8dO4bbb78dH/7wh6GUqvQ97wRdJan/+I//wOTkpHPjAWBgYACjo6PT1KpsdLuy2jw6OorFixc75bNnz8Zpp502ZddVr9fx8Y9/HBdffDHOPfdc0665c+eiv78/s+2ha9NlnWLPnj1YsGABenp6cMUVV+Cuu+7CihUrKt1mALjjjjvw/e9/H1u2bEmUVbXtq1evxq233ooHHngAW7duxXPPPYff/M3fxOHDhyvbZgD46U9/iq1bt+Kcc87Bgw8+iCuvvBJ//Md/jNtuu805d9X/Nu+++24cOnQIH/zgB02bqnrPO0FX/lQHaT+bNm3C008/je9973vT3ZRC/Nqv/Rp2796N8fFx/NM//RM2btyIHTt2THezMjlw4ACuvvpqbNu2Da973eumuzmFWbt2rUmff/75WL16Nc4880z84z/+I+bNmzeNLcumXq9j1apV+NznPgcAuPDCC/H000/j5ptvxsaNG6e5dcX52te+hrVr1+b+7tJMpasiqdNPPx2zZs1KzGIZGxvD4ODgNLUqG92urDYPDg7i4MGDTvmJEyfw8ssvT8l1XXXVVbj33nvx8MMP4w1veIPJHxwcxLFjx3Do0KHMtoeuTZd1irlz5+KNb3wjVq5ciS1btuCCCy7A3/7t31a6zbt27cLBgwfxlre8BbNnz8bs2bOxY8cOfOlLX8Ls2bMxMDBQ2bbb9Pf341d/9Vfxk5/8pNL3+4wzzsCKFSucvDe96U1mqLIb/jZ//vOf4zvf+Q7+8A//0ORV+Z53gq6S1Ny5c7Fy5Ups377d5NXrdWzfvh1DQ0PT2LJ0zj77bAwODjptnpiYwM6dO02bh4aGcOjQIezatcvUeeihh1Cv17F69eqOtU1EcNVVV+Guu+7CQw89hLPPPtspX7lyJebMmeO0fd++fdi/f7/T9j179jh/yNu2bUNvb2+ig+gk9XodR48erXSbL7nkEuzZswe7d+82y6pVq7BhwwaTrmrbbV555RX8+7//O84444xK3++LL7448ZGKH//4xzjzzDMBVPtvU3PLLbdg8eLFWLduncmr8j3vCNM9c6Msd9xxh/T09Mitt94qzzzzjHzkIx+R/v5+ZxbLVHP48GF56qmn5KmnnhIA8oUvfEGeeuop+fnPfy4ijWmu/f398q1vfUt+8IMfyLvf/e7gNNcLL7xQdu7cKd/73vfknHPO6fg01yuvvFL6+vrku9/9rjPd9b/+679MnSuuuEKWLVsmDz30kDz55JMyNDQkQ0NDplxPdb300ktl9+7d8sADD8iiRYs6OtX1U5/6lOzYsUOee+45+cEPfiCf+tSnRCkl//qv/1rZNqdhz+6rats/+clPyne/+1157rnn5N/+7d9keHhYTj/9dDl48GBl2yzSmOY/e/Zs+au/+it59tln5etf/7rMnz9fbr/9dlOnqn+bIo2Zy8uWLZPrrrsuUVbVe94Juk5SIiJ/93d/J8uWLZO5c+fK2972NnnsscemtT0PP/ywAEgsGzduFJHGVNdPf/rTMjAwID09PXLJJZfIvn37nGO89NJLctlll8mCBQukt7dXPvShD8nhw4c72u5QmwHILbfcYuq89tpr8tGPflROPfVUmT9/vrznPe+RF1980TnOz372M1m7dq3MmzdPTj/9dPnkJz8px48f71i7P/zhD8uZZ54pc+fOlUWLFskll1xiBFXVNqfhS6qKbX//+98vZ5xxhsydO1d+6Zd+Sd7//vc7nzWqYps199xzj5x77rnS09Mjy5cvl7//+793yqv6tyki8uCDDwqARHtEqn3P2w1/T4oQQkhl6apnUoQQQk4uKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUlkoKUIIIZWFkiKEEFJZKClCCCGVhZIihBBSWSgpQgghlYWSIoQQUln+Pxo1gMlMnr68AAAAAElFTkSuQmCC\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"# Let's render\n",
"The next section will render a video with a camera rotating around a circular trajectory always looking at [0.0, 0.0, 0.0]"
],
"metadata": {
"id": "_LNenRL-mIrW"
}
},
{
"cell_type": "code",
"source": [
"import imageio\n",
"from IPython.display import HTML\n",
"from base64 import b64encode\n",
"\n",
"def array_to_video_html(array):\n",
" \"\"\"\n",
" Converts a NumPy array (frames) into a HTML video tag using imageio\n",
" \"\"\"\n",
" # Assuming array has shape (frames, height, width, channels)\n",
" imageio.mimwrite('temp.mp4', array, fps=30) # Adjust fps if needed\n",
"\n",
" video_encoded = b64encode(open('temp.mp4', 'rb').read()).decode()\n",
" return f' '\n",
"\n",
"def lookat_to_rt(eye, target, up):\n",
" \"\"\"Returns the rotation and translation from look-at system of vectors.\"\"\"\n",
" look_dir = target - eye\n",
" look_dir = look_dir / look_dir.norm()\n",
" right = torch.cross(up, look_dir)\n",
" right = right / right.norm()\n",
" up = torch.cross(look_dir, right)\n",
" up = up / up.norm()\n",
"\n",
" tx = -torch.dot(eye, right)\n",
" ty = -torch.dot(eye, up)\n",
" tz = -torch.dot(eye, look_dir)\n",
"\n",
" rotation = torch.tensor([\n",
" [right[0], right[1], right[2]],\n",
" [up[0], up[1], up[2]],\n",
" [look_dir[0], look_dir[1], look_dir[2]],\n",
" ])\n",
" translation = torch.tensor([tx, ty, tz])\n",
"\n",
" return rotation, translation\n",
"\n",
"def create_cam_from_lookat(\n",
" eye: torch.Tensor,\n",
" target: torch.Tensor,\n",
" up: torch.Tensor,\n",
" width: int,\n",
" height: int,\n",
" fovy: float,\n",
" fovx: float):\n",
" \"\"\"Creates a camera from a lookat vector system.\"\"\"\n",
" rotation, translation = lookat_to_rt(eye, target, up)\n",
"\n",
" return Camera(rotation, translation, width, height, fovy, fovx)\n",
"\n",
"def get_circular_trajectory_around_point(center_point, radius, width, height, fovx, fovy, up = torch.tensor([0.0, -1.0, 0.0]), num_cameras= 150):\n",
" \"\"\"Returns a list of cameras following a circular trajectory.\"\"\"\n",
" theta = torch.linspace(0, 2 * math.pi, num_cameras)\n",
" x = radius * torch.sin(theta)\n",
" y = torch.ones_like(x) * 0.0\n",
" z = -radius * torch.cos(theta)\n",
" camera_positions = torch.stack([x, y, z], dim=-1) + center_point\n",
" look_at = center_point\n",
"\n",
" cameras = []\n",
" for cam_position in camera_positions:\n",
" camera = create_cam_from_lookat(cam_position, look_at, up, width, height, fovy, fovx)\n",
" cameras.append(camera)\n",
" return cameras\n",
"\n",
"\n",
"cameras = get_circular_trajectory_around_point(torch.tensor([0.0, 0.0, 0.0]), 10.0, 800, 800, 0.26, 0.26, torch.tensor([0.0, 1.0, 0.0]))\n",
"\n",
"imgs = []\n",
"for cam in cameras:\n",
" means_2d = cam.project_points(means_3d)\n",
" cov2d = covariance_from_3d_to_2d(cam, means_3d, cov_3d)\n",
" image = render_alpha_blend(800, 800, means_2d, cov2d, colors, opacities)\n",
" imgs.append(image)\n",
"\n",
"frame_list = (255*torch.stack(imgs).permute(0,2,3,1).cpu().detach()).to(torch.uint8)\n",
"HTML(array_to_video_html(frame_list))"
],
"metadata": {
"id": "gbaeEB-wWDKr",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 821
},
"outputId": "2077ae61-9f91-43f0-d108-284e08cb2b45"
},
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
""
],
"text/html": [
" "
]
},
"metadata": {},
"execution_count": 8
}
]
}
]
}