Misagon News

アプリやガジェットについて解説します!!

snowのフェイスフィルターのスパイダーマンバージョンを作りたいpart2


スポンサードリンク

皆さんこんにちは🌞こんばんは🌇

Misagonです‼️

フェイスフィルタースパイダーマンバージョンを考えてから随分と日が開いてしまいましたが、忘れていたわけではありません😑

 

試行錯誤の結果、スパイダーマンのフェイスフィルターを作ることに成功しました‼️

まずは見てましょう‼️ジャカジャン🎊

 

f:id:gon339:20190326192448j:image

 

なかなかのクオリティですね‼️

合成してるわけじゃないですからね💦

 

それでは早速手順を記載していきます。

 

 

①ARKit2.0 for Unityをダウンロード

ダウンロード後、解凍してUnityにドラッグアンドドロップしてください。

iosのバージョン確認もしてね

bitbucket.org

 

②Spidermanの3Dモデルを入手 (Sketcfhabに登録必要※無料です)

sketchfab.com

 

③Spidermanの3Dモデルを編集して頭だけにする

ダウンロードしたものはモデルがカクカクしているのでBlenderで重複頂点を削除したり、表面を滑らかにしたりと編集します。(Blenderのサイトなどで調べてね)

f:id:gon339:20190331172500p:plain

 

 

④Unityに編集したSpidermanのモデルをインポート

f:id:gon339:20190331173136p:plain

⑤各種設定

ARKit2.0とSpidermanのモデルをインポートしたらあと少しです。

まず、UnityARKitPlugin>Examples>FaceTrackingの階層を開いてその中にある

FaceAnchorSceneを開きます。

 

f:id:gon339:20190331173536p:plain

 

するとヒエラルキービューに

CameraParent

ARFaceAnchorManager

ARCameraTracker

AxesPrefab

Directional light

が表示されます。(上画像参照)

 

AxesPrefabは削除か非表示にして構いません。

 

ARFaceAnchorManagerを選択すると、右側のインスペクタービューに

f:id:gon339:20190331174425p:plain

このように表示されます。このAnchor Prefabと書いているところに

インポートしたSpidermanのモデルを指定します。(以下参照)

f:id:gon339:20190331174926p:plain

 

これで顔を認識した時に表示されるオブジェクトの準備ができました。

 

次にFaceTrackingの使用を許可する必要があるので

UnityARKitPlugin>Resources>UnityARKitPlugin>ARKitSettingを選択し

f:id:gon339:20190331175524p:plain

 

AR Kit Uses Facetracking

App Requires AR Kit

の有効にチェックを入れます。

 

これでシーンを保存してビルドします。(プラットフォームをiosに切り替えてね)

 

⑥シャッターボタンの追加

スクリーンショットをカメラロールに保存するための設定をします。

Assetフォルダの下にPluginフォルダを作成しその中にiOSフォルダを作成します。

iOSフォルダの中にScreenShot.mmというファイルを作成します。(Xcodeで.mmファイルを作成できます。)

作成したファイルに次のプログラムを上書きします。

 

---------------------------------------------------------------------------------

#import <Foundation/Foundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import <AVFoundation/AVFoundation.h>

extern "C" void SaveToAlbum (const char* path)
{
UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithUTF8String:path]];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
NSMutableDictionary *metadata = [[NSMutableDictionary alloc] init];
[library writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {}];
}

--------------------------------------------------------------------------

 

ボタンを押したらスクリーンショットを撮るスクリプトはこちら※.cs

using System.Collections;
using UnityEngine;
using System.IO;
using System.Runtime.InteropServices;

public class ScreenShot : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void SaveToAlbum(string path);

IEnumerator SaveToCameraroll(string path)
{
// ファイルが生成されるまで待つ
while(true)
{
if(File.Exists(path))
break;
yield return null;
}

SaveToAlbum(path);
}

void Update()
{
if(Input.GetMouseButtonDown(0))
{
#if UNITY_EDITOR
#else
string filename = "test.png";
string path = Application.persistentDataPath + "/" + filename;

// 以前のスクリーンショットを削除する
File.Delete(path);

// スクリーンショットを撮影する
ScreenCapture.CaptureScreenshot(filename);

// カメラロールに保存する
StartCoroutine(SaveToCameraroll(path));
#endif
}
}

Xcodeでアプリをインストールします。

シャッターボタンを追加した場合

info.plistを選択し

右クリックでAdd Rowで以下を追加します。(追加しないとカメラで写真を取った時にアプリがクラッシュします。)

Privacy - Photo Library Additions Usage Description

 

⑧完成

 

f:id:gon339:20190331185736p:plain

 

 

 

という流れでした!これでみんなもスパイダーマン!!