はじめに
Unityでのマテリアル解説記事だったりシェーダー解説記事でエラーが起きてないのにわざとマゼンタを使ってることをちょくちょく見かけるので何が悪いのか書きます。
もしもマゼンタを意図的に使うことが文化ならばこの記事は読まなくてもいいです。
シェーダー関係は勉強し始めてまだ1年なのでそういった文化を知らないだけかもしれないです。
マゼンタの何がダメなのか
Unityのマテリアルでマゼンタ色はエラーを表しています。
なのでエラーの色でオブジェクトが塗りつぶされているとエラーなのか正常なのかわからないです。
色をマゼンタに設定してるだけでエラーは何ひとつないです。
ですがたまにこんな人がいます。
- マゼンタ目立つし分かりやすくていいじゃん
『目立つし分かりやすくていいじゃん』了解です。
C#で実践してみましょうか。
using UnityEngine;
public class EnemyHP : MonoBehaviour
{
void Update()
{
Debug.LogError("敵のHP" + 5);
}
}
Debug.LogError()を使って分かりやすく敵のHPを見ます。
画面左下に赤く注意マークが出ててコンソール画面を見なくても敵のHPがわかります。
便利ですね!!!
目立たせたかったの理由一つでこれを許せますか?
エラーじゃないのにエラーが出て、直そうと思ったらただのログ表示だった。
嫌ですよね。Debug.Log()でいいじゃないかと
ならマテリアルでも同じです。
よくある例と解決策
- マテリアルの色の変更
- 機能紹介
- モック開発
マテリアルの色の変更
ここをクリックして色を選べば好きな色にできますよ
と書いてマゼンタ色を選ぶ記事
好きな色にできるなら赤や青でいいです。
わざわざマゼンタを選択する理由はないです。
マゼンタを選択してもいいのは
もし開発中にこの色(マゼンタ)になったらエラーが出てるということです。気を付けましょう。
とエラーを紹介するときです。
機能紹介
マテリアルのパラメーターを紹介する時、元の色をマゼンタにする
ノーマルマップの紹介ですがAlbedoの色をわざわざマゼンタにする必要はないです。
ここは普通に白色でいいです。
ノーマルマップを紹介する目的は達成してるからマゼンタのままでもよくない?
ノーマルマップの機能は正常だけれどほかの場所でエラーが起きてるのかもしれない
となるので止めた方がいいです。
そうはならんやろww pic.twitter.com/T6R6z562hH
— あやは401【シェーダー開発中】 (@ayaha__401) November 15, 2021
このように部分的にマゼンタになることがあるので止めておきましょう。
複数Passを使えばこのエラーを恐らく実現できます。
ノーマルマップとは変わりますがAlbedoがマゼンタの物体に緑色の光が照らされたら何色になるのかパッと思いつきますか?
マゼンタに対して何か機能が加わった場合に変化を直感的にイメージすることが困難なのでやめたほうがいいと思います。
モック開発
3Dピンボールゲームのモックアップ作成で四方の壁をマゼンタにしました。
これの悪い点は
- モック段階で壁のテクスチャを決めてないから分かりやすくマゼンタにしてる
- 壁のマテリアルでエラーが起きてる
のどちらなのかわからないです。
壁のテクスチャを決めてないから分かりやすくマゼンタにしてる
ならばマゼンタではなくて仮のテクスチャを入れておきましょう
一目で仮テクスチャなんだなとわかります。
壁のマテリアルでエラーが起きてる
純粋にシェーダーでエラーが起きてるなら直しましょう。
マテリアルがNoneだとマゼンタになります。チェックしましょう。
そうではなくてC#で動的にmeshを生成したりするとmeshにマテリアルが未割り当てでマゼンタになったりします。
仮のマテリアルを作って割り当てておきましょう。
まとめ
- パッと目に入ってわかりやすいからマゼンタに設定
- 具体的な色を決めてないから適当な色としてマゼンタ
は止めておきましょう。
エラーなのか正常なのかわからないです。
仮テクスチャを用意しましょう。