---
title: 光と立体感
url: https://doc.liz6.com/ja/general-education/visual-foundations/02-light-and-volume
locale: ja
area: general-education
tags:
- 教養入門
- 視覚表現の基礎
date: 2026-09-10
modified: 2026-09-10
description: 円を灰色で塗ると、円盤にも球にも見えます。輪郭だけでは、すべては分かりません。円の内側に明暗の関係をつくると、向きを変えながら続く面として読み取れるようになります。
---

# 光と立体感

円を灰色で塗ると、円盤にも球にも見えます。輪郭だけでは、すべては分かりません。円の内側に明暗の関係をつくると、向きを変えながら続く面として読み取れるようになります。

**面の明暗は立体感の手がかりになり、別の面に落ちる影は物体と周囲の関係を示します。** この二つから始め、カップの段階図で接触、縁、反射光を区別します。描画の熟練よりも、図の手がかりに基づく判断を練習します。

## 輪郭、面の明暗、落ちる影を分ける

下の三つの図を比べてください。A は輪郭と平塗りだけ、B は面の明暗を加え、C は床に落ちる影も加えています。それぞれ、どんな情報が増えたでしょうか。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 210" width="600" height="210" role="img" aria-labelledby="vf-2-wide-title" data-diagram-layout="wide" data-diagram-theme="native">
<title id="vf-2-wide-title">A 平塗りの円、B 明暗のある球の模式図、C 床の影も加えた図。</title>
<defs>
<radialGradient id="vf-2-wide-ball" cx="30%" cy="25%" r="80%">
<stop stop-color="#eee"/>
<stop offset=".5" stop-color="#aaa"/>
<stop offset="1" stop-color="#3f3f3f"/>
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#e8e4dc"/>
<g transform="translate(0 0) scale(1)">
<rect y="138" width="200" height="45" fill="#bbb"/>
<circle cx="90" cy="102" r="51" fill="#858585"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">A</text>
</g>
<g transform="translate(200 0) scale(1)">
<rect y="138" width="200" height="45" fill="#bbb"/>
<circle cx="90" cy="102" r="51" fill="url(#vf-2-wide-ball)"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">B</text>
</g>
<g transform="translate(400 0) scale(1)">
<rect y="138" width="200" height="45" fill="#bbb"/>
<ellipse cx="137" cy="154" rx="56" ry="12" fill="#4a4a4a"/>
<circle cx="90" cy="102" r="51" fill="url(#vf-2-wide-ball)"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">C</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 787.5" width="250" height="787.5" role="img" aria-labelledby="vf-2-compact-title" data-diagram-layout="compact" data-diagram-theme="native">
<title id="vf-2-compact-title">A 平塗りの円、B 明暗のある球の模式図、C 床の影も加えた図。</title>
<defs>
<radialGradient id="vf-2-compact-ball" cx="30%" cy="25%" r="80%">
<stop stop-color="#eee"/>
<stop offset=".5" stop-color="#aaa"/>
<stop offset="1" stop-color="#3f3f3f"/>
</radialGradient>
</defs>
<rect width="100%" height="100%" fill="#e8e4dc"/>
<g transform="translate(0 0) scale(1.25)">
<rect y="138" width="200" height="45" fill="#bbb"/>
<circle cx="90" cy="102" r="51" fill="#858585"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">A</text>
</g>
<g transform="translate(0 262.5) scale(1.25)">
<rect y="138" width="200" height="45" fill="#bbb"/>
<circle cx="90" cy="102" r="51" fill="url(#vf-2-compact-ball)"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">B</text>
</g>
<g transform="translate(0 525) scale(1.25)">
<rect y="138" width="200" height="45" fill="#bbb"/>
<ellipse cx="137" cy="154" rx="56" ry="12" fill="#4a4a4a"/>
<circle cx="90" cy="102" r="51" fill="url(#vf-2-compact-ball)"/>
<text x="100" y="198" text-anchor="middle" font-family="sans-serif" font-size="22" fill="#34302a">C</text>
</g>
</svg>

円の輪郭は平面的な形です。B の内部の明暗の移り変わりによって、丸い面を読み取りやすくなります。C の影は、床との接触や光の向きを示します。**輪郭、面の明暗、投影は別々の手がかりです。** 静止図は関係を示す模式図で、次の実験では同じ幾何モデルで変化を確かめます。

## 同じ表面に明暗が生まれる理由

白い紙をランプに正面から向け、ゆっくり傾けるところを想像してください。紙の色は同じでも、面の向きが変わります。単純なつや消し面では、光に向いた部分ほど直接の光を受けやすく、横を向くほど受けにくくなります。

球面は、少しずつ向きの異なる小さな面の集まりと考えられます。面の向きも受ける光も連続して変わるため、丸みのある明暗の変化が生まれます。箱では面の境界で向きが急に変わり、明暗もはっきり変わる場合があります。

これは**材質が同じで、照明条件が分かっているときの比較**です。暗い色の物体の明部が、明るい色の物体の暗部より明るいとは限りません。異なる物体を含む画像の最も明るい画素だけで、光源の位置を判断することはできません。

## 光を動かして予想を確かめる

光を左から右へ動かすと、どんな二つの変化が起きるでしょうか。「受光を追加」と「投影を追加」を切り替え、球面と床を分けて観察します。

**同じ球の明暗を段階ごとに見る**

球、床、カメラ、材質は固定。平塗りは輪郭だけを残し、受光表示では面の向きで明暗が変わり、投影表示では床への光を球が遮るかも計算します。スライダーは遠方の光源の左右方向だけを変えます。


理想的なつや消し球と、遠方からの方向光を使ったモデルです。面の向きから直接の受光を計算し、光源への経路を球が遮るかを調べます。背光側も見えるよう、一定の弱い環境光を加えています。室内照明全体を再現するものではありません。

**物体自身の暗い側は、その表面の一部です。投影は、物体が光を遮って別の面を暗くした領域です。** 球の横に固定の黒い楕円を貼るようなものではなく、光の向きが変われば位置も変わります。

## 明るい部分、暗い部分を全部同じように扱わない

同じ球の模式図で、位置、縁、表面の性質を分けて比べます。これらは構造を説明する図です。光の向きを変えたときの厳密な関係は、前の操作できるモデルで確認します。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 520" width="640" height="520" data-vf-case="2" data-diagram-layout="wide" data-diagram-theme="native" role="img" aria-labelledby="case-2-wide-title">
<title id="case-2-wide-title">A 硬い投影、B 投影の縁を柔らかく、C 局所的なハイライト、D 輪郭の縁を確認。構造の模式図。</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-2-wide-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-wide-0)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-wide-0-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-wide-0-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-wide-0-ball)"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(320 0)">
<defs>
<clipPath id="case-2-wide-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-wide-1)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-wide-1-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-wide-1-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56" filter="url(#case-2-wide-1-soft)"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-wide-1-ball)"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-2-wide-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-wide-2)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-wide-2-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-wide-2-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-wide-2-ball)"/>
<ellipse cx="108" cy="91" rx="11" ry="15" fill="#fffefa"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
<g transform="translate(320 260)">
<defs>
<clipPath id="case-2-wide-3">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-wide-3)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-wide-3-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-wide-3-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-wide-3-ball)"/>
<path d="M131 56a64 64 0 0 1 56 95" fill="none" stroke="#2c6074" stroke-width="4"/>
<path d="M188 156L254 150" stroke="#2c6074" stroke-width="2"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">D</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 1040" width="320" height="1040" data-vf-case="2" data-diagram-layout="compact" data-diagram-theme="native" role="img" aria-labelledby="case-2-compact-title">
<title id="case-2-compact-title">A 硬い投影、B 投影の縁を柔らかく、C 局所的なハイライト、D 輪郭の縁を確認。構造の模式図。</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-2-compact-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-compact-0)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-compact-0-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-compact-0-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-compact-0-ball)"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-2-compact-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-compact-1)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-compact-1-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-compact-1-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56" filter="url(#case-2-compact-1-soft)"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-compact-1-ball)"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 520)">
<defs>
<clipPath id="case-2-compact-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-compact-2)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-compact-2-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-compact-2-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-compact-2-ball)"/>
<ellipse cx="108" cy="91" rx="11" ry="15" fill="#fffefa"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
<g transform="translate(0 780)">
<defs>
<clipPath id="case-2-compact-3">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-2-compact-3)">
<rect x="10" y="8" width="300" height="220" fill="#e5dfd4"/>
<rect x="10" y="164" width="300" height="64" fill="#b8b1a4"/>
<defs>
<radialGradient id="case-2-compact-3-ball" cx="32%" cy="28%" r="75%">
<stop stop-color="#f2ede2"/>
<stop offset=".52" stop-color="#c4bcab"/>
<stop offset=".73" stop-color="#726e65"/>
<stop offset="1" stop-color="#8a8478"/>
</radialGradient>
<filter id="case-2-compact-3-soft">
<feGaussianBlur stdDeviation="5"/>
</filter>
</defs>
<ellipse cx="195" cy="178" rx="83" ry="15" fill="#625e56"/>
<circle cx="131" cy="120" r="64" fill="url(#case-2-compact-3-ball)"/>
<path d="M131 56a64 64 0 0 1 56 95" fill="none" stroke="#2c6074" stroke-width="4"/>
<path d="M188 156L254 150" stroke="#2c6074" stroke-width="2"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">D</text>
</g>
</svg>

**A と B：まず投影の縁を見ます。** 見かけの角度の大きさが小さい光源は、硬い影をつくることが多く、窓や広い発光面では半影が生まれます。B は投影の縁を柔らかくして、「どこに影があるか」と「縁がどれほど硬いか」を分けています。実際の柔らかさは遮る物体と影を受ける面の距離でも変わります。絵全体をぼかすだけでは柔らかい照明になりません。

**C：小さく強い明部はハイライトかもしれません。** ハイライトには見る方向、光源、表面の反射特性が関わります。普通の明部に白を足すだけのものではありません。広い受光面と局所的なハイライトには別の役割があり、つや消しの土器、釉薬のある陶器、金属に同じ描き方を当てはめられません。

**D：外側の縁と、面の内部の変化を分けます。** 球の輪郭は背景との明確な境界になっても、球面内部の明暗は連続して変わります。箱の稜では面の向きが急に変わり、明暗の区切りも明確になり得ます。「丸い物は縁を全部ぼかす」という指示では、この違いが失われます。

## 手順で学ぶ：淡色のカップに明暗をつくる

左側の窓の近くに、基本的につや消しのカップがあり、机に立っていることを伝えたいとします。画像を読む場合も描く場合も、次の順序で確認できます。


形、視点、左上の主光を固定します。A は輪郭と材質の地色、B は面の向きを二つの明暗に整理、C は底につながって右へ延びる投影と接触の暗さ、D で円柱面の移り変わり、内側、口縁、暗部への控えめな反射光を表します。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 520" width="640" height="520" data-vf-case="steps-cup" data-diagram-layout="wide" data-diagram-theme="native" role="img" aria-labelledby="case-steps-cup-wide-title">
<title id="case-steps-cup-wide-title">同じカップで各段階を見る</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-steps-cup-wide-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-wide-0)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="#d5d0c2"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(320 0)">
<defs>
<clipPath id="case-steps-cup-wide-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-wide-1)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<defs>
<linearGradient id="case-steps-cup-wide-1-cup">
<stop offset="0" stop-color="#eee8d9"/>
<stop offset=".58" stop-color="#eee8d9"/>
<stop offset=".59" stop-color="#89877d"/>
<stop offset="1" stop-color="#89877d"/>
</linearGradient>
</defs>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="url(#case-steps-cup-wide-1-cup)"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-steps-cup-wide-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-wide-2)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<ellipse cx="199" cy="184" rx="84" ry="13" fill="#7b786f"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<defs>
<linearGradient id="case-steps-cup-wide-2-cup">
<stop offset="0" stop-color="#eee8d9"/>
<stop offset=".58" stop-color="#eee8d9"/>
<stop offset=".59" stop-color="#89877d"/>
<stop offset="1" stop-color="#89877d"/>
</linearGradient>
</defs>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="url(#case-steps-cup-wide-2-cup)"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
<path d="M105 176Q154 194 203 177" fill="none" stroke="#5f6058" stroke-width="4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
<g transform="translate(320 260)">
<defs>
<clipPath id="case-steps-cup-wide-3">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-wide-3)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<ellipse cx="199" cy="184" rx="84" ry="13" fill="#7b786f"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<defs>
<linearGradient id="case-steps-cup-wide-3-cup">
<stop stop-color="#d8d3c3"/>
<stop offset=".25" stop-color="#eee8d9"/>
<stop offset=".55" stop-color="#d2cdbd"/>
<stop offset=".76" stop-color="#858379"/>
<stop offset="1" stop-color="#a3a092"/>
</linearGradient>
</defs>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="url(#case-steps-cup-wide-3-cup)"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
<path d="M105 176Q154 194 203 177" fill="none" stroke="#5f6058" stroke-width="4"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="none" stroke="#e7e0cf" stroke-width="4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">D</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 1040" width="320" height="1040" data-vf-case="steps-cup" data-diagram-layout="compact" data-diagram-theme="native" role="img" aria-labelledby="case-steps-cup-compact-title">
<title id="case-steps-cup-compact-title">同じカップで各段階を見る</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-steps-cup-compact-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-compact-0)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="#d5d0c2"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-steps-cup-compact-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-compact-1)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<defs>
<linearGradient id="case-steps-cup-compact-1-cup">
<stop offset="0" stop-color="#eee8d9"/>
<stop offset=".58" stop-color="#eee8d9"/>
<stop offset=".59" stop-color="#89877d"/>
<stop offset="1" stop-color="#89877d"/>
</linearGradient>
</defs>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="url(#case-steps-cup-compact-1-cup)"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 520)">
<defs>
<clipPath id="case-steps-cup-compact-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-compact-2)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<ellipse cx="199" cy="184" rx="84" ry="13" fill="#7b786f"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<defs>
<linearGradient id="case-steps-cup-compact-2-cup">
<stop offset="0" stop-color="#eee8d9"/>
<stop offset=".58" stop-color="#eee8d9"/>
<stop offset=".59" stop-color="#89877d"/>
<stop offset="1" stop-color="#89877d"/>
</linearGradient>
</defs>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="url(#case-steps-cup-compact-2-cup)"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
<path d="M105 176Q154 194 203 177" fill="none" stroke="#5f6058" stroke-width="4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
<g transform="translate(0 780)">
<defs>
<clipPath id="case-steps-cup-compact-3">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-steps-cup-compact-3)">
<rect x="10" y="8" width="300" height="220" fill="#e6e2d8" />
<rect x="10" y="177" width="300" height="51" fill="#bbb7ac" />
<path d="M35 32L75 66" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L64 64" stroke="#ad7131" stroke-width="2" fill="none"/>
<path d="M75 66L72 55" stroke="#ad7131" stroke-width="2" fill="none"/>
<ellipse cx="199" cy="184" rx="84" ry="13" fill="#7b786f"/>
<path d="M204 89C263 77 266 158 207 159" fill="none" stroke="#908d82" stroke-width="14"/>
<defs>
<linearGradient id="case-steps-cup-compact-3-cup">
<stop stop-color="#d8d3c3"/>
<stop offset=".25" stop-color="#eee8d9"/>
<stop offset=".55" stop-color="#d2cdbd"/>
<stop offset=".76" stop-color="#858379"/>
<stop offset="1" stop-color="#a3a092"/>
</linearGradient>
</defs>
<path d="M96 78H210L203 175Q152 197 103 175Z" fill="url(#case-steps-cup-compact-3-cup)"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="#696d65"/>
<path d="M105 176Q154 194 203 177" fill="none" stroke="#5f6058" stroke-width="4"/>
<ellipse cx="153" cy="78" rx="57" ry="12" fill="none" stroke="#e7e0cf" stroke-width="4"/>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">D</text>
</g>
</svg>

照明が順に変わる図ではなく、描き進める段階です。B の硬い境界は一時的な整理で、残すと折れた面に見えます。D は面の連続を示しつつ輪郭を保ち、反射光は主な明部を超えません。柔らかさで構造の問題を隠す前に、B と C で方向と接触を確認します。

1. **材質と照明を決めます。** カップは淡色で、主光は左からです。右側が暗くても、そこだけ材質の色が変わったわけではありません。
2. **明部と暗部を大きく分けます。** 円柱状の胴が光から向きを変える様子を追います。何十段階ものぼかしを磨く前に、大きな転換を少数の群で示します。
3. **接触と投影をつなげます。** 影の始まりはカップと机の接触付近に対応し、光向きとも整合する必要があります。明らかな隙間があると浮いて見えることがあります。持ち手も光を遮るので、胴の下に無関係な楕円を置くだけでは足りません。
4. **反射光と縁を調べます。** 机から反射した光で暗側が少し明るくなることがあります。ただしこの単純な場面では、大きな暗部のまとまりに従わせ、主光の明部と競う無関係な明点にしないようにします。
5. **細かな変化を最後に加えます。** 口の厚み、持ち手の内側、局所的なハイライトや質感は材質を伝えます。大きな光向きの誤りを埋め合わせるものではありません。

これは確認の順序で、決まった灰色の配合ではありません。黒いカップ、逆光、複数のランプなら条件が変わります。

| 気になる見え方 | 最初の確認 | 優先する変更 |
| --- | --- | --- |
| 紙のように平たい | 面の向きに応じた明暗があるか | 質感より大きな面の転換をつくる |
| 浮いて見える | 接触と投影が連続しているか | 接触部と影の始点を直す |
| 土器のつもりが光沢材に見える | ハイライトが強すぎないか | 局所光と広い明部の関係を比べる |
| 濁って見える | 小さな黒点や勾配が散っていないか | 明暗をまとめ、構造に必要な変化を残す |

次の観察画像では、面の向きの変化、他の物体による遮光、材質自体の暗さを別々に探してください。三つが同時にあっても、説明は異なります。

## 静物の画像に戻って見る

生成した静物の観察画像。左に青灰色の花瓶、右に黄土色の箱と手前の白球、左下に緑の葉。左上が明るく、机の影は右へ伸びています。

観察素材 · AI で生成した静物。形、明暗、色、空間を比べるためのもので、物理的な測定の根拠には使いません。


白い球の左上は明るく、右へ回ると暗くなっています。次に、卓上を右へ伸びる影を見ます。二つの手がかりは、主な光が左上から来るという読み取りを支えます。箱の上面、正面、側面も、それぞれ向きと明暗が異なります。

花瓶は外側の輪郭だけでなく、内部の明暗の移り変わりでも丸みを示しています。一方、葉の暗さには材質の色も照明も関わります。物体間の明暗差をすべて光だけで説明しないようにしましょう。

この生成画像は、手がかりを指摘するための観察素材です。光の数値を検証する用途には使いません。受光と遮蔽の一定の関係は、上の幾何実験で確かめます。

## 別の物体で確認：缶が机に接するのは？

左上の矢印が主光の方向で、三つの缶の材質は同じです。浮いて見える A に対し、B と C は投影を動かしています。接触を改善し、受光方向も保つ案を選び、もう一方に増えた問題を指摘してください。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 520" width="640" height="520" data-vf-case="practice-2" data-diagram-layout="wide" data-diagram-theme="native" role="img" aria-labelledby="case-practice-2-wide-title">
<title id="case-practice-2-wide-title">別の物体で確認：缶が机に接するのは？</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-practice-2-wide-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-2-wide-0)">
<rect x="10" y="8" width="300" height="220" fill="#e5e0d5" />
<rect x="10" y="172" width="300" height="56" fill="#b7b0a1" />
<ellipse cx="208" cy="205" rx="78" ry="12" fill="#767266"/>
<rect x="104" y="78" width="53" height="101" fill="#e7ddc7" />
<rect x="157" y="78" width="49" height="101" fill="#817b6e" />
<ellipse cx="155" cy="78" rx="51" ry="12" fill="#e7ddc7"/>
<text x="25" y="36" font-size="26" font-family="sans-serif" fill="#293b43">↘</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(320 0)">
<defs>
<clipPath id="case-practice-2-wide-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-2-wide-1)">
<rect x="10" y="8" width="300" height="220" fill="#e5e0d5" />
<rect x="10" y="172" width="300" height="56" fill="#b7b0a1" />
<ellipse cx="167" cy="180" rx="78" ry="12" fill="#767266"/>
<rect x="104" y="78" width="53" height="101" fill="#e7ddc7" />
<rect x="157" y="78" width="49" height="101" fill="#817b6e" />
<ellipse cx="155" cy="78" rx="51" ry="12" fill="#e7ddc7"/>
<ellipse cx="155" cy="179" rx="51" ry="5" fill="#656356"/>
<text x="25" y="36" font-size="26" font-family="sans-serif" fill="#293b43">↘</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-practice-2-wide-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-2-wide-2)">
<rect x="10" y="8" width="300" height="220" fill="#e5e0d5" />
<rect x="10" y="172" width="300" height="56" fill="#b7b0a1" />
<ellipse cx="167" cy="180" rx="78" ry="12" fill="#767266"/>
<rect x="104" y="78" width="53" height="101" fill="#817b6e" />
<rect x="157" y="78" width="49" height="101" fill="#e7ddc7" />
<ellipse cx="155" cy="78" rx="51" ry="12" fill="#e7ddc7"/>
<ellipse cx="155" cy="179" rx="51" ry="5" fill="#656356"/>
<text x="25" y="36" font-size="26" font-family="sans-serif" fill="#293b43">↘</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
</svg>

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 780" width="320" height="780" data-vf-case="practice-2" data-diagram-layout="compact" data-diagram-theme="native" role="img" aria-labelledby="case-practice-2-compact-title">
<title id="case-practice-2-compact-title">別の物体で確認：缶が机に接するのは？</title>
<rect width="100%" height="100%" fill="#f6f4ef"/>
<g transform="translate(0 0)">
<defs>
<clipPath id="case-practice-2-compact-0">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-2-compact-0)">
<rect x="10" y="8" width="300" height="220" fill="#e5e0d5" />
<rect x="10" y="172" width="300" height="56" fill="#b7b0a1" />
<ellipse cx="208" cy="205" rx="78" ry="12" fill="#767266"/>
<rect x="104" y="78" width="53" height="101" fill="#e7ddc7" />
<rect x="157" y="78" width="49" height="101" fill="#817b6e" />
<ellipse cx="155" cy="78" rx="51" ry="12" fill="#e7ddc7"/>
<text x="25" y="36" font-size="26" font-family="sans-serif" fill="#293b43">↘</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">A</text>
</g>
<g transform="translate(0 260)">
<defs>
<clipPath id="case-practice-2-compact-1">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-2-compact-1)">
<rect x="10" y="8" width="300" height="220" fill="#e5e0d5" />
<rect x="10" y="172" width="300" height="56" fill="#b7b0a1" />
<ellipse cx="167" cy="180" rx="78" ry="12" fill="#767266"/>
<rect x="104" y="78" width="53" height="101" fill="#e7ddc7" />
<rect x="157" y="78" width="49" height="101" fill="#817b6e" />
<ellipse cx="155" cy="78" rx="51" ry="12" fill="#e7ddc7"/>
<ellipse cx="155" cy="179" rx="51" ry="5" fill="#656356"/>
<text x="25" y="36" font-size="26" font-family="sans-serif" fill="#293b43">↘</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">B</text>
</g>
<g transform="translate(0 520)">
<defs>
<clipPath id="case-practice-2-compact-2">
<rect x="10" y="8" width="300" height="220" rx="3"/>
</clipPath>
</defs>
<g clip-path="url(#case-practice-2-compact-2)">
<rect x="10" y="8" width="300" height="220" fill="#e5e0d5" />
<rect x="10" y="172" width="300" height="56" fill="#b7b0a1" />
<ellipse cx="167" cy="180" rx="78" ry="12" fill="#767266"/>
<rect x="104" y="78" width="53" height="101" fill="#817b6e" />
<rect x="157" y="78" width="49" height="101" fill="#e7ddc7" />
<ellipse cx="155" cy="78" rx="51" ry="12" fill="#e7ddc7"/>
<ellipse cx="155" cy="179" rx="51" ry="5" fill="#656356"/>
<text x="25" y="36" font-size="26" font-family="sans-serif" fill="#293b43">↘</text>
</g>
<text x="160" y="251" text-anchor="middle" font-size="21" font-family="sans-serif" fill="#555">C</text>
</g>
</svg>

<details data-vf-practice="2"><summary>先に判断してから解説を開く</summary>

B です。投影が底につながり、接触部が暗くなり、左が明るく右が暗い関係も保たれます。C は接触を直す一方で左右の明暗を逆転させました。同材質で左上に主光が一つという条件では、別の説明が必要です。一つの手がかりを直しても、他の矛盾は残ります。

</details>

## 別の状況で確認する

**状況一：** つや消しの箱を右上から照らしています。別の光源や反射の条件を示さず、左を向いた面を最も明るく描きました。何から確認しますか。

<details><summary>考え方の例を開く</summary><p>各面が光に対してどちらを向いているかを調べ、材質の違いと照明の違いを分けます。材質が同じで主光が右上だけなら、左向きの面が特に明るい理由が必要です。「左を暗く、右を明るく」という決まりだけでは不十分で、各面の向きが判断の基準です。</p></details>

**状況二：** 球面の明暗が同じ二つの画像のうち、一方には床の影がありません。必ず間違いでしょうか。

<details><summary>考え方の例を開く</summary><p>必ずしもそうではありません。球が浮いていたり、床が画面外にあったり、平面的な表現を選んでいたりする可能性があります。ただし、同じ照明と接触条件を示す二枚なら、影を省いた理由が必要です。何を表す画像かを確認してから、手がかりが整合するかを見ます。</p></details>

## 観察のための三つの問い

輪郭はどんな形か。面が向きを変えると明暗はどう変わるか。影は誰の表面に落ちているか。この三つを分けると、決まった灰色を探すよりも立体を読み取りやすくなります。

任意の実践：つやのないカップと卓上ランプを用意し、見る位置を固定してランプだけを動かします。カップ自身の暗部と机の影を別々に追ってください。完成した素描を描く必要はありません。

参考：[Getty：明暗で立体を表す](https://www.getty.edu/education/teachers/classroom_resources/tips_tools/downloads/exploring_value.pdf)、[PBRT：拡散反射](https://www.pbr-book.org/4ed/Reflection_Models/Diffuse_Reflection)。ハイライト、反射光、柔らかい影は、この基本関係を理解してから学べます。
