Appearance
第08回 内積とフレネル、外積と法線マップ
前回: 第07回 ベクトル演算とライティング / 次回: 第09回 影表現の基礎
角度で変わる 見え方を作る
視線、法線、光の関係を 表現に使う
見る角度で 印象は変わります
前回の振り返り
ベクトル演算で光の向きを扱いました
- 第07回では、法線、ライト方向、視線方向を扱いました
Dot Productを使い、法線とライト方向の近さから 簡易的な明るさを作りました- この考え方はランバート反射に近く、 視線方向は考慮していませんでした
ReflectやRefractによって 方向ベクトルを変化させる考え方にも触れました- 今回は視線方向との内積からフレネル表現へ進み、 接線空間と法線マップの考え方も扱います
今回の授業で扱うこと
角度の違いを見た目に変える
- 視線方向と法線の関係
- フレネル効果
- リムライト
- トゥーン風の段階的な明暗
- 法線マップの役割
- 接線空間と外積の関係
- 角度情報を使って、質感や演出を制御する方法
今回の授業内容
フレネル、リムライト、法線マップ
- View Direction と Normal Vector
- 内積による角度マスク
- Fresnel Effect ノード
- Cross Product と接線空間
- Normal Map と Tangent Space
- 授業内課題
なぜ視線方向を扱うのか
観測される光を考える
- 前回扱ったランバート反射では、 法線とライト方向から明るさを求めました
- ですが現実の物体の光の反射は一律ではありません 光の入射方向に対して、様々な方向に反射されます
- そして、物体の表面で反射した光は、カメラに届いて初めて観測されます つまり、質感表現では光源の方向だけでなく視線の方向も重要になります
View Direction
視線方向を表すベクトル
View Directionは、表面からカメラへ向かう方向を表すベクトルです法線と視線方向が近いほど、面を正面から見ていることになります 法線と視線方向が直角に近いほど、面を横から見ていることになります
同じ面でも、カメラの位置や向きが変わると
View Directionの値も変わります視線方向を使うと、反射や透明感のような 観測角度に依存する質感を扱えます
リムライトやフレネルのような、 輪郭側を強調する演出にも応用できます
リムライト
輪郭を明るく見せる
- リムライトは、背後からライトを当てることで 物体の縁を明るくする表現で 現実世界の映画撮影などでも使われる技法です
- CG では、視線方向と法線の内積を使うことで 輪郭に近い部分を取り出せます
- キャラクターを背景から分離したり 魔法、オーラ、強調などの表現に使えます
物体の輪郭
わずかに明るく見える理由

リムライトの適用例 暗闇の中でも輪郭が見て取れ、 印象的な絵作りにつながる
- 光が当たっていないはずの部分でも、 物の輪郭が明るく見えることがあります
- 周囲からの反射光や環境光、散乱などが 複雑に影響し、輪郭部に光が当たるためです
- こうした「光が回り込んだような見え方」を、 CGでは演出的に強調することがあります
- その代表的な表現がリムライトです
リムライトの実装例
視線方向と法線の内積から求める
Dot(Normal, View Direction)を計算すると 面をどの角度から見ているかが分かります- 正面に近いほど値は大きくなり 輪郭に近いほど値は小さくなります
- ですがこれでは視線をライトとして照らしているような表現になりますので
One Minusを使って反転し、輪郭側ほど大きい値に変換します - これだけでリムライトの表現が可能です エッジを強調したい場合は、さらに
Powerで調整します
演出から物理へ
輪郭の見え方をもう少し深く考える
- リムライトは、輪郭を見やすくするための 演出的な表現として使われます
- 一方で、現実の材質でも見る角度によって反射の強さが変わります 特に浅い角度では、表面の反射が強く見えます
- この反射率の変化を扱うことで、より物理的な質感表現が可能になります
より正確な表現を求める
反射と屈折の割合の変化
入射角によって屈折と反射の割合が変わる 画像はAI生成
- 物質に光が当たると、一部は表面で反射し、 一部は物質の内側へ進みます
- 入射角によって、反射側と屈折側に分かれる 光の割合が変わります
- つまり、光の入射角と反射率の関係を 数式化できれば、物質の質感をよりリアルに 表現できます
フレネルの式
角度によって変わる反射率の式
- フレネルの式(Fresnel equations)は、 入射角によって変わる光のエネルギーの反射率を表す物理式です
- 屈折率や入射角を考慮して反射率を決めることで、 物質の質感をより自然に表現できます
- ただし厳密な式は複雑なため、ゲーム等では近似式が使われます 近似式の一つに Schlick の近似があります
$$ R(\theta) = R_0 + (1 - R_0)(1 - \cos\theta)^5 $$
- $R_0$ は正面からの反射率、$\theta$ は入射角です
フレネル効果と具体例
浅い角度ほど反射が目立つ
- フレネル効果は、見る角度によって反射の強さが変わる現象です
- 水面やガラスは、正面から見るより 浅い角度で見たほうが反射が強く見えます
- Shader Graph には
Fresnel Effectノードがあります - 授業では、この性質をリムライトや発光表現にも応用します
Fresnel Effect ノード
Power で輪郭の出方を調整する

- Shader Graph には
Fresnel Effectノードが あり、視線方向と法線からフレネル効果の値を 簡単に作ることができます - 法線と視線方向の内積を計算し、Power で 調整することで輪郭の出方をコントロール しています
- Power の値を操作して、結果がどのように 変わるかを試してみましょう
法線マップとは
法線の方向を表すテクスチャー

タイルの画像とその法線マップの適用例 画像はAI生成
- 法線マップは、表面の細かな向きを RGB の値として保存したテクスチャーです
- X が赤、Y が緑、Z が青の成分に対応し、 ピクセルの色がその部分の法線方向を表します
- モデルの頂点数を増やさずに 細かな凹凸のような陰影を作れます
- 石、布、皮膚、金属、床など様々な質感の 表現に使われる、CGの基本的な技術です
法線マップの注意
画像を色ではなく方向として扱う

Texture Type を Normal map に設定することで Unity が法線マップとして正しく扱えるようになる
- 法線マップは通常の色画像ではありません RGB を色ではなく法線方向として扱います
- RGBは 0 ~ 100% の値ですが 法線の方向は-1~+1の範囲で表されるため 正しく扱うための指定が必要です
- Unity ではテクスチャーの Import Settings で
Texture TypeをNormal mapに設定します
タンジェント空間
表面ごとのローカルな座標系
接線、従法線、法線の3方向で表される タンジェント空間の模式図 出典: Wikimedia Commons / Public domain
- 法線マップだけでは、RGB で表した法線が 表面上のどちらを向いているのか分かりません 基準となる座標系が必要です
- タンジェント空間は、法線、接線、従法線の 3方向で作る表面ごとのローカルな座標系です
- 法線マップ上の法線は、この表面の座標系に 基づいて解釈されます
外積の活用
2つの方向から垂直な方向を作る
- タンジェント空間は、法線、接線、従法線の3方向で構成されます
- 面の法線は、頂点ごとに定義された法線が補間されて得られるため 描画ピクセルごとにタンジェント空間を計算する必要があります
- 接線は、UV展開の方向を手がかりに用意するのが一般的です
- 外積 は、2つのベクトルの両方に垂直なベクトルを返す演算です 接線と法線が分かれば、外積 で従法線の向きを求められます
- こうして三方向がそろうことで、法線マップの法線を 正しく解釈できるようになります
法線マップとライティング
面の向きを細かく変える
- ライティングに使う法線方向を細かく変えることで 凹凸があるように見せるのが法線マップの役割です
- 法線マップは、実際の形状を変えるわけではありません ライトの当たり方を変えることで、見た目を変える技術です
- 石の表面、木の板、布のシワ、皮膚の細かい凹凸など 多くの質感表現に欠かせない技術ですが 法線マップだけでは厚みのある物体の表現には限界があります
実習
フレネルと法線マップを試す
角度で変わる表現を 作ってみましょう
実習1
リムライトを作る
Normal VectorとView Directionを追加する- 2つのノードの Space をそろえる
Dot Productで内積を計算するOne Minusで輪郭側が明るくなる値にするPowerで輪郭の幅を調整する- リム色と
Multiplyし、Base ColorまたはEmissionに足す
実習2
Fresnel Effect ノードを使う
Fresnel Effectノードを追加するPowerをプロパティ化する- 出力に色を掛ける
Emissionに接続し、発光表現にするPowerを変えて輪郭の太さを確認する
実習3
トゥーン風の明暗を作る
- 法線とライト方向の内積を作る
Stepで明暗を2段階に分けるLerpで明るい色と影色を混ぜる- しきい値をプロパティ化する
- 必要に応じてリムライトを足す
実習4
法線マップを使う
- 法線マップ用のテクスチャーを用意する
Texture TypeをNormal mapに設定する- Shader Graph でテクスチャーを読み込む
Normal入力へ接続する- ライトを当てて凹凸感を確認する
授業内課題
フレネルを使い、必要に応じて 法線マップも組み合わせた マテリアルを作成してください
角度による変化を 見せられるかがポイント
課題の条件
以下を満たしてください
View DirectionまたはFresnel Effectを使っている- 角度によって色、発光、透明度のいずれかが変化する
- 強さや範囲をプロパティで調整できる
StepまたはSmoothstepで値を加工している- 法線マップを使う場合は、 Import Settings を
Normal mapに設定している - スクリーンショットまたは動画で、角度による変化が確認できる
この回の到達目標
- 視線方向と法線の関係から、見る角度で見え方が変わることを説明できる
- フレネル効果をリムライトや発光表現に応用できる
- 外積と接線空間の関係を説明できる
- 法線マップが色ではなく向きを保存した画像であることを説明できる
- 法線マップを使って、表面の細かな凹凸感を作れる
今回のまとめ
角度情報を質感に変える
- 視線方向と法線の内積を使えば、面が輪郭寄りか正面寄りかを判定できます
- フレネルは、見る角度に応じて反射や発光の強さを変える表現です
- 外積を使うと、接線空間を支える3方向のうち、従法線を求められます
- 法線マップは、表面の細かな向きを色として保存した画像です
- これらの考え方は、キャラクター・背景・エフェクトの質感づくりに応用できます