Shader
今回は、Unity Shaderを使ってY軸固定ビルボードシェーダーを作成する方法を解説します。ビルボードシェーダーは、木や草、エフェクトなど、常にカメラに向けて表示したいオブジェクトに非常に便利です。 しかし、すべての軸で回転すると不自然になる場合が…
今回は、Unityでビルボードシェーダを実装し、カメラに常に正面を向くようにする方法について解説します。 ビルボードとは ビルボードは、オブジェクト(通常は平面)が常にカメラを向くように描画するシェーダです。これにより、2Dのテクスチャを3D空間で立…
今回は、Unityで重心座標系を利用してオブジェクトのワイヤーフレームを描画する方法を紹介します。 ワイヤーフレーム表示はデバッグや特殊なビジュアルエフェクトに役立ちますが、重心座標系を使うことで効率的に実装できます。 重心座標系とは 重心座標系…
Meshの情報を使ってShaderで色を操作する際、RGB値を渡すとfloat3が必要になりますが、多くの色を扱いたい場合はできるだけ使用する数を減らしたいですね。 そのような場合、RGBをfloatに変換し、Shader側でfloatからRGBに変換することで、完全には復元でき…
Shader を作成する際に、URPの中を探してコピーしてくるのが面倒だったので、基本的な Shader だけ抜き出して github にあげておきます 必要な際にご利用ください UnityURPShaderSample/URP12.1.8 at main · yayorozu/UnityURPShaderSample · GitHub
https://hacchi-man.hatenablog.com/entry/2023/01/05/220000hacchi-man.hatenablog.com では1地点のみのソナー表現でしたが、Shader側に複数の座標パラメータを渡すことにより複数地点でのソナー表現ができるようになりました パラメータをセットするのは何…
Unity2021.3.15f1. URP 12.1.8 ※URP14の場合はこちら PostProcess 用のスクリプトをたまに忘れるのでこちらにメモしておきます using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; [Serializable] public class Sampl…
ノイズテクスチャを使って uGUI で Dissolve っぽい表現をやってみたかったので Unity2020 の uGUI Shader をもとに作成してみました 使い方 以下の Shader を作成してから、以下のコンポーネントを Image がある GameObejct に追加し よしななノイズテクス…
iPhone で 通知センターを利用したときに背景がぼけるようなものを作りたかったので、GrabPass を利用してできないかやってみた 描画順が手前のものに対してちゃんとぼかしっぽいことができてるのが確認できる 使うには Material の Shader をこれにして Ima…
GrabPass 描画する際に、現在の画面のテクスチャを取得することができるパス 例 例えばこういったオブジェクト配置の際に D で GrabPass を利用すると以下のようなテクスチャが取得できる テクスチャ自体はこれですが、現在の描画位置に合わせて変換した座標…
複数パスの Shader で各パスごとに全部記述していくと以下のようになる Shader "Custom/Outline" { Properties { _Stencil ("Stencil", int) = 10 } SubShader { Tags { "RenderType"="Opaque" } Pass { Stencil { Ref [_Stencil] Comp notequal } ZWrite Of…
URP で PostEffect を利用するには ForwardRendererData を作成して UniversalRenderPipeline に登録する必要がある この手順を記述する ScriptableRendererFeature の作成 ScriptableRendererFeature は レンダラーにレンダリングパスを追加するためのクラ…
https://hacchi-man.hatenablog.com/entry/2021/02/23/220000hacchi-man.hatenablog.com 以前の記事でアルファ画像が対応できなかったのですが、少し調査したらまだ問題ありますが アルファを適当できたので、メモがてら追加しておきます オブジェクトのシェ…
Stencil Shader を利用して、オブジェクトの重なり具合に応じて色を変える実装をしてみます オブジェクトのShader Stencil Pass を利用して オブジェクトがある箇所のステンシルバッファの値を加算していきます こうすることでオブジェクトが重なっている箇…
uGUI の Image は IMeshModifier を利用すれば、頂点座標や uv の変更ができました しかし、SpriteRenderer では Sprite の頂点座標や uv を利用しているため変更ができません そのため、Shader を利用して FillAmount を実装する必要があります 使い方 Spri…
Unity で Unlit の Shader を作成すると以下のテンプレートコードが生成される ※ 本来は Fog の設定があるが消している Shader "Unlit/NewUnlitShader" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" }…
法線マップ(Normal Map)(Bump mapping) - Unity マニュアル 公式にあるように法線 (Normal) マッピングとは、法線マップを利用してモデルの表面に凸凹や、傷などを付ける技法 上記のリンクより画像をそのままお借りしますが、石垣のテクスチャに対して …
Shader には SetGlobalColor や SetGlobalVector また Material には SetColor や SetVector などパラメータを渡すためのメソッドが用意してあります Shader では そのパラメータを持っている すべての Shader に対して変更を行えます Material では その Ma…
昔マリオギャラクシーで一部分範囲だけ床が見えていて、見えている範囲が動き進んでいくステージがあったのを思い出し、 似たようなものが Shader で作れないかと思い作ってみました 処理は単純で pow(i.wpos.x - _Center.x, 2) + pow(i.wpos.y - _Center.y,…
通常テクスチャを表示する Shader では Alpha のあるテクスチャを利用すると 下図のようにAlpha部分は無く表示がおかしくなってしまいます Shader "Custom/Texture" { Properties { [NoScaleOffset] _MainTex("Texture", 2D) = "white" {} } SubShader { Tag…
頂点カラーとテクスチャの乗算色を表示する Shader Shader "Cust/TextureAndVertexColor" { Properties { [NoScaleOffset] _MainTex("Texture", 2D) = "white" {} } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Unit…
頂点カラーのみを表示する Shader Shader "Custom/VertexColor" { SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float4 color: COLOR; }; struct v2f { f…
Material に パラメータをセットする際には Material.SetColor や Material.SetVector などを利用する この際に第一引数には string と int を指定することができる string の場合でも 結局 int に変換されるのですが、この変換処理が遅いらしいので調べてみ…
三角関数はもっと遅い - Vitalabolove 店長の雑記帳 上記のサイトを見ていただければ分かるように 三角関数 の計算は遅い なので Shader で利用する際には使いすぎないように注意しようと言われている だから テクスチャ の rgb に sin, cos, tan の結果を書…
画像はこちらのを利用させていただく Lightning Bolt Effect for Unity | Particles/Effects | Unity Asset Store 縦横の分割数と、1枚あたりの時間を指定して利用する そうするとこのように Shader で SpriteAnimation ができます Shader "Unlit/SpriteAnim…
ddx と ddy を利用して輪郭が取得できるかのテストを兼ねて作成してみました 画像は以下のサイトから利用させていただいています [無料写真] 空に浮かぶ風船 - パブリックドメインQ:著作権フリー画像素材集 輪郭 色の差分が少ないところは灰色になってるの…
Surface Shader の頂点処理を差し込む場合は pragma の最後に指定してやれば良い #pragma surface surf Lambert vertex:vert Shader "SurfaceVert" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossi…
カメラの Z-Depth を利用する Shader を記述していると一部オブジェクトで Z-Depthが取得できないことがあった 調べてみると Unlit Shader の場合は Z-Depth が取得できないようでした 理由も調査したのですが、詳しい理由はわかりませんでした・・・ 対応 …
UnityCG.cginc 内に vert_img という頂点処理用のメソッドが用意されているので 頂点とuvしか利用しない場合こちらを利用したほうが手軽で行数も少なくなる struct appdata_img { float4 vertex : POSITION; half2 texcoord : TEXCOORD0; }; struct v2f_img …
Surface Shader でライトを無効にしたいことがあり、作成 左側がライトが有効なもので、左側がライトが無効なものです Shader "Custom/UnlitSurf" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" }…