Unityによる3DCGプログラミング - 基本原理と実践 -

メディアテクノロジーシリーズ 12

Unityによる3DCGプログラミング - 基本原理と実践 -

CG の基本を理解し,Unityを通してアイデアを実装できるコーディング力を養う1冊

  • 口絵
ジャンル
発行予定日
2026/03/下旬
判型
A5
ページ数
232ページ
ISBN
978-4-339-01382-5
Unityによる3DCGプログラミング - 基本原理と実践 -
近刊

予定価格

3,960

購入案内

  • 内容紹介
  • まえがき
  • 目次
  • 著者紹介

CG研究の着想を形にするには,自ら実装して確かめる力が必要である。本書はUnityを用い,モデリングからレンダリングまでの基本工程を体系的に紹介し,環境が変わっても通用する発想力と技術を身につけるための入門書である。

☆発行前情報のため,一部変更となる場合がございます

Unityは,ゲームなどのインタラクティブなコンテンツ制作に向けて利用普及が急速に進んでいる,3次元コンピュータグラフィックス(3DCG)を代表する統合開発環境の1つです。スクリプトを記述するにはC#のプログラミングスキルを前提としますが,高品質でリアルタイムな描画の仕方が学びやすい環境として知られています。また,マルチプラットフォームに対応し,豊富なアセットが用意され,各種のVR/ARデバイス向けの開発サポートも充実しています。

本書は,慶應義塾大学理工学部情報工学科の藤代研究室で,2023年度から卒業研究に配属された学部4年生に対して,春学期(前期)に集中的に実施してきたUnityプログラミングゼミの内容に基づいています。講師は研究室に所属する大学院生たちで,各自が自身の研究を進める間に培ってきた3DCGプログラミングのコツをより広い読者層に伝授するために,そのゼミ資料を発展させ,本書を執筆しました。

実際,なにかCG研究のアイディアを思いついたとき,それが本当に実現可能かどうかを確かめるには,独自のプログラムを即座に組めなければなりません。そのためにはCGの基本的な仕組みを理解し,実装してみる最低限のコーディング力が必要となります。すでに,3DCGの理論書やプログラミング言語・アプリの指南書は多数出版されていますが,両者をブリッジし,今風のスタイルでコードを開発して自身の方針の良否を検証できるようになるためのコンパクトなコンパニオンはなかなか見つかりません。それが本書を出版した狙いです。本書はUnityをターゲットとしていますが,環境が替わっても3DCGの基本原理は共通するものと信じて執筆されています。

メディアテクノロジーシリーズとメディア学大系には,すでに7冊のCGに関連する書籍が出版され,今後も拡充される計画です。本書は,つぎの図に示すように,両シリーズの既刊書を補間する役割を担っているといえます。





本書は以下のように全6章から構成され,3DCGの基本であるモデリングからレンダリングまでをひととおり網羅しています。
1章 パイプライン(青山)
2章 ポリゴンメッシュ(石飛)
3章 カメラ(徳永)
4章 マテリアル(杉田)
5章 ライティング(杉田)
6章 GPGPU(青山)

1章はモデリングからレンダリングまでの全体の処理の流れパイプラインについて説明しています。他章に比べやや抽象度が高いのですが,残りの章の位置付けや相互の関係を俯瞰するためにも飛ばさずに読んでほしいと思います。次章以降には,Unityを利用したプログラム例が豊富に掲載されています。2章から5章の内容を順にこなしていけば,3DCGの実際を体験できるはずです。さらに6章では,GPUの高速化機能をより幅広い関連処理に利活用するGUGPUの概念を紹介し,パーティクルを用いた流体のビジュアルシミュレーションを題材に適用事例が掲載されています。

なお,コロナ社の専用ページには,口絵以外のカラー図版や章末問題(難易度付,正答あり)も掲載されています。本書に掲載されたプログラムは,Unity Version6.2を前提として開発され,Windows上での動作を確認しています。上記の専用ページには,実際のコードを公開するGithubへのリンクも掲載されており,読者がUnityプログラミングを自習する際の便宜を図っています。

最後に,本書を出版する契機を作ってくださった,メディアテクノロジーシリーズ編集委員長の近藤邦雄先生ならびに同シリーズ幹事の伊藤貴之先生に深謝いたします。また,原稿のとりまとめが予定よりも大幅に遅れたにもかかわらず,辛抱強く編集作業をご担当いただいたコロナ社の関係各位にも心からの謝意を伝えたいと思います。

本書が,読者諸兄の3DCGプログラミングの入門に少しでも役立てば,監修者としては望外の喜びです。

2026年2月
編者 藤代一成

☆発行前情報のため,一部変更となる場合がございます

1.レンダリングパイプライン
1.1 レンダリングパイプラインと本書の構成 
1.2 モデルデータ 
 1.2.1 サーフェスモデル 
 1.2.2 ソリッドモデル 
1.3 トポロジー 
 1.3.1 プリミティブ 
 1.3.2 頂点インデックスバッファ 
 1.3.3 プリミティブとトポロジー 
1.4 レンダリング 
 1.4.1 パイプライン 
 1.4.2 ティアリング 
 1.4.3 垂直同期 
 1.4.4 ダブルバッファリング 
1.5 レンダリングキュー 
 1.5.1 レンダーキュー 
 1.5.2 デプスソート 
 1.5.3 デプスバッファ 
 1.5.4 不透明メッシュ 
 1.5.5 半透明メッシュ 
 1.5.6 アルファブレンド 
1.6 まとめ 

2.ポリゴンメッシュ
2.1 3次元空間に関する数学的基礎 
 2.1.1 直交座標系 
 2.1.2 面の方向 
2.2 メッシュの基本的な生成方法 
 2.2.1 Meshクラス 
コラム:レンダリングパイプラインと描画命令
 2.2.2 ジオメトリ情報の設定 
 2.2.3 トポロジー情報の設定 
 2.2.4 メッシュの描画 
 2.2.5 属性情報の設定 
2.3 ループ処理の利用 
 2.3.1 ジオメトリ情報の設定 
 2.3.2 トポロジー情報の設定 
 2.3.3 属性情報の設定 
 2.3.4 頂点移動による変形 
2.4 折れ曲がった面の表現 
 2.4.1 上面・底面の作成 
 2.4.2 側面の作成 
 2.4.3 法線の設定 
2.5 再帰処理の利用 
 2.5.1 L-System 
 2.5.2 再帰処理 
 2.5.3 タートルの定義 
 2.5.4 線による枝の描画 
 2.5.5 メッシュによる枝の描画 
2.6 まとめ 

3.カメラ
3.1 実世界のカメラ 
 3.1.1 ピンホールカメラ 
 3.1.2 レンズカメラ 
 3.1.3 投影手法 
3.2 座標変換の基礎 
 3.2.1 同次座標系 
 3.2.2 アフィン変換 
3.3 座標系の必要性 
 3.3.1 カメラの役割 
 3.3.2 座標変換の流れ 
3.4 各座標系の意味 
 3.4.1 ローカル座標系 
 3.4.2 ワールド座標系 
 3.4.3 ビュー座標系 
 3.4.4 クリップ座標系・NDC系 
3.5 座標変換と行列 
 3.5.1 ローカル座標系からワールド座標系への変換 
コラム:モデル行列の見方
 3.5.2 ワールド座標系からビュー座標系への変換 
 3.5.3 ビュー座標系からクリップ座標系・NDC系への変換 
コラム:NDC系?NDC座標系?
 3.5.4 投影行列の導出 
3.6 カメラ行列の編集と応用:立体映像 
 3.6.1 RenderTexture 
 3.6.2 アナモルフォーシス 
 3.6.3 投影行列の操作 
 3.6.4 立体的に見える画像の生成 
 3.6.5 立体的に見える映像の生成 
3.7 まとめ 

4.マテリアル
4.1 マテリアルの基本的な概念 
 4.1.1 属性 
 4.1.2 シェーディングモデル 
4.2 Unityのマテリアル 
 4.2.1 シェーダ 
 4.2.2 プロパティ 
 4.2.3 レンダリングパス 
コラム:CGPROGRAMとHLSLPROGRAMの違い
4.3 代表的なシェーディングモデルと実装 
 4.3.1 基本コードの作成 
コラム:Unityの標準シェーダライブラリ
 4.3.2 完全鏡面 
 4.3.3 拡散反射 
コラム:接空間の連続性
 4.3.4 フォン反射 
 4.3.5 GGX(Ground Glass Unknown) 
4.4 マテリアルの効率的な描画手法 
 4.4.1 プレフィルタリング 
 4.4.2 拡散反射におけるプレフィルタリング 
 4.4.3 GGXにおけるプレフィルタリング 
4.5 まとめ 

5.ライティング
5.1 光源の種類と特性 
 5.1.1 光源の分類 
 5.1.2 光源の照明特性 
5.2 照明計算の理論的とり扱い 
 5.2.1 点光源 
 5.2.2 平行光源 
 5.2.3 スポット光源 
5.3 基本的なライティング手法の実装 
 5.3.1 ライティング計算の基本コード 
 5.3.2 平行光源のライティング 
 5.3.3 点光源のライティング 
 5.3.4 スポット光源のライティング 
5.4 シャドウイング 
 5.4.1 シャドウイングとは 
 5.4.2 カメラと光源の双対性 
 5.4.3 シャドウマッピング 
 5.4.4 シャドウマッピングの実装 
5.5 レイトレーシングによる面光源ライティング 
 5.5.1 面光源における照明計算 
 5.5.2 レイトレーシングの基礎知識 
 5.5.3 Unityにおけるレイトレーシング 
 5.5.4 レイトレーシングによる面光源ライティングの実装 
コラム:GPUレイトレーシングの歴史
5.6 まとめ 

6.GPGPU
6.1 本章の前提 
6.2 スレッドとワープ 
6.3 Compute Shaderの使い方 
 6.3.1 Compute Shaderの書き方 
 6.3.2 Compute Shaderの実行 
 6.3.3 サンプルコードの実行 
6.4 GPUアーキテクチャ 
 6.4.1 GPCとTPC 
 6.4.2 SM 
 6.4.3 メモリ構造 
6.5 排他制御 
 6.5.1 基本概念 
 6.5.2 アトミック操作 
 6.5.3 GPUのアトミック操作 
 6.5.4 Shared Memory 
6.6 コマンドバッファ 
6.7 2D流体シミュレーションへの応用 
 6.7.1 流体シミュレーション 
 6.7.2 Compute Shader 
 6.7.3 C#による制御 
 6.7.4 計算結果の描画 
 6.7.5 結果 
6.8 まとめ 

引用・参考文献
索引

藤代 一成(フジシロ イッセイ)

石飛 晶啓(イシトビ アキノリ)

杉田 俊平(スギタ シュンペイ)

徳永 恵太(トクナガ ケイタ)

青山 昂平(アオヤマ コウヘイ)