黒鳥のメモ VR モデリング関係 プログラミング ドキュメント作成 その他
この記事はUnityアドベントカレンダー2020、2日目の記事です。 qiita.com Unityについての質問で、次のような質問をよく見かけます。 「特定の物体にだけポストエフェクトを掛けることはできますか?」 これは一応可能ですが、UnityのレイヤーはPhotoshopのレイヤーとは全くの別物で、めちゃくちゃめんどくさいため初心者にはおすすめしません。 どうしてそんなことがしたくなったのかを聞いてみると、「特定の物体だけをBloomで光らせたい」という目的が出てくることが多いです。 これは結構簡単にできるので、やり方をまとめてみました! そもそもBloomってなんだ? 現実世界のカメラや人間の目は、レンズを通して入ってきた光をセンサーで検知して「色」を判別します。 ですが、この光は全てがまっすぐ目に届くわけではありません。 ごくわずかな光がカメラの内部構造・レンズ・空気など(!)に
Unity’s Scriptable Render Pipeline represents a great advance on the way that unity deals with graphics, giving more power to the users to customize the pipeline the way they want. I have started to use the Universal Render Pipeline (URP) recently and, despite all its advantages over the built-in pipeline, it still suffers of lack of documentation. I mean, you can find information of every functio
GraphicsBuffer とは ComputeBufferの汎用性を高めた上位互換で将来的に代替するものです。 Unity 2020.1からComputeBufferが使えるほぼすべての局面[1]でGraphicsBufferも使えるようになったので、もはやComputeBufferを使う理由がなくなりました! 何がかわったのか インデックスバッファ、頂点バッファとして使えるようになった[2] Mesh.triangles、Mesh.verticesのかわりとして使えるイメージです。ComputeShaderで計算した結果をGraphicsBufferに書き込んで表示用のシェーダーに渡すことでCPU側にコピーすることなく動的なメッシュを表現できます。 以前からComputeBufferを表示用シェーダーで参照することで同様のことが可能でしたが、新たにDrawProcedural*系の関
ノイズといえば、砂嵐のようなランダムノイズから連続性を保ったパーリンノイズまで様々なノイズが考えられています。残念なことにUnityのシェーダにはノイズを生成するメソッドが用意されていないため、プログラムを作る必要があります。 この記事では、Unityでランダムノイズ、ブロックノイズ、バリューノイズ、パーリンノイズ、fBmを作る方法を見ていきましょう。 ランダムノイズ ブロックノイズ バリューノイズ パーリンノイズ fBmノイズ まとめ&参考書 ランダムノイズ ランダムノイズとは場所や時間に依存せずに全くのランダムに値を決めるノイズのことです。テレビの砂嵐(古い!)と同じものですね。 www.youtube.com まずはノイズ生成の基本になるランダムノイズを表示するシェーダを作ってみましょう!シーン中にノイズを表示するための平面モデルをUnityのシーンビューに配置して、そこにシェーダプ
モバイルにおけるブラーの軽量化に関する考察です。 ブラーは重い ボックスフィルタリングでダウンサンプリング 精度の高いカーネルを使う 2回縮小バッファに描き込む 結果 関連 Unity2019.2.10 ブラーは重い ゲームの演出に置いて、ブラーは頻繁に使われる処理です。 単純なぼかし処理以外にも、ブルームやDepth of Fieldといったポストエフェクトの処理にも使われます。 しかしこのぼかし処理は総じて重い処理になりがちです。 例えば前紹介したガウシアンブラーも決して軽い処理ではありません。 light11.hatenadiary.com 結局のところ、綺麗なブラーを作ろうとするとテクスチャサンプリング数が多くなり重くなってしまいます。 しかし実際には綺麗さよりも処理負荷の小ささを優先したい場合もあるはずです。 そこでこの記事では軽いブラーを実装する方法について考えてみます。 ボッ
Clear Flags は Depth only に設定。 Projection は平行投影 の Orthographic を設定。 Target Texture に先程作成した深度バッファテクスチャを設定。 Rendering Path は深度描画時の Forward に設定。 Orthographicのサイズはメートルのようです。 ここまでで、深度バッファに描画するオブジェクトができました。 実行してみると、深度バッファに内容が書き込まれるのがわかります。 あとはこいつを参照しつつ、メインのテクスチャを描画するシェーダーを書いて、Projector に設定すれば完成です。 4,プロジェクターのシェーダー作成 深度バッファを見ながらカラーテクスチャを描画するシェーダーを書きます。 DepthProjector.shader /*******************************
UnityでSNNフィルタのポストエフェクトを掛けてレンダリング結果を絵画風にする方法をまとめました。 SNNフィルタとは? アルゴリズムの解説 シェーダを書く ポストエフェクトとして適用する 結果 関連 参考 Unity2019.2.6 SNNフィルタとは? SNNフィルタとはSymmetric Nearest Neighborフィルタの略で、 もともとは画像のノイズを目立たなくするために考えられたフィルタのようです。 subsurfwiki.org これを強めに適用することで結果を絵画風にすることができます。 本記事ではこのSNNフィルタのアルゴリズムを解説し、実際にシェーダを書いてみます。 アルゴリズムの解説 いま、以下のように中央のピクセルとその周辺のピクセルを考えます。 これからSNNフィルタにより中央のピクセルに適用する色を求めます。 まず一番左上のピクセルと、それと対角線上に
In this tutorial we’ll be learning how to use Custom Vertex Streams for particle systems in Unity. Vertex streams are set through a particle system’s Renderer module and can be used to pass in additional per-particle data to a shader. The shader can then use this data to create a range of effects unique to each particle in the system – all processed on the GPU at blazing fast speeds. [IMAGE REMOVE
サムネ用 なにをやったか 今回は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 を取っているというやつだろうか。 仕事でやっていたプロジェクトは、まずコ
概要 Unity2018にて、ScriptableRenderPipeline(SRP)を活用して作られた、Standard Shaderより軽量なLightWeightRenderPipeline(LWRP)が追加されました Surface Shaderが使えないため少し面倒ですが、内部のコードを引っ張ってきて拡張することで、LWRPでもGPUパーティクルなどのシェーダーを活用したテクニックを使うことができます また、Standard Shaderと違って中のコードがすべて読めるようになっているため、LWRPの限界にぶち当たったときも、LWRPをベースとして独自のSRPを構築していけます 今回は、LWRPのLightweightStandardシェーダーを拡張して、GPUインスタンシングを使ったパーティクルを実装してみました 全てGPUで行った方が処理は早くなるのですが、今回はシンプルに
はじめに 以前、ディファードで Raymarching をやる記事を書きました。 tips.hecomi.com 上記記事では画面全体での Raymarching でしたが、これを個別のオブジェクトとして分解できるようにしたオブジェクトスペースのレイマーチングについて以下の記事で解説を行いました。 tips.hecomi.com 上記記事で使用したディファードレンダリングでは、デプスバッファに対して直接 Raymarching で計算した深度を書き込むことができるため、ポリゴンで出来た世界とのマージが簡単でした。これまでは、Unity のフォワードレンダリングでは計算して求めた深度をデプスバッファへ書き込むことが出来ないと思っていたのですが、SV_Depth を使うと求めることが出来るようです。 本エントリでは _CameraDepthTexture の値と現在のレイマーチングの深度を比較
こんなステージで作っていきたいと思います。 完全なBaked Lightmap、リアルタイムライトは無し。 反射 ガラスに反射は必須なので Reflection Probe で反射を入れることになりますが、 よりガラスっぽく見せるためのコツがあります。 それは、反射素材に強烈な光源を入れる事です。 背面とのブレンド方法を乗算にする 赤いガラスを作ってみたいと思います。まず単純に Surface Shader の色を赤に変更すると。。。 全く変化がありません。 これは、部屋のライティングが理由です。 冒頭で述べましたが、この部屋は完全にライトマップ化されており、 リアルタイムライトが1つもありません。 Surface Shader はライトに影響するシェーダーなので、 ライトが無い = 真っ暗 となり、いくら色を変更したところで画に影響が出ないのです。 そこでポイントライトを1つ置いてみます
はじめに サーフェスシェーダは Unity が提供してくれているライティングなどの処理を簡略化して書けるシェーダです。予め定義された SurfaceOutput や SurfaceOutputStandard といった構造体に必要な情報を詰め、影を使うかアルファを使うかといったオプションを選択してあげると、それらの情報を元に頂点・フラグメントシェーダに変換してくれます。 docs.unity3d.com 変換後の頂点・フラグメントシェーダはサーフェスシェーダ時と比べるとかなり長いコードになります(Standard Shader よりは少しシンプルです)。パスも複数含まれ、Forward Base(Forward レンダリング時のベース処理)、Forward Add(Forward レンダリング時のライト加算処理)、Deferred(Deferred レンダリング時の処理)、Meta(ライト
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く