MicroMasters辛すぎ…

MicroMastersを2025年5月から受講しています。単発の講座の場合は最短6日で修了できたので、「MicroMastersって単発講座をまとめたセットみたいなものでしょ、だったらこれも簡単」と思っていたのです。しかし全く別物だと気づいたのは受けてしばらくしてから。いやこれ”ガチなやつ”でした。修了するまでの勉強量や試験の数を見たとき、「これやっちまったな」と軽く絶望。演習1つが数時間、時には数日かかることも珍しくないほどのガチさ。そんなのがトータル数百個(体感。数えてはいません)+大小合わせた試験+卒業試験×4科目。お金もったいないのでやりきりますが。10年くらいかかりそう(でも期限が3年なのでフルコミット必至?)。こればっかりやってるわけではないのでフルコミットは不可能(大学院だから皆そうか…)だし。”ガチなやつ”(MicroMastersとかオンライン学位とか?)と”ガチじゃないやつ”(コースなどと呼ばれるもの)が同じ感じでショップに並んでるとは恐ろしい世界です。

まあでも、演習に数時間数日かかるのは最初だけで、理解が進むとそこまで時間はかからないですが。にしても殺人的ボリュームなのは確か。よくアメリカの大学は入るのか簡単で修了するのが難しいと言われているのはこういうことだったのでしょうね。

社長のおすすめ動画

ユーチューブのサムネイルを見たときはAIで生成した動画だと思いました。それでも面白そうだったので動画を再生。最初の数秒、やっぱりAIなんだなと思った次の瞬間、AIではなく実際に(物理的に)作られた地下鉄ホームだ!と気付かされます。

https://www.youtube.com/watch?v=KRtyMCeDw8o

いや凄い。

THE ICED DRINK ― サンプル完成(原稿執筆前の先行公開)

THE ICED DRINK のサンプルが完成しました。

まだ原稿は書いていません。
しかし、あまりにも出来が良かったため、先に公開することにしました。

本作は、THE GLASS の延長線上にあるテーマです。
ガラス表現という点では共通していますが、今回はさらに一歩踏み込みました。

最大の違いは、ガラスの「中身」を表現していることです。

・コーヒー
・氷
・液体内部の減衰
・内部屈折による歪み
・ガラス越しに見える物体の質感変化

THE GLASS が「ガラスそのもの」を主題としていたのに対し、
THE ICED DRINK では「ガラスとその内部世界」を扱います。

特に、内部表現のために新たに考案した手法があります。
リアルタイムで液体と氷を成立させるための、独自のアプローチです。

詳細は本文で解説する予定ですが、
まずは完成したサンプルを見ていただきたいと思います。

静止画でも十分に伝わるかもしれませんが、
リアルタイムで動作している様子も確認できます。

THE GLASS を超える美しさを目指しました。
そして実際に、より洗練された表現に到達できたと思っています。

原稿はこれからですが、
このシリーズはさらに進化します。

続報をお待ちください。

リアルタイムでここまで出せる ― THE GLASS

THE GLASS を発売してから、少し時間が経ってしまいました。
本来であれば発売と同時にここでお知らせするべきでしたが、完全に投稿を忘れていました。少し遅れてのご報告です。

本書「THE GLASS」は、リアルタイムレンダリングにおいてガラスの質感を真正面から扱った、はじめての書籍です。

単なる透明オブジェクトの描画ではなく、

・反射
・屈折
・内部減衰
・厚み表現
・フレネル効果
・環境との相互作用

といった要素を、実際に動作するサンプルコードとともに徹底的に解説しています。

今回、実行時のスクリーンショットに加えて、動作中のビデオも掲載します。

静止画だけを見ると、オフラインレンダリングなのか、リアルタイムなのか判別しづらいかもしれません。
しかし本書で扱っている表現は、すべてリアルタイムで動作しています。

ビデオでは、視点移動やパラメータ変更に即座に反応する様子を確認できます。
「リアルタイムでここまで出せる」という点も、ぜひご覧ください。

THE GLASS は、表現特化型シリーズとして制作しています。
アルゴリズムの網羅というよりも、「質感を作る」ための一冊です。

リアルタイムでガラスを美しく描きたい方にとって、確実に役立つ内容になっています。

ぜひチェックしてみてください。

CGエンジニア必携を発売開始しました

このたび、私の新刊 『CGエンジニア必携 ― CGアルゴリズム実装ハンドブック』 が発売されました。
長年にわたり研究・実装してきた幾何学処理とリアルタイム描画の知見を、一冊にまとめた内容です。
CGモデラーを作成するために必要な技術を網羅したつもりです。この一冊で、独自のモデラーを一から作り上げるための基礎と応用 を体系的に学ぶことができます。
なお、レンダリング技術(レイトレーシングやパストレーシングなど)については、より専門的な内容を扱った拙著 『レイトレーシング・グル(Ray Tracing Guru)』 に譲っております。本書では、主に「形をつくる」「形を扱う」ためのアルゴリズムと実装に焦点を当てています。

CGソフト開発に必要な基礎アルゴリズムを、実装を通して体系的に習得できます。
市販のCGソフトに近い機能を、自らの手で構築する技術が身につきます。
普遍的な数理・アルゴリズムの理解により、DirectX以外の環境にも応用可能です。
サンプルコードと解説を体系的に整理した、実践的ハンドブックとしても活用できます。

メッシュ読込みの章では、Rhinoの3dmデータをC++で解析し、メッシュやNURBS曲線・曲面を読み取り、DirectX 12で可視化するまでの手順を、初心者にも理解できるよう丁寧に解説しています。
Rhinoの3dmデータをC++で読み取るだけでなく、
STL / OBJ / PLY / GLTF / FBX / SKP など多くの形式に対応。
単なるメッシュ処理にとどまらず、
Bézier・B-Spline・NURBS曲線/曲面の生成・操作・変形・交差判定までを体系的に解説しています。
加えて、作成したジオメトリを DirectX 12 で可視化するサンプルを多数収録。
内部アルゴリズムの理解を最優先にしつつ、リアルタイム描画まで一貫して実装できます。
グラフィックス技術を単なる「描画」ではなく、「アルゴリズムの理解」として学びたい方に向けた実践的な技術書です。

■主な章構成(抜粋)

序章:開発環境、bmathライブラリ、他ライブラリへの移植方法

第2章:トライアングル/クアッド/スフィア/ティーポット/シリンダーなど各種ジオメトリ生成

第3章:プロシージャル生成(N角形・Bézier・B-Spline・NURBS曲線/曲面)

第4章:ジオメトリの選択・移動・変形

第5章:各種ファイルフォーマットの読み込み(STL, PLY, OBJ, GLTF, FBX, SKP, 3DM)

第6章:画像読み込み(BMP, JPG, PNG, WebP)

第7章:DXF書き出し(レイヤー/ブロック対応)

第8章:レンダリングパイプラインと座標変換

第9〜10章:カメラ・マウス操作

第11〜12章:交差判定・距離・角度・幾何要素の算出

第13章:デバッグ、差分検証、分割統治

第15章:各種定数・物理特性・行列対応表

■この本が目指すもの

本書の目的は、APIに依存せず自分の頭で「形」を作る力を養うことです。
グラフィックスの基礎を「アルゴリズム」として体系化し、
初心者から研究者まで、幾何計算と描画技術を一貫して理解できる構成としました。

DirectXは本質ではなく「結果を確かめるための道具」。
ジオメトリの本質的理解こそが主題です。

技術的探究心をもつ方々に、ぜひ手に取っていただきたい一冊です。
長年積み重ねてきた実装知識を、すべてこの一冊に詰め込みました。
どうぞよろしくお願いいたします。

詳細は以下になります。
https://barepixel.co.jp/cg_engineer_hikkei-2

本書は以下より入手いただけます:
https://barepixel.co.jp/shop/2025/10/12/cg_engineer_hikkei/

CGエンジニア必携 発売間近です

本書は2年以上前から制作している書籍ですが、作成のほうがほぼ終わりに近づいています。
3年近く悪戦苦闘しながら作業を続けてきましたが、ようやく完成できそうです。
完成の際は当サイトで告知と、メール(過去ご購入いただいた方)でもお知らせいたします。
本書の次には、全く新しいアプローチで、かつ、今までにないCGを作り出す技術書を制作開始します。

目次は次のとおりです。かなりボリュームがあり、見辛いとは思いますが掲載いたします。

はじめに
サンプルプログラムの使い方
bmathについて bmathの理由
他のライブラリへの書き換え glmに書き換え
dxmathに書き換え
d3dxに書き換え
ジオメトリ作成 トライアングル トライアングル作成 反時計回り
トライアングル作成 時計回り
クアッド クアッド作成 反時計回り
クアッド作成 時計回り
クアッド作成インデックス 反時計回り
クアッド作成インデックス 時計回り
ボックス ボックス作成 反時計回り
ボックス作成 時計回り
ボックス作成インデックス 反時計回り
ボックス作成インデックス 時計回り
スフィア スフィア作成インデックス 反時計回り
スフィア作成インデックス 時計回り
ティーポット ティーポット作成インデックス 反時計回り
ローポリティーポット作成インデックス 反時計回り
ティーポット作成インデックス 時計回り
ローポリティーポット作成インデックス 時計回り
シリンダー シリンダー作成インデックス 反時計回り
シリンダー作成インデックス 時計回り
法線(面法線) 面法線計算 インデックスなしタイプ
頂点法線計算 インデックスタイプ
バウンディングボリューム バウンディングボックス
バウンディングスフィア簡易
バウンディングスフィア正確
グリッド プロシージャル作成 グリッド Z-up 左手系
グリッド Z-up 右手系
グリッド Y-up 左手系
グリッド Y-up 右手系
N角形状 プロシージャル作成 N角形状に頂点生成
N角形をトライアングル群に
ボックス プロシージャル作成 min maxから8頂点
スフィア プロシージャル作成 中心、半径から頂点群
シリンダー プロシージャル作成 角数と半径、長さから頂点群
ベジェ 2次ベジェ曲線
3次ベジェ曲線
3次ベジェ曲面
B-Spline B-Spline曲線
B-Spline曲面
NURBS NURBS曲線
NURBS曲面
ジオメトリ選択、移動、変形 基本変換 スケーリング
回転
移動
変換を合成
任意軸回転
任意位置回転
任意位置かつ任意軸回転
マウス操作 ポリゴン選択
メッシュ選択 近似
メッシュ選択 正確
マウスドラッグ
スナップ吸着
ジオメトリ読込み STL STLファイルの読み込み アスキー形式
STLファイルの読み込み バイナリー形式
PLY PLYファイルの読み込み 位置情報のみ使用
PLYファイルの読み込み 位置と法線
OBJ OBJファイルの読み込み 位置と法線のみ
OBJファイルの読み込み 位置、法線、マテリアル
OBJファイルの読み込み 位置、法線、マテリアル、テクスチャー
GLTF GLTFファイルの読み込み 位置のみ
GLTFファイルの読み込み 位置、法線
GLTFファイルの読み込み 位置、法線、インデックス
GLTFファイルの読み込み 位置、法線、インデックス、テクスチャー
FBX FBXファイルの読み込み 位置と法線のみ
FBXファイルの読み込み 位置、法線、マテリアル
FBXファイルの読み込み 位置、法線、マテリアル、テクスチャー
SKP SKPファイルの読み込み 位置のみ
SLPファイルの読み込み 位置、法線
SLPファイルの読み込み 位置、法線、テクスチャー
3DM 3DMファイルの情報を取得
3DMファイルを開く
3DMからジオメトリ表示
画像読込み bmp Bitmap Image File ビットマップ画像ファイルを読み込む
jpg Joint Photographic Experts Group JPEG画像ファイルを読み込む
png Portable Network Graphics PNG画像ファイルを読み込む
WebP Web Picture format WebP画像ファイルを読み込む
ジオメトリ書きだし シーンをDXFに出力 ポリゴンをDXF(ポリゴン)にする
ポリゴンをDXF(ライン)にする
メッシュをDXF(ポリゴン)にする
メッシュをDXF(ライン)にする
メッシュをレイヤー分けしてDXF(ポリゴン)にする
メッシュをレイヤー分けしてDXF(ライン)にする
メッシュをブロック分けしてDXF(ポリゴン)にする
メッシュをブロック分けしてDXF(ライン)にする
メッシュをレイヤー分けブロック分けしてDXF(ポリゴン)にする
メッシュをレイヤー分けブロック分けしてDXF(ライン)にする

レンダリングパイプライン 右手系と左手系 右手系と左手系の違い
左手系、右手系の実際例
どこで混乱が起こりやすいか
DirectX等では決まりはない
変換行列の作り方 ベクトルを移動するのか、それとも系を移動するのか
スケーリング行列、回転行列の作り方
移動行列の作り方
ワールド行列の作り方
ビュー行列の作り方
プロジェクション行列の作り方
ビューポートスケーリング行列の作り方
パイプライン内、座標の変遷 座標変遷の流れ
どのシェーダーでどの変換が行われるか
サンプルプログラムで実際に確認
実際に計算していこう! 第1段階 ワールド変換
実際に計算していこう! 第2段階 ビュー変換
実際に計算していこう! 第3段階 プロジェクション変換
実際に計算していこう! 第4段階 クリッピング
実際に計算していこう! 第5段階 ビューポートスケール変換
実際に計算していこう! 第6段階 パースペクティブデバイド
ワールド座標とスクリーン座標の相互変換 ワールド座標のスクリーン座標を計算で求める
スクリーン座標のワールド座標を計算で求める
座標変換の誤差と注意点 数値誤差の発生要因
対策と注意点
シーン操作(カメラ) 回転 扱いやすいカメラ回転(マウスドラッグで回転)
物体の周りで回転
WASD WASD
WASDRF
WASDRF+回転
ズーム プロジェクションでズーム
視点を動かしてズーム
フィット 画面を物体にフィットさせる
画面をシーン全体にフィットさせる
シーン操作(マウス) マウスポインターの座標を得る マウスポインターのスクリーン座標
マウスポインターのワールド座標
マウスで物体移動 マウスドラッグ量をワールド移動量に
交差判定 重要事項
面積で判定
SATを理解
スラブ法を理解
2D平面における判定 直線、直線
直線、半直線
直線、線分
直線、三角形
直線、四角形
直線、円
直線、AABB(スラブ)
直線、OBB(スラブ)
半直線、半直線
半直線、線分
半直線、三角形
半直線、四角形
半直線、円
半直線、AABB(スラブ)
半直線、OBB(スラブ)
線分、線分
線分、三角形
線分、四角形
線分、円
線分、AABB 面積法
線分、OBB 面積法
線分、AABB SAT
線分、OBB SAT
線分、AABB スラブ法
線分、OBB スラブ法
三角形、三角形
三角形、四角形
三角形、円
三角形、AABB 面積法
三角形、OBB 面積法
三角形、AABB SAT
三角形、OBB SAT
三角形、AABB スラブ法
三角形、OBB スラブ法
四角形、四角形
四角形、円
四角形、AABB 面積法
四角形、OBB 面積法
四角形、AABB SAT
四角形、OBB SAT
四角形、AABB スラブ法
四角形、OBB スラブ法
円、円
円、AABB
円、OBB
AABB、AABB
AABB、OBB
OBB、OBB
3D空間における判定 Möller and Trumbore法を理解
直線、直線
直線、半直線
直線、線分
直線、平面
直線と三角形 オーソドックススタイル
直線、三角形 Möller and Trumbore
直線、四角形
直線、円
直線、球
直線、AABB
直線、OBB
半直線、半直線
半直線、線分
半直線、平面
半直線と三角形 オーソドックス
半直線と三角形 Möller and Trumbore
半直線、四角形
半直線、円
半直線、球
半直線、AABB
半直線、OBB
線分、線分
線分、平面
線分と三角形 オーソドックススタイル
線分と三角形 Möller and Trumbore
線分、四角形
線分、円
線分、球
線分、AABB SAT
線分、OBB SAT
線分、AABB スラブ法
線分、OBB スラブ法
平面、平面
平面、三角形
平面、四角形
平面、円
平面、球
平面、AABB
平面、OBB
三角形、三角形
三角形、四角形
三角形、円
三角形、球
三角形、AABB スラブ法
三角形、AABB SAT
三角形、OBB スラブ法
三角形、OBB SAT
四角形、四角形
四角形、円
四角形、球
四角形、AABB スラブ法
四角形、AABB SAT
四角形、OBB スラブ法
四角形、OBB SAT
円、円
円、球
円、AABB
円、OBB
球、球
球、AABB
球、OBB
AABB、AABB
AABB、OBB
OBB、OBB

頻繁に行う計算 距離 点と点の距離
点と直線の距離
直線と直線の距離
点と平面の距離
角度 ベクトル間の角度
平面同士の角度
図形要素を算出 辺を作る
2点から直線方程式(ベクトル)
垂直なベクトルを作る
垂直なベクトルを作る 成分入れ替えで
平面方程式
三角形の内接円の中心(内心)
三角形の外接円の中心(外心)
三角形の回転中心(重心)
OBBをAABBに
内外判断 点が円の内部かどうか
点が三角形の内部か
点が球の内部か
線分が面のどちら側か
2つのベクトルが同方向か
反射、滑り ベクトルを反射させる
ベクトルを角度で曲げる
ベクトルを壁で滑らせる
3D変換と逆変換 Project 3D空間座標をスクリーン座標に
Unproject スクリーン座標をワールド座標に
デバッグ デバッグ情報出力 コンソール表示
コンソール表示 サイズ、色指定
コンソール表示 位置指定
コンソール表示 フォント指定
ログ出力
VisualStudioの出力ウィンドウに表示
速度計測 高精度時間計測
モック / スタブ モック / スタブ
差分デバッグ delta debugging 正常な版とエラーの版を用意する
逐次実行 デバッガー
分割統治 分割統治

社長のおすすめ動画その2

オリンピック選手が練習中?、溺れている女性を助けにいくというもの。
https://www.youtube.com/watch?v=vu2Bni46NYM
ライフジャケットなしで2人分の体重を担うとは凄いですね。ちょうどカイト?が持ち上げてくれたというの不幸中の幸いって感じでしょうか。


あと少しが遠い

マラソン、大食い、勉強、そして人生 etc ゴールまであと少しのところなんだけど、それが遠い。

夜明け前が一番暗いっていう格言?があったような。

ゴールに近づけば近づくほど辛さは大きくなるから、そうなるのは当然なんだろう。

今「CGエンジニア必携」という本を制作中です。これがえらい大変。今までで一番のボリュームなのは間違いない。なのでまだ夜明け前までもいってないけどつらいなぁ。

社長のおすすめ動画

ユーチューブでいいなと思った動画です。

人間の本質的な部分ってこういう事なんだろうな
Most Intense Human Chain Ever Rescues Dog Stranded in Canal | The Dodo

スタートダッシュが必ずしも必要ではない(むしろ悪い)という事を教えてくれる動画です。
42秒~最初のカーブに注目。
https://youtu.be/8mRyCxpumOY

アライグマに囲まれるおじさん ただ他の野生動物(熊含む)も来そう
Mobbed by Raccoons (25) Tuesday Night 03 Nov 2020