1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】ParticleSytemのCustomDataを使うときの処理をcgincにまとめる

Last updated at Posted at 2019-12-24

開発環境 : Unity2018.4.3f1

こちらの記事ではUnityのShaderでParticleSystemのCustomDataを利用するときの処理を共通化についてになります。
具体的にはテクスチャのUVスクロールをCustomDataで実現する場合になります。

cgincで共通のコードを定義

UnityのShaderを書く際に重複コードになりそうな処理をcgincにまとめておくことができます。
今回は次のようなコードを定義しました。

# ifndef My_PARTICLE_INCLUDED
# define My_PARTICLE_INCLUDED

// CustomDataのプロパティ設定
# define SET_CUSTOM_DATA_PROPERTY(name) uniform int name##U; \
        uniform int name##USwizzle; \
        uniform int name##V; \
        uniform int name##VSwizzle;
    
// 該当のCustomDataを取得    
# define GET_CUSTOM_DATA(name) half2(customData[name##U][name##USwizzle],customData[name##V][name##VSwizzle])

# endif

SET_CUSTOM_DATA_PROPERTY は4つプロパティを定義している箇所をまとめています。
GET_CUSTOM_DATAはプロパティで設定した値を使ってCustomDataから必要なパラメータを取得しています。

Shaderで利用する

プロパティ定義する

[HideInInspector]_MainU ("_mainucoord", int) = 2
[HideInInspector]_MainUSwizzle ("_mainuswizzle", int) = 0
[HideInInspector]_MainV ("_mainvcoord", int) = 2
[HideInInspector]_MainVSwizzle ("_mainvswizzle", int) = 0		

cgincをSubShaderのPassに定義します。

# include "my_Particle.cginc"

Passにプロパティを定義します。
ここで SET_CUSTOM_DATA_PROPERTYを使います。

SET_CUSTOM_DATA_PROPERTY(_Main);

UVスクロール

バーテックスShaderでの処理を次のようになります。
customData1とcustomData2はCustomDataのストリームです。

half4x4 customData = { v.customCoords1, v.customCoords2, half4(0,0,0,0), half4(0,0,0,0)};
half2 mainCustomCoord = GET_CUSTOM_DATA(_Main);
o.uv.xy = TRANSFORM_TEX(v.texcoords.xy,_MainTex) + mainCustomCoord;

最後に

cgincに定義をしておけば複数のShaderで使い回すことができますので、共通化して利用できそうな処理があればまとめておくと良いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?