おもちゃラボ

Unityで遊びを作っていきます

シェーダ

【Unityシェーダ入門】コントラストを調節できるポストエフェクトを作る

今回はゲーム画面のコントラストを調節するポストエフェクトの作り方を紹介します。Photoshopなどでは、スライダを動かすだけでコントラストを調整できますね。この機能をUnityのシェーダで作ってみましょう。今回の記事の内容は次のとおりです。 コントラス…

【Unityシェーダ入門】スパイクノイズを作る

スパイクノイズは、ブランドロゴのイントロとかでよく使われる感じのエフェクトです。といっても伝わりにくいので↓のような感じのものを作ります。スパイクノイズという言葉はもともとは電子回路の言葉で、スイッチをオン・オフしたときに生じるパルスノイズ…

【Unityシェーダ入門】ポリゴンをポイント(点)で表現する

Unityで3Dモデルを普通に描画するとポリゴンが表示されます。ここではポリゴンの頂点だけをポイントで表示する方法を紹介します。頂点の表示方法を変えるだけなら、なんと2行のスクリプトだけですみます。それぞれの頂点に異なる色をつける場合はシェーダを…

【Unityシェーダ】オブジェクトが重なった部分をくり抜く

特定のオブジェクトと重なった部分を透明にくり抜くシェーダを紹介します。このシェーダを使えば、次のように、好きな形で別のオブジェクトをくり抜くことができます。 オブジェクトの形にくり抜くためには 今回のシェーダの原理は非常に簡単です。まずは抜…

【Unityシェーダ入門】画面をセピア色にするポストエフェクトを作る

今回はスクリーンをセピア調にするポストエフェクトシェーダを作ります。ちなみに・・・Wikipediaによるとセピアとはイカスミのことらしいです。 セピア(sepia)とは、イカ墨のこと。また、イカ墨由来の黒褐色をも意味する。かつてモノクロ写真などにこの色の…

【Unityシェーダ入門】ステンシルバッファを使って隠れた部分を描く

プレイヤがゲームステージに配置されている障害物などの後ろ側に回り込むと、見えなくて操作しづらくなってしまいます。そこで、障害物によって隠れた部分は影だけ描いたりします。この記事では、Unityで隠れた部分を影で描画する方法を紹介します。今回の記…

【Unity】シェーダを使って世界に雪を降らせよう

季節はどんどん夏に向かっていっていますが・・・今回はシェーダを使ってUnityで雪を降らせる方法を紹介したいと思います。 雪を積もらせるアルゴリズム 深さのある雪を積もらせる場合は色々と計算が大変ですが、表面に薄っすらと積もらせるだけであれば、テ…

【Unity】Dissolve(溶けるような)シェーダをつくる

Dissolveってなんのこっちゃら?と思って辞書を調べてみたら・・・ Dissolve : 分解する、分解させる、溶かす、解消する だそうです!Dissolveシェーダ自体は分解というよりも侵食に近い感じがしますが、ジワーっと消えていくタイプのアニメーションのこと…

【Unityシェーダ入門】シェーダで旗や水面をなびかせる

ゲーム中で、旗や水面は静止していることはあまりなく、風にあおられてなびいていることが多いですね。リアルになびかせようとすると、シミュレーションやボーンアニメーションをする必要があります。この記事ではUnityの頂点シェーダを使ってお手軽に旗や波…

【Unityシェーダ入門】頂点カラーを表示するシェーダを作る

3Dモデルの表現には通常テクスチャを使いますが、3Dモデルの頂点ごとに色を設定したモデルを使用することもできます。こちらの動画で使われているモデルは、テクスチャを使わずすべて頂点カラーで表現されています。たぶん、世界観に統一感をもたせるためのD…

【Unityシェーダ入門】トゥーンシェーダを自作してみる

Unityではフォトリアルな映像を作るのは簡単ですが、風ノ旅ビトやGravity dazeなどの独自にデフォルメされた映像を作るためにはシェーダを使う必要があります。その中でアニメ風の映像を作るためには、トゥーンシェーダ(Toon Shader)を使います。Unityには…

【Unityシェーダ】テクスチャの両面を描画する方法

Planeオブジェクトにテクスチャを貼り付けると、両面が描画されるのではなく裏面は透明になってしまいます。片面だけが描画されてしまうのは、カリングと呼ばれる「見えないところは描画しない設定」が原因です。カリングをオフにして両面を表示するためには…

【Unityシェーダ入門】暗闇から光が溢れ出るライトブルームの演出をする

室内から外を眺めたときや、トンネルから出るとき、イルミネーションなど、暗い場所から明るい場所を眺めるときに、光が溢れ出るような映像がよく使われます。この光のあふれるエフェクトをライトブルーム(Light Bloom)と呼びます。Unityでは標準機能を使…

【Unityシェーダ入門】粘性のある液体をシェーダで作る

瓶に入った、粘性の高い液体をUnityで表現してみます。RPGの回復系液体ドリンク・・・・とはちょっと違いますね。笑今回はいちからUnityでシェーダを書くのではなく、ShaderToyで紹介されているシェーダを利用して液体を作ってみました。 ShaderToyを利用する…

【Unityシェーダ入門】フラットシェーディングでローポリっぽく見せる

シェーディングの方法は大きく分けると、次の二つの方法があります。 スムースシェーディング フラットシェーディング スムースシェーディングは少ないポリゴン数でも、表面がなめらかに見えるように法線情報を補間して表示する方法です。一方フラットシェー…

【Unityシェーダ入門】シェーダで作るノイズ5種盛り

ノイズといえば、砂嵐のようなランダムノイズから連続性を保ったパーリンノイズまで様々なノイズが考えられています。残念なことにUnityのシェーダにはノイズを生成するメソッドが用意されていないため、プログラムを作る必要があります。 この記事では、Uni…

【Unityシェーダ入門】シェーダでワイプエフェクトを作る

昔のマリオやペルソナ5でも使われている、だんだん視界が狭くなるワイプエフェクトをUnityのシェーダで作ってみます。このエフェクト、ワイプエフェクトとかアイリスエフェクトとか、色々な呼ばれ方をしているようで正式名称がわかりませんが、下のようなや…

【Unityシェーダ入門】Unityのポストエフェクトでモノクロ画面を作る

ポストエフェクトとは、カメラに映ったゲームシーンを一枚の画像として加工する処理のことです。UnityにはStandard Assetとして次のようなエフェクトが用意されています。qiita.com今回は画面を白黒にするモノクロのエフェクトを作りながらポストエフェクト…

【Unityシェーダ入門】円やリングをかっこよく動かす方法

Terrainの青いカーソルやシューティングゲームの着弾地点など、後からオブジェクトに幾何図形を描きたい時に使えるシェーダを紹介します。今回の記事の内容は次のようになります。 下準備をする 円を書いてみる リングを描いてみる リングをいっぱい描く リ…

【OpenGLでゲームを作る】シェーダって何?GLSLへの第一歩

前回はダブルバッファリングとFPSについて説明しました。nn-hokuson.hatenablog.comそろそろ画面に図形の1つでも表示したいところですが、OpenGLのプログラムだけでは画面に絵を出すことはできません。絵を出すにはシェーダを書く必要があります。そこで、…

【Unityシェーダ入門】フォン鏡面反射で金属っぽくしてみる

前回はライティングの基本となるランバート拡散照明モデルを紹介しました。今回は、ランバート拡散照明モデルを応用した、フォン(Phong)鏡面反射モデルをUnityを使いながら紹介します。フォン鏡面反射は反射光を再現した照明モデルで、金属のような質感の…

【Unityシェーダ入門】ランバート拡散照明モデルを試す

今回はUnityのライティングとシェーディングのお話をしようと思います。シェーダとは名前が示すとおり「影」をつけるための技術です。影の付け方で、様々な質感や見た目を表現できます。上の画像は左からランバートシェーダ、フォンシェーダ、トゥーンシェー…

【Unityシェーダ入門】テクスチャをブレンドして自然な地形を表示する

例えば草と土、土とレンガ、など複数のテクスチャをうまい感じにブレンドすることで、自然な見た目の地形表現ができるようになります。Photoshopで作成しても良いのですが、リアルタイムに変化させたい場合や、ステージを見ながら調整したい場合はシェーダを…

【Unityシェーダ入門】uvスクロールで水面を動かす

シェーダを使ってテクスチャを動かすことで、水面を表現してみます。テクスチャを動かせれば水面だけではなく、滝や川など様々なものを表現できるようになります。今回はテクスチャを動かすために、uvスクロールという方法を使います。今回の内容は次のよう…

【Unityシェーダ入門】ステンドグラスのシェーダを作る

前回に引き続きテクスチャを表示するシェーダを作成しましょう。前回はテクスチャを表示するだけの基本的なシェーダでした。nn-hokuson.hatenablog.com今回は、もう少し発展させてステンドグラスのような見た目のシェーダを作ってみましょう。実行結果は次の…

【Unityシェーダ入門】テクスチャを表示する

ここまでドラゴンの3Dモデルを使っていろいろなシェーダを作ってきました。いい加減ドラゴンも飽きてきたので、今回はテクスチャを使ったシェーダを作ってみましょう。最終的な見た目は次の図のようになります。 シェーダを作る下準備 今回もベースとなるプ…

【Unityシェーダ入門】リムライティングのシェーダを作る

前回は氷のような中央部の透明度が高く、周辺の透明度が高いシェーダを作成しました。nn-hokuson.hatenablog.com今回は前回作った氷のシェーダを利用して、背後から光が当たったようなリムライティングと呼ばれるシェーダを作ってみましょう。 リムライティ…

【Unityシェーダ入門】氷のような半透明シェーダを作る

前回はオブジェクトを半透明にするための方法を紹介しました。オブジェクトを半透明にするには次の3点をを設定する必要がありました。 Queue alpha:fade SurfaceOutputStandard nn-hokuson.hatenablog.com今回は前回作った半透明のシェーダに、もうひと工夫…

【Unityシェーダ入門】透明なシェーダを作る

前回はサーフェイスシェーダのパラメータをインスペクタから制御できるようにしました。nn-hokuson.hatenablog.com今回はシェーダを使って3Dオブジェクトの見た目を半透明にしてみましょう。シェーダで透明度を扱えるようになるとガラスのような表現や、金網…

【Unityシェーダ入門】シェーダのパラメータをインスペクタから設定する

前回はシェーダプログラムの中で色の情報を直接指定していました。もうすこし、柔軟にパラメータを操作できるようにしましょう。nn-hokuson.hatenablog.com今回は、はじめにC#スクリプトからシェーダ内のパラメータを操作できるようにします。続いてインスペ…

【Unityシェーダ入門】20行から始めるUnityミニマルシェーダ

前回は標準のシェーダを使って何が出来るかをひと通り試してみました。nn-hokuson.hatenablog.com今回は、一歩立ち戻って、最小限のシェーダをみてみましょう。 最小限のシェーダ 下のプログラムが、不要な要素を全てはぶいた最小限のシェーダです。まずは単…

【Unityシェーダ入門】Unityのシェーダで遊んでみよう

Unityのシェーダって、かっこ良い表現ができるらしいけど、難しそう・・・ というイメージがありますよね。実際に、C#のプログラムとかと比べると すこしトリッキィーに感じる部分も沢山あります。ですが、基本的には高校レベルの数学と画像処理の簡単な知識…