「1変数での微分と、接線の方程式の間の関係」と、「2変数での偏微分と、接平面の方程式の間の関係」を比べてみる
この2つを比べてみると、いろいろわかりやすい気がします。
記事
参考
http://www.fbc.keio.ac.jp/~hkomiya/education/lecture/bisekibun-2-spring-2014-4.pdf http://tutorial.math.lamar.edu/Classes/CalcIII/TangentPlanes.aspx
補足
素人なので間違いがあるかもしれません。 間違っていたら教えていただければ幸いです。
検索エンジンのための文字列
- 1変数の微分 - $$f(x)$$ の、$$x=a$$での接線の方程式は $$y = \frac{d(f(x))}{dx} \mid _{x=a} (x-a) + f(x) \mid _{x=a}$$ である。 - $$f(x)$$ の、$$(a,b)$$における接線の傾きは $$\frac{d(f(x))}{dx} \mid _{x=a}$$ である。 - 2変数の微分 - $$f(x,y)$$ の、$$x=a,y=b$$での接平面の方程式は $$z = \frac{\partial(f(x,y))}{\partial x} \mid _{x=a,y=b} (x-a) + \frac{\partial(f(x,y))}{\partial y} \mid _{x=a,y=b} (y-b) +f(x,y) \mid _{x=a,y=b}$$ である。 - $$f(x,y)$$ の、$$(a,b)$$における接平面の、$$x$$方向の傾きは $$\frac{\partial(f(x,y))}{\partial x} \mid _{x=a}$$ である。 - $$f(x,y)$$ の、$$(a,b)$$における接平面の、$$y$$方向の傾きは $$\frac{\partial(f(x,y))}{\partial y} \mid _{y=b}$$ である。
方向微分(翻訳記事)
この記事は何?
- 方向微分についてのKhan Academyの記事を翻訳したものです。
- 原文は https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/partial-derivative-and-gradient-articles/a/directional-derivatives-going-deeper を参照ください。
- この記事は、Khan Academyの利用規約に従っています。
翻訳
はてなだとTexがかけないっぽいので、画像にしてます。 別タブで画像を開いていただくと文字が読みやすくなるかもしれません。
補足など
- 数学素人が自分用にまとめました。間違っていたら教えてください。
- Khan Academyの記事がとてもわかりやすかったので、感動のあまり翻訳してみました。
検索用の文字
方向微分の正しい定義 正しい定義を気にする理由がいくつかあります。一つは、新しいコンセプトの正式な定義を本当に理解することで、そのコンセプトは実際に何なのか明らかになることです。 しかし、より重要な、最大の利点は、コンセプトの定義を理解することは、そのコンセプトが使えるか使えないか判断する自信がつくことです。 ウォーミングアップとして、xに関する偏導関数の定義を確認してみましょう。 | 記号 | 平易な言葉で書いた理解(informal understanding) | 改まった言葉で書いた理解(formal understanding) | | -------------- | ------------------------------------- | -------------------------------------------------------------------------------------- | | $$\partial x$$ | $$x$$ 方向の僅かな変化 | $$\partial x$$とは、以下2つを行う変数 $$h$$のこと。 - $$h$$ は 0 に限りなく近づく。 - $$h$$ は関数の1つめの入力に足される。 | | $$\partial f$$ | $$\partial x$$ 動かした後の、 関数 $$f$$の出力の変化 | $$\partial f$$とは、 $$h$$ を限りなく0に近づけるときの$$f(x_0+h,y_0)$$ と$$f(x_0,y_0)$$ の差。 | 偏導関数の定義は、ベクトル表記法で書くこともできます。 まず入力を ベクトル $$(x_0, y_0)$$ とみます。 $$\bold x_0$$は ベクトルであることを強調するため、太字で書かれています。 入力全体を、(太字の)文字 $$\bold x$$で表すことは、少しわかりづらい書き方です。 なぜなら、文字 $$x$$ は、入力の1つめの成分を表すのに、太字でない形で既に使用済みだからです。 しかし、これはこの書き方は慣習となっているので、慣習に従いました。 僅かな入力の変化を、$$(x_0+h,y_0)$$ と表記する代わりに $$\textbf{x}_0 + h \hat{\textbf{i}}$$ と表記します。 なお、$$\hat i$$ は $$x$$ 軸方向の単位ベクトルです。 この表記法では、$$x$$ に関する偏導関数を $$\vec v$$ に関する方向微分へと一般化する方法を理解するのは、ずっと簡単になります。 $$\vec v$$ 方向へ僅かに変化させるという概念を数式にしたものが、$$h \vec v$$ を関数$$f$$の入力に足すことだといえます。
数学で出てくる縦棒の意味
補足など
- 数学素人が自分用にまとめました。間違っていたら教えてください。
- はてなだとTexがかけないっぽいので、画像にしてます。
- Vertical bar - Wikipedia が一番まとまっててわかりやすい気がします。
- 偏微分の変化させない変数の用法は、「ヴィジュアルガイド物理数学(前野先生)」の p45 を根拠にしました。
画像をテキストで
画像だと、ググるときに引っかからないと思うので
テキスト形式(markdownの表、Texで数式)も載せます。
Texが入っているせいか、上手く表になってくれないので で囲っています。
| 用法 | 例 | 例の意味 | | --------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 評価(代入) | $$x+3|_{x=2} = 5$$ $$\left.\frac{df}{dx}\right|_{x=1}$$ | $$x$$の関数 $$x+3$$を、$$x=2$$ で評価した値が$$5$$である。 関数$$f$$を$$x$$で微分した後、$$x$$に1を代入する。 | | | | | | 偏微分の変化させない変数の指定 | $$\frac { \partial f(x,y) } {\partial x}\mid_y$$ | xを変数、yを定数とみたときの偏微分。 同じ意味の記法は、以下の2つがある。 - 括弧でくくる記法 $$\left( \frac {\partial f(x,y) } {\partial x} \right)_y$$ - 省略記法 $$\frac { \partial f(x,y) } {\partial x}$$ | | 集合定義の区切り | $$\{x \mid x < 2\}$$ | 集合の要素 $$x$$ は、 2 より小さい数。 同じ意味の記法として、以下がある。 $$\{x : x < 2\}$$ | | 割り切れる | $$2 \mid 12$$ | 2は12を割り切れる。 | | 関数の定義域の制限 | $$f\mid_A : A \rightarrow F$$ | $$f\mid_A$$ は、関数$$f$$と定義域以外は同じ関数で、定義域が「『関数$$f$$の定義域』かつ$$A$$ 」となる関数。 | | 条件付き確率 | $$P(A\mid B)$$ | 条件 B の下での A の確率 |
Unity5.6で主婦写真講座をやってみる
イメージエフェクトなどの使い方を知るために、GOROmanさんの主婦写真講座をやってみた記録です。
こんな感じになりました。
要点まとめ
- Unity5.6なので、Effects Post-processing Stackを使う。
- standard assetのImage Effectや Cinematic Imageは使わない。
- ColorSpaceをLinearにする。
- standard shaderを使う。
- 透明なものは、RenderingModeをTransparentにする。
作業内容
実際の作業は以下のとおり。
ColorSpaceをLinearにする。
なぜやるのか
Unityには、ColorSpaceという設定項目があり、「Gamma」「Linear」の2つが設定できる。 このうち、「Linear」のほうが、綺麗な絵になるらしい。
リニアワークフローでは、レンズフレアやグローのような「光モノ」の合成がよりリアルにしやすいというメリットがあります。 http://compojigoku.blog.fc2.com/blog-entry-26.html
なお、Unity5.6.0f3時点では、ColorSpaceのデフォルトは「Gamma」。
手順
Edit > PlayerSettings > ColorSpace を Linearにする。
環境光の設定(DirectinalLight削除 + IBL設定)
なぜやるのか
- IBLという手法をつかうと、フォトリアリスティックなイメージがつくれる。
- IBLを実現するにはHDR画像が必要。
- IBLで必須ではないDirectinalLightは消す。
- IBLでは、Ligthの設置が必須ではない。http://3dcg.homeip.net/3d_reading/light_camera_render/global_light/01_e.php
- 主婦写真講座では消すことを推奨している。https://twitter.com/GOROman/status/637989636841730048
イメージ ベースド ライティングはフォト リアリスティックなイメージを作成するためのテクニックです。イメージ ベースド ライティングでは、環境(Environment)テクスチャ(イメージ ファイル)を使用して、シーンを照らすことができます。 https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2016/JPN/Maya/files/GUID-A7758B82-59A7-47CE-A6F5-8754282531C1-htm.html
IBLを実現するには HDRI (High Dynamic Rengi Image) と呼ばれる特殊なイメージフォーマットの画像が必要になります。
通常、コンピューター上のイメージは、RGB (Red / Green / Blue ) の 3チャンネル 256階調 のグレースケール画像で表現されていますが、256階調では光源(ライト)に必要な輝度をカバーする事が出来ません。 そこで256階調を超えるダイナミックレンジを持つ特殊な画像が必要となります。 http://3dcg.homeip.net/3d_reading/light_camera_render/global_light/01_e.php#ibl
手順
- 最初からシーンにある、Directional Lightを消す。
- IBL用のSkyboxとして使えるアセット https://www.assetstore.unity3d.com/jp/#!/content/34761 を購入してインポート。
- Window > Lighting > Settings > SkyboxMaterial を 2k_Modern_Loft にする。
なおこのアセット、2017年5月現在では有料になっている。無料でやりたいなら、http://www.hdrlabs.com/sibl/archive.html の画像を使わせていただくとよいらしい。
Tda式初音ミクのインポート
なぜやるのか
手順
- MMD4Mechanim をダウンロード、解凍してAsset/ 配下に配置
- Tda式初音ミク・アペンドVer1.10をダウンロード、Asset/ 配下に配置
- Tda式初音ミク・アペンド_Ver1.10.MMD4Mecanim を選択。
立ちポーズのアニメーション設定
なぜやるのか
- T字ポーズではなく、自然な立っているポーズにしたいため。
- イメージエフェクトとは関係ないので、T字ポーズのままで良いならスキップ。
手順
- 生成されたPrefab
Tda式初音ミク・アペンド_Ver1.10
を選択。Rig > AnimationTypeを Humanoidに変更する。- デフォルト(Generic)では MecanimのHumanoidAnimationをうまく利用できないため、Humanoidにしている。
- UnityChan Official Webサイトから「ユニティちゃん 3Dモデルデータ」をダウンロードしてAnimationsフォルダをインポート。
- Project Window で右クリック > Create > Animator Controllerで、Animator Controller を新規作成。
- Animator Windowで右クリック > Create State で、Stateを新規作成、Motionに WAIT00 を指定する。
MainCameraのRenderingPathを変更
なぜやるのか
RenderingPathをDefferedにすると、デフォルトのForwardと比べて、よりリアルな光と影にできるため。
Deferred Shading is the rendering path with the most lighting and shadow fidelity https://docs.unity3d.com/Manual/RenderingPaths.html
手順
- RenderingPathをDeferredにする。
- MSAAをオフにする。(Deferredのときには使用できないため。)
RenderingPathは、グローバルな設定を Edit > Project Settings > Graphics > TierSettings > Rendering Path から変更し、カメラではuse graphic settings のままにするのでも良いようだ。
構図の調整
Transform, Field Of Viewを調整して、好きな構図にする。 ClippingPlanesのNearを0.01(最低値)にすると、モデルの中身が見える事故が少なくなる。
マテリアルの調整
なぜやるのか
- Unity5のStandard Shaderは、物理ベースレンダリングに対応している。
- 物理ベースレンダリングを使用すると、「異なるライティングの条件でも一貫性のあるもっともらしい見た目を実現できる」(ref)らしい。
手順
- 17個のマテリアルすべて、シェーダーをstandard shaderにする。
- 以下のマテリアルを調整する。
- RenderingMode
- 不透明なものはopaque、透明なものはTransparentにする。
- Metalic
- smoothness
- Emission
- 自己発光しているものに指定する。
- カラーピッカーの右にある、数字入力箇所で数字を増やすと、発光が強くなる。
- RenderingMode
私の場合、設定は以下のようになった。
name | AlbedColor | RenderingMode | Metallic | smoothness | Emission | EmissionColor |
---|---|---|---|---|---|---|
0.face00 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
1.face01 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
2.eye_hi | RGBA(0.690, 0.882, 0.745, 1.000) | Transparent | 1 | 1 | ||
3.eye_hi2 | RGBA(0.400, 0.800, 0.700, 1.000) | Transparent | 0 | 1 | TRUE | RGBA(0.651, 0.651, 0.651, 1.000) |
4.skin | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
5.body00 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 1 | ||
6.body01 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 1 | 1 | ||
7.body_pink | RGBA(0.700, 0.180, 0.430, 1.000) | opaque | 1 | 1 | TRUE | RGBA(1.200, 0.308, 0.737, 1.000) |
8.body_green | RGBA(0.400, 0.900, 0.600, 1.000) | opaque | 0 | 0.5 | TRUE | RGBA(0.532, 1.200, 0.798, 1.000) |
9.body_green2 | RGBA(0.400, 0.900, 0.600, 1.000) | Transparent | 0 | 0 | ||
10.body02 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 1 | ||
11.hair00 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
12.hair01 | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0 | ||
13.hairshadow | RGBA(1.000, 1.000, 1.000, 1.000) | Transparent | 0 | 0.5 | ||
14.cheek | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0.5 | ||
15.lens | RGBA(1.000, 1.000, 1.000, 1.000) | opaque | 0 | 0.5 | ||
16.wing | RGBA(0.400, 0.900, 0.600, 1.000) | Transparent | 0 | 1 |
ハイライトについて
「Emissionは本当に光ってる物体に対してのみ使用する(明るさの調整に使わない)」 http://unityshader.hatenablog.com/entry/2017/02/25/130016
というのがルールらしい。 目のハイライトは自己発光していないので、Emissionを指定しないのが正しいのかもしれない。 が、Emissionなしでハイライトっぽくする方法がわからなかった。
https://www.slideshare.net/Unite2017Tokyo/unite-2017-tokyovr-magic4 ※p34 上記によれば、「ハイライト成分だけ加算半透明」「ハイライト成分だけHDR環境マップ」「リフレクションプローブ」といった手法でできるらしい。
お願い
このあたりのハイライトの設定、ご存知の方がいらっしゃったらよろしければ教えてください。
Post Processing Stackの導入
カメラに取り付けて、画面を綺麗にしたり映像効果を付けるモノを「イメージエフェクト」というらしい。 Post Processing Stackは、この「イメージエフェクト」を使うための提供は、Unity Technologies製アセット。
なぜPost Processing Stackか
Unity Technologies提供の「イメージエフェクト」を実現するアセットとして、より古い以下2つがある。
これらは、カメラにアタッチする順番を間違えると正しく動かないなどの欠点がある。
手順
- Post Processing Stack をインポート。
- Project Window上で右クリック > Create > Post-Processing Profile 。
- Main Cameraに PostProcessingBehaviour スクリプトをアタッチ。
- 2で作成したProfileをインスペクタにドラッグドロップする。
- インスペクタで下記にチェックを入れる
チェックを入れるもの
- Anti aliasing(ギザギザをとる。)
- Ambient Occlusion(くぼみなどを暗くする。)
- Screen Space Reflection(反射を作成する。)
- Bloom(光が漏れるような効果)
- Color Grading ( カラーコレクション。画面全体の色合いを変えること。 )
- Vignette(画面の辺・四隅を暗くしてレンズっぽくする。)
デフォルトから変えるとよさそうなのは、以下のとおり。
- Tonemapperをneutral → Filmic に変更(なぜかは覚えていない)
- Contrastをデフォルトより若干強めた(1 → 1.13)。対比がきれいになる気がする。
- Temperatureを-12.4、Channel MixerでGreen, Blueを強くした。
おわりに
本文中にリンクしました、GOROmanさんの主婦写真講座を はじめとするインターネット上のたくさんの解説から、 イメージエフェクトやマテリアルなどの使い方を勉強させていただきました。
また、Tdaさんの素晴らしいモデル、 NoraさんのMMD4Mechanimを 使わせていただいたおかげで、大変楽しく作業できました。 誠にありがとうございました。
この記事について、ご指摘や改善点などありましたら、ぜひコメント等でお知らせいただければと思います。