本の執筆状況。

Share

こんにちわ,Pocolです。
気になっている方もいるかと思うので,共有しておきましょう。

本の執筆状況ですが,昨年年始頃に仮脱稿を終えまして,出版に向け色々と調整を行っている状況です。
転職の兼ね合いもありまして,副業にあたる・あたらないとかの周りで少々問題がありましたが,それもクリア出来まして
皆様にきちんとしたものをお届けできるようクオリティアップの作業の真っ最中でございます。

来るべき時が来たら「本年度中に」アナウンス致しますので,もうしばらくお待ちいただければと思います。
豪華なレビューアによるきちんとした和書になると思いますので,是非ご期待頂ければと思います。

サンプルプログラムも公開予定ですが,こちらはVisual Studio 2019対応済みです。
公開方法は詳しく決まっておりませんが,サンプルプログラムと合わせて読むことで本が完結する作りになっておりますので,
ご購入前にはご検討頂ければと思います。
※プログラム行数がかなり多いため,書籍のページの都合上要所部分だけを抜粋して載せる仕組みになっていますので予めご注意してください。

また大事なことなのですが,自分は本の著者として実績が無いのと,専門書は部数が出ない。
…という背景事情がありまして,初版の冊数はそんなに多くありません。

そのため…
万一冊数が出てしまった場合は品薄のため買えないという状況が起こりえるのと,
逆に販売数が振るわなかった場合は,すぐに絶版になり二度と手に入れることが出来なくなる可能性がありえます。

特に前者よりも後者の絶版になる可能性の方が高いと思います。
確実に手に入れていただくためには,予約購入して頂くのが今のところ確実かと思います。
来るべきアナウンスがありましたら,早めにご決断して頂き,予約購入して頂くことをお勧めいたします。

ラスタライザーの効率性を測るシェーダ

Share

“Optimizing the Graphics Pipeline with Compute”を見ていたら,ラスタライザーの効率性を表示するピクセルシェーダが載っていたので,忘れないようにメモしておこうかと思います。

float3 main() : SV_TARGET0
{
    bool inside = false;
    float2 barycentric = fbGetBarycentricLinearCenter(); //__XB_GetBarycentricCoords_Linear_Center();

    if (barycentric.x >= 0 && barycentric.y >= 0 && barycentric.x + barycentric.y <= 1)
        inside = true;

    uint2 insideBallot = fbBallot(inside); //__XB_Ballot64();
    uint  insideCount  = countbits(insideBallot.x) + countbits(insideBallot.y);
    float insidePrecent = insideCount * (1.0 / 64.0);
    return float3(1 - insidePercent, insidePercent, 0);
}

合っているどうか全くわからないけども,Shader Model 6.0以降で書くと次のような感じ???
SM6.0全然弄ってないから分からん。

float3 main(linear float3 barycentric : SV_Barycentrics) : SV_TARGET0
{
    bool inside = false;
    if (baryenctric.x >= 0 && barycentric.y >= 0 && barycentric.x + barycentric.y <= 1)
        inside = true;

    uint  insideCount  = WaveActiveCountBits(inside);
    float insidePercent = insideCount * (1.0 / 64.0);
    return float3(1 - insidePercent, insidePercent, 0);
}

たぶん,間違っていると思うので誰か正しいコード教えてください。

超雑訳 Fast Ray Tracing by Ray Classification

Share

前回はレイトレ合宿用に論文を読んだのですが,肝心のところが書いてなかったので,今回はレイの分類について詳細が書いてある1987年の論文を読むことにします。
毎度のごとく,誤字・誤訳が多々ありますので,間違いを指摘して頂ける場合は正しい翻訳例と共にご指摘いただけると幸いです。

(さらに…)

最近悩んでいること。

Share

こんにちわ,Pocolです。

たまには日記っぽいことを書いてみようかと思います。
最近の悩みは,シェーダバリエーションの生成とシェーダのマルチプラットフォーム対応どうしようかな?ってことで悩んでいます。
仕事で使っているものは他の方が書いてくれたもので,特に問題なく使っています。
で,「プライベートで使う方はどうしようかな?」ってのが今回の悩みです。
仕事で使っているのと同じものを作るのが手間というのと,
#ifdefのオンパレードが死ぬほど嫌いなので,趣味のコーディングではそういった手法は使いたくないです。
ソースコードが汚くなる。

で,比較的に綺麗に書けたなぁっていうのが,fxファイル。
前職で有名な方もいまだに使っていたというのと,バンジーのスライドだったような気がするのですが,やっぱりfxっぽい記述できるようにしていたんですよね。あとunityもcgfxっぽい感じなので,「やっぱりfxファイルでいいんじゃないの?」って気がして,fxシステム欲しいなぁ・欲しいなぁと思って,ずっと放置していました。
ようやく仕事がひと段落付きそうなので,ちろっと作ってみました。
https://github.com/ProjectAsura/asfxc

あんまり,凝ったツールにすると面倒なので,シェーダの組み合わせだけをとりあえず作るようにしてみました。
組み合わせはxmlファイルで吐き出すので,あとで別ツールにかまして… みたいなことができます。…というかその目的で作っています。
あくまでも,バリエーション生成用のHLSLソースコードと,バリエーションの羅列を出力だけする簡単なツールです。
雑ですが,とりあえずバリエーション生成はこれで解決!

あと残ったのは,マルチプラットフォーム対応ですね。
会社ではHLSLcc使っているみたいなんですが,HLSLccのフラグに関するドキュメントっぽいものがあんまりなくて,ちと不親切。
で他にないかなぁ…って探していたら,ありました。
https://github.com/microsoft/ShaderConductor

Microsoftが作ってくれているみたいなのです。
Metalにも対応しているみたいなので,「あ、これでいいじゃん!」って思ったので,今のところこれで行こうと思います。
これで,マルチプラットフォーム対応も(ほぼ)問題ないです。

シェーダのワークフローは下図みたいな感じになります。

「ほぼ」と言ったのにはワケがって,それでまた悩み中です。
悩み解決の進展があったら,またなんか書こうとかと思います。

深度バイアスについて

Share

お久しぶりです。Pocolです。
最近お仕事の関係で,たまたま他社さんのソースコードを観る機会があったのですが,そのソースコードのコメントに自分のホームページのURLが記載してありました。
で,見てみたら深度バイアスの説明している個所だったのですが…
「これ正確じゃないな…」と今更ながら気づいてしまったので,訂正を兼ねてここで説明することにします。

深度バイアスについては,”Real-Time Rendering Forth Edition”の7.5にまとめられています。

(さらに…)

私的メモ 8/2

Share

<A3Dのバージョンアップ(予定)>
 APIの仕様変更
  ・DescriptorSetの廃止
  ・ブレンド周りの設計ミスの修正
  ・UnorderedAccessViewの追加・StorageViewの廃止
  ・ICommandListにSetConstantBuffer()を追加
  ・ICommandListにSetTextureView()を追加
  ・ICommandListにSetUnorderedAccessView()を追加。
  ・ShaderAPIをHLSLに統一
  ・独自シェーダバイナリの策定
  ・IShaderReflectionインタフェースの追加
  ・遅延リソース破棄の実装
  ・BufferDescとTextureDescのメンバーを変更。
  ・各コンソール用に継承コマンドリストを追加。
  ・シェーダコンバーターの作成
  ・MetalAPIのサポート
  ・リターンコード列挙体の追加
  ・サンプルを整備
  ・NX版Vulkanのサポート廃止

勉強メモ 2018/04/28

Share

今日はVeachの論文のChapter.2の2.2までを見ました。
幾つか分からない(or忘れている)内容があるので,あとで確認するためにメモしておきます。

・ニュートン・コーツ法
・中点法
・台形法
・シンプソン法
・ガウスルジャンドル法
・テンソル積
・Bakhvalovの定理