Graphtoy v0.4 by Inigo Quilez (feedback from Rafæl Couto, Florian Mosleh, Nicholas Ralabate, Rich Eakin and Jason Tully). If you find Graphtoy useful, please consider supporting it through Patreon or PayPal.
セルラーノイズ オリジナルのパーリンノイズから16年後、シンプレックスノイズの5年前に当たる1996年、Steven Worley は「A Cellular Texture Basis Function」 という論文を発表しました。この論文の中で彼は、今日のグラフィックコミュニティで幅広く使われているテクスチャリングの手法について説明しています。 背景となる原理を理解するには「繰り返し」について考える必要があります。何のことかお分かりですね。そう、 for ループです。GLSLの for ループには1つだけ難点があって、繰り返し条件として使う数値が定数(const)である必要があります。そのためループ回数は固定でなくてはならず、動的に変えることはできません。 まずは例を見てみましょう。 ディスタンスフィールド上の点 セルラーノイズではディスタンスフィールドに基づいて、複数の点の中から最も近
今年、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 の値と現在のレイマーチングの深度を比較
Cluster,Inc. Advent Calendar 2018、12日目の記事です。 qiita.com 以前書いたこちらの記事のリライトになります。 wordpress.notargs.com 概要 プログラムで描いた映像、音楽を前のスクリーンにデカデカと写し、その年最強のデモシーナー(プログラムでエモいの作る人)を決める「TokyoDemoFest」というイベントがあります。 tokyodemofest.jp 自分も毎年参加しているのですが、「吐き出されるexeが小さければ小さいほど評価が高い」という傾向があるので、最新のVisualStudioで小さいexeを吐き出す方法を調べてみました。 作ったもの TokyoDemoFestのトップページ用に書いたOptical StreamというシェーダーをMinifyしてexeに固めてみたところ、1.64kbになりました。 Shadert
こんなステージで作っていきたいと思います。 完全な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年に登場した、ブラウザで動作する水面のリアルタイムシミュレーションです
ノイズ 少し休憩しましょう。テレビのホワイトノイズみたいなランダム関数で遊んできて、頭はまだシェーダーのことでいっぱい。目も疲れてきました。散歩に出る時間です。 空気を肌に、日差しを顔に感じます。世界はこのように鮮やかで豊かな場所なのです。色、肌合い、音。歩いている間中、道や岩、木や雲の表情に気を取られずにはいられません。 これらのテクスチャーの不規則さをランダムと呼ぶこともできるでしょう。しかし、これらの外見は前の章で私たちが扱ってきたランダムとは違います。現実世界は実に豊かで複雑な場所なのです。どうすればコンピューターを用いてこの多様な世界に近づくことができるでしょうか。 この疑問は1980年代初頭、「TRON」という映画のためによりリアルなテクスチャーを生成するという依頼を受けてKen Perlin が取り組んでいた問題です。 結果として、彼はオスカー賞に輝くエレガントなノイズ・アル
はじめに サーフェスシェーダは Unity が提供してくれているライティングなどの処理を簡略化して書けるシェーダです。予め定義された SurfaceOutput や SurfaceOutputStandard といった構造体に必要な情報を詰め、影を使うかアルファを使うかといったオプションを選択してあげると、それらの情報を元に頂点・フラグメントシェーダに変換してくれます。 docs.unity3d.com 変換後の頂点・フラグメントシェーダはサーフェスシェーダ時と比べるとかなり長いコードになります(Standard Shader よりは少しシンプルです)。パスも複数含まれ、Forward Base(Forward レンダリング時のベース処理)、Forward Add(Forward レンダリング時のライト加算処理)、Deferred(Deferred レンダリング時の処理)、Meta(ライト
はじめに 今回の記事ではUnite2018で得た有り余るやる気を発散するために、描画の効率化について書いていこうと思います。 また、MaterialPropertyBlockという機能が結構誤解されがちなので、これについても纏めていこうと思います。 バッチングを効かせる上で考慮すべきこと ここで言うバッチングは静的なものではなく、動的に行われるバッチングを指すこととします。 バッチングはざっくり説明すると「同じマテリアルを使っているものの描画は出来る限り纏めちゃおうね」っていうやつです。 このバッチングはUnityのバッチング条件に該当する場合自動的に行ってくれます。 これからバッチングが切れる条件について見ていきます 頂点数多いとバッチングされない メッシュ(サブメッシュ)の頂点数がある特定の数を超えるとバッチングが効かなくなります。 このある特定の数はShaderによって代わり、非常に
GPU Gems GPU Gems is now available, right here, online. You can purchase a beautifully printed version of this book, and others in the series, at a 30% discount courtesy of InformIT and Addison-Wesley. The CD content, including demos and content, is available on the web and for download. Chapter 1. Effective Water Simulation from Physical Models Mark Finch Cyan Worlds This chapter describes a syst
はじめに こんばんは、代表の堂前です! なんだかんだで今年も残り2ヶ月を切ってしまいました。早いものです。 徐々に寒くなりますが、いかがお過ごしでしょうか? 本日は講演の話をしようと思います。 Cygamesさんで行われている「スキルサーズデー」にて外部講演として招かれまして、講演をさせてもらいました。 その様子をお伝えしたいと思います。 (※Cygamesさんの方でも記事にしていただきました!) 講演の様子 Cygamesさんのスキルサーズデーに関しては、こちらをご覧いただくとどういうものか分かるかと思います。 自分が初めて知ったのは昨年のCEDECの講演でして、勉強会を維持させる大変さというのがよく分かり、興味深い講演でした。 そんなスキルサーズデーですが外部講師を招いて話をしてもらおうということになり、担当の古閑さんより自分のところに依頼が来たという形です。 なんでも外部講師の第一号
この記事は、これまでにおもちゃラボで紹介してきた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 がとてもわかり
In the Built-in Render PipelineA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info See in Glossary, you can tell a CameraA component which creates an image of a particular viewpoint in your scene. The output is either drawn to the screen or captured as a texture. More info See i
Mixed Lighting Bake only indirect light. Mix baked and realtime shadows. Deal with code changes and bugs. Support subtractive lighting. This is part 17 of a tutorial series about rendering. Last time, we added support for static lighting via lightmaps. Now we follow up with combining features of both baked and realtime lighting. This tutorial was made with Unity 5.6.0. Mixing baked and realtime li
のようになります。このように反射だけでなく、透過&拡散を考えた関数をBRDFと区別し、BSDF (Bidirectional Scatter distribution function) と呼びます。髪や毛皮のレンダリングにおいては、このBSDFをいかに物理的により正確かつ効率的に計算するかというのが、一つの大きな焦点になっています。ただ、一応注意したい点として今回BSDFを考えるのは、髪や毛皮はBSDFで表現できるという意味ではなく、髪や毛皮はBSDFで表現できると仮定して話を進めると一応確認しておきます(この場合というより、数式で自然現象を説明するときは大体こうなる気がしますが・・・)。これはレンダリング時に毛の太さがピクセルよりも十分に細く、内部での複雑な拡散の挙動は無視できる、割に合わないといってもいいでしょう。というわけで、このBSDFをいかに実装するのかが今回の目標となります。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く