ShaderTips

シェーダーTips

主にUnityシェーダーについての記事を書いています。

2021-01-01から1年間の記事一覧

【Unity】【シェーダー】描画するオブジェクトの深度値と深度バッファの取得方法

Shader "Zpos" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; }; struct v2f { float4 vertex :…

【Unity】Disney Diffuse BRDF

記号 説明 視線方向を表す単位ベクトル 入射光の方向を表す単位ベクトル 法線方向を表す単位ベクトル ハーフベクトル BRDFの拡散反射成分 拡散反射率(ディフューズアルベド) 法線方向から入射する光の反射率 グレージング角から入射する光の反射率 Disney …

【Unity】幾何減衰

マイクロファセット(微細表面) マイクロファセットとは物体の表面には目では見えない凹凸のことです。 物理ベースレンダリング入門 その① - 物理ベースレンダリングとは? - LIGHT11引用 幾何減衰 マイクロファセットにより入射光が遮断される(シャドウイン…

【Unity】マイクロファセット法線分布関数 (NDF)

マイクロファセット(微細表面) マイクロファセットとは物体の表面には目では見えない凹凸のことです。 物理ベースレンダリング入門 その① - 物理ベースレンダリングとは? - LIGHT11引用 ハーフベクトル ハーフベクトルは光源方向と視点方向ベクトルを加算…

リニアワークフロー 概念の説明とUnityにおける実装と設定

視覚のガンマ 下の画像を見てください。 左から右に行くにつれて、白から黒へとグラデーションしており、人間の目で見た輝度はリニア(線形)になっています。 つまり黒の明るさを0、白の明るさを1とすると、中間の明るさは0.5に見えます。 リニアワークフロー…

【Unity】環境マッピング (キューブマッピング)

環境マッピングとは 環境マッピングはオブジェクトに背景が映り込ませる技術です。 環境マップという背景を映した特殊なテクスチャをキューブ上に並べ、オブジェクトの反射ベクトルの先にある環境マップの色を描画します。 【連載】Unity時代の3D入門 – 第7…

【Unity】【シェーダー】 フレネル反射

フレネル反射とは? フレネル反射とは、視線と法線が直角になる部分ほど反射成分が大きくなることで背景がより強く見える現象で、水やプラスチックなどの非金属よく見られます。 フルネルの近似式 フレネルの式 - Wikipediaより引用 フルネルの近似式をシェ…

【Unity】URP(Universal Render Pipeline)の導入方法

URP導入方法について説明します。 URPをインストールする URPの導入方法は2種類あります。 プロジェクトの新規作成時にURPのテンプレートを選択する場合 プロジェクトの新規作成時にテンプレートを選択する場合です。 Unity Hubの新規作成画面でURPのテンプ…

【HDR】【Emissive】トーンマッピングでオブジェクトを発光させる

発光表現を行うには? 下の画像のように光源をシェーダーで実装したいと思った時にフラグメントシェーダーで出力するRGBの値は、一番明るくしても白色(RGB = 1,1,1)なので、強い光を表現をすることができません。 このようなRGBAのそれぞれのチャンネルで0~2…

【Unity】SRP (Scriptable Render Pipeline) 入門②

前回はSRPで画面を塗りつぶしました。 今回は不透明オブジェクトと半透明オブジェクトを描画します。 ny-program.hatenablog.com スクリプト using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEng…

【Unity】SRP (Scriptable Render Pipeline) 入門①

SRPとは? Unityではプログラマが作業をしなくてもレンダリングしてくれますが、既存の描画フローを変更することができません。 細かい部分まで突き詰めようとすると、Unity既存の描画フローを使わずに自作したくなります。 それを可能とするのがSRP(Scripta…

CommandBufferで簡単なポストエフェクトを作る

前回のおさらい 前回はレンダリングターゲットの切り替えについて学びました。 こちらを先に見ておくと理解が捗ります。 ny-program.hatenablog.com CommandBufferとは? CommandBufferとは描画命令の塊を任意のタイミングで行える機能です。 docs.unity3d.c…

SetTargetBuffers、Graphics.Blit、Graphics.SetRenderTargetでレンダーターゲットを切り替える

レンダーターゲットの切り替えを行うには以下のメソッドを使用します。 camera.SetTargetBuffers Graphics.Blit Graphics.SetRenderTarget camera.SetTargetBuffers docs.unity3d.com 1 つまたは複数のRenderTextureのバッファを選択されたカメラのレンダー…

ShaderLab入門  Tag・描画設定まとめ

ShaderLabのTagや描画設定について自分用にまとめました。 説明 説 SubShaderの中でしか使えない Queu(レンダーキュー) 通称指定した値が小さいほど先に描画されるCustomRenderQueueが0以上の時はここで設定された値は無視される2500までは手前のオブジェク…

プラットフォーム特有のレンダリングの違い

今回やること Unityでシェーダーを書いていると、プラットフォームごとで結果が異なることがあります。 これはグラフィックスAPIに違いがあることが原因であることがある為、理解しておく必要があります。 公式リファレンスがありますが、分かり辛かったので…