渋谷ほととぎす通信

新しいこと、枯れたこと問わず大庭が興味を持ったものを調査、生活の効率を求める完全趣味の技術ブログ。基礎を大事にしています。

Shader

Unityでコンピュートシェーダを始めた時にトラブったこと3点

先日始めたコンピュートシェーダにおけるトラブル備忘録です。

Unityでコンピュートシェーダを始めてみた

コンピュードシェーダのUnity公式マニュアルを見ながら、Mac環境で始めてみたいと思います。 ちなみに、筆者は全くコンピュートシェーダを書いたことがないので、初心者目線で行きます。 前提としてコンピュートシェーダとは、頂点シェーダやフラグメントシ…

Unity 頂点シェーダ内でライト方向を取得する方法

Unityでシェーダを書く場合、とりあえず開発者が必要そうな変数やら関数はUnity側で用意されていることが多いので "UnityCG.cginc"、"AutoLight.cginc"、"Lighting.cginc"この辺りのファイルたちを眺めると良い感じです。 このようなライト方向とカラーを適…

Unity動的にメッシュを生成するシリーズ

1.Unityで三角形を1つ描画、テクスチャまで貼る この辺りでやっているような三角形1つ描画するということをUnityでもやってみたというプリミティブな記事。 生のWebGLで三角形を描画するショートコード - 渋谷ほととぎす通信 C#でDirectX11 SlimDXで三角形を…

シーンビューのAnimation Materialsチェックボックスの意味

いつのバージョンからかは忘れたのですが、シーンビューのプルダウンにAnimation Materialsという項目が追加されました。 コレなんだろう?って思ってて時が経ち、先程偶然知ることができました。 ↓↓コレです

UnityのシェーダLODを試す

今回は実は使ったことなかった機能シリーズ、「シェーダLOD」を試してみます。 Unityでシェーダを書いているとよく目にするLOD 200のような値。 これはシェーダ自身でLODを使用する際に使うLOD値です。 例えばLOD 200のサブシェーダが実装されているなら、Sh…

Unityちゃんシェーダを読んでまとめた

最近3Dキャラの肌の表現に興味が湧いていて、とりあえずちゃんと読んでいなかったUnityちゃんシェーダの肌部分を読んでみました。 以下、その備忘録となります。 読んだ部分というのは、Unityちゃんアセット同梱のCharaSkin.cgのfrag関数内です。ここに肌の…

生WebGLでUnityちゃんを表示させる

もう諦めないWebGL - 渋谷ほととぎす通信 続・もう諦めないWebGL進捗 - 渋谷ほととぎす通信 今回もWebGL周りの続きです。 本記事ではSD UnityちゃんをWebGLに表示させてみようと思います。

最初理解しづらいReplaced Shadersの仕組み

Unityには結構前からReplaced Shadersという機能が提供されています。 これは特定のシェーダを置き換えてくれる便利機能です。 Unity - マニュアル: Replaced Shaders でのレンダリング 私自身結構前からこの機能の存在は知っていたのですが、リファレンスを…

Unity任意のテクスチャを使ったステンシルマスク

以前Unityでステンシルテストをやってみた記事の続きです。 前回はキューブ(メッシュの形)をマスクにしましたが、今回は任意のテクスチャを使ってマスク表現をしてみます。

Unityステンシルを使ったマスク表現

ステンシルはアルファテストやデプステストと違い、ユーザーの都合でピクセルの描画可否を決めることが出来る機能です。各ピクセル毎に8ビット整数値をバッファ (ステンシルバッファ) に保持し、その値を活用して実装します。 例) マスクする側 マスクされる…

Unityのアルファテストがレガシーなものになっていた件

アルファテストとは、ピクセルのアルファ値で判定して描画可否を決めるコマンドで描画される直前で行われます。 AlphaTest "比較文字列" "比較するアルファ値" という構文で比較文字列は以下の8種類あります。 Greater : ピクセルのアルファ値が AlphaValue …

SubShaderとPassの中で使用できるTagリスト

Unityのシェーダ ShaderLabのSubShaderセクション、Passセクションには、どちらもTagを設定することができます。 ただ、どちらも専用Tagです。 目次 SubShaderの中でしか使えないTag DisableBatching CanUseSpriteAtlas PreviewType Passの中でしか使えないT…

Unityで輝度を考慮しないBloom

前回に引き続きイメージエフェクトやります。 今回はBloom(ブルーム)です。 Blooming (ブルーム)とは明るい光源(例えば、閃光のような)からの光が周囲の物体に漏れるように見える光学効果である。 Unity公式より 個人的にはBloomは画作りには欠かせない…

横にずれるノイズ風イメージエフェクト

前回からの続きで、今回はノイズのイメージエフェクトを作ってみます。 ノイズと言っても様々なものがありますが、今回はこのようなノイズを作ってみました。 ※名前が分かりません 画面トランジションや、キャラの登場などで使えなくもない気がしています。

Unity デプスシャドウ技法を自前で書いて影を落としてみる

オブジェクトの影を落とす時、ShadowCasterを設定する、または、設定されているシェーダ(Standardシェーダ、Diffuseシェーダなど)を使うことがUnityでは最もお手軽な方法だと思います。 影の描画って実際どうなっているかを調べました。 デプスシャドウ技法 …

なぜドローコールバッチングされないか、理由を知る方法

Unity5.6からフレームデバッガに現在の描画と1つ前の描画が、ドローコールバッチングされない場合にヒントが表示されるようになりました。 ちなみにドローコールバッチングとは、複数のメッシュまとめて、1回のドローコールで描画することを指します。 ※全て…

Unityシェーダのマクロとマルチコンパイル

シェーダ内で#define マクロ名(引数) 処理という文法でマクロを書くことが出来ます。 マクロとはCやC++でよく出てくるインラインで展開されるアレです。 UnityCG.cgincの中身を眺めているとよく出てきます。 眺めることはあっても書いたことはなかったので、…

スクロールをアルファブレンドしたイメージエフェクト

環境 Unity5.5.2p2 前回に続いてイメージエフェクト記事です。 今回は前回のスクロール処理にアルファブレンドを加えたら面白い表現になりましたという内容です。 まずは成果物から

無限スクロールイメージエフェクト

環境 Unity5.5.2p2 以前にもGLSL Sandboxを移植してイメージエフェクトを書いて遊んでいたのですが、あまり深く理解せず、とりあえず触っていただけでしたので、今年はじっくりと理解しながら書いていく年にしていきたいと今は思っています。 あわせて読みた…

シェーダプロパティアクセスが2.5倍早くなるPropertyToID関数

Materialの任意のプロパティを操作をする際に、 SetFloat SetTexture SetInt SetColor… などの関数を使用します。 文法的には material.SetFloat("_Prop", 100f); のように、第一引数にプロパティ名をString型、第2引数に値を渡します。また、オーバーロード…

GLSL SandboxをUnityに移植して遊ぶ_その3

私は3歳の頃からテレビゲームと呼ばれるものを必ず毎日30分は少なくともやってました。(当時はファミコンです) 大学に入って少し頻度が下がりましたが、iPhoneが世に出回りスマホゲームを作るようになってからは、加速するようにゲームをしてするようになり…

GLSL SandboxをUnityに移植する方法その2

環境 Unity5.5.0p1 前回に引き続きGLSL Sandbox作品をUnityに移植して遊んでみる記事です。 前回はGLSL Sandbox初期シェーダコードでしたが、今回は色々と変更が入った作品を例に遊んでみます。 今回参考にした、煙がゆっくり流れるようなGLSL Sandboxの作品…

GLSL SandboxをUnityに移植する方法その1

GLSL Sandboxとは、言わずと知れた有名なWebサービスです。 GLSLで書かれたシェーダを即時実行して全世界にブラウザベースで共有できます。 ソースも公開されているためシェーダ教材としても非常に重宝します。 実際にUnityで試してみたい表現が見つかったり…

Unity uGUIで綺麗なマスク表現

uGUIにはテクスチャをマスクするためのMaskコンポーネントご実装されていますが、まあこいつが使えない。 元画像 マスク画像 結果 なんか思ったのと違うものが出来上がります。 縁が汚い アンチエイリアスが効かないので、カーブを持つマスク画像だと結構ジ…

Unity ImageSequencerがイイ感じに面白い

Unity5.5に実装予定のImageSequenerを触ってみたメモ。

Unity UIデザイナー向けuGUIで色の加算合成をする

環境 Unity5.4.2f1 uGUIでテクスチャ(画像)を表示させるためには Imageまたは RawImage コンポーネントを使用します。これらのクラスにはテクスチャの色を変更する color プロパティが実装されています。 加算、乗算、除算、減算、覆い焼き、焼き込みなど様…

「シェーダ」とは何なのか、を自分の言葉でまとめてみる

理解度がふわっとしている方向けに、シェーダを自分の言葉でまとめてみたいと思います。 アジェンダ 一言で「シェーダ」とは何なのか Unityにおけるシェーダの処理 これらを順番にまとめていきます。 ※調べていく中で発生した副産物は別途記事にしていく予定…

Unity 動的に生成したメッシュに対して頂点カラーを反映する

前回記事の続きにあたります。 ※本記事は動的にメッシュを生成するシリーズの一貫です。 スクリプト上から三角形ポリゴンを動的に生成し、テクスチャを貼るところまで来ました。順番が逆かもしれませんが今回は頂点カラーを反映して三角形を描画してみます。…

Unity 動的にメッシュを生成してゴニョゴニョする : 超基本編

仕事で実践することはほぼ無いですが、Unityで動的にメッシュを生成してみます。「実際に手を動かしてやってみよう!」というかなり初心者向けの記事になります。 1.三角形メッシュを1つ表示させてみる メッシュの最小単位は三角形です。三角形を描画してみ…