ウーパの手習い

私的開発メモ用途なのでご容赦ください。2020年現在はSwiftとUnityでARのお勉強中。

SwiftUI上にARKitコンテンツを表示

SwiftUIのビュー上に、MapKitのような従来からのUIViewサブクラスを配置する場合は、UIViewRepresentableを使えば良いと、Apple Developer Documentationでも解説されています。

ARを表示させるためのARSCNViewもUIViewのサブクラスなので、同じ実装で実現できました。 なお、AppleのARではお馴染みの飛行機モデルを3行で表示させている記述部分は、実践ARKit | 本 | iOS | Swift - shu223 - BOOTHの冒頭で解説されています。

import SwiftUI
import ARKit

// 何箇所かあるARViewというのは私が命名した任意の名前です
struct ARView: UIViewRepresentable {
    typealias UIViewType = ARSCNView
    
    func makeUIView(context: Context) -> ARSCNView {
        return ARSCNView(frame: .zero)
    }
    func updateUIView(_ uiView: ARSCNView, context: Context) {
        
        uiView.scene = SCNScene(named: "art.scnassets/ship.scn")!

        let configuration = ARWorldTrackingConfiguration()
        
        uiView.session.run(configuration)
    }    
}

struct ARView_Preview: PreviewProvider {
    static var previews: some View {
        ARView()
    }
}

このAR SCNViewを表示させたいSwiftUIビュー側は、例えば

import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            ARView()
                .frame(height: 500)
            Text("Hello ARKit")
                .padding()
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

みたいな感じで配置表示できました。 両方のファイルにプレビュー用のコードを書いており、Mac上でそれぞれキャンバスプレビューもできました。ただしビデオは表示されるわけではなく、白い背景に飛行機のモデルが正面向きにレイアウトされているプレビューになります。

なぜこんなことをするかというと、ARKitと、画面遷移やレイアウトやマルチプラットフォームが簡単に実現できるSwiftUIとを組み合わせることができれば、スピーディーなARコンテンツ開発手法として実用的なのではと思うのです。

ハイポリをローポリNormalMapに適応させる時のBlender作業

f:id:uuupacom:20181223122827p:plain

Substance Painter では、ローポリモデルを開いて、ベイク時にハイポリモデルを指定することで、ハイポリの凹凸(例:エッジの面取り等)をローポリのNormalマップにベイクしてくれて、ローポリだけどハイポリのように見せることができる。
Blenderでハイポリとローポリをモデリングする場合、どういう状態のFBXファイルをBlenderから書き出せばいいかについてまとめておきます。

続きを読む

Vケット2用ブース制作について雑感

一番大事なのは出品するアイテムのクオリティだというのは重々承知の上、ブース製作において、店構えといったデザイン観点、サイズ軽量化や負荷軽減といった実装観点からの留意点を書いておきたいと思います。

現状未着手状態の私の個人的な考え、また、私の浅いスキルレベル目線からのポイントを書きますので、間違い等ありましたらTwitterでご教授いただければ嬉しいです。 

続きを読む

裏地を作った時、UVは表地と共有しないほうがいいかも

f:id:uuupacom:20181216115144p:plain

上の画像のシャツの後ろの裾、少し暗いと思いませんか?
これは後ろの裾だけ、裏地を作成し、表地と同じUVを割り当てているのが原因です。(UVの共有)

続きを読む

VRChatSDK: VRCVideoPlayer, VRCVideoStreamの挙動

一時停止・再生再開の挙動

VRCVideoPlayer(オーナー)

A)Testビルド時:一時停止→一時停止再度押し〇(止めた場所から再生再開)
B)Publishビルド時:一時停止→一時停止再度押し〇
C)Public公開後:

VRCVideoStream(オーナー)

D)Testビルド時:一時停止→一時停止再度押し×(最初から再生される)
E)Publishビルド時:一時停止→一時停止再度押し〇
F)Public公開後:

VRCVideoPlayer(オーナー以外)
G)Publishビルド時:一時停止→一時停止再度押し〇
H)Public公開後:

VRCVideoStream(オーナー以外)
I)Publishビルド時:一時停止→一時停止再度押し△(最初から再生される時もあったり、止めた場所から再生されることもあり、良く分からない
J)Public公開後:

A,B,E,Gの時、Testビルド時&Publishビルド時は、一時停止ボタンを押して一時停止、もう一度一時停止ボタンを押すことでその場所から再生が再開される。なので、一時停止ボタンには「Pause/Resume」と記載するのが良さそう。一方、一時停止中に、再生ボタンを押すと最初から再生されてしまう。

なお、全てトリガーボタンは AlwaysBufferOne に設定している。

途中入室時の同期

オーナーが動画を再生している時に、他のユーザーが入室してきた時、他のユーザーにはどう表示されるかについて。
・VRCVideoPlayer, VRCVideoStreamとも、入室直後数秒は白スクリーンが表示されることもあるが、3秒も待てば同期された状態で映像が再生される。

オーナーが一時停止して、他のユーザーが再開させるという操作でもビデオは期待通りに同期できた。
※(I)の△の結果があるので、何度もテストしないといけないかもしれないが。

自動再生について

VRCVideoPlayerコンポーネントはVideoPlayerコンポーネントに依存しているが、VideoPlayerコンポーネントのPlay On Awakeは効かないようで、オーナー入室時にはビデオが自動再生される。改修するとすれば、トリガーで表示/非表示を切り替えるスイッチを作るべきなのかもしれない。
一方、VRCVideoStreamコンポーネントは、それ自身にAutoStartトグルがあるので、オフにしておけば入室時は白スクリーン状態で待機できる

確認したいこと

VRCVideoStreamはその名の通りYouTubeライブ等のストリーミング映像の同期再生ができるコンポーネントだけど、通常のYouTube動画再生にも積極的に活用していいのかよく分からない。VRCVideoPlayerよりパフォーマンスが向上しているのか等は体感では分からない。

低負荷のVRChat用アバターを模索中

f:id:uuupacom:20180814134548p:plain

VRChat用の自作アバターを製作しています。人が大勢集まるワールドを考慮してのお作法として、できるだけ低負荷のアバターが良いようです。
そのため一般的には、漫画調のトゥーンシェーディングを採用して、テクスチャ枚数や解像度、低負荷シェーダーを使うのが主流ですが、私が作ろうとしているのは上の画像のように、フィギュア人形調の質感があるアバターを作ろうとしています。

続きを読む

ATL広尾バーチャル勉強会について

f:id:uuupacom:20181217120026p:plain

ATL広尾バーチャル勉強会とは

VRChat内にある「ATL HIROO」ワールドにて、VR空間上にスライドを表示させて、発表者(※)が喋る形式のバーチャル勉強会です。

発表内容は、BlenderでのモデリングやUnity開発、マテリアル作成についてのTips等、VRChat開発と関連した内容が多いです。

VR空間上での勉強会なので、家から手軽に参加できます。また、発表内容動画は事前に公開しますので、発表内容に興味ある場合のみ参加することができます。

VRChatの良さを活かし、発表中も参加者様から補足や訂正のコメントをいただく雰囲気で、発表内容を話のネタに、皆で談義するという場になっています。

※現在、発表者はVR開発経験浅めの私だけですので、内容としては初学者向けかもしれません。事前に発表スライドをご確認ください。

開催日時

毎月数回、不定期に開催しています。いまのところ夜11時近辺の開催が多いです。
開催告知等は、イベント開催当日に、私のTwitterアカウントでのみ行いますので、もしご興味持っていただけましたらお手数ですが Twitter:@UUUPACOM をフォローしてください。
※私のTwitterフォロワー数は少ないので、開催告知ツイートを皆様のRTでご拡散いただけると大変嬉しいです

参加方法

  1. VRChat ID: UUUPAと未だフレンドでない人は)開催時刻より前にフレンド申請しておいてください
  2. 開催時間10分前ぐらいになりましたら、VRChatにログインしておいてください
  3. 開催時間10~5分前に、私(UUUPA)が、その時点でオンラインになっているフレンドの皆様に、ATL HIROOワールドへの招待(Invite)をお送りします
  4. ご参加の意思がある人は、招待を受けて、ATL広尾ワールドに入室してください

※開催時刻前に、参加者様の方からのJoinや入室リクエストをいただいても大丈夫です。開催時刻以降は、私が発表をしていることもあり、リクエストを見逃す可能性がありますのでご留意ください。

※結果的に、過去にフレンドになってくださった人には、毎回招待(Invite)が届くことになります。それがVRChatの作法的に失礼にあたるのかが私まだ分かっていないため、しばらくはこの運用を予定しております。参加に興味がない場合は、お手数ですが招待を無視していただくか、イベント後にフレンドを解除していただく等にてご対応お願いいたします。

これまでの発表内容(下が最新)

  1. ATL広尾ワールドの概要と、VRChat・Substanceツール・Unity・ATL広尾にまつわる4拓クイズ(スライド資料
  2. VRChatワールド作成のライティングについて(スライド資料
  3. 憧れの自作PCスライド資料
  4. バンプマッピングについて(スライド資料
  5. 自作アバターを作りたい(スライド資料
  6. 自作アバターを作りたい2:身体と髪型(スライド資料
  7. SubstancePainterで女性アバターを可愛くしたい(動画資料
  8. VRChatワールド作成(動画資料
  9. 第8回と第7回を一挙発表
  10. 購入モデルの利用&DynamicBone導入(動画資料
  11. 私のお気に入りのサブスクリプション契約サービス紹介(紹介サービスリスト
  12. テクスチャ1枚で低負荷アバターを作る(動画資料
  13. Blender & Unity の画面UIのTips集(動画資料
  14. Blenderモデリング小ネタ集(動画資料
  15. SubstancePainter基礎/BlenderとUnity/VRCワールド制作(動画資料New!2/28(木)開催

過去の発表等のアーカイブ配信は現在しておりませんので、少しでもご興味持っていただけましたらイベント当日にお気軽にご参加ください。

f:id:uuupacom:20180920095119p:plain

VR機器が無くてもVRChatはプレイ可能ですので、マイクやVR機材が無い皆様のご参加も絶賛お待ちしています。

 

その他、古い記事ですが補足情報としてご関心ありましたら以下リンクをご覧ください

uuupa.hatenablog.com