椿の日記

たぶんプログラムの話をします

カーソルをアクティブウィンドウのクライアント領域に制限する

カーソルをアクティブウィンドウのクライアント領域に制限するには、Win32 APIの ClipCursor 関数を使うのですが、なかなか期待する動作をしてくれません。多くのサイトでは、ウィンドウのアクティブ/非アクティブ状態をWM_ACTIVATEで検出し、クリッピングの…

Haskell@Windowsのコンソールで日本語が文字化けする話の対策

コンソールのコードページがCP932なので、最終的にCP932に変換しなければならないのですが、どうせWindowsでしか起こらない問題なので、WindowsのAPIを使っちゃいます。 import Data.Word import Foreign.Ptr import Foreign.C.Types import Foreign.C.Strin…

Frequency Domain Normal Map Filtering実装

少し忙しくて放置してたのですがFrequency Domain Normal Map Filteringを実装しました。画像はそれぞれ次をあらわしていて、左上をリファレンス画像だと思って見ます。 通常のバンプマップの32倍スーパーサンプリング 通常のバンプマップ NDFをmovMFで近似 …

pixel shaderでshared memoryって使えるの?

ここまで最適化を進めてきたのですが、これ以上はpixel shaderでは高速化は無理な気がしてきました…ループに[unroll]を付けたり階乗計算を漸化式的に書き直したりした結果、アセンブリコードの大半は積和計算になりました。それでも遅いということは、レジス…

シェーダの最適化ってどうするのがいいのかな

あんまりにもSH係数の計算が重いのでシェーダコードの最適化をしています。ただ、ある程度のところより先は、どう最適化するのがよいのかよく分からんことに。というのは、生成されたアセンブリコードをCUDAコアで実行するにあたって結局どういう風にコンバ…

球面調和関数の練習

やったこと やっと時間取れたので実装してみました。上段はリファレンスとなる通常の照明計算、下段はそれを球面調和関数の係数空間で計算しました。左から順にそれぞれ次のような照明計算を行いました。 Lambertian BRDF * DirectionalLight Phong BRDF * D…

Frequency Domain Normal Map Filtering続き^4

※式が違ったので修正(12/24)セクション4.3の次の式 について、次のようにそれぞれ球面調和関数展開できるとき、 その係数が次のようになる、 というこの部分について流し読みしていたのですが、よくよく考えてみると、よくある球面調和関数の内積と違ってを…

Frequency Domain Normal Map Filtering続き^3

セクション7で出てきた次の式(16)、 の出所は、これはClustering on the Unit Hypersphere using von Mises-Fisher DistributionsのAppendixに乗っていました。導出の詳細は論文を参照するとして、von Mises-Fisher分布関数のパラメータκとμをEMアルゴリズム…

Frequency Domain Normal Map Filtering続きの続き

論文のセクション8にも意味が分からなかった部分があったのですが、解決したので覚書しておきます。問題を要約すると、入射方向ωi、出射方向ωo、そのハーフ角ωhについて、が成り立つ、というものです。通常の反射の積分は入射方向で球面上を積分しますが、Bl…

Frequency Domain Normal Map Filtering続き

この論文も後半でいくつか分からない部分がありました。論文の後半は、NDFを近似するにあたってvMF(von Mises-Fisher)分布を用いています。vMFは球面上の1つの突起を表現していて、方向、幅、振幅の3つのパラメータで表されます。複数の突起を扱うには、その…

Frequency Domain Normal Map Filteringを読了

Frequency Domain Normal Map Filteringを読みました。法線マップのフィルタリングに関する論文で、法線マップを単純にミップマップ化すると法線が平均化されて想定外の方向を向いてしまい、シェーディング結果が変わってしまう 問題に対してどのように対処…

SparseVoxelOctreeの記事を読んだ続き

Interactive Indirect Illumination Using Voxel Cone Tracing について、ようやく大体のことを理解しました。細かいところで色々と分からない部分が出てきそうなので、理解を深めるために一度実装してみようかな。 ただ、現時点でSection 7のVoxel Shading…

SparseVoxelOctreeの記事を読む

急にUnrealEngine4で実装されているといわれるGIアルゴリズムについて調べたくなったので、関連する論文とか資料を読んでいます。SparseVoxelOctreeを利用したこのアルゴリズムは、光源方向からのフォトンの照射とOctreeへの格納、それから視点方向からの三…

最長増加部分列がイマイチ分からない

蟻本を少しずつ進めています。p.63~p.65の最長増加部分列の説明なのですが、自分にはどうも自明には思えなくて、そこで少し停止しています。dpは単調増加であるとか、更新できる要素は高々1個しかないとか、そこらへんが解説なしに進んでいってしまうので、…

tex記法の練習

プログラミングコンテスト チャレンジブック 第2版を買ってみた

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?作者: 秋葉拓哉,岩田陽一,北川宜稔出版社/メーカー: マイナビ発売日: 2012/01/28メディア: 単行本(ソフトカバー)購入: 11人 クリック: …

ブログ移転しました

はてなダイアリーからはてなブログに移転しました。なんとなくスッキリ。 (実はあんまり機能とか確認せずに新しいものに飛びついただけだったり…)

MySQLの日本語表示の話

なんか日本語が表示できないなあ、と思ってたら凄く単純な話でした。これをやっておかないとならないようです。 quickQuery conn "SET NAMES utf8" [] こうしないと、日本語文字の部分が?に化けてしまいます。これはmysqlの関数がやっているようで、Haskell…

Haskellの実行速度

haskell vs その他の言語 - ながとの日記 という記事を見て、へぇーと思ってみてたのですが、元記事のコードの次の2つが何故これほどまでに違うのか、ちょっと気になったのでコンパイルだけして実際に確認してみます。(2つ目のはBangPatternの言語拡張のとこ…

Haskellでこの問題を解いてみた②

同じ人が別の問題を作っておられたようなので、解いてみました。ぷよぷよ19連鎖 import Data.Array import Data.List type Point = (Int,Int) type Field = Array Point Char type Route = [Point] isLegalPuyo :: Char -> Bool isLegalPuyo '\n' = False is…

Haskellでこの問題を解いてみた

web巡回してたらこんなページを見つけたので、解いてみました。人材獲得作戦・4 試験問題ほか import Data.Array import Data.Maybe import Data.List data Cell = Space | Wall | Start | Goal | Road deriving (Show, Eq) type Field = Array (Int,Int) C…

Haskellからmysqlを実行する

Haskellからmysqlを叩きたくなったので調べていたのですが、かなり骨が折れる作業になりました。一筋縄に行かない問題が次から次へと…。しかしなんとか解決できたので、忘れないように覚書を残しておきます。 ビルドするのはThe HDBC-mysql packageです。パ…

レイのフラスタムパケット化はパストレに弱い?

Kirill Garanzhaの手法の続報で「パストレにおいて性能が出ない」ということが書かれたpptを見つけました。何故遅いのか理由の記述を探しているのですが詳しい記述が見当たらないなあ。 ただの推測ですが、フラスタムのパケット化を中心としたアルゴリズムな…

レイの境界フラスタムの構築の仕方

Large Ray Packets for Real-time Whitted Ray Tracing, Ryan Overbeck Ravi Ramamoorthi William R. Markフラスタムの構築手法のところだけ。大きく分けて3通りの構築の仕方があります。 1次レイに関するフラスタムの構築 点光源のシャドウレイに関するフ…

GPU向けのBVH構築の手法

次にこれを読んでいます。Fast BVH Construction on GPUs, C. Lauterbach and M. Garland and S. Sengupta and D. Luebke and D. Manocha, EUROGRAPHICS 2009 http://luebke.us/publications/eg09.pdfとりあえずSAHを利用する場合のみ読んでます。 主な並列…

リアルタイムでレイトレ用のBVHを構築するっていう論文

On fast Construction of SAH-based Bounding Volume Hierarchies, --- Ingo Wald, Proceedings of the 2007 Eurographics/IEEE Symposium on Interactive Ray Tracing http://www.sci.utah.edu/~wald/Publications/2007///FastBuild/download//fastbuild.pd…

レイトレを幅優先探索でGPUで処理するっていう論文

読み終えたので、忘れないようにメモ書きしておきます。GPUによる、高い並列性を持つレイトレーシングの手法の一つです。Fast Ray Sorting and Breadth-First Packet Traversal for GPU Ray Tracing, Kirill Garanzha and Charles Loop http://research.micr…

シェーダデバッガをONにするとフレームレートが下がる件について

ただの覚書ですが、原因不明のフレームレート低下に見舞われてしまったので記録しておきます。 DirectXにはシェーダのデバッグ機能があります。①/Zi /Od コンパイルオプションを付けてシェーダをコンパイル ②DirectX Control Panelで「Enable Shader Debuggi…

colladaを使ってみる

colladaを読み込むにはcollada domというのを使うのですが、2点気をつけることがあったので単なる備忘録。・daeファイルのバージョンとcollada domのsdkのバージョンは合わせる必要があります。(上位互換/下位互換があるわけではないようです) ・colladaの…

CUDAを使ってみる

次はフォトンマッピングをしようかと思ったのですが、気分転換にCUDAを勉強してみようと思います。とりあえずv4.0のSDKをインストールしたあとにハマった点だけ簡易まとめ。 cutil cutilはDirectXで言うところのDXUTのようなユーティリティのようです。 自分…