作業記録
シャドウマップのaliasing problemというのがある。光源方向と面の角度が近い部分に生じる影の例のギザギザであるが、これはカメラ近傍でバッファの解像度が足りないために起こる。一般的にカメラの視野は奥が広くなった錘台なのに対して、光源からの視野は…
鉄腕バーディーかなんかを見て思った7/22 最初のエントリのコードを書き換え。楕円に引き伸ばすならポリゴン2枚で十分だよね。
と思ったが画面更新の間のたりない部分を補間してるだけだからそりゃものがあるべき様にみえるだけでおいしい演出とは違うよな。つまりこれを仮に全画面的に適用したとしても「おおおおお〜」とはならないということだ。「いつも見てる通りじゃん?それが何…
実際の環境ではオブジェクトの移動によって像が乱れてノイズが入ることはなく単位時間で一点から反射して目に入ってくる光の量が移動によって広範囲に分散して一点においては減少するだけだ。つまり移動量に応じて像が伸びて伸びた分透過するようになるだけ…
以前エントリにしたピクセルシェーダでsrccolorに基づいてalphaをいじってdestcolor*(1.0-srcalpha) + srccolorすることで適当に背景を暗くしつつ加算混色する方式を今回の嘘ポイントライトの混色にも使ってみた。当然のことながら光の混色は加算混色なので…
先述のメモリリークの件で修正した周辺、配列にコールバックを登録するところで以前は全部にデフォルトの空関数を最初に登録していたが修正時に取り払ってしまっていてaccess violation。 エンティティ個別のデータベース内で自分の装備アイテムへのポインタ…
これが本来の意味での作業記録だな。一応公開しました。本来あるべき迷宮探検での光源問題にスポットをあてた新感覚RPG!というような煽り文句をつけられるかもしれない。立体交差のほとんど無い2.5次元マップだからこそできたpixel shaderを使った数量制限…
極限まで抽象化された概念であるところのゲームオブジェクトはおそらくもともとは画面への描画の最小単位として使われることで意義をもっていたのではなかろうか。要するに昔はオブジェクトがそれぞれ単純に自分自身を自分自身に基づいて描画するだけで画面…
酔っ払いながら書いた自分のためのメモがホットエントリに一瞬顔出しただけでアクセス数が一桁違って戸惑ってしまった。いきなりわけのわからん文章を読まされた方も戸惑っていることだろうと思う。でもそんなの関係ねえ!自分たちが作っているのはあくまで…
なぜわざわざゲームオブジェクトクラスなんてつくって下方へ特殊化するクラスヒエラルキーをつくるんだろう。オブジェクト同士の連絡では、オブジェクトリストを持つ方は信号を伝達するだけで、ダウンキャストなりの特殊化はオブジェクト群のそれぞれの内側…
大抵の構造物はコンポジション構造で表現できるのだろう、車一台はどんどん分解していってネジ一個にすることができる。そしてそれはネジ一個がもつ属性とは無関係な設計図によってもとの車に戻ってくることができる。なかなかそうはいかない場合もあって、…
行数やファイル名が報告されず、ゲームのプログラムなので何度目のアロケーションかという番号も一定せず、ゲームの動かし方とリークする量の変動を見て場所を特定することもままならず、リーク量は数十バイトで一定しているように見えたのでながらく放置し…
ESMについて。ぼかしたバッファに対して描画時のZ値との間に生じる差をある程度の範囲であると見積もってexp関数を使って無理矢理一定範囲に押し込めるように変換する、だけ。お手軽&高速&綺麗。ハードウェアサポートとか浮動少数点バッファがない貧乏人用…
Mount&Bladeでは木漏れ日の下をくぐるとちゃんと木漏れ日の影が、しかも輪郭をもたないぼやけた影が体に落ちる。木漏れ日の下を馬に乗ってパカパカとくぐりぬけたとき、どっかの美容外科の古いCMみたいなエロイ雰囲気になんだか感動してしまって、影界隈を調…
ライブブックマークの興味深さに感動したので自分もタダ働きをしなくてはと思い立ち、mozillazineのポストにあったアイデアに基づいて複数のプリセットを選択できる方式の実装をした。プリセット導入は選択されているプリセットの常に表示す手段と素早く切り…
Zと一緒に色のエッジも見るようにしてみた。rgba全部をZが占領していたところ、rgbの三チャンネルへZをまとめ、テクスチャからの色3成分を圧縮した値をaにいれてみた。エッジ抽出部では色とZとを別々に差分を出してみて絶対値の大きい方を選ぶようにした。よ…
今さらながら、どうして数年前にシェーダモデル2.0をサポートするのを必須にしたゲームがでまくったのかを理解した。単純に閾値による二分岐へ帰結せずにピクセルシェーダ上で様々に数値をいじろうとすると、この能力は1.xと2.0との間で大きな開きがある。今…
左:十分暗い背景上での単純な加算合成 / 中:青空バックに加算合成白飛びしている / 右:なんとかするピクセルシェーダで描画 動機 レーザービームや爆炎や魔法のエフェクトのブルーム等はお手軽に加算合成されることが多いが、合成の対象とする背景が特定…
ちょっと力技で改良を試みた void calc_shadow(inout VS_OUTPUT In) { float4 c = tex2D(s3,In.FromLight.xy); float depth = dot(float4(1,1,1,1), c); //depth = x + y + z + w depth = In.FromLight.z * -4.0 + depth; depth *= max(In.TexShade.y * 4.0,…
この前のHLSLの c.x+c.y+c.z+c.w は dot(float4(1,1,1,1), c) と書くと最適化されるね。っていうか書かないと最適化されないのかよ! 他にもシェーダモデル1.1でmin()が展開できないと言って怒るし、最適化アマアマだし。結局はあくまでシェーダはアセンブラ…
シャドウバッファでググると、この時代になってもまだシェーダーモデル1.1でカツカツだったころの一旦画面全体の影イメージをZの大小の2値で別個に作ってしまう方式の解説と、こんなんじゃシャドウバッファなんて使えないと思われてしまいそうな画面写真がの…
http://www.aa.alpha-net.ne.jp/kataho/mq/ 今までこっそり作って使ってたコマンドプラグインを公開します。 便利だと思ったらRoAの方で使うキャラクタモデルでも寄付してください。 プラグインへのコメントはここへどうぞ。
現在採用している、ボーン同士の関節部へ両者を補間して出した中間ボーンを追加して作った行列パレットを使う手法は、正確にslerpで補間された中間ボーンのおかげで関節の屈折角度が必ず90度以下に収まり、頂点座標の線形補間によって生じるアーティファクト…
動機 長い得物を振り回すと先の速度が酷く速くなってしまって60fps程度の更新頻度では動いているように見えなくなってしまうために剣の両端の点をバッファに入れて軌跡が描かれることがある。当然のことながら画面更新の頻度そのままで点をサンプリングして…
最初は本当にひどかったですが、2,3日で順調に安定してきたようです。リファレンスカウント式じゃなくて時間で消去しちゃう共有記憶が消えるのが想定していたより早過ぎてアクセス違反とか。けど新規に作ったスキンメッシュとかシミュレータのプールとかは全…
ソースコードを色付けして記述する(シンタックス・ハイライト) - はてなダイアリーのヘルプ色つく記法(シンタックス・ハイライトというものだそうで)ができるらしいのでテストでsquirrelのコードをjavaのハイライトでやらせてみよう。 キャラのモーション…
わざわざ武器を右手でも左手でも装備できるようにしてるのはきっと自分が左利きでどっちの手を使うのかということに変なこだわりがあるからではなかろうかと思う。さて、右手に持っている武器は右手に持っているように表示されており、右手の武器を使うボタ…
サンプラーのリニアフィルタを何度も使うことでピクセルシェーダにかかる負担を最小限に抑え、なおかつクォリティの高いブラーを実現した。 1. 元画像 (270x500) 2. 20%スケールダウンしたサイズのテクスチャへ (54x100) 3. 2を98%スケールダウンしたサイズ…
クラス図を書くのが好きな人への課題。 俺のゲーム上で描画される一人のお人形(エンティティ)は複数のそれぞれ異なるライフタイム、共有レベルを持つパーツを組み合わせて作られる。 体のメッシュ・ボーン・ボーンアニメーションデータ → プール内に置かれ複…
実際のカメラのレンズや目玉によってもたらされる視野は扇型を視線を軸に回転させた回転体なのだが、コンピュータ上では計算の簡略化のためか上下面が平らな錘台の形で扱われている。このため特に視野の端の方でリアルとのゆがみが大きくなり、違和感が生じ…