すらりん日記は 技術書典11に参加します

すらりん日記は、サークル名「すらりんラボ」として、技術書典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 のプログラミングを始めてみよう!と考えている人が対象となっています。

DirectX Raytracing Programming Vol.1:techbito
DirectX12 に追加されたレイトレーシングの API である DirectX Raytracing (DXR) のプログラミング入門書籍です。 古典的レイトレーシングを対象として、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 での取り扱いも最初から行っています。

DirectX Raytracing Programming Vol.1 - techbito / 旧すらりんラボ - BOOTH
DirectX12 に追加されたレイトレーシングの API である DirectX Raytracing (DXR) のプログラミング入門書籍です。 Vol.1 では、古典的レイトレーシングを対象として、 DXR によるプログラミングの基礎を説明します。簡単なところから始め、変形可能なキャラクターモデルの描画の方法まで...

Unity で使う C#/DLL マーシャリング事典 第2版

前々回の技術書典9で頒布した「 Unity で使う C#/DLL マーシャリング事典」を更新したものを頒布します。更新した内容は次のとおりです。

  • 構成を見直し
    • 特に文字列の取り扱い周辺
  • Android のネイティブデバッグに関する章を追加

以前に技術書典より購入された方は、再ダウンロードで更新や紙冊子に付属していたダウンロード先より更新版がダウンロードできるようになっています(逆に旧バージョンの頒布は終了です)

Unity で使う C#/DLL マーシャリング事典 第2版:techbito
ゲームエンジン Unity を使いつつ C# でネイティブDLL(.so)を使うのにマーシャリングで苦戦していたりはしないでしょうか? 通常の .Net framework でのマーシャリング情報は数多く見つかりますが、Unity を対象としては書かれておらず、それがまた苦労の原因になっているように思います。 そこで ...

紹介文

C# で (ネイティブの)DLL を使うのに、データのマーシャリング(整列処理)が必要になります。通常の .Net framework でのマーシャリング設定は、Web サイトで解説されていることも多いですが、それと同じことを Unity でやろうとすると、様々な罠があります。 .Net framework の場合と違う箇所も多くあるので、Web 上の情報を正しく読み解ける必要があり、難易度が高いものとなっているのが現状かなと思います。

本書は、 Unity において ネイティブ DLL / モジュールを呼び出すのに必要な C# のマーシャリングを解説したものになっています。多くの事例を盛り込んでおり、様々な場面で参考になる事典のようにして使ってもらえたらと考えています。

Unity C# から文字列を Windows(DLL) や Android(so) とやりとりしたときに、困ったことのある人は内容に頷いてもらえるかなと思っています。

目次

本書の目次の概要です。

  1. はじめに
  2. マーシャリング基礎
  3. 簡単なマーシャリング
  4. 構造体のマーシャリング
  5. 配列のマーシャリング
  6. 文字列の表現
  7. 文字列の変換
  8. 文字列のマーシャリング
  9. 上級マーシャリング
  10. Android Native Debugging
  11. あとがき
  • 第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 まとめ
  • あとがき

サンプル

この本の目次を含めたサンプルページを画像にしたものを公開します。参考にしてください。

タイトルとURLをコピーしました