🗂

URP環境で動作するビルトインのMobileシェーダまとめてみた

2022/06/19に公開

Mobileとは、モバイル向けに軽量化されたシェーダー
詳しくは公式ドキュメント

Particles/Additive

インスペクター以下である

ソースコードは以下である。

Mobile-Particle-Add.shader
Shader "Mobile/Particles/Additive" {
Properties {
    _MainTex ("Particle Texture", 2D) = "white" {}
}

Category {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" }
    Blend SrcAlpha One
    Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }

    BindChannels {
        Bind "Color", color
        Bind "Vertex", vertex
        Bind "TexCoord", texcoord
    }

    SubShader {
        Pass {
            SetTexture [_MainTex] {
                combine texture * primary
            }
        }
    }
}
}

ポイントは、
SrcAlpha Oneであること
ライティングに影響されないこと
フォグの影響を受けること

パーティクルの色を赤(アルファ値0.9)、Planeの色を緑色(アルファ値0.5)。
※フォグなし
(1,0,0) * 0.9 + (0,1,0) * 1 = (0.9,1,0)

Particles/Alpha Blended

インスペクター以下である

ソースコードは以下である。

Mobile-Particle-Alpha.shader
Shader "Mobile/Particles/Alpha Blended" {
Properties {
    _MainTex ("Particle Texture", 2D) = "white" {}
}

Category {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" }
    Blend SrcAlpha OneMinusSrcAlpha
    Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }

    BindChannels {
        Bind "Color", color
        Bind "Vertex", vertex
        Bind "TexCoord", texcoord
    }

    SubShader {
        Pass {
            SetTexture [_MainTex] {
                combine texture * primary
            }
        }
    }
}
}

ポイントは、
SrcAlpha OneMinusSrcAlphaであること
ライティングに影響されないこと
フォグの影響を受けること

パーティクルの色を赤(アルファ値0.4)、Planeの色を緑色(アルファ値1)。
※フォグなし
(1,0,0) * 0.4 + (0,1,0) * (1-0.4) = (0.4,0,0) + (0,0.6,0) = (0.4,0.6,0)

Particles/Multiply

インスペクター以下である

ソースコードは以下である。

Mobile-Particle-Multiply.shader
Shader "Mobile/Particles/Multiply" {
Properties {
    _MainTex ("Particle Texture", 2D) = "white" {}
}

Category {
    Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" }
    Blend Zero SrcColor
    Cull Off Lighting Off ZWrite Off Fog { Color (1,1,1,1) }

    BindChannels {
        Bind "Color", color
        Bind "Vertex", vertex
        Bind "TexCoord", texcoord
    }

    SubShader {
        Pass {
            SetTexture [_MainTex] {
                combine texture * primary
            }
            SetTexture [_MainTex] {
                constantColor (1,1,1,1)
                combine previous lerp (previous) constant
            }
        }
    }
}
}

ポイントは、
Zero SrcColorであること
ライティングに影響されないこと
フォグの影響を受けること

パーティクルの色を赤(アルファ値1)、Planeの色を緑色(アルファ値1)。
※フォグなし
(1,0,0) * 0 + (0,1,0) * (1,0,0) = (0,0,0)

ちなみに、Particles/MultiplyでFogを適用すると、アルファ抜きされているテクチャの箇所もフォグの色が反映されている

Particles/Multiply

Particles/Additive

Skybox

インスペクター以下である

ソースコードは以下である。

Mobile-Skybox.shader
Shader "Mobile/Skybox" {
Properties {
    _FrontTex ("Front (+Z)", 2D) = "white" {}
    _BackTex ("Back (-Z)", 2D) = "white" {}
    _LeftTex ("Left (+X)", 2D) = "white" {}
    _RightTex ("Right (-X)", 2D) = "white" {}
    _UpTex ("Up (+Y)", 2D) = "white" {}
    _DownTex ("Down (-Y)", 2D) = "white" {}
}

SubShader {
    Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" }
    Cull Off ZWrite Off Fog { Mode Off }
    Pass {
        SetTexture [_FrontTex] { combine texture }
    }
    Pass {
        SetTexture [_BackTex]  { combine texture }
    }
    Pass {
        SetTexture [_LeftTex]  { combine texture }
    }
    Pass {
        SetTexture [_RightTex] { combine texture }
    }
    Pass {
        SetTexture [_UpTex]    { combine texture }
    }
    Pass {
        SetTexture [_DownTex]  { combine texture }
    }
}
}

6枚のテクスチャーをセットしてSkyboxを作成し、SkyboxMaterialにアタッチ
のちほど記事で執筆するCubemap方式のよりも設定できる項目が少なく、テクスチャを一々セットするのが面倒なSkybox

具体的なテクスチャ設定など下記を参照
https://qiita.com/SF_yoshida/items/c428a668e57207cefea4

参考

https://booth.pm/ja/items/931290
https://s-games.booth.pm/items/660001

Discussion