Last active
September 25, 2020 01:59
-
-
Save SomeoneSerge/679de1a822711bd361c5cac1bdb4b8ba to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# SDF Primitives scene\n", | |
"\n", | |
"See evaluated notebook at: https://gist.github.com/679de1a822711bd361c5cac1bdb4b8ba\n", | |
"\n", | |
"Conventions:\n", | |
"\n", | |
"- By abuse of terminology, SDF refers to any, in sense of magnitude, lowerbound on the signed distance function\n", | |
"- The camera space has\n", | |
" - origin at the camera centre,\n", | |
" - $x$ direction pointing left,\n", | |
" - $y$ direction pointing up,\n", | |
" - $z$ direction pointing towards the scene,\n", | |
" \n", | |
" or just `[left, up, forward]` orientation, for short." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The scene below is expected to have\n", | |
"\n", | |
"- a point light source in the left,\n", | |
"- a small ball somewhat in the middle and slightly up,\n", | |
"- a big ball on the right" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Both spheres are defined by their analytic SDF functions.\n", | |
"The shading is the simple cosine law.\n", | |
"The scene is rendering by marching rays towards all pixels via sphere tracing\n", | |
"(which uses SDF lowerbound to make an informed step towards the surface)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import torch\n", | |
"import numpy as np\n", | |
"\n", | |
"from nerfs.cameras import SimplePinhole\n", | |
"from nerfs.sdfdiff.primitives import SDFUnion, Sphere\n", | |
"from nerfs.sphere_tracing import sdf_intersections\n", | |
"from nerfs.numutils import unit\n", | |
"\n", | |
"import matplotlib.pyplot as plt" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Running on GeForce GTX 1070\n" | |
] | |
} | |
], | |
"source": [ | |
"device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"cpu\")\n", | |
"\n", | |
"try:\n", | |
" print(\"Running on\", torch.cuda.get_device_name(device))\n", | |
"except ValueError:\n", | |
" print(\"Running on CPU\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n", | |
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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otfGyoJzWRim4gvMftdee63MTM997nP1k5/8pCkQV7l9mXv7Xwbi7rrmmmt02mmnadOmTV06u2IHH3xww32Ns0E/LTyUVYJbheDsfNmyotfGyoJzWRjuZsW3UwjHQODu+o//+A9t375dz3/+82tBuKz3NltRnY3/kZdZu3at+vv7m85Lqg9kkwnEReG01bJ22h2yry/bd976onMrer+ycyVoA53z4x//WO6uF73oRbrxxhtrQbis9zauqE7GD3/4Q73iFa+Y9opxasOGDRodHW06L6k+Zk0mEBeF01bLyl5bVjmOtarmFr3nZKvI8WOqYzLhGIiMjo7qy1/+sm666SY9//nP1+677175YrS56LTTTlNfX1/puaTViipV4HS6aFn29fGyIkWV47LXVgnRnXw/AJ117bXXamhoSEceeaTWrl2r7du3t3WP36oeeeQRvf3tb9d///d/z1gwHhwc1MUXX6yxsbHS29Kln+JVqQKn00XLsq+PlxUpqhyXvbZKiO7k+3UK4RjIGB8f1y9+8QvdfffdevrTn64jjjii5TeppY+5VjlevXp17h0mYmkwLqqQ5i1v1dbQ7rbtzuftn1ALzC033nijfv3rX+uMM87QQQcdpP7+/pbfpFZlDE63+a//+i999rOf1eWXX97tUyl16qmnamhoSHfddVfT+cTS3zFF55m3vFVbQ7vbtjuft/+58HuScAwU2Lx5sy677DJdc801Ovroo7V69WpJ8ytkxfcxzguceR9PFQXlqoF1KlXcqW5PGwQwt0xMTOgLX/iC1qxZo6c85Sk67rjjtGzZMkmTC1nbt2/Xz372M51zzjm66aabtGPHjk4fctt6enpyb72WSsfhvOBbFIirBNapVHGnun07f8zMBMIx0MLDDz+sK6+8UrvvvrtWrFih1atXq6+vr+nCidn6H3mZsj7eeECeaqCtUjGuUuFtp6WiynESkoG5YePGjfrWt76lH/7whzrhhBO033776WUve5mGh4e1YsWKprvspHbu3KmRkRENDQ3pAx/4gB544AFddtllM3gm+YpaH+L17X46WTUQFwXpqbRYtHp9drvZ9vuTcAxUtHnzZm3evFn3339/bZm7N1xBPNfMdDic6fcHMLds27ZN3/zmN9Xb26svfOELcne9613v0tq1a2tjcPytpVdeeaW+/e1vy921ffv2mTrslmb6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\n", | |
"text/plain": [ | |
"<Figure size 720x1440 with 7 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"H, W = 512, 512\n", | |
"cam = SimplePinhole.from_3x4(\n", | |
" H,\n", | |
" W,\n", | |
" focal=torch.tensor([200.0]).to(device),\n", | |
" t_near=0.2,\n", | |
" t_far=3.0,\n", | |
" # fmt: off\n", | |
" poses=torch.tensor([\n", | |
" [1.0, 0, 0, 0],\n", | |
" [0.0, 1, 0, 0],\n", | |
" [0.0, 0, 1, -6]\n", | |
" ]).unsqueeze(0).to(device),\n", | |
" # fmt: on\n", | |
")[0]\n", | |
"rays = cam.get_rays()\n", | |
"\n", | |
"batch = rays.origins.shape[:-1]\n", | |
"batch_broadcast = [1 for _ in batch]\n", | |
"\n", | |
"light_loc = torch.tensor([2.0, 0, 0]).reshape(*batch_broadcast, 3).to(device)\n", | |
"\n", | |
"small_sphere = Sphere(\n", | |
" center=torch.tensor([-1.0, 1.0, 0]).reshape(*batch_broadcast, 3),\n", | |
" radius=torch.tensor([1.0]).reshape(*batch_broadcast),\n", | |
").to(device)\n", | |
"big_sphere = Sphere(\n", | |
" center=torch.tensor([-5.5, 0, 0]).reshape(*batch_broadcast, 3),\n", | |
" radius=torch.tensor([2.0]).reshape(*batch_broadcast),\n", | |
").to(device)\n", | |
"\n", | |
"sdf = SDFUnion(small_sphere, big_sphere).to(device)\n", | |
"\n", | |
"intersections, mask = sdf_intersections(rays, sdf)\n", | |
"\n", | |
"with torch.no_grad():\n", | |
" dists = sdf(intersections).squeeze(-1)\n", | |
"\n", | |
" normals = sdf.normal(intersections)\n", | |
" light_dir = light_loc - intersections\n", | |
" light_dir = unit(light_dir)\n", | |
"\n", | |
" normals = normals * mask\n", | |
" light_dir = light_dir * mask\n", | |
"\n", | |
" cosangle = normals.mul(light_dir).sum(-1)\n", | |
"\n", | |
" # color = cosangle.clamp(0)\n", | |
" # color1 = 1 - cosangle.clamp(0)\n", | |
"\n", | |
" color = cosangle.clamp(0.0, 1.0).cpu()\n", | |
" color1 = (1.0 - cosangle).clamp(0.0, 1.0).cpu()\n", | |
"\n", | |
" color = color.unsqueeze(-1).expand(H, W, 3).cpu()\n", | |
" color1 = color1.unsqueeze(-1).expand(H, W, 3).cpu()\n", | |
"\n", | |
" color = color.mul(255).to(torch.uint8).cpu()\n", | |
" color1 = color1.mul(255).to(torch.uint8).cpu()\n", | |
" \n", | |
" normals = normals.cpu()\n", | |
" cosangle = cosangle.cpu()\n", | |
" light_dir = light_dir.cpu()\n", | |
" dists = dists.cpu()\n", | |
" mask = mask.cpu()\n", | |
"\n", | |
"f, ((ax_rgb, axtmp), (ax_n, ax_light), (ax_dist, ax5)) = plt.subplots(3, 2, figsize=(10, 20))\n", | |
"\n", | |
"f.suptitle(\"A Lambertian sphere\")\n", | |
"\n", | |
"ax_rgb.imshow(color, cmap=\"Greys\")\n", | |
"ax_rgb.set_title(\"cosangle\")\n", | |
"\n", | |
"axtmp.imshow(color1, cmap=\"Greys\")\n", | |
"axtmp.set_title(\"max(0, 1-cosangle)\")\n", | |
"\n", | |
"ax_n.imshow(normals, cmap=\"viridis\")\n", | |
"ax_n.set_title(\"Surface normal\")\n", | |
"\n", | |
"ax_light.imshow(light_dir, cmap=\"viridis\")\n", | |
"ax_light.set_title(\"Light direction\")\n", | |
"\n", | |
"im = ax_dist.imshow(dists, cmap=\"viridis\")\n", | |
"ax_dist.set_title(\"distance lowerbound\")\n", | |
"\n", | |
"ax5.imshow(mask.squeeze(-1), cmap=\"viridis\")\n", | |
"ax5.set_title(\"convergence mask\")\n", | |
"\n", | |
"plt.tight_layout()\n", | |
"f.colorbar(im, ax=ax5)\n", | |
"f.savefig(\"sphere.jpg\", dpi=300)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "nerfs", | |
"language": "python", | |
"name": "nerfs" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment