はじめに
XOR演算を利用して、市松模様を作る方法を紹介します。
今回はワールド座標のX,Z成分から市松模様を作ります。
目次
環境
Unity2020.2.0f1
Universal RP 10.2.2
市松模様の作り方
タテ方向、ヨコ方向のシマシマを作ります。
二つのシマシマに関してXORを適用すると、市松模様が作れます
XORについて
xor(a,b)は以下のような値を取ります。
a | b | xor(a,b) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
シェーダーグラフ実装
シマシマを作る
以下のようなシェーダーグラフを組みます。
結果
これを板ポリゴンに貼り付けると、以下のようになります。
色のX成分、Z成分はそれぞれ以下のようになっています。
次にXORを利用して市松模様を作ります。
ShaderGraphにXOR演算は無い
ShaderGraphにはXOR演算は用意されておらず、自分で作る必要があります。 今回はXORの実装方法を3つ紹介します。
方法1 : Abs を利用したXOR
1つ目の方法はAbsを利用したXORの実装です。
abs(a-b)
X成分(横シマ)からZ成分(縦シマ)を減算すると、以下のようになります。
減算結果にAbs(絶対値)を取ると、0,1が交互に並びます。
シェーダーグラフで実装すると以下のようになります。
方法2 : X・(1 - Z) + (1 - X)・Z
以下の計算式でXORを作ることができます。
x * (1 - z) + (1 - x) * z
方法3 : Moduloを利用したXOR
3つ目の方法は、Moduloを使ったXORの実装です
fmod(a+b, 2.0)
X成分とZ成分を足し合わせると、以下のようになります。
2で割った余りを計算すると0と1が交互に並びます。
シェーダーグラフで実装すると、以下のようになります。