すらりん日記は、サークル名「すらりんラボ」として、技術書典11(オンライン) に参加します。今回のすらりんラボでは、新刊1冊を出します。
技術書典11は 7/10 (土曜) から 7/25 (日曜) まで、オンラインイベントで開催されます。オフラインのトライアル開催もありますが、当サークルはそちらは不参加です。
頒布情報
- 日時: 2021/7/10 から 2021/7/25
- 場所: 技術書典オンラインマーケット
- ブース: ネットの海 c580 (サークルギャラリーページに飛びます)
- 頒布物:
- DirectX Raytracing Programming Vol.1
続いて、技術書典11に向けて用意している冊子の内容を紹介します。
DirectX Raytracing Programming Vol.1
DirectX12 にレイトレーシングの API が追加されました。DirectX Raytracing ということで、通称 DXR と呼ばれています。この DXR を用いてプログラミングをする入門書籍となっています。基本的な描画から始め、反射や屈折、影の簡単な描画、最終的にはキャラクターモデルの描画を行う1冊となっています。
レイトレーシングということで写実的なリアルな映像を期待するかもしれませんが、本書では基礎的な内容となっており、 API の使い方を学ぶための1冊という位置づけです。これから DXR のプログラミングを始めてみよう!と考えている人が対象となっています。
目次
本書の目次の概要です。
- 第1章 はじめに
第2章 DirectX Raytracing
第3章 セットアップ
第4章 レイトレーシングシェーダーの関数
第5章 シェーダーのコンパイル
第6章 はじめての DXR アプリケーション
第7章 DXR による 3D 形状の描画
第8章 マテリアルを分けた描画
第9章 影を追加する
第10章 Any Hit シェーダー
第11章 Intersection シェーダー
第12章 シェーダーテーブル
第13章 モデルを描画する
第14章 キャラクターモデルを描画する
第15章 デバッグ・調査ツール
- 第1章 はじめに
DirectX Raytracing の簡単な紹介
対象読者
動作環境
サンプルコード
免責事項
禁止事項 - 第2章 DirectX Raytracing
レイトレーシング法
DirectX Raytracing の歴史
レイトレーシングのためのデータ構造
レイトレーシングパイプライン
シェーダー設定の新しい方法
まとめ - 第3章 セットアップ
Windows SDK の更新
D3DX12 ヘッダファイルについて
依存ライブラリについて
まとめ - 第4章 レイトレーシングシェーダーの関数
TraceRay 関数
ReportHit 関数
AcceptHitAndEndSearch 関数
IgnoreHit 関数
CallShader 関数
システム値・組み込み関数
まとめ - 第5章 シェーダーのコンパイル
DXR のシェーダー
オフラインコンパイル (dxc.exe)
オフラインコンパイル (VisualStudio)
実行時コンパイル
まとめ - 第6章 はじめての DXR アプリケーション
オーバービュー
DXR の初期化
BLAS の準備
TLAS の準備
グローバルルートシグネチャの生成
シェーダーの準備
ステートオブジェクトの生成
UAV 出力バッファの準備
Shader Table の生成
レイトレーシングによる描画
まとめ - 第7章 DXR による 3D 形状の描画
3D ジオメトリの生成
Acceleration Structure の生成
グローバルルートシグネチャの準備
ローカルルートシグネチャの準備
ステートオブジェクトの生成
シェーダーテーブルの構築
カメラ視点からのレイ生成
シェーダーで頂点属性を求める
Dear ImGui を組み込む
描画
まとめ - 第8章 マテリアルを分けた描画
マテリアル毎の描画を分けるアイデア
テクスチャを使う
反射
屈折
サンプルプログラム
まとめ - 第9章 影を追加する
シャドウレイを飛ばそう
点光源とソフトシャドウの手前
TLAS の動的更新
まとめ - 第10章 Any Hit シェーダー
Any Hit シェーダーの役割
アルファ抜き (アルファテスト)
Any Hit シェーダーによるアルファ抜き実装
まとめ - 第11章 Intersection シェーダー
Intersection シェーダーの役割
AABB ボックスおよび球体を書くための判定処理
Intersection シェーダーを使うための準備と設定
レイマーチングによるジオメトリの記述
サンプルプログラム実行結果
まとめ - 第12章 シェーダーテーブル
各テーブルのアライメント
シェーダーレコードのアライメント
呼び出されるシェーダーレコードの決定
まとめ - 第13章 モデルを描画する
glTF 形式の読み込み
描画用インスタンスと BLAS の構築
描画用のシェーダー
シェーダーテーブルの構成
TLAS の構成と描画
まとめ - 第14章 キャラクターモデルを描画する
オーバービュー
glTF からスキニング情報を読み込む
スキニングの変形処理を実装
描画処理
まとめ - 第15章 デバッグ・調査ツール
PIX on Windows
NVIDIA Nsight Graphics
Radeon GPU Profiler
まとめ
サンプル
この本の目次を含めたサンプルページを画像にしたものを公開します。参考にしてください。
BOOTH での取り扱い
今回は作業が間に合ったので、BOOTH での取り扱いも最初から行っています。
Unity で使う C#/DLL マーシャリング事典 第2版
前々回の技術書典9で頒布した「 Unity で使う C#/DLL マーシャリング事典」を更新したものを頒布します。更新した内容は次のとおりです。
- 構成を見直し
- 特に文字列の取り扱い周辺
- Android のネイティブデバッグに関する章を追加
以前に技術書典より購入された方は、再ダウンロードで更新や紙冊子に付属していたダウンロード先より更新版がダウンロードできるようになっています(逆に旧バージョンの頒布は終了です)
紹介文
C# で (ネイティブの)DLL を使うのに、データのマーシャリング(整列処理)が必要になります。通常の .Net framework でのマーシャリング設定は、Web サイトで解説されていることも多いですが、それと同じことを Unity でやろうとすると、様々な罠があります。 .Net framework の場合と違う箇所も多くあるので、Web 上の情報を正しく読み解ける必要があり、難易度が高いものとなっているのが現状かなと思います。
本書は、 Unity において ネイティブ DLL / モジュールを呼び出すのに必要な C# のマーシャリングを解説したものになっています。多くの事例を盛り込んでおり、様々な場面で参考になる事典のようにして使ってもらえたらと考えています。
Unity C# から文字列を Windows(DLL) や Android(so) とやりとりしたときに、困ったことのある人は内容に頷いてもらえるかなと思っています。
目次
本書の目次の概要です。
- はじめに
- マーシャリング基礎
- 簡単なマーシャリング
- 構造体のマーシャリング
- 配列のマーシャリング
- 文字列の表現
- 文字列の変換
- 文字列のマーシャリング
- 上級マーシャリング
- Android Native Debugging
- あとがき
- 第1章 はじめに
- 1.1 対象読者
- 1.2 なぜ マーシャリングが必要になるのか
- 1.3 この本での前提事項
- 1.4 動作環境
- 1.5 禁止事項
- 1.6 免責事項
- 1.7 参考文献
- 第2章 マーシャリング基礎
- 2.1 マーシャリングとは
- 2.2 マーシャリングの基本動作
- 2.3 Blittable と非Blittable
- 2.4 ネイティブ関数を呼び出す方法
- 2.5 方向属性(In/Outアトリビュート)
- 2.6 呼び出し規約
- 2.7 インターフェースの形式
- 2.8 大まかな指針
- 第3章 簡単なマーシャリング
- 3.1 プリミティブ型:引数にセットして関数呼び出し
- 3.2 プリミティブ型:引数で結果を受け取る場合
- 3.3 プリミティブ型:関数戻り値の場合
- 第4章 構造体のマーシャリング
- 4.1 構造体の定義
- 4.2 BOOL/bool型の注意点
- 4.3 構造体:引数にセットして関数呼び出し
- 4.4 構造体:引数にセットして関数呼び出し(2)
- 4.5 構造体:引数で結果を受け取る場合
- 4.6 構造体:関数戻り値の場合
- 4.7 構造体:関数戻り値(ポインタ)の場合
- 4.8 共用体
- 第5章 配列のマーシャリング
- 5.1 プリミティブ型:引数関数呼び出し
- 5.2 プリミティブ型:呼び出し先で配列内容を変更
- 5.3 プリミティブ型:戻り値の場合
- 5.4 構造体配列:引数関数呼び出し
- 5.5 構造体配列:呼び出し先で配列内容を変更
- 第6章 文字列の表現
- 6.1 Windows開発環境の文字エンコーディング
- 6.2 LinuxやAndroid、iPhoneの場合
- 6.3 .NET FrameworkとMonoの実行系による違い
- 6.4 Monoによる文字列引数の呼び出しを観察する
- 6.5 実行ランタイム違いへの対策
- 6.6 Win32APIの呼び出しについて
- 第7章 文字列の変換
- 7.1 文字列をShift-JISのバイト列へ変換
- 7.2 Shift-JISのバイト列から文字列へ変換
- 7.3 文字列をUTF-8のバイト列へ変換する場合
- 7.4 文字列をUTF-16のバイト列へ変換する場合
- 7.5 文字列をUTF-32のバイト列へ変換する場合
- 7.6 UTF-32のバイト列から文字列へ変換
- 7.7 IntPtrのデータ先の長さを求める
- 7.8 IntPtr(UTF-8バイト列)からの文字列化
- 7.9 IntPtr(UTF-16バイト列)からの文字列化
- 7.10 IntPtr(Shift-JISバイト列)からの文字列化
- 7.11 IntPtr(UTF-32バイト列)からの文字列化
- 7.12 メモリーの割り当てに関する注意事項
- 第8章 文字列のマーシャリング
- 8.1 文字列型:引数にセットして関数呼び出し
- 8.2 文字列型:引数で結果を受け取る場合
- 8.3 文字列型:引数で結果を受け取る場合(2)
- 8.4 文字列型:関数戻り値の場合
- 8.5 文字列配列型:引数関数呼び出し
- 8.6 文字列配列型:呼び出し先で配列内容を変更
- 第9章 上級マーシャリング
- 9.1 ビットフィールドを使用している場合
- 9.2 プリミティブ型の2次元配列の場合
- 9.3 構造体中に構造体がある場合
- 9.4 構造体中に配列(固定長)がある場合
- 9.5 構造体中に配列(可変長)がある場合
- 9.6 構造体中に文字列(固定長)がある場合
- 9.7 構造体中に文字列(固定長)がある場合(2)
- 9.8 構造体中に文字列(可変長)がある場合
- 9.9 構造体中に文字配列がある場合
- 9.10 C# の関数を DLL に渡す場合
- 9.11 DLL 関数から関数ポインタが返る場合
- 9.12 DLL関数から関数ポインタが返る場合(2)
- 9.13 構造体中に関数ポインタがある場合
- 付録A Android Native Debugging
- A.1 環境の準備
- A.2 シンボル付きで .so をビルド
- A.3 デバッグの手順 (GDB)
- A.4 デバッグの手順 (LLDB)
- A.5 まとめ
- あとがき
サンプル
この本の目次を含めたサンプルページを画像にしたものを公開します。参考にしてください。