頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


iOS用VRアプリのマネタイズ

App Storeで無料で試せるVRアプリはどうやってマネタイズしてるのかなと思ってたんだ。なんせVRゴーグルにiPhoneを入れちゃうとまともに広告なんて表示もできないしタップもできないし。
いろんなパターンがあったけどだいたいこんな感じか。

・有料でリリース
・アプリ起動時に動画広告を見せる
・無料版は有料版の宣伝
・別コンテンツを有料化(App内課金)
・普通に広告を貼る(なぜだ?!)
・広告一切なし(直接お金にはならない)

アプリ起動時はまだVRゴーグルにセットしてないから動画広告を表示するってのはアリかもしれないけど、、、どうなんだろ。普通に機能制限して解除に課金ってのはスムーズな気がするけどな。支払い手続きもVRゴーグルしたままでって期待するユーザーはいないだろうし。
スポンサーサイト






Macの日本語入力がもっさりしてたのを改善

すでにライブ変換はオフにしてたのにここの所なんだか日本語入力がもっさりしてるのが気になってたんだよね。
それでどうしたものかと思って色々やってて気付いたんだけどさ、、、
システム環境設定のキーボードの入力ソースってところに
「推測候補表示」ってのがあるんだ。これをオフにすると実にもっさり感はなくなる。いや、そりゃまあそうかもしれないけど、、、

キーボードの設定

ここでふとその上にある「ライブ変換」をオンにしてみたんだ(「推測候補表示」はオフ)。
そしたら全然もっさりしないでいい感じに変換していってくれるのよ!
あああ、ライブ変換なんてもっさりしすぎで使ってられねえよ!と思っていたのは誤解のようで推測候補表示の方に問題があったみたい。

そんなわけで、ここ最近はこの組み合わせで快適に書いております。こりゃいいわ〜


アプリ内でiPhoneの自動ロックを無効にする

自分で作ってるVRビューワっぽいアプリをVRゴーグル使って見てたら突然画面が真っ暗に。
ああそうか、iPhoneの自動ロックか。画面触らないからそうなるわな。

ということはアプリ内で自動ロックが働かないようにしておく必要があるわけで調べるとこういう記事が。

iOS - How to disable iPhone/iPad auto-lock while app is in foreground mode? - Stack Overflow

↑この通りUIApplicationのidleTimerDisabledってプロパティをいじったらいけました。


ヨーグルトメーカーで何回複製できる?

ヨーグルトファクトリー TKY-41R を買ってみた
↑先日ヨーグルトメーカーを買ったわけなんだけど、、、
最初は上記事にあるようにR-1を買ってきてそれを元にヨーグルトを作る(これを1回目とする)。
できたヨーグルトを食べ終わろうかってところで最後の100gをタネとしてまた作る。これが2回目として、以下同じように作ってきてたんだわ。

そしたら5回目で普段通り(約9時間)だと固まりが弱く延長して11時間ほどやったのにやっぱり固まり方がイマイチ。なんだかトルコアイスみたいにとろーんとしてる。牛乳とは違うんだけどヨーグルトとも違うみたいで家族からも「ヨーグルトの味がしない」と。

確認の意味を込めて6回目に挑戦したところ9時間やって固まったように見えたけど単に上部だけだったのか全体的にはほとんど牛乳だったわ。

最初から買ってきたタネのヨーグルトでどこまでいけるんだろうな?とは思ってたんだけど、今回は4回が限度ってことに。
案外少ないなあとは思うんだけど、ちゃんとヨーグルトにならないってのはわかりやすくていいといえばいいよね。これがヨーグルトになってはいるけどR-1とは全然違ってるとかじゃどこで新しく買ってくればいいかわからないもんね。

なお、今回は飲むタイプのR-1だったので今度は普通のヨーグルトのR-1で試そうかなと思ってます。







VRゴーグルのレンズに対する歪み補正

ジェットコースターアプリ

↑App Storeに並んでるVRアプリなどを見るとこんな感じで樽型に補正してたりする。これVRゴーグルのレンズに対する補正らしい。

レンズによる歪み

↑確かに真っ直ぐな線をレンズを通してみると少し凹んで見える。わかりにくい写真だけどねえ。
とりあえずこういうのに対して膨らますような補正をするもんらしい。

カメラ キャリブレーションとは - MATLAB & Simulink - MathWorks 日本

↑ここにレンズの補正に関する式があるので、それをMetalのシェーダーに実装してみた。
なお、ここでは半径方向の歪みに対してのみ処理を行うことにする(レンズと被写体は並行にあるだろうってことで)。

Metalのフラグメントシェーダーで単に相応の座標のテクスチャを表示するならこんな感じ(テクスチャ画像はtex2Dとしてもらって、テクスチャの座標はin.texCoordとしてもらってる)。
{
    constexpr sampler quad_sampler;
    half4 texcolor = tex2D.sample(quad_sampler, in.texCoord);
    float4 color = float4(texcolor.r,texcolor.g,texcolor.b, 1.0);
    
    return half4(color);
}

これを補正するようにして、、、
{
    float k1 = 0.040;
    float k2 = 0.004;
    
    float2 texCoord = in.texCoord;
    float texX = texCoord.x*2.0-1.0;//-1から1に変換
    float texY = texCoord.y*2.0-1.0;
    float r2 = pow(texX,2.0)+pow(texY,2.0);
    float kk = (1.0 + k1 * r2 + k2* pow(r2,2.0));
    float xx = texX * kk;
    float yy = texY * kk;
    float2 fCoord = float2((xx+1.0)/2.0 , (yy+1.0)/2.0);
    if ( (fCoord.x < 0.0)||(fCoord.x > 1.0)||(fCoord.y < 0.0)||(fCoord.y > 1.0) ) {
        return half4(0,0,0,1.0);
    }
    
    constexpr sampler quad_sampler;
    half4 texcolor = tex2D.sample(quad_sampler, fCoord);
    float4 color = float4(texcolor.r,texcolor.g,texcolor.b, 1.0);
    
    return half4(color);
}

テクスチャ画像の座標は0から1だけど、変換の中心はテクスチャ画像の中心なのでそこがゼロになるように修正して、補正して、さらに元に戻して得るべきテクスチャ画像の座標を得ている。画像の端っこの方は正しく表示されないためそこは黒を表示させてる。それからk3は考慮外。

歪み補整後

↑とりあえず樽型に歪み補正ができてる。

けど、だよ。
手持ちのVRゴーグルのレンズにあう歪み係数k1,k2を得るのはなかなか面倒。
そもそもVRゴーグルの種類によってこの係数が変わるならどうしようもないしなあ。
そう思うとこの補正、テキトウにやるしかないよな。うーん、もうしなくてもいいかって気もしてきたわ。




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.