最近、1ツイート(280文字)内にシェーダーをおさめる つぶやきGLSL というものが流行っています。 一見「もうこれ以上詰められないよ~」となってしまっても、よくよく探すと意外なところを削れることがあったります。 この記事では、自分が使っている、つぶやきGLSLで文字を詰めるためのテクニックをチートシートとしてまとめてみました。 つぶやきGLSLの作例 #つぶやきGLSL void main(){vec3 p;for(int i=0;i<32;++i)p+=vec3((gl_FragCoord.xy*2.-r)/r.y,1)*(length(cos(p))-length(sin(t/.1+p/.2))*.6*s)*.5;gl_FragColor=vec4(5./p.z*s);} vec2 mainSound(float t){int i=int(t*=1e3);return vec2((
ノイズといえば、砂嵐のようなランダムノイズから連続性を保ったパーリンノイズまで様々なノイズが考えられています。残念なことにUnityのシェーダにはノイズを生成するメソッドが用意されていないため、プログラムを作る必要があります。 この記事では、Unityでランダムノイズ、ブロックノイズ、バリューノイズ、パーリンノイズ、fBmを作る方法を見ていきましょう。 ランダムノイズ ブロックノイズ バリューノイズ パーリンノイズ fBmノイズ まとめ&参考書 ランダムノイズ ランダムノイズとは場所や時間に依存せずに全くのランダムに値を決めるノイズのことです。テレビの砂嵐(古い!)と同じものですね。 www.youtube.com まずはノイズ生成の基本になるランダムノイズを表示するシェーダを作ってみましょう!シーン中にノイズを表示するための平面モデルをUnityのシーンビューに配置して、そこにシェーダプ
モバイルにおけるブラーの軽量化に関する考察です。 ブラーは重い ボックスフィルタリングでダウンサンプリング 精度の高いカーネルを使う 2回縮小バッファに描き込む 結果 関連 Unity2019.2.10 ブラーは重い ゲームの演出に置いて、ブラーは頻繁に使われる処理です。 単純なぼかし処理以外にも、ブルームやDepth of Fieldといったポストエフェクトの処理にも使われます。 しかしこのぼかし処理は総じて重い処理になりがちです。 例えば前紹介したガウシアンブラーも決して軽い処理ではありません。 light11.hatenadiary.com 結局のところ、綺麗なブラーを作ろうとするとテクスチャサンプリング数が多くなり重くなってしまいます。 しかし実際には綺麗さよりも処理負荷の小ささを優先したい場合もあるはずです。 そこでこの記事では軽いブラーを実装する方法について考えてみます。 ボッ
UnityでSNNフィルタのポストエフェクトを掛けてレンダリング結果を絵画風にする方法をまとめました。 SNNフィルタとは? アルゴリズムの解説 シェーダを書く ポストエフェクトとして適用する 結果 関連 参考 Unity2019.2.6 SNNフィルタとは? SNNフィルタとはSymmetric Nearest Neighborフィルタの略で、 もともとは画像のノイズを目立たなくするために考えられたフィルタのようです。 subsurfwiki.org これを強めに適用することで結果を絵画風にすることができます。 本記事ではこのSNNフィルタのアルゴリズムを解説し、実際にシェーダを書いてみます。 アルゴリズムの解説 いま、以下のように中央のピクセルとその周辺のピクセルを考えます。 これからSNNフィルタにより中央のピクセルに適用する色を求めます。 まず一番左上のピクセルと、それと対角線上に
サムネ用 なにをやったか 今回はUnityのHDRPのシェーダーを改造して、HDRPのシーン上にレイマーチングオブジェクトを表示しました! Unity HDRP + Raymarchingのプロジェクト公開しました! 興味があれば動かしてみてください!!https://t.co/hcBJKSWzC9 コードの整理ができたらブログに情報を残します#unity3d #raymarching pic.twitter.com/6Jc0HeeOAB— かねた (@kanetaaaaa) 2019年8月11日 がむさんによる作例もあります Unity HDRP + Raymarching by @kanetaaaaa を試してみました! カッコいいシーンが無限に作れてしまう😍 これは凄いです🙏#unity3d #raymarchinghttps://t.co/EK6JsHpTBZ pic.twit
Unityで3Dモデルを普通に描画するとポリゴンが表示されます。ここではポリゴンの頂点だけをポイントで表示する方法を紹介します。 頂点の表示方法を変えるだけなら、なんと2行のスクリプトだけですみます。それぞれの頂点に異なる色をつける場合はシェーダを使っています。 トポロジをポリゴンからポイントに変更する 3Dモデルの頂点情報はMeshで管理されていて、その頂点をどのように描画するかはMeshTopologyで定義されています。通常は面を描画するためにTrianglesトポロジが選択されています。 MeshTopologyには次のような種類があります。 トポロジ名 形状 Triangles 三角形 Quads 四角形 Lines 線 LineStrip 線分 Points 点 ここでは、頂点をポイントで表示するためにMeshTopology.Pointsを指定します。ワイヤーフレームで表示し
今年、Unty製プロジェクトのパフォーマンス改善をやる機会があったんですが、世の中のかっこいい事例に出てくるような、ハードウェアやVM/コンパイラの気持ちになったミクロなチューニング、フレームワークの制限を回避するための大胆な再実装…… そういうかっこいい作業、には思ったよりならず、なによりもまず先に、Unityを使っているが故の落とし穴から這い出る一本道の作業が多めになってしまった。 それというのも、Unityは非常に、そこそこのものを最小手順で 確認/動作できる、誰でもかんたんにモノをつくれる、という部分を大事にしているから、「パフォーマンスを考えると普通はこうなっていてほしいよね」といった部分が犠牲になっている、あるいは手が回っていない、という部分が実際まだまだあるように思えた。 simple よりも easy を取っているというやつだろうか。 仕事でやっていたプロジェクトは、まずコ
こんなステージで作っていきたいと思います。 完全なBaked Lightmap、リアルタイムライトは無し。 反射 ガラスに反射は必須なので Reflection Probe で反射を入れることになりますが、 よりガラスっぽく見せるためのコツがあります。 それは、反射素材に強烈な光源を入れる事です。 背面とのブレンド方法を乗算にする 赤いガラスを作ってみたいと思います。まず単純に Surface Shader の色を赤に変更すると。。。 全く変化がありません。 これは、部屋のライティングが理由です。 冒頭で述べましたが、この部屋は完全にライトマップ化されており、 リアルタイムライトが1つもありません。 Surface Shader はライトに影響するシェーダーなので、 ライトが無い = 真っ暗 となり、いくら色を変更したところで画に影響が出ないのです。 そこでポイントライトを1つ置いてみます
はじめに 最近バズっていたwebgl-waterのコースティクスをshadertoyで実装しました。せっかくなので簡単に解説したいと思います。 https://www.shadertoy.com/view/MttBRS https://www.shadertoy.com/view/MldfDn レイマーチングで絵が出せるぐらいの予備知識があると、ソースを理解しつつ読み進めることが出来ると思います。 レイマーチングについては@gam0022さんのスライドが詳細で分かりやすく解説されているのでおススメです。 シェーダだけで世界を創る!three.jsによるレイマーチング 解説に入る前に、見慣れない方もいると思うので webgl-water と コースティクス についての説明を先にします。 webgl-waterとは 2011年に登場した、ブラウザで動作する水面のリアルタイムシミュレーションです
この記事は、これまでにおもちゃラボで紹介してきたUnityのシェーダ入門記事40本のまとめです。 1日に5記事読めば7日間で読み切れるはず...今のところ(笑) シェーダって時々聞くけど難しそう・・・というイメージをお持ちの方も多いと思います。でも、Unityを使えばかなりのメンドウな部分はUnityにおまかせできちゃうので、本当に必要な部分のシェーダを書くだけでイメージ通りの絵作りができるようになります。 使用するシェーダ Unityで使えるシェーダにはsurfaceシェーダと頂点/フラグメントシェーダの2種類があります。ここではこの2つのシェーダの他、ライティング・ポストエフェクトの内容も解説しています。それぞれの各記事へのリンクを下にまとめておきます。また、Unity2018からはノードベースでシェーダを作成できるShader Graphという機能も提供されるようになりました。これか
はじめに コンピュートシェーダを使った GPU パーティクルを試してみます。GPU パーティクルを出す方法はいくつかあるのですが、任意のメッシュを利用したかったため、コンピュートシェーダを使った擬似インスタンシングによる方法を利用してみました。 参考:Render Massive Amount of Objects in Unity スクリーンスペースでの衝突および任意のタイミングでの生成・消滅をさせるところまでやってみました。 デモ コード GitHub - hecomi/UnityPseudoInstancedGPUParticles: GPU Particles w/ Screen Space Collision Example. 環境 Windows 10 Unity 5.4.0b17 コンピュートシェーダの基礎 こちらのページで翻訳されている ScrawkBlog がとてもわかり
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
最近色々忙しくて全然更新できていませんでしたが、 ちょうどいいネタを思いついたのと、アドカレが期限超過で1枠空いてたので代わりに投下します。 実装に丸1日、記事書くのに1日くらいかかりました。 目次 表面下散乱(Subsurface Scattering)とは? SSSで出来ること 実装に際しての考え方 実装方法:ランバート反射 実装方法:ハーフランバート 実装方法:曲率を考慮したシェーダ 実装方法:テクスチャ空間での拡散(Texture Space Diffusion:TSD) 実装方法:スクリーン空間での拡散(Screen Space Subsurface Scattering:SSSS) 実装方法:Translucent Shadow Maps:TSM 頂点空間表面下散乱(VSSS:Vertex Space Subsurface Scattering) 実装手順 結果 まとめ 参考
基本的にどのような開発環境であってもシェーダはシェーダ専用の言語を用いて開発します。 特に Unity のシェーダを開発するときは、ShaderLab と呼ばれる Unity 独自の言語仕様と、 それ以外の言語とを組み合わせることになります。 ShaderLab Cg / HLSL / GLSL 学習のためには既存のコードを読み書きする 書籍 その他の資料 開発環境 シェーダのソースコードハイライタ シェーダのデバッグ ShaderLab Unity でデフォルトのシェーダを新規に追加したとき、必ずこの形式で記述された shader ファイルが生成されます。 Shader Lab のソースコードは実際には次のようなものです。 Shader "MyShader" { Properties { _MyTexture ("My Texture", 2D) = "white" { } … } Su
Unity は標準で deferred rendering をサポートしていますが、これは light pre-pass とか deferred lighting と呼ばれるもので、deferred shading とはちょっと違います。私が必要としているのは deferred shading の方なので、これを Unity で実装してみました。 https://github.com/i-saint/DeferredShading deferred shading 自体の詳しい解説はここでは省略しますが、 大雑把には render target を複数用意し、ポリゴン描画パスではそれらに法線、位置、diffuse 色などシェーディングに使う情報を格納 (これらは geometry buffer、略して G-Buffer と呼ばれます)、その後 G-Buffer を利用してポストエフェクト的
はじめに Unity 5 より利用できるようになった CommandBuffer を利用するとレンダリングパイプラインを拡張して色々な表現が可能となります。公式ブログにこの詳細が書いてあり、サンプルもブログ中またはドキュメント上で配布されています。 (English) Extending Unity 5 rendering pipeline: Command Buffers – Unity Blog Unity - マニュアル: グラフィックスコマンドバッファ 他に CommandBuffer を使ったもので有名なものとしては、 id:i-saint さんの作品が挙げられると思います。 rendering fractals in Unity5 - primitive: blog object space raymarching - primitive: blog GitHub - i-sa
ホーム < ゲームつくろー! < プログラマブルシェーダ編 シェーダ編 その7 斜めから見ると底が見えない水面(フレネル反射) 前章で環境マップについて説明しました。環境マップを使うとモデルの表面に背景が反射して金属のようにテッカテカになります。実装も簡単で効果が非常に高い楽しいシェーダです。 さて、背景を反射させるものは何も金属ばかりではありません。ガラスの表面や水面など、表面がツルッとしているものは大抵背景を反射します。逆に言うと私たちは「ツルッとしている」というのを背景が映り込んでいる事で認識しているわけです。 では波が一切たっていないそれこそガラスのような水面に環境マップを適用するとどうなるでしょうか?ちょっとテスト画面を御覧下さい。 縦に並ぶトーラスはいずれもy=-100.0fの位置に沈んでいて、水面はy=0.0fに広がっています。水面自体は単なる平面ポリゴンで、その表面に環境マ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く