AR上にShaderを動かしてみた


本記事はUnity Advent Calendar 2018の9日目の記事です。

半年前ぐらいにこんなものを作りましたが、ちょっとするとShaderがジャギってくるので解決できないか調査してみました。


環境

作った経緯

いろんなサイトを参考に初歩的なところを抑えながらShaderのソースコードを書いていました。

Shader "Custom/MyShader" {

    Properties
    {
        _MainTex("MainTex", 2D) = "white"{}
    }

    SubShader
    {
        Pass
        {
            CGPROGRAM

            #pragma vertex vert_img
            #pragma fragment wave_circle_frag

            ENDCG
        }
    }    

    CGINCLUDE
    #include "UnityCG.cginc"

    float4 wave_circle_frag(v2f_img i) : SV_Target
    {
        float2 st = i.uv;
        float distort = st * (1.0 + 0.1 * sin(st.x * 5.0 + _Time.z) + sin(st.y * 3.0 + _Time.z));

        return step(
            0.5,
            abs(sin(distance(float2(0.5, 0.5), distort) * 30))
        );
    }

    ENDCG
}

試しにGPUを使って解決できないか試してみた

などを参考にInstancingを付けて動作させてみたところ全く状況変わらずでした。

となると、単純に計算のずれから起きているものだと思ったので、他ShaderをAR上で動かそうと考えました。

他のShaderを使ってAR上で動作

の資料を参考に一部のShaderを書いて動作してみたところ、以下のようにキレイに動作することを確認しました。

まとめ

まだまだShader勉強中なので、作りたいものを普通に作れるぐらい習得したいなと。
また最初の方から、パフォーマンスを意識した作りをできるようなれるように楽しんで覚えていきますー!
\\\٩( 'ω' )و ////

また今回、Advent Calendarの記事でアップしましたが遅れてしまい失礼しましたm(_ _)m

FirebaseとUnityに関するネタで前編後編をUnity Advent Calendar 2018Firebase Advent Calendar 2018で投稿しようと考えていたり、Unity2018の最新でLINQはパフォーマンス的に使えるのかなども書こうか迷ってしまい、寝かせていた半年前ぐらいにAR上でShaderを動かしたプロジェクトのジャギっている問題を調査・解決するネタで書こうと思い、上記のようなことで遅れてしまっての投稿となってしまいました。。。笑汗

他にもAR上にShaderを動かすネタでやりたいことが1~2個あるんで、また何か試して来年どっかでアップしようと思いますー( ✌︎'ω')✌︎