From 1c5fd2791621fcd1c388cedf2a9bbeac67b5ccf4 Mon Sep 17 00:00:00 2001 From: Ryoichi Ando Date: Wed, 18 Dec 2024 12:43:54 +0900 Subject: [PATCH] add frictional example and hindsight --- README.md | 6 ++ articles/eigensys.md | 9 +- articles/hindsight.md | 25 ++++- asset/image/hindsight/tilt-eratta-text.png | Bin 0 -> 72670 bytes asset/image/hindsight/tilt-friction.png | Bin 0 -> 25207 bytes examples/friction.ipynb | 112 +++++++++++++++++++++ examples/frontend/_app_.py | 4 +- examples/frontend/_mesh_.py | 26 +++-- src/scene.rs | 4 +- 9 files changed, 169 insertions(+), 17 deletions(-) create mode 100644 asset/image/hindsight/tilt-eratta-text.png create mode 100644 asset/image/hindsight/tilt-friction.png create mode 100644 examples/friction.ipynb diff --git a/README.md b/README.md index bb42cbf..eb67fc1 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,12 @@ Published in [ACM Transactions on Graphics (TOG)](https://dl.acm.org/doi/abs/10. - 🔥 A modern NVIDIA GPU (Turing or newer). - 🐳 A Docker environment (see [below](#-getting-started)). +## 📝 Change History + +- (2024.12.18) Added a [frictional contact example](./examples/friction.ipynb): armadillo sliding on the slope [[Video]](https://drive.google.com/file/d/12WGdfDTFIwCT0UFGEZzfmQreM6WSSHet/view?usp=sharing). +- (2024.12.18) Added a [hindsight](./articles/hindsight.md) noting that the tilt angle was not $30^\circ$, but rather $26.57^\circ$. +- (2024.12.16) Removed thrust dependencies to fix runtime errors for the driver version `560.94` [[Issue Link]](https://github.com/st-tech/ppf-contact-solver/issues/1). + ## 🐍 How To Use Our frontend is accessible through a browser using our built-in JupyterLab interface (see this video [[Video]](https://drive.google.com/file/d/1n068Ai_hlfgapf2xkAutOHo3PkLpJXA4/view?usp=sharing)). All is set up when you open it for the first time. diff --git a/articles/eigensys.md b/articles/eigensys.md index cc6ecd1..373e0e4 100644 --- a/articles/eigensys.md +++ b/articles/eigensys.md @@ -15,7 +15,7 @@ Since the materials below are lengthy, we provide a summary of the final results - If the energy is expressed in terms of invariants, eigen-filtered force jacobian can be obtained in closed form by using only $\frac{\partial \Psi}{\partial I_k}$ and $\frac{\partial^2 \Psi}{\partial I_k^2}$, where $I_k$ are the Cauchy-Green invariants or those from Smith et al. [[1]](#1). -- Our eigen system is idential to the one by Smith et al. [[1]](#1). +- Our analysis can be used to re-derive exactly the same system from Smith et al. [[1]](#1). ## 📖 What's the Story? @@ -473,9 +473,9 @@ Similar to our 3D case, two vectors $[a_1, a_2]$, $[b_1, b_2]$ and their corresp Everything else is exactly the same as the 3D case presented above. We provide another Python code [[Code]](../eigsys/eigsys_2.py) to numerically verify this analysis. -## 🎓 Equivalence with Smith et al. [[1]](#1) +## 🎓 Re-Deriving Smith et al. [[1]](#1) -Our technique yields the same eigen system revealed by Smith et al. [[1]](#1). +Our technique can be used to arrive at the same eigen system revealed by Smith et al. [[1]](#1). We can confirm this by simply swapping the Cauchy-Green invariants with those of Smith et al. [[1]](#1) and substitute them into our eigenvalue expressions. This is simple enough to do manually, but I’ve written a SymPy code to help facilitate the task: @@ -497,6 +497,7 @@ display(ratsimp((E.diff(b) - E.diff(c)) / (b - c))) Now look at Equations (7.16 to 7.21) from [[B]](#B). The output is identical. +This can't be a coincidence. [B] Theodore Kim and David Eberle. 2022. Dynamic deformables: implementation and production practicalities (now with code!). In ACM SIGGRAPH 2022 Courses (SIGGRAPH '22). https://doi.org/10.1145/3532720.3535628 @@ -563,7 +564,7 @@ display(simplify(H3x3-A)) This prints zero! 😲 But if you tweak the way $A$ is computed a little bit, it gives non-zero expressions 🔢, so this must be correct ✅. This also confirms that their encoded matrix $A$ corresponds to $\frac{\partial^2 \Psi}{\partial \sigma^2}$. -Now we have proven that our eigen system is exactly the same as Smith et al. [[1]](#1). +Now we have proven that our eigen analysis can re-derive the same system as Smith et al. [[1]](#1). ## 🍱 Takeaway C/C++ ⚙️ and Rust 🦀 Codes diff --git a/articles/hindsight.md b/articles/hindsight.md index 121854f..0132a7f 100644 --- a/articles/hindsight.md +++ b/articles/hindsight.md @@ -10,7 +10,7 @@ In the paper we presented the following barrier as a quadratic energy counterpar \end{equation} ```
-equation +equation
However, soon after the publication, we realized that this was not the best counterpart since its curvature is a constant $\kappa / \hat{g}$. @@ -31,9 +31,11 @@ We show an example and discuss why. When the above new quadratic barrier is used, visual artifacts may emerge **when contacts are lightly touched** as shown in Figure A. +
snag artifacts **Figure A:** Domino scene. Noticeable snags occur when one domino pushes the next ones. +
### 🔄 The Sources of Artifacts @@ -50,6 +52,25 @@ This can be seen in Figure B. As a result, when $g \approx \hat{g}$ (that is, contacts are lightly touched), the conditioning of the system unnecessarily stiffens, leading to possible artifacts. +
graph -**Figure B:** Visualizing the transition of the magnitude of both our cubic barrier and a quadratic counterpart. \ No newline at end of file +**Figure B:** Visualizing the transition of the magnitude of both our cubic barrier and a quadratic counterpart. +
+ +### Tilted Slope (Section 5.8) + +In Section 5.8, we stated that the slope was tilted at an angle of $30^\circ$. + +
equation
+ +However, this was incorrect. +The actual tilt was set up such that gravity is split into two orthogonal components, with their ratio being 2:1, as shown in Figure C. + +
tilt divide + +Figure C: Actual tilt configuration used in the paper example. +
+ +That is, the actual tilt angle is approximately $26.57^\circ$. +We chose this setup because, in this way, the sliding object eventually stops its motion when $\mu > 0.5$ and keeps sliding if $\mu < 0.5$. diff --git a/asset/image/hindsight/tilt-eratta-text.png b/asset/image/hindsight/tilt-eratta-text.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7a9477b3a81710014512c060f84fae1799ba58 GIT binary patch literal 72670 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�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

    i0v$&W9kvFGC%1z8 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 IDf1!dfBIU%p#T5? literal 0 HcmV?d00001 diff --git a/examples/friction.ipynb b/examples/friction.ipynb new file mode 100644 index 0000000..5957287 --- /dev/null +++ b/examples/friction.ipynb @@ -0,0 +1,112 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "1845cfba-4cda-4917-905c-2991ada078b1", + "metadata": {}, + "outputs": [], + "source": [ + "from frontend import App\n", + "import numpy as np\n", + "\n", + "app = App(\"friction\", renew=True)\n", + "\n", + "V, F, T = app.mesh.preset(\"armadillo\").decimate(15000).tetrahedralize().normalize()\n", + "app.asset.add.tet(\"armadillo\", V, F, T)\n", + "\n", + "V, F = app.mesh.rectangle(res_x=33, width=15.0, height=3)\n", + "app.asset.add.tri(\"slope\", V, F)\n", + "\n", + "scene = app.scene.create(\"friction\")\n", + "armadillo = scene.add(\"armadillo\")\n", + "armadillo.rotate(180,\"y\").rotate(-90,\"x\").rotate(-30,\"z\").at(-5,3,0.1)\n", + "\n", + "deg = 180*np.arctan(0.5)/np.pi\n", + "scene.add(\"slope\").rotate(-90,\"x\").rotate(-deg,\"z\").pin()\n", + "\n", + "fixed = scene.build().report()\n", + "fixed.preview();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17242000-e3a2-456a-a718-02c1b90e6bd8", + "metadata": {}, + "outputs": [], + "source": [ + "param = app.session.param()\n", + "param.set(\"volume-poiss-rat\",0.49)\n", + "param.set(\"dt\",0.01).set(\"min-newton-steps\",32);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8910b401-1153-4744-9413-1987bddc05c0", + "metadata": {}, + "outputs": [], + "source": [ + "param.set(\"friction\",0.49).set(\"frames\",650);\n", + "session_049 = app.session.create(\"armadillo-friction-0.49\").init(fixed)\n", + "session_049.start(param).preview();\n", + "session_049.stream();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb40f3a8-8539-4b64-9b1d-aa13c3461461", + "metadata": {}, + "outputs": [], + "source": [ + "session_049.animate();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cbb5ebeb-2bb1-43a3-ab52-863ec39c4a05", + "metadata": {}, + "outputs": [], + "source": [ + "param.set(\"friction\",0.51).set(\"frames\",800);\n", + "session_051 = app.session.create(\"armadillo-friction-0.51\").init(fixed)\n", + "session_051.start(param).preview();\n", + "session_051.stream();" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d70cac9b-43b9-4355-9426-6953dea667dd", + "metadata": {}, + "outputs": [], + "source": [ + "session_051.animate();" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/frontend/_app_.py b/examples/frontend/_app_.py index 2923811..889174e 100644 --- a/examples/frontend/_app_.py +++ b/examples/frontend/_app_.py @@ -17,7 +17,9 @@ class App: def __init__(self, name: str, renew: bool = False, cache_dir: str = ""): self.extra = Extra() self._name = name - self._root = os.path.expanduser(os.path.join("~", ".local", "ppf-cts", name)) + self._root = os.path.expanduser( + os.path.join("~", ".local", "share", "ppf-cts", name) + ) self._path = os.path.join(self._root, "app.pickle") proj_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) if cache_dir: diff --git a/examples/frontend/_mesh_.py b/examples/frontend/_mesh_.py index 2437325..d92ac75 100644 --- a/examples/frontend/_mesh_.py +++ b/examples/frontend/_mesh_.py @@ -25,22 +25,27 @@ def box(self, width: float = 1, height: float = 1, depth: float = 1) -> "TriMesh o3d.geometry.TriangleMesh.create_box(width, height, depth) ) - def square(self, res: int = 32, size: float = 2) -> "TriMesh": - dx = size / (res - 1) - x = -size / 2 + dx * np.arange(res) - y = x + def rectangle( + self, res_x: int = 32, width: float = 2, height: float = 1 + ) -> "TriMesh": + ratio = height / width + res_y = int(res_x * ratio) + size_x, size_y = width, width * (res_y / res_x) + dx = min(size_x / (res_x - 1), size_y / (res_y - 1)) + x = -size_x / 2 + dx * np.arange(res_x) + y = -size_y / 2 + dx * np.arange(res_y) X, Y = np.meshgrid(x, y, indexing="ij") X_flat, Y_flat = X.flatten(), Y.flatten() Z_flat = np.full_like(X_flat, 0) vert = np.vstack((X_flat, Y_flat, Z_flat)).T - n_faces = 2 * (res - 1) ** 2 + n_faces = 2 * (res_x - 1) * (res_y - 1) tri = np.zeros((n_faces, 3), dtype=np.int32) tri_idx = 0 - for j in range(res - 1): - for i in range(res - 1): - v0 = j * res + i + for j in range(res_y - 1): + for i in range(res_x - 1): + v0 = i * res_y + j v1 = v0 + 1 - v2 = v0 + res + v2 = v0 + res_y v3 = v2 + 1 if (i % 2) == (j % 2): tri[tri_idx] = [v0, v1, v3] @@ -51,6 +56,9 @@ def square(self, res: int = 32, size: float = 2) -> "TriMesh": tri_idx += 2 return TriMesh.create(vert, tri, self._cache_dir) + def square(self, res: int = 32, size: float = 2) -> "TriMesh": + return self.rectangle(res, size, size) + def circle(self, n: int = 32, r: float = 1, ntri: int = 1024) -> "TriMesh": pts = [] for i in range(n): diff --git a/src/scene.rs b/src/scene.rs index aa5630f..979e7f7 100644 --- a/src/scene.rs +++ b/src/scene.rs @@ -284,6 +284,8 @@ impl Scene { let nx = read_f32(count, "nx"); let ny = read_f32(count, "ny"); let nz = read_f32(count, "nz"); + let mut normal = Vector3::new(nx, ny, nz); + normal.normalize_mut(); let position = read_mat_from_file::(&format!("{}/bin/wall-pos-{}.bin", args.path, i)) .expect("Failed to read pos_path"); @@ -292,7 +294,7 @@ impl Scene { assert_eq!(position.ncols(), n_keyframe as usize); assert_eq!(wall_timing.len(), n_keyframe); wall.push(InvisibleWall { - normal: Vector3::new(nx, ny, nz), + normal, position, timing: wall_timing, });