土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

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

Standard ShaderのEmissionを自作シェーダーに組み込みたかった(過去形)

Standard ShaderにEmissionという項目があります。 docs.unity3d.com これはオブジェクト自体を発光体にする物で、オプション選択で、ライトマップにベイクしたり、ライトプローブにリアルタイム反映させたりできます。とはいえ、その「ライトマップにベイク…

Unityライティングモードリファレンスカードを和訳

Unity Lighting Modes Reference Cardという公式が提供しているスプレッドシートがあります。これは、UnityでのGI(グローバルイルミネーション)において、光を投影するライトと、その光を受けるオブジェクトのそれぞれが動的/静的だった場合に、ライトと…

モバイル環境での遅延シェーディングがアリになったタイミングの話

モバイル環境での遅延シェーディング(ディファードシェーディング)は、元々非サポートだったのが少し前からアリになったというのは小耳にかじっていたのですが、ドキュメントを読んでいたら、2017.4から解説が更新されている事に気づきました。2017.3 http…

円形のエリアライト(Unity2018.3からの新機能)の話

シェーダー本3の執筆中に気づいたこと。2018.3から、エリアライトに円形(Disc)が追加されました。これまでは矩形(RectAngle)しかなかったので、表現の幅が広がったと言えましょう。 https://unity3d.com/jp/unity/whats-new/unity-2018.3.0 これにとも…

LightmapParametersクラスの話

LightingウィンドウにLightmapParametersという指定項目がありまして、通常は下記のリストから選択するんですが、LightmapParametersアセットを作成してカスタマイズもできます。LightmapParameters https://docs.unity3d.com/2018.3/Documentation/ScriptRe…

Unityゲーム プログラミング・バイブル

はてなダイアリーからはてなブログに移行しても、特に大きな変化はないんですが、Amazonアフィリエイトリンクを貼れるようになったのは大きい気がする。というわけで今年土屋が参加した本を貼っておきます。なにげに商業テクニカルライティングは今回が初で…

ShaderでBlendの引数をカスタマイズしたいという話

StandardShaderでは、PassによってBlendやZWriteが以下のように記述されていて、外部から設定可能になっています(ただし、ここに出てくる_SrcBlendなどのプロパティはインスペクタ上は非表示なのでユーザーは直接変更できません。) Name "FORWARD" Tags { …

ScreenCapture.CaptureScreenshot()のバグ

ScreenCapture.CaptureScreenshot()でスクリーンショットを出力すると画像がぶっ壊れてる現象に遭遇し結構悩んでいたのですが、Unityのバグだったようです(マジか)。SCREENCAPTURE.CAPTURESCREENSHOT PRODUCES BLURRY SCREENSHOTS WHEN THE 'SUPERSIZE' AR…

Unityフォワードレンダリングにおけるライト割り当てルールまとめ

下はUTS2を適用したモデルの周りを複数のポイントライトが周回する動画です。ライトの位置によって、モデルの色がパキッと割れるのが観察できる良いサンプルだと思います。このフリップは、Unityがプリミティブごとに適用するライトの種類と個数を自動的に設…

Bash on Windows上に構築したPostgreSQLにWinデスクトップ側からアクセスしたい

のだけど、できないんだろうか?(linuxもpostgresqlも初めて触るので勝手が全然わからない)。 あと、psqlでパスワードを要求されるのだけど、パスワードを作った覚えがねーんだが、これはなにかミスってるのか? ←pstgresqlユーザーにパスワード追加して、…

Rubyで指数表現なしで数値を出力する

コードを書いていると頻繁に指数で管理している数値を指数なしの十進表現で出力したい時があると思いますが(※ない)、rubyでこれをやる方法を毎回忘れてしまうのでメモっておきます。 require 'bigdecimal' #プランク長長さ(1.61622938*10^-35)を指数表記…

Utf8JsonをUnityで使ってみる(2)

前回ドキュメントから適当に拾ったデシアライズのサンプルコードがdynamic型を使うことが前提になっていてどうなんだろうと思いましたが、単に対象のJSONデータの構造が未知の場合にはdynamicを使うことになるという事のようです(そりゃそうだ。rubyに慣れ…

ForwardAdd Passのコードを書く際の注意点

以前から、スポットライトを受けるシェーダーを検証している最中に、プレーンが変な形に切り抜かれることがあって、これはいったいなんなんだろうと思っていたのですが、ようやく「そのライトが当たらないフラグメントについてはForwardAddパスが実行されな…

Utf8JsonをUnityで使ってみる(1)

(以下、スクショのスケールやトリミングができてないんですが、面倒なのでいつかやるかも、くらい。あとごめん、コードは微妙に実際に使ったものと違うのでそのままでは動かないかも。これは後で確認します) 司エンジン(土屋が開発しているコード注入式ス…

「Unityシェーダープログラミングの教科書2 【反射モデル&テクスチャマップ編】」本文サンプル公開&BOOTHでPDF版頒布開始しました

BOOTHでの頒布開始しています。が、記事を書く時間的余裕が全然ない! もうしばらくお待ちを〜(2018/10/18)Unityシェーダープログラミングの教科書2【反射モデル&テクスチャマップ編】(via BOOTH) https://booth.pm/ja/items/1032141 シェーダープログラ…

「ユニティちゃんトゥーンシェーダーの コードをひたすら読む本(PDF版)」内容紹介

仕事が忙し過ぎて更新できないまま技術書典4を迎えてしまったため、その時の新刊「ユニティちゃんトゥーンシェーダーの コードをひたすら読む本 (Ver2.0.3対応版)」の紹介記事をまだブログにアップしていなかったのでした。にもかかわらず、気づけば5月…

ユニティちゃんトゥーンシェーダーのUIを改修するエディタ拡張を作ってみた

カスタムマテリアルエディターの勉強の過程で、ユニティちゃんシェーダーのUIを改修するコードを書いてみました。以下主な特徴です ソースコードの配置場所 ソースコードは下記にアップしてあるので欲しい方はご自由にどうぞ。あくまで土屋が使いやすいよ…

カスタムマテリアルエディターまわりのドキュメント誤訳メモ

ShaderGUI.FindProperty https://docs.unity3d.com/jp/current/ScriptReference/ShaderGUI.FindProperty.html原文:If true then this method will throw an exception if a property with propertyName was not found. 公式訳:True の場合、このメソッドは…

ミップマップレベルを可視化する

ミップマップテクスチャの簡単な説明 Unityではテクスチャを登録すると、そのテクスチャのミップマップテクスチャ群が自動生成され、リソースに追加されます。ミップマップテクスチャというのは、元の画像を25%ずつ縮小した画像群(通常9枚作成され、元…

Unityで投影テクスチャマッピングを実装する際に抑えておくべき基礎情報

ブログで告知する余裕がなかったのですが、10月22日に開催された技術書典4では既刊のUnityシェーダー本を過去最多部数の再販と、新刊コピー本の「ユニティちゃんトゥーンシェーダーのコードをひたすら読む本」を持ち込んだ所、技術書典始まって以来の晴…

UnityのシェーダーでBINORMAL入力セマンティクスが機能しない話と回避する方法の話

技術書典4合わせで「ユニティちゃんトゥーンシェーダーをひたすら読む本」というコピー本を作りました。時間の関係で調べ切れなかった事を1個書いておきます。ああ、これも書きたかったな……。シェーダー本2に収録しよう……。 Unityの頂点シェーダーの入力…

Unity Tips "UV Charting Control"と"Lightmap Settings"のオプションを出す方法

一瞬戸惑ったのでメモ。Mesh Rendererのインスペクターで"UV Charting Control"と"Lightmap Settings"の2項目を表示させるには、以下の設定が必要です。・"Lightmap Static"のチェックを入れる(対象のオブジェクトをStaticにした場合は自動でオンになる) …

ユニティちゃんシェーダーを読む(トゥーンシェード1)

準備運動も終わったので本丸のトゥーンシェード部のPass(Name "FORWARD")を見て行きます。今回は頂点シェーダー部 入出力セマンティクスと頂点シェーダー struct VertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float4 tangent : TANGE…

ユニティちゃんシェーダーを読む(輪郭線3)

フラグメントシェーダー関数 ここからフラグメントシェーダー関数になります。 float4 frag(VertexOutput i, float facing : VFACE) : SV_Target{ 入力は、VertexOutput構造体と、VFACEセマンティクスがバインドされたfacingです。VFACEは浮動小数点スカラー…

ユニティちゃんシェーダーを読む(輪郭線2)

余談:ユニティちゃんシェーダーのバージョンの話 この記事で参照しているコードのverは2.0.3なのですが、Unityの小林さんから2.0.4ではごっそり修正してるというお話をツイッター経由で教えて頂きました。うっすらそうなのかなとは思っていたのですが、まあ…

スクリプタブルレンダーパイプラインとはなにか

Unity 2018.1から、シェーダーの内部処理に大胆なメスが入りまして、スクリプタブルレンダーパイプライン(SRP)という機能が実装されました。スクリプタブルレンダーパイプラインの概要 https://blogs.unity3d.com/jp/2018/01/31/srp-overview/ とはいえ、S…

ユニティちゃんシェーダーを読む(輪郭線1)

ようやく精神的に余裕が生まれはじめまして、シェーダー本2の執筆を始めようと思ったものの、今から初めても技術書典4への新刊はどうにも間に合いそうにありません。 そこで、前からやろうと思っていた「ユニティちゃんシェーダーのコードを全文読む」を不…

メモ:解決できてない課題

Canvasは非常に便利なんですが、3Dモデルが配置されている空間とスケールがあまりにも違いすぎて(Canvasのスケールに合わせると3Dモデルが米粒になってしまう)、往復して作業するのが非常にめんどくさいのだけど、これどうにかならんのかな?

メモ0220

Humanoidモデルに対して、モーションデータで追加のボーン(髪とか)を動かしたい場合、Animationの設定でそれを明示する必要があります。 具体的な手順は以下(モデル側も、モーション側も必要だと思います)。・Animationタブの下の方にある"Mask"を開く …

メモ:現状解決できていない課題

現状解決できていない課題をメモっておく・Mayaからモーションデータだけを"*.anim"形式で書きだした場合、これはUnity側で取り込めないのか? Mayaから直接される.animと、Unity上でfbxから抽出した.animは別フォーマットのデータっぽい