サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
GPT-4o
unityshader.hatenablog.com
●はじめに 今回はUnity5から導入された、Standard Shaderの使い方を解説していきます。 ●Standard Shaderってなんですか? 一言でいえば、何でも描ける万能のShaderです。 Unity4以前は、DiffuseShaderやTransparentShaderなど大量のShaderがあり、Materialの設定時にそれぞれ適切なものを選択していました。 Unity5からは物理ベースレンダリング(PBR:Physically Based Rendering)が導入され、一つのShaderで現実世界の様々な材質を表現できるようになりました。それがStandard Shaderです。 Unity4以前に使われていたShaderはLegacyShader(時代遅れのシェーダー)と分類され残ってはいるものの、基本的に使用しません。 ●物理ベースレンダリング以前 レガシー
はじめに 今回は頂点カラー(R)を使ってエッジの太さを調整してみます。ついでにエッジの色と、距離に応じた太さ調整も入れてみましょう。 本記事で解説される新要素 VertexModifier関数で頂点カラーを使用する オブジェクト原点とカメラとの距離を求める ソースコード解説 前回からの変更点を解説していきます。 Shader "Custom/Toon7" { Properties{ _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} _OffsetTex("Offset (RGB)", 2D) = "black" {} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 _R
はじめに 今回はオフセットテクスチャを使って陰影を調整してみます。 本記事で解説される新要素 SurfaceShaderの入出力構造体をカスタマイズする オフセットテクスチャとは Ramp処理を施す前(陰影をクッキリさせる前)に、シェーディング結果をオフセットさせ、最終的な陰影を調整するためのものです。例えば美少女キャラクターの顔にはなるべく陰が出てほしくない、しかし顎から首にかけては常に陰になっていて欲しい、という要望に応えるために用います。 ソースコード解説 前回からの変更点を解説します。 Shader "Custom/ToonOffset" { 名前をToonからToonOffsetにしました。 _MainTex("Albedo (RGB)", 2D) = "white" {} _OffsetTex("Offset (RGB)", 2D) = "black" {} プロパティの_Ma
(予定)第6回.(上級)ステンシルバッファを使って輪郭線を制御する (予定)第7回.(上級)綺麗な髪の影を落とす (予定)第8回.(上級)ハッチングシェーダーを作る (予定)第9回.(上級)モザイクシェーダーを作る (予定)第10回.(上級)眉毛を髪の上に描画する
はじめに これからShaderプログラムについて解説していきます。 今回作るのはSurface Shaderというもので、難しいライティングの計算やテッセレーションなどをUnity側で全て自動でやってくれるようお膳立てされたShaderになります。NPR(Non Photorealistic Rendering)など特殊なことを行わない限り、Surface Shaderで十分な場合がほとんどかと思います。 まず、Surface Shaderの作り方 Projectウィンドウで右クリック->Create->Shader->Standard Surface Shaderで新規作成します。 名前をFirstShaderとします。 Materialを作成し、FirstShaderMatと名前をつけます。 MaterialのShaderから、Custom->FirstShaderを選択します。 新規
(2017/03/01)GitHubではなくAssetStoreからダウンロード出来るようになりました。 ●はじめに 前回はイメージエフェクトの使い方を簡単に説明しました。 今回はPost-processing Stackの使い方を説明します。 ●Post-processing Stackとは? Unityのイメージエフェクトは効果を一つずつ追加していくタイプでした。この方法は、必要なエフェクトだけ追加していくことが出来るので使いやすいという利点があります。しかし一方で、それぞれのイメージエフェクトが独立して動作するため、内部的に同じ処理をしているにも関わらず、その情報を使いまわしたりすることがありません。そのせいで、統合されたイメージエフェクトを持つUnrealEngine4などに比べて、パフォーマンス上不利になっていました。 そこで統合的なイメージエフェクトとして新しく開発されているの
HoloLens買いました。 5-6時間ほど装着してみた感想です。 色んな項目を☆の数(最大5個)で評価してみます。 画質 ☆☆☆~☆☆☆☆ 解像度 ☆☆☆☆☆ 解像度はかなり高く見えます。現行のVR(Vive,Oculus,PSVR)に比べるとピクセルが4倍~8倍くらいに増えた感じがします。 現行VRの視力が0.3-0.4くらい(1メートル先の本も読めない)だとすると、0.8~1.0くらいになった感じです。VRの解像度が将来この程度まで増えれば(もしくはHoloLensの視野角が3倍以上広くなれば)もう色々と戻ってこれない気がします。 視野角 ☆ 解像度を優先するため犠牲になったのが視野角です。 腕を前にまっすぐ伸ばして、手のひらを一杯に広げて両手の親指同士が触れるくらいの領域になります。 慣れればそれほど違和感が無くなるらしいですが、まだ1日目なので… (最初つけたときよりは大分違和感
最近色々忙しくて全然更新できていませんでしたが、 ちょうどいいネタを思いついたのと、アドカレが期限超過で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とは全然関係ありませんが(ペンタブのVR化とかはやったけど)、1週間くらい前 togetter.com が話題になりましたね。私は空気が読めない男なので、冗談を真に受けてリアルに作ってみました。 用意するもの 時間 スムーズにいけば90分、普通なら3時間くらい? 普通のPC パーツ(店にもよるが、全部で2万2千円くらい) Intuos Draw Sサイズ(読み取り範囲が151.2mm,94.5mmに限りなく近ければ他のものでもよい) IGZO 7インチパネル SHARP 7インチ高精細IGZO−LCDパネル 接続モジュールセット(ラズベリーパネル接続キット): ディスプレイ関連 秋月電子通商 電子部品 ネット通販 iPad mini用ガラスフィルム(0.3mm) iPad mini用アンチグレアフィルム(いらないかも) 両面テープで張り付けられそうなゴム足 ケーブル類
はじめに 【イベントレポート】【速報】Microsoft、HoloLensの技術「Windows Holographic」をパートナーに公開 - PC Watch にある通り、Microsoft以外のメーカーでもHoloLensのようなデバイスが作れるようになるようです。 これによりバッテリーをたくさん積んだモノや、デザインにこだわったモノ、性能に力を入れるモノなど、沢山の種類が様々な価格帯で発売されることが予想されます。 MSは本気でこの商品をPC→スマホ(タブレット)の次となる、一般に普及するデバイスにしようと企んでいるようですね。 HoloLensで駆逐される?デバイス さて、実際に商品が出る前に、今のHoloLensで何が出来るのか考えてみます。 PCとして OSがWindows10なので、PCで出来ることは全て出来るということになります。 ただし動作するのはUWPのみのようです(
前回 HTC ViveでペンタVR上でクリスタが使えるように改良する その3(DesktopCaptureが頻繁に落ちるのを修正する) - Unityシェーダ入門 HTC ViveでペンタVR上でクリスタが使えるように改良する その2(解像度問題の解決策を模索する編) - Unityシェーダ入門 HTC ViveでペンタVR上でクリスタが使えるように改良する - Unityシェーダ入門 はじめに その2くらいに書いた、『VRデスクトップ上でモデリングしたデータをVR空間にインポートして、立体的にモデルを確認する』機能ですが、OBJのインポートなどをするより簡単で、汎用性のある方法を思いついたので、作ってみました。 色々な手法 VR空間(Unityのランタイム)にモデルをインポートする方法として、いろいろ考えました。 FBXSDKを使ってFBXのインポート。労力的に無理。アニメーションも含め
このコンテンツは、『ユニティちゃんライセンス』で提供されています 前回のドット絵シェーダはスクリプトからドット粒度を変えられるようになりましたが、 ドットの粒度が画面全体ですべて同じになってしまうという特徴(欠点)がありました。 これではカメラが近づいた時はドットが細かくなりすぎ、逆に離れた時には粗くなりすぎます。 ということで深度に応じてドット粒度を変更できるようにしてみました。 前回の時点で、2x2、4x4、8x8…のドット絵がそれぞれ生成出来ているので、それを深度値でスライスして合成しています。(近いほど粗いドット絵が使用されるように) これでどこにカメラを動かしても、キャラが離れてドットが潰れてしまうことがなくなります。 またバグ修正(イメージエフェクトの使用状況によって深度テクスチャのUVが反転する)も行いました。 DotImageEffect.cs(Cameraに追加するイメー
このコンテンツは、『ユニティちゃんライセンス』で提供されています この記事は Unity 2 Advent Calendar 2015 - Qiita の13日目の記事です。 12日目はtnayukiさんの「知る人ぞ知るUnity 5のネイティブオーディオプラグインについて - Qiita」でした。 ●はじめに ここ最近、UnityやUE4を使ったトゥーンレンダリングが流行っているようです。(今月のCGWORLDもトゥーンの話多いですし) Unityシェーダ入門というタイトルのブログを書いていて、何もしないわけにはいきません。 ということで、SDユニティちゃんをモデルとしてトゥーン表現を考えていきます。 結構長いです。 標準のSDユニティちゃん。そのままでも可愛い。 ●エッジ検出(EdgeDetection_0) エッジとは、アニメやイラストで言うところの線画のことです。 もともと現実世界
(最終更新:2015/09/27) ゲームグラフィクスに興味のある人向けに資料を分類して集めました。 新しいの見つけたら増やしたり分類し直したりします。 ※以下は応用的な内容なので、復習も兼ねて基礎的なアルゴリズム(CG数学、パイプラインとかシャドウマップ、法線マップなど)のページも後で作ろうかと思ってます。 Physically Based Rendering 物理的な観察に基づいたパラメータを用いたシェーディングモデル、スペキュラ反射 エネルギー保存則に従ったライティング、エリアライト 資料 概要 実装 Real Shading in Unreal Engine 4 PBR全般,エリアライト UnrealEngine4 Moving Frostbite to PBR PBR全般,エリアライト Frostbite シリコンスタジオの最新テクノロジーデモ技術解説 PBR全般,Tempora
自分で計算しようかと思ってましたが、すでに考え付いてた人がおりましたので、ただの紹介です。 When there's no need to render twice | Stereoscopic 3D | Oculus VR Forums 平均的なIPDの場合、52m以上離れると差が1ピクセル未満になるようですので、左目は普通にレンダリング、右目はFarクリップを52m以上にして、それより遠い部分は左目のレンダリング結果から持ってくればよいって感じです。 (レースゲームとかだと、遠くはただの写真だったりしますよね。あれは距離が遠いとカメラが移動しても視差が発生しないため問題なく見えるのです。ビルボードや平行光源とかと同じ考え方…かな?) 利点は、52m以上のオブジェクトをレンダリングしなくなることによる 1.DrawCallの削減 2.頂点処理の削減 3.GBuffer生成、ライティングな
このコンテンツは、『ユニティちゃんライセンス』で提供されています Unity5のフリー版が発表されましたね。 Unity4の無料版では使えなかったImageEffectが使えるようになっていますので、かなり表現の幅が広がったのではないかと思います。 というわけで前回のドット絵シェーダ(イメージエフェクト)を少し改良したのと、多少最適化を行ったので公開します。Unity5.0.0f4で実行しています。 基本は前回と同様ですが、パラメータをスクリプトから調整できるようにしたのと、 ドットの粒度をシェーダの変更なしで変えられるようにしました。 以下コード全文です。 DotImageEffect.cs(Cameraに追加するイメージエフェクトコンポーネントのスクリプト) using UnityEngine; using System.Collections; using UnityStandard
このコンテンツは、『ユニティちゃんライセンス』で提供されています Blenderでドット絵シェーダを作っている方がいましたので、Unityで実装方法考えてみました。 ドット絵シェーダー v1.0 - 3Dモデルをドット絵風に描画するシェーダーが公開!試行錯誤した流れが分かる制作日誌にも注目! 自分でドット絵は描いたことがない(加えて2Dスプライトを使ったゲームも作ったことはない)ので、間違ってるところがあるかもしれません。 ドット絵について 実装するにあたって、ドット絵がどうやって作られるか考えてみます。 ドット絵の元(ドット絵になる前の絵)は、"高解像度の絵"です。 (この"高解像度"の絵はドッターの脳内にあるかもしれませんし、CGでレンダリングしたものかもしれません) なるべく情報量を保ったまま解像度を落とす、ことを考えます。 1.色選択アルゴリズム 高解像度の絵からドット絵に解像度を
通常ユーザが編集するSurface Shaderは、画面上に見える部分の色や形を変えることが出来ます。しかし、シェーダが使われるのは直接画面に見える部分だけではありません。 1.シャドウマップレンダリング用シェーダ(影を落とすためのシェーダ) 2.影かどうか判断するためのシェーダ(影を受けるためのシェーダ) 3.ディファードレンダリングやイメージエフェクトで使われる深度、法線を描画するためのシェーダ などです。 なお、これらのシェーダは深度や法線など、出力が固定的です。 (色に比べ、深度や法線をカスタマイズすることは稀だからです) そのため、シェーダのジャンルごとに一つにまとめられています。 上記1のシェーダではシャドウマップに描きこむための深度を出力しますが、例えば Diffuseシェーダのオブジェクトと、BumpedDiffuseシェーダのオブジェクトは色が違うだけで形は同じなので、同
以下はUnity4.3.0f4、DX11で行っています。 1回のレンダリングで複数の値を出力するMRT(MultipleRenderTarget)をやってみます。 手順は 1.複数の値を出力するシェーダを作成する(SurfaceShaderではなく、展開されたシェーダじゃなきゃ駄目っぽい。やり方が今のところわかりません。) 2.メインカメラとは別のカメラを作成し、MRTレンダリングを行うスクリプトをくっつける。 (複数出力する専用シェーダが必要になるため、メインカメラの通常レンダリングにバッファを追加して……ってのは無理みたい) です。 まずは複数の値を出力するシェーダから見てみます。 これはUnityでシェーダを新規作成し、#pragma debugで展開されたシェーダからコピペしてきて作ったものです。 Shader "Custom/TestShader" { Properties {
通常半透明オブジェクトをレンダリングする際には、ソート(奥から手前に向かって)が必要になります。しかし、Unityではオブジェクト単位でのソートはしますが、ポリゴン単位でのソートは行いません。(Unityに限った話ではありませんが) 従って、正しく半透明オブジェクトを描画するためには、細かくオブジェクトを分割するか(ポリゴン単位まで)あるいは描画順に関係ない描画方法を用いるしかありません。 ここでは後者の、描画順に関係のない半透明オブジェクトの描画方法(OIT:Order Independent Tranceparency)を紹介します。参考にしたのはここ Weighted Blended Order-Independent Transparencyについて | shikihuiku です。 上述の通り、通常半透明オブジェクトを正しく描画するためには、奥のオブジェクトから描画する必要があり
Unityシェーダ入門2回目。 前回は大まかなグラフィックス処理の流れを説明しましたので、今回からソースコードを出して、具体的な内容に入っていきます。 プログラマブルシェーダ 前回紹介した頂点シェーダ、ラスタライズ、ピクセルシェーダですが、この中でプログラム可能な処理は、頂点シェーダとピクセルシェーダの二つです。プログラミング出来るシェーダ、という意味で「プログラマブルシェーダ」と呼ばれています。 プログラマブルシェーダはDirectX8から導入されたもので、それ以前はハードウェアの固定機能として用意されたものしか利用出来ませんでした。コンシューマ向けゲーム機ではXboxで初めて搭載されたようです。(最近のハードウェアでも、Wiiや3DSはシェーダが搭載されていないようです。Xbox360、PS3は当然搭載しています。) DirectX9では固定機能のシェーダも利用可能ですが、Unityで
これからUnityのシェーダについて、1から学べるように書いていきたいと思います。 ・グラフィックスパイプライン 画面に3Dキャラクターなどのモデルを表示する際、最初の材料としてポリゴンを受け取り、いくつかの流れ作業を経た最終結果として、ディスプレイにピクセルが出力されます。この流れ作業全体のことをグラフィックスパイプラインと呼びます。DirectX(OpenGL)の世代により、ステージ(流れ作業の1工程のこと)の数や内容が異なりますが、ここではDirectX9のグラフィックスパイプライン(のごく一部)を例に挙げます。 1.頂点シェーダ(Vertex Shader) 入力されたポリゴン(三角形)の各頂点を"座標変換"します。三次元の頂点を二次元に変換する、と考えてください。 2.ラスタライズ(Rasterize) さて、頂点は二次元になりましたが、これではただの点のままです。 (画面に点が
更新情報 (2017/04/20)トップページを整理しました (2017/04/23)Blender×Unityワークフロー:ミラーモディファイアとシェイプキーを共存させる(+左右に分離) - UnityShader 入門 (2017/04/30)Mosketchメモ、ショートカット一覧を投稿しました 入門コンテンツ スザンヌで学ぶUnityのTransform 1から始めるUnityShader(全6回) アニメ調レンダリングで学ぶUnityShader 実用コンテンツ Blender×Unityワークフロー Mosketchメモ 厳選リンク集 SurfaceShadeの記述 https://docs.unity3d.com/ja/current/Manual/SL-SurfaceShaders.html ビルトインシェーダ変数 https://docs.unity3d.com/ja/c
このページを最初にブックマークしてみませんか?
『UnityShader 入門』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く