Skip to content

Commit

Permalink
Deploy on Android
Browse files Browse the repository at this point in the history
  • Loading branch information
PENGUINLIONG committed Jul 16, 2022
1 parent 8a55248 commit 51fe232
Show file tree
Hide file tree
Showing 15 changed files with 221 additions and 30 deletions.
8 changes: 8 additions & 0 deletions Assets/Plugins/Android.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/Plugins/Android/libtaichi_c_api.so
Binary file not shown.
33 changes: 33 additions & 0 deletions Assets/Plugins/Android/libtaichi_c_api.so.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added Assets/Plugins/Android/libtaichi_unity.so
Binary file not shown.
33 changes: 33 additions & 0 deletions Assets/Plugins/Android/libtaichi_unity.so.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified Assets/Plugins/x86_64/taichi_c_api.dll
Binary file not shown.
Binary file modified Assets/Plugins/x86_64/taichi_unity.dll
Binary file not shown.
Binary file modified Assets/Resources/TaichiModules/fractal.cgraph.tcm
Binary file not shown.
Binary file modified Assets/Resources/TaichiModules/implicit_fem.cgraph.tcm
Binary file not shown.
2 changes: 1 addition & 1 deletion Assets/Scenes/FractalScene.unity
Original file line number Diff line number Diff line change
Expand Up @@ -408,4 +408,4 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 945d03c7a62c9544dae617637d565539, type: 3}
m_Name:
m_EditorClassIdentifier:
Module: {fileID: -8196383504532815311, guid: f2f8a2a9e413992468db996597fc59ef, type: 3}
Module: {fileID: -8196383504532815311, guid: 5d318811a7e71724f80ecc4a97516aa4, type: 3}
17 changes: 14 additions & 3 deletions Assets/Scripts/ImplicitFem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,23 @@ void Start() {
_Kernel_Init.LaunchAsync(x, v, f, ox, vertices);
_Kernel_GetMatrix.LaunchAsync(c2e, vertices);
}

if (SystemInfo.supportsGyroscope) {
Input.gyro.enabled = true;
}
}

void Update() {
float g_x = -(Input.mousePosition.x / Screen.width * 2.0f - 1.0f) * 9.8f;
float g_y = (Input.mousePosition.y / Screen.height * 2.0f - 1.0f) * 9.8f;
float g_z = 0.0f;
float g_x, g_y, g_z;
if (SystemInfo.supportsGyroscope) {
g_x = Vector3.Dot(Input.gyro.gravity, Vector3.left) * 9.8f;
g_y = Vector3.Dot(Input.gyro.gravity, Vector3.up) * 9.8f;
g_z = 0.0f;
} else {
g_x = -(Input.mousePosition.x / Screen.width * 2.0f - 1.0f) * 9.8f;
g_y = (Input.mousePosition.y / Screen.height * 2.0f - 1.0f) * 9.8f;
g_z = 0.0f;
}

const float DT = 7.5e-3f;

Expand Down
110 changes: 102 additions & 8 deletions ProjectSettings/ProjectSettings.asset
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ PlayerSettings:
AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0
AndroidEnableSustainedPerformanceMode: 0
defaultScreenOrientation: 4
defaultScreenOrientation: 0
targetDevice: 2
useOnDemandResources: 0
accelerometerFrequency: 60
Expand Down Expand Up @@ -146,14 +146,15 @@ PlayerSettings:
androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.1
applicationIdentifier:
Android: com.TaichiGraphics.TaichiUnityExample
Standalone: com.TaichiGraphics.Taichi-UnityExample
buildNumber:
Standalone: 0
iPhone: 0
tvOS: 0
overrideDefaultApplicationIdentifier: 0
AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 19
AndroidMinSdkVersion: 26
AndroidTargetSdkVersion: 0
AndroidPreferredInstallLocation: 1
aotOptions:
Expand Down Expand Up @@ -235,18 +236,18 @@ PlayerSettings:
useCustomBaseGradleTemplate: 0
useCustomGradlePropertiesTemplate: 0
useCustomProguardFile: 0
AndroidTargetArchitectures: 1
AndroidTargetArchitectures: 2
AndroidSplashScreenScale: 0
androidSplashScreen: {fileID: 0}
AndroidKeystoreName:
AndroidKeyaliasName:
AndroidKeystoreName: '{inproject}: Temp/user.keystore'
AndroidKeyaliasName: user
AndroidBuildApkPerCpuArchitecture: 0
AndroidTVCompatibility: 0
AndroidIsGame: 1
AndroidEnableTango: 0
androidEnableBanner: 1
androidUseLowAccuracyLocation: 0
androidUseCustomKeystore: 0
androidUseCustomKeystore: 1
m_AndroidBanners:
- width: 320
height: 180
Expand All @@ -258,7 +259,99 @@ PlayerSettings:
AndroidValidateAppBundleSize: 1
AndroidAppBundleSizeToValidate: 150
m_BuildTargetIcons: []
m_BuildTargetPlatformIcons: []
m_BuildTargetPlatformIcons:
- m_BuildTarget: Android
m_Icons:
- m_Textures: []
m_Width: 432
m_Height: 432
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 324
m_Height: 324
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 216
m_Height: 216
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 162
m_Height: 162
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 108
m_Height: 108
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 81
m_Height: 81
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 192
m_Height: 192
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 144
m_Height: 144
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 96
m_Height: 96
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 72
m_Height: 72
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 48
m_Height: 48
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 36
m_Height: 36
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 192
m_Height: 192
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 144
m_Height: 144
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 96
m_Height: 96
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 72
m_Height: 72
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 48
m_Height: 48
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 36
m_Height: 36
m_Kind: 1
m_SubKind:
m_BuildTargetBatching:
- m_BuildTarget: Standalone
m_StaticBatching: 1
Expand Down Expand Up @@ -586,7 +679,8 @@ PlayerSettings:
scriptingDefineSymbols: {}
additionalCompilerArguments: {}
platformArchitecture: {}
scriptingBackend: {}
scriptingBackend:
Android: 1
il2cppCompilerConfiguration: {}
managedStrippingLevel: {}
incrementalIl2cppBuild: {}
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,12 @@ This repository presents several demo scenes, each can be found in `Assets/Scene
- `ImplicitFem`: A physically-based soft-body simulation emitting vertex data on-the-flight.

Also note that the project can be built into Unity Player.

## Notes for Android

Note that some player settings are changed for Android

- Minimum version is changed to 26 (Android Oreo), which is the version the native libraries are compiled;
- Scripting backend is switched to IL2CPP;
- Library arch is set to `ARM64`, support for `ARMv7` is canceled;
- Default orientation is fixed portrait.
5 changes: 5 additions & 0 deletions imgui.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[Window][Debug##Default]
Pos=60,60
Size=400,400
Collapsed=0

34 changes: 16 additions & 18 deletions scripts/implicit_fem.cgraph.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import argparse
import os
import pathlib
import shutil

import numpy as np
import taichi as ti
Expand All @@ -12,7 +10,7 @@
args = parser.parse_args()

# TODO: asserts cuda or vulkan backend
ti.init(arch=ti.vulkan)
ti.init(arch=ti.vulkan, vk_api_version="1.0")

def get_rel_path(*segs):
return os.path.join("Assets/Resources/Data/ImplicitFem", *segs)
Expand Down Expand Up @@ -162,8 +160,8 @@ def get_matrix(c2e: ti.types.ndarray(field_dim=1), vertices: ti.types.ndarray(fi


@ti.kernel
def matmul_edge(ret: ti.types.ndarray(), vel: ti.types.ndarray(),
edges: ti.types.ndarray(), m: ti.types.ndarray(), hes_edge: ti.types.ndarray(), hes_vert: ti.types.ndarray()):
def matmul_edge(ret: ti.types.ndarray(field_dim=1), vel: ti.types.ndarray(field_dim=1),
edges: ti.types.ndarray(field_dim=1), m: ti.types.ndarray(field_dim=1), hes_edge: ti.types.ndarray(field_dim=1), hes_vert: ti.types.ndarray(field_dim=1)):
for i in ret:
ret[i] = vel[i] * m[i] + hes_vert[i] * vel[i]
for e in edges:
Expand All @@ -174,22 +172,22 @@ def matmul_edge(ret: ti.types.ndarray(), vel: ti.types.ndarray(),


@ti.kernel
def add(ans: ti.types.ndarray(), a: ti.types.ndarray(), k: ti.f32,
b: ti.types.ndarray()):
def add(ans: ti.types.ndarray(field_dim=1), a: ti.types.ndarray(field_dim=1), k: ti.f32,
b: ti.types.ndarray(field_dim=1)):
for i in ans:
ans[i] = a[i] + k * b[i]


@ti.kernel
def add_scalar_ndarray(ans: ti.types.ndarray(), a: ti.types.ndarray(),
k: ti.f32, scalar: ti.types.ndarray(),
b: ti.types.ndarray()):
def add_scalar_ndarray(ans: ti.types.ndarray(field_dim=1), a: ti.types.ndarray(field_dim=1),
k: ti.f32, scalar: ti.types.ndarray(field_dim=0),
b: ti.types.ndarray(field_dim=1)):
for i in ans:
ans[i] = a[i] + k * scalar[None] * b[i]


@ti.kernel
def dot2scalar(a: ti.types.ndarray(), b: ti.types.ndarray(), dot_ans: ti.types.ndarray()):
def dot2scalar(a: ti.types.ndarray(field_dim=1), b: ti.types.ndarray(field_dim=1), dot_ans: ti.types.ndarray(field_dim=0)):
dot_ans[None] = 0.0
for i in a:
dot_ans[None] += a[i].dot(b[i])
Expand All @@ -202,29 +200,29 @@ def get_b(v: ti.types.ndarray(field_dim=1), b: ti.types.ndarray(field_dim=1), f:


@ti.kernel
def ndarray_to_ndarray(ndarray: ti.types.ndarray(), other: ti.types.ndarray()):
def ndarray_to_ndarray(ndarray: ti.types.ndarray(field_dim=1), other: ti.types.ndarray(field_dim=1)):
for I in ti.grouped(ndarray):
ndarray[I] = other[I]


@ti.kernel
def fill_ndarray(ndarray: ti.types.ndarray(), val: ti.f32):
def fill_ndarray(ndarray: ti.types.ndarray(field_dim=1), val: ti.f32):
for I in ti.grouped(ndarray):
ndarray[I] = [val, val, val]


@ti.kernel
def init_r_2(dot_ans: ti.types.ndarray(), r_2_scalar: ti.types.ndarray()):
def init_r_2(dot_ans: ti.types.ndarray(field_dim=0), r_2_scalar: ti.types.ndarray(field_dim=0)):
r_2_scalar[None] = dot_ans[None]


@ti.kernel
def update_alpha(alpha_scalar: ti.types.ndarray(), dot_ans: ti.types.ndarray(), r_2_scalar: ti.types.ndarray()):
def update_alpha(alpha_scalar: ti.types.ndarray(field_dim=0), dot_ans: ti.types.ndarray(field_dim=0), r_2_scalar: ti.types.ndarray(field_dim=0)):
alpha_scalar[None] = r_2_scalar[None] / (dot_ans[None] + epsilon)


@ti.kernel
def update_beta_r_2(beta_scalar: ti.types.ndarray(), dot_ans: ti.types.ndarray(), r_2_scalar: ti.types.ndarray()):
def update_beta_r_2(beta_scalar: ti.types.ndarray(field_dim=0), dot_ans: ti.types.ndarray(field_dim=0), r_2_scalar: ti.types.ndarray(field_dim=0)):
beta_scalar[None] = dot_ans[None] / (r_2_scalar[None] + epsilon)
r_2_scalar[None] = dot_ans[None]

Expand Down Expand Up @@ -270,7 +268,7 @@ def init(x: ti.types.ndarray(field_dim=1), v: ti.types.ndarray(field_dim=1), f:


@ti.kernel
def floor_bound(x: ti.types.ndarray(), v: ti.types.ndarray()):
def floor_bound(x: ti.types.ndarray(field_dim=1), v: ti.types.ndarray(field_dim=1)):
bounds = ti.Vector([1, aspect_ratio, 1])
for u in x:
for i in ti.static(range(3)):
Expand Down Expand Up @@ -302,7 +300,7 @@ def run_aot():


@ti.kernel
def convert_to_field(x: ti.types.ndarray(), y: ti.template()):
def convert_to_field(x: ti.types.ndarray(field_dim=1), y: ti.template()):
for I in ti.grouped(x):
y[I] = x[I]

Expand Down

0 comments on commit 51fe232

Please sign in to comment.