【雑記】 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/12/12 LW SDKでリサイズ可能なGUIを作る | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
師走という事もあり結構多忙です. リリースはもう少し先になりますが、次のTB_ShaderManではようやく画像に対する任意UV座標でのアクセスが可能になります(今まではLWのテクスチャエンジンでパラメータにテクスチャを割り当てる方式しかサポートしていなかった)これでPaintMapや予め計算した値をテクスチャに格納してレンダリング時に再現するようなシェーダも実装可能に. 通常レベルのShaderについてはほぼSDKと同レベルで実現可能となる為、機能的には現状コアでは一区切りとなる予定、とは言え予定は未定でもあるけど;-) --------------- LWプラグインで可変サイズの凝ったGUIを作る為に休日1日色々調べてみる.
第一ステップとしてOpen時にGUIのサイズを可変にするフラグがLW7から追加になった為、これを設定してパネルを開く、、、通常のWindowsアプリのように端をドラッグしてもサイズが変わらない、どうやら単に関数で手動でパネルのサイズを変更できるだけ、という事らしい. 仕方なく右下に小さな領域を取って自前でリサイズ時のドラッグ処理を実行する、面倒. 次にGUIにコントロールを配置した場合を試す、、、一応サイズの変更は設定している筈だがリサイズしてもコントロールのサイズが変わらない、どうやら一旦作ってしまったコントロールのサイズは変更できないらしい。更にSDKのAPIがOpen時のコントロール配置を憶えていてそのサイズ以下にはWindowサイズを変更できない。ついでに言うと一旦作成したコントロールはパネルが破棄されるまで手動で破棄する事もできない模様.
これでは可変サイズのGUIの実現など無理(あるいはコントロールを一切使わないで、全てのコントロールを自作する)な話な気もするのだが、実際LWのSpreadSheetやMotionMixer、或いは市販のプラグインのVisualTextureなどでもLWのコントロールを使用したリサイズ可能なGUIを実現している. という事でそれらの挙動を観察する、、、とリサイズ直後にやたら画面のちらつきが目立つのと、リサイズ直後の瞬間Windowが別位置に発生している模様、 まさかと思いつつ思いついた方法を試すと自前のGUIでも実現出来た、出来た事は出来たのだが、、、思いついた方法とは以下の通り
、、、マジですか?
GUIに画像を貼り付ける為のRasterAPIも余りまともとは思えない仕様(Win32のdibなどを作るのと同じ手順だがピクセルの内部構造にアクセスする手段を提供していない為、SetPixelと同様のAPIで1ドットずつ設定して行く)だし、この辺は何とかして欲しい所. 正直この辺のGUI APIを充実させるかどうかでサードパーティ製のプラグインがLWと連携する際の使い勝手にも大きく影響すると思うし、LWのような外部のプラグインに頼ったソフトでは結構生命線とも言える問題だと思うのだが、何とも何とも:-<
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/11/17 お知らせ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ここ暫くコアのライブラリの更新で殆どのプラグインを改修してきたのだが、過去との互換性やらでソースコードがチグハクな部分が出てきて、気持ち悪さがピークに達したので一旦全てのプラグインについてコアルーチンの入れ替えを行おうと思います. 特に現行のルーチンではバージョンアップによる保存データが問題になるケースが多く、対してここで公開しているプラグインの一部については自分が日常的に使っているものも多い為、現状のままのコードで維持すると開発の度にこれらのトラブルや気持ち悪さを意識しなければならず、精神衛生的に非常に悪い、という話もあります. 無論バージョン互換とはいってもTB_ShaderManなどは複数のVMを搭載するワケにも行かないので限界はあるのですが、バージョンを入れ替えた際に最悪パラメータの設定直しになったとしても、その他読み込めなくなるなどの致命的なトラブルを回避し、また開発側のバージョンアップによる互換性の維持にかけるコストを可能な限り削減する事を意図しています. スケジュール的には年内に再度全てのプラグインについて改修を行い、また現状のラインナップで使い捨てのレベルで開発したもののjunkに振り分けなどの整理も意図しています.
ただユーザーへの見え方としては機能アップは殆ど無く、セーブデータの互換性だけが無くなる形になるので、いささかの顰蹙はあろうかと思いますが、どうかご了承願います. と、いう事でTB_ShaderManの新バージョンのリリースはそれまで延期とします、とは言っても自分の性格からしてこういう話を公表する時はほぼ全て目処が立っているのですが(笑) 実際新しいコアライブラリのプロトタイプは既に実装済み、ただこういうものは作ってから数週間寝かせて見落としが無いかを熟考する時間が必要なので、という事で. 実際コード書いているよりもそうやって考えている時間の方が遥かに長いのですが(TB_ShaderManの時は実際の実装は2週間程度(笑))、、、まぁそんなものでしょう、という事で;-) 手を抜く為なら労力を惜しまない、というのもアレですが、得てして力技で考慮も無しに実装してしまうと後々まで悪影響を残すので、やはり作り込むような真似はしてはイカンと思ったり(苦笑) # とはいえまずは用事がある為、数日留守にする予定です;-) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/11/14 小休止 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
この土日は久しぶりに焼肉を食べに行ったり、例のツボを3Dで作ってみたりという事でプラグインには進展無し、まぁたまにはそんな日もあるだろう、という事でまぁ良し. という事で例のツボ、友達がうろ覚えで描いたものを更にうろ覚えでアレンジしたので最早別物に、しかしこういうベクトルはやっぱり大好きで、いじっていて楽しい. 後はちょっと掲示板でPythonネタが上がっていたので色々調べてみたり、明日からはTB_ShaderManの改修作業再開予定.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/11/11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TB_ShaderMan以外のプラグインの改修は終了、ただTB_ShaderManに関しては引っ掛かる所があり今暫くかかる予定、先日の乱数の件は画面固定の乱数系列で良い系列が得られたので、全てのrandom()呼び出しについて適用するように変更、まぁ実際の所Shaderを書く上でrandom()なんて関数はモンテカルロ以外で使ってはいけないモノ(通常はnoiseやcellnoiseを使う)なので良しとする.
実際にはShader勉強始めのコードで何回かパターンに乱数を使ったコードを見たので、そういう層を切り捨てる結果になる気もするが、本来そういう使い方をするモノでは無いのでまぁ良しとする事に. と、いう事でこの部分に関しては次期バージョンは機能削減になるかもしれない、まぁ実際の所これで実装できるのはブーリアンシェーダやレイの透過に合わせてエフェクトを加えるようなシェーダに限定されるので(あるいは本当に複雑な情報についてはそもそもより細かい情報収集機構が必要になるが、それはSDKの領分だと思う) と、、、いったカンジ、まぁ実際には数日中には仕上げるつもり(余り時間的余裕も無いしね;-) --------------- 最近暇をみては「プログラミングのための線形代数」なんて本を読んでます、内容はプログラムは全く無く数学の話だけなのですが、行列式や固有値、固有ベクトルについてそれの持っている意味や射影空間での具体的なイメージを含めて解説してくれているのは非常に有難く自分的には良著、学校ではこういうイメージでは教えてくれなかったなぁ、トカ. まぁ自らの不勉強が原因なのでアレですが、なかなか、まぁ勉強はできる時にやっておくのが良いという事を痛感中(苦笑)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/11/6 相も変わらず | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
相変わらずプログラム修正中、先日のバグ対象となる所はほぼ修正したものの、ソースをいじっていると色々ネタを付け加えたくなるという非常によくあるパターンに陥ってます(それは完成度が低いからじゃないか?というツッコミはナシの方向で(ぉ モンテカルロシミュレーションの対象の低周波的特性とアニメーション時のフレーム間の同一座標のピクセルのコヒーレンスがどーのこーの、という事で少々乱数ルーチンに手を入れています. 要はアニメーション時にちらつき軽減なのだが、勿論影響されるのはほぼ全てのプラグイン(笑) 問題はそれをデフォルトでやってしまうかどうか、という事。頭の中で組み立てた仮説でそれ程テストしていないのが不安というのもあるのだが、それ以前に特性として乱数を固定する場合単なるランダムサンプルに比べ同サンプル数では粒状感が若干強く出る上に、現状初期値の算出の問題とも言えるが近傍ピクセルまで含めた系列という事では余り質も宜しくない(まぁ粗いサンプルで目立つ程度ではあるが) 更に当然アンチはかかりが悪くなるので、サンプルを増やす以外にスムーズにする方法は無いカンジ. ただ選択式とするとTB_ShaderManの場合にrandom()の他に拡張関数としてrandom2()などと用意するのは美しくない、、、という事で考えをまとめるまでちょっとリリース時期が伸びるかもしれません:-< --------------- 後TB_ShaderManの今回の目玉(?)は独自拡張の"reference"座標系の追加、自分で言うのもアレではあるが、かなり便利だと思ったり、この機能はRenderManを使っている時にも欲しい所だけどDisplacementまで考慮するとちょっと実装は無理っぽい、という事で参照頂点&法線情報程度で我慢:-< この時ばかりはSubPixel Displacementを持っていないLWに感謝な気分、まぁプログラムが書けないと何の役にも立たないのはいつもの通りなのだが(笑) 余談だけど、フリーのレンダラでよく思うのがLightFlow(開発終了)にしてもVirtuaLightにしても、あるいはPOV-Rayにしてもそうなのだけど、プロシージャルパターンやシェーダを持ったレンダラで参照ジオメトリ情報を持ってないのは如何なる事か、とか思ったりするのだけど、、、アニメーションに使えないじゃん、みたいな、、、全部UVマップでやれって事なのかな?X-< --------------- というかいい加減区切りたい所ではあるのだけど、、、いつまでもこればっかやっているワケにもいかないし(笑) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/11/4 訂正 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨日書いたBakerでの問題だが、よくよく調べた所LWMeshInfo自体がおかしいのでは無く、プラグインに渡されているシェーディング座標のpolygonIDがNULLになっている事が原因だった模様、という事で散々文句言っていたのでみっともないのだが、これならば対処できそうではある、という事で訂正します、間抜け>自分 という事でまたまた近日中に総入れ替えの予定、というかTB_ShaderMan以外はもう実は完成しているのだが、TB_ShaderManについては若干座標系などに仕様変更が入る予定で(本当はこの時点で変更するのは余り良くない事は認識しているのだが)それと合わせて調整中、まぁ他のプラグインは外見は殆ど変わっていないので特に問題は無いと思う. TB_ShaderManの仕様変更この時点でという事やRenderManとの互換性で色々悩んだのだが、将来に禍根を残すよりは良い、という事で断行.
と言うかそろそろプラグインばかりいじっていても他の事が出来ないし本末転倒なので、これで一旦区切りとしたい所ではある、、、他にもやりたい事あるし;-) HDDの整理をしていて昔作った画像発見 KOJIさんから教えてもらったえらい話、「ゲームソフト大手各社、「3D技術特許の侵害」で訴えられる」だそうな、実際の特許の文面には目を通してないですが、記事に書かれている内容通りだとするとゲームはおろか殆どの3Dソフト、というか3Dそのものに影響しそうな話ではあります、誠に困ったモノで.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/11/3 参ったね:-< | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ようやくプラグインの改修も終り、と思ったのだが、一つ頭の痛い問題を発見する. 暫らく考える事にしたいと思いますが、、、さて、どうしたものか?:-< |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/22 速度か機能か? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
先日書いたプラグインの改修作業はほぼ完了、コードの修正をしていてふと思い立ったので限定的ながらShaderManにisshadowray()関数を試験的に実装する、ちなみにRenderMan系でのisshadowray()関数は現在のコンテキストが影の計算中かどうかを判別するもので、透明体のレンダリング時に影を正確に出す目的や、マルチサンプルを伴うシェーダで計算を行わないフラグとして利用できるもので上手く使うと表現の幅や指数関数的な増加を示す計算の効率化が可能となる. 一応LWのSDKにも該当フラグの記述はあるのだがLWのバグにより機能していない(常に0が返る)のであくまでShaderManから呼ばれた影のトレース時に限定されるのだが、LWの共有メモリ機構を利用してTLSもどきを実装する事でマルチスレッドでも整合性を保てるように調整. と、ここまでは良かったのだが、LW内の共有メモリの検索が重いらしく、速度的には15〜20%の低下が見られた、例えばシェーダ無しで45秒、Nativeの自前でシェーディングを計算するシェーダで60秒、以前のShaderManシェーダで75秒(シーン内の全てのサーフェスに適用)だったシーンについて90秒程度かかってしまっている. Pluginはdllで実行されている為、LWのレンダリングスレッドがどのようなスレッドが走っているかについては正確に管理できない為、動的にスレッドをチェックするしか無く、内部的なキャッシュは機能しない(正確にはレンダリング開始・終了時に状態遷移を含むものを完全にクリーンナップするのが難しい)一応LWのプラグインにはレンダリング開始・終了通知コールバックが定義されているのだが、実はこれはそれ程アテにならない(笑、、、えないけどX-< 機能としては理想的にはシーン内の全てのシェーダに設定されている場合に最も良く機能するので、サーフェスごとのスイッチでON/OFFするような機能では無い. 、、、非常に悩ましい所で、マルチサンプルや透明体が絡むと速度効率は変わるものの、標準的なシングルトレースの場合にシェーダ無し(or Nativeの軽いシェーダ)の50%平均という速度は許容範囲だろうか?非常に重要な関数ではあるのだが、たかだか1関数、しかも限定付きの機能について速度20%減というのは如何なものなのだろうか?(無論機能的には表現の幅は大きく広がるのだが)実際エンドユーザーの立場として見るとどうなのか、というのはソフトを作る上で推し量るのが非常に難しい、特に長い間開発していると:-<
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/20 やっちまった | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨日普段使っているコアライブラリに幾つか問題があったと書いたのだが、それのテスト中にShaderManでマルチスレッド関連のバグを発見、昨日書いたマルチスレッド絡みの致命的なバグについては半分LW側の問題なので、言い訳がつく気もするのだが、今日発見したのは余りに初歩的過ぎて笑ってしまう程、というか言い訳の余地無く、穴があったら入りたい気分orz 内容については余りに恥ずかしくて書くのも辛いのだが、現状ShaderManはシングルスレッドで動かしてください、という事で、次バージョンでは対応します(平謝り) いやもう本当に懺悔するような気分で...これからはLWは常にマルチスレッドでレンダリングするようにしようと思います(x_x)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/19 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プライベートの開発も一段落して、まったり過ごすつもりでいたのだが、ちょっとLWプラグイン作成時に使用しているライブラリをチェックしていてやっちやった的なバグを発見したので近日中(今月以内を予定)に修正予定、問題は一つはマルチスレッド+LWのイベント絡みでかなり致命的、後は最近調整しているVParam(テクスチャなどが設定できるパラメータ)関連の機能強化&バグ修正. という事でかなりの数のプラグインが影響される予定、一応の修正予定は TB_ShaderMan, TB_Edge, TB_fakeSkin, TB_2ndSrf, TB_IPlane, TB_Dirt, TB_NormalMapといったカンジ、まぁ殆どは機能追加も余り無い(GradientがあるものについてはGradientの種類のみ)なので、セーブデータもそのまま使える予定、ただTB_2ndSrfについては変更アリで、メニュー的には1つ項目が追加になるだけなものの、Gradientの追加機能と併用した際に標準機能では出来ないエフェクト系などとしても活用可能なように、後はノンフォトでGradientと'Light Incidence'を使う事で陰影を付ける手法などと同様のアプローチで簡単なシェーダのようなものも設定可能になる予定、ただ実際そういう使い方に気付いてくれる人がいるかどうかは不明だけど(^^;; しかし改めてLWのGradientの着眼点は偉大だと実感. まぁ余りPluginばかりいじっていても、本質はやっぱり3Dを作る所なワケで、区切りも重要なのだけど、やっぱPluginのソースとかいじってると色々拘りたい部分が出てきて本末転倒な気もしてみたり. --------------- 最新版のLW8.0.1にてLScript Shaderを動かしてみた所かなり速くなっている模様、ありゃりゃと思いつつ(ShaderMan無駄に作ったかと(笑)、複雑なシェーダについてはどうかと試した所、、、illuminate呼んだらLWごと落ちた(--# ほっとしたようながっかりしたような少し複雑な気持ち(笑) --------------- 前の会社の友達(元上司)との会話、一生懸命真面目に就職して普通に人生を送りたいと考えている可愛い後輩に対し「会社なんて下らないから、やめとけやめとけ、諦めろ」などというのはどうかと思います.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/13 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/6 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/4 昨日のフォロー他 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
という事で上に書いたものコッソリ置いておきます、、、次バージョンではサンプルに入れるかもしれないけど. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/10/3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ちなみにTANEさんの書かれている「Javaはうれしくない」ですが、個人的にはGC言語でもインスタンスのDeepCopyなどは意識する必要があり、参照なのかコピーなのかといったメモリの使用状況は意識する必要があると思うので、実際メモリ管理は少し楽になる程度、という気もしていたり(C/C++でも大量にメモリを確保する場合はマネージャとか書くし、確かにGCである程度楽にはなるけど、それ程深刻にメモリ管理に悩んだ事もないし(笑) どちらかというとJavaで嬉しいのはシリアライズやリフレクション, RMI, ClassLoaderとかその辺りではないかと思ったり、後はJNIとかもある程度制限があるものの自作アプリ(Native)にJavaでプラグインを作る機能なんかを持たせられるので面白い気がする(100% PureJava?そんなの知らない;-) D言語なんかはその辺中途半端で、全部自前で実装する必要がある点は本当にGC付きのC++のようなカンジ、ただこのアプローチで致命的なのは本来GCはシステムが持つべきもので例えばAPIやモジュール境界をまたいで管理する領域なんかはGCの対象外にする必要がある事、少なくともD言語のランタイムは共通にしてモジュール境界でクラスを受け渡せるような方式にして欲しい所. --------------- Javaは現状でまだ言語仕様に手が入る点と肥大化し過ぎたライブラリがネック、ランタイムのバージョンの問題もありクライアント系は環境が限定できない点で非常に難しいような、正直そろそろ枯れて欲しい所だけど、ただ言語としてfixさせてしまうとJavaのようなクラスライブラリ込みの言語として出来る事が停止してしまう訳で難しいのかも、後VMの起動に時間がかかったり、GUIが致命的に重かったり(最近は昔よりはマシになってるけど)そもそもGUIパーツを座標指定できない部分なんかは確かにクロスプラットフォームを考えると理解できるのだけど(この辺は.NET Frameworkの方がマシ、ただ現状まだプレビューで実用にはWinFXを待つ必要があるとは思うけど)正直もう少し何とかならないかと思ったり(自前で全部描画という手もあるが...:-< D言語はまだまだ発展途上で初期レベルの言語の根幹に関わる仕様もfixされていないので、本格的に使うには信頼に足るレベルでは無い。ただこの言語、もう7年も作っているらしいのでオープンソースの駄目な所(広げた風呂敷の口を閉じて一旦正規リリースとしての機能を限定し、明確に仕様を打ち出すのが難しく(モノとしての信頼性に関わるのだが)、深く機能を掘り下げるよりも広く機能が横に広がる傾向にあり、製作者達の興味の無い所は据え置きにされる為、結果禄に完成しない) が出ている気がする. D言語の分野についてはニーズはある(というかJava1.0betaが出た当初一部プログラマが期待した分野がまさにそこ、ただ現状ではクライアントJavaは既に死んでいる)と思うので、着眼点は悪く無いのだが、言語仕様が若干雑然としている点なども含め難しい所、IBMとかBorlandが買い取って開発するとかになればまた違ってくるとは思うのだけど、ここ数年(数十年のオーダーではまだ未知数だが)でモノになる言語とは思えない気もしたり.
# D言語の7年開発続けている、で思い出したけど、何処かにやっぱり7年開発続けているソフトがあったような、、、(笑) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/9/30 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
--------------- ようやくShaderManの正式リリースにこぎつける、結局Shaderの領分を外れる為最後まで迷っていたライトパラメータの拡張についてはリリースしてみて様子を見る事に、ギフトウェア化は面倒なのでやめ;-) 多分パーティクルなどと連携するような特殊なもの以外の汎用的なシェーダについてはこれで打ち止めの予定。シェーダプログラムを書く必要はあるものの、これで自分の理想とする質感についてはほぼカバーできるのが理由。 今後はモーション系やモデリング系にも手を出すか、あるいは他の分野の開発にメインを置く予定、一応(と書いてたらネタが一つ思いついた、樹木用の葉の1枚1枚を(連結をスキャンした上で)微妙に色を変えるシェーダとかどうだろう(笑) しかし、結局ノードベースのシェーダーエディタとシェーディング言語の2パターン作ったのだが、実際使ってみるとノードベースの場合シェーディングロジックなどまで含むある程度以上の規模のシェーダを作るのは無理があると実感、ある程度抽象化されたものを手早く組み立てるには良いのだがそれ以上となると過去の日記で書いた50行程度のシェーダでも無理がある為、ベストの形はノードエディタ+各ノードはプログラマブル、といった所かもしれない、と思ったり。 --------------- おまけ
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/9/19 SSS | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
で、新しく出来るようになった事は以下の通り.
ちなみにシェーダのコード量は100行程度(笑) これ以外にもOGO_Hikariのボリュームシェーダのようなものも作成可能.
結局原因はLWの制約上あるIDを持つポリゴン上の点からrayCast,rayShadeなどのレイトレース関数を実行する場合レイが衝突したポリゴンが同一IDの場合は衝突を検出しない事が原因の模様 OGO氏のOGO_Hikariなどと同様、別途裏向きポリゴンをマージしない状態(マージするとLWが同じポリゴンと見てしまう模様)で作成する事で何とか解決としたカンジ. 、、、まぁこちらもSSSのロジックを自前で記述できる必要があるのだけど;-) 後一つ出来ない事はG2やunRealのペイントマップが実現できない事(テクスチャ機能未サポートの為)があるのだけど、ノンフォトは個人的には殆ど使わないので気にしない事にする. 後少し、そろそろゴールが見えてきた気がする. ---------------
まぁ自分の作っているものを否定するような気もするのだけど、Shaderを書くのはやはり手間がかかるので、それ程重要でない部分や細かいシェーディングロジックを調整する必要が無い部分についてはこういうのも良いだろう、と思ったりで結構良いカンジ(^^;; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/9/15 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本当はもっと自分が普段使っているシェーダなどをサンプルとして同梱したいのだけど、公開されているシェーダを修正・流用して使っているものも多い為、そのまま添付して良いものかどうか悩ましい所(povmanとかは添付しているみたいだけど(^^;; 一応Renderman Shaderについては以下のページなどに大量のサンプルがあるので興味がある方はそちらを参照すると吉かも. http://www.renderman.org/ まぁ結構そのままでは通らないものもあるので、その辺は修正が必要になるのだけど、ただ殆どのサーフェスシェーダのロジックは移植可能な筈. 後は、ギフトウェアについても、冷静に考えてみるとそれどころかプライベートのメールさえ返事を書くのが面倒な性分なのでどうしたものか、とか;-) まぁぼちぼち考えるとはしましょう、と。
--------------- 最近は何やらエンプラづいてJavaやらサーバ系の何とやらの勉強中、とは言っても自分の好きな分野と全くかぶらないので半ば適当ではあるけど、最近の動向は押さえておく意図と以前の会社での開発でそれ系が得意な人に任せていた部分を自分でもある程度押さえておこう、というカンジでまったり進行中.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/9/13 もっと単純に、ごく普通に | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
確かにこんな身分になった人間に声をかけてくれるのは有難い事ではあるのかもしれないけど、こんなヤツ甘やかすと後でロクな事にならないよ的なカンジではある. もっと世の中なんてナメたものと割り切って、特権的な話も受け入れても良いのかもしれないけど、何かそういったものを利用するのに自分の中でやましさや、甘やかされて育つ子供のような不安があるのも確か. 、、、なんでもっと単純に事が運ばないのだろう、と。 と、該当何名かに向けて取り合えず愚痴です(笑) # 気付くと雑記がやたら長くなってますね、でも取り合えず今年は丸々1ページで行って、来年は何か対処しましょう、という事で(^^;
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/9/10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
--------------- ちなみに最新版では細かい修正以外にLW上で貼った任意テクスチャ座標についてバンプまで含めたパターン計算に十分な情報をサポートした事と、複数のシェーダをレイヤーで重ねられるようにしたのが最大のウリではあります。 ちなみにシェーダの速度自体はサーフェスの複雑さにも依存しますが、総じて自前でフルシェーディングを行うNativeのシェーダと同程度〜最低でも50%位は出ている模様。 VM自体(スタックベースの仮想アセンブラマシン)の速度はPerlの1.5x3倍, VB6の1.0x3倍程度(x3はベクトル演算の為)とNativeコードに比べるとそれ程早い訳ではないものの、レンダリングの他の計算と合わせた時には十分な計算速度が出ているようで一安心、、、実は自分でも作る前はパフォーマンスが出せるかと結構不安だったりしていたのですけど(笑)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/8/30 再びフレームワーク | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
noboyama氏よりWTLなるものを紹介されたのでここ数日遊んでいました。 但し発表当時余り話題にのぼる事も無く、リファレンスなども殆ど存在しない事から自己解決できるマニア向けでユーザーも少なく、現在はMSのサポートも縮小傾向にある点はちょっと微妙かも(^^;; --------------- リファレンス(WTL3.1の頃のものだが現在でも99%は同じとの事) クラス階層図 入門用参考ページ 印象としてはMFCをシンプルにしたようなライブラリ、抽象化されるのはGUI及びGDI周りのみでDoc-Viewやシリアライズなどは持たず、基底となるObjectクラスも無い。 クラスインターフェイスはMFCに順ずる(APIとほぼ1対1)ものの、MFCに比べ過度にラッピングされていない為、APIとの親和性が比較的高く、メッセージマップなどは全て統一されたインターフェイスで作成でき、メッセージマップのチェーンにより基底クラスの処理を呼び出す為、MFCのようにクラスウィザードのの手助け無しでサクサク書いて行ける。 という事で悪く無い印象です、というかMFCよりは「はるかに」好みではあります;-) --------------- ただ気になる点もあり、確かにカスタムコントロールを作る上での利便性はMFCより良いのですが、反面MFCとは共存できない模様で、またbccなどでもコンパイルできない(殆どはconst宣言の問題なので修正すれば通りそうではあるけど(^^;; 一方APIでカスタムコントロールを作る場合、MFCであろうとWTLだろうと問題無く組み込む事が出来、必要であれば各ライブラリでラッパークラス(MFCの場合はCWnd、WTLの場合はCWindowImpl<>にて)を作成する事である程度の利便性が図れる。 実際上のWTLの勉強中にも幾つか馴染まない個所があって、自前のAPIベースのライブラリを組み込んでみたのだが、やはりAPIの再利用性には及ばない気がしたのは事実(^^;;; --------------- かつてオブジェクト指向による再利用が話題となったが、フレームワークによる制約を受ける為。それらを越えてロバストなものを作ろうとするとフラットなAPIが最も可搬性があるのでは?という結論に行き着いたのは何とも言い難い気分ではある(^^;; ただ自分がコードを書く際に最も重要視する個所が正にその部分で、使う関数・ライブラリのドメイン(ANSIとかPOSIXとかWin32とか)をプログラムの再利用想定に合わせて絞り込む事が重要だと思っています(例えば今回のShaderManの場合VMのソースのうちレンダラ依存の500行程度を修正すれば他のソフトのプラグインなんかにも適用できる、とか(エンディアンフリーでは無いですが(^^;; --------------- 無論APIで全てを作る場合、全ての作業メンバが設計になれていない事には容易に空中分解を起こす為、その底上げとしてMFCなどがある、と個人的には考えていて、そこでMFCの代わりにWTLを使うのは複雑化した場合のトラブルを避ける上では、選択としては良い選択だと思う。 ただそれはフレームワークの選択肢であって、バックボーンはやはりAPIで固めて行く方針で行こうと結論付けましたが、選択肢の幅が増えたという点はnoboyama氏に非常に感謝であります(^^)/
--------------- KOJIさんの「彩」(僕が普段愛用してるペイントソフト)の話、今年の夏である程度の目処をつけると言っていたので、そろそろタイムリミットだよ〜と思って見に行くと、トップページには9月上旬との告知が、、、何だか先手を打たれてしまった気分でちょっとしょんぼり。 でも色々飯食いに行くついでに見せてもらっている所ではかなり完成しているので心配はしてないけど、今回の筆ツールと水性マーカーは非常に素敵な出来なので早く発表しようよ〜とか外野気分的には思ってしまう辺り何とも(苦笑) 個人的にはマーケティング的にメジャーになるかどうかはともかく、他に存在するペイントソフト系の中では間違いなく最高レベルの書き味だと思うので今から楽しみですよ。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/8/22 性格診断 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
毛色を変えてネットでよくある診断ページの紹介など、というか話題のネタにたまにやるのだけど、その中で比較的当たるものをピックアップ(笑) という事で「タイプ別性格判断」やってみました。 後以前やってよく当たるなぁと思ったのは「ソンディ・テスト」これの結果は >性衝動 --タイプ 何故暑苦しいおっさんやおばさんの顔を選んで結果が出るのか不思議ですが自分に限らず周囲の結果も結構当たってました。 --------------- しかし、思い返すとこういう診断系のページを紹介する時に、当たっているから面白いと取るのか、その結果のバカバカしさが面白いと取るのかで既にその人の性格が現れますね;-) ちなみに単に自分の結果を出すだけでは面白く無いので、実際に世の中の人間がどの程度の比率配分で区分されるのかも調べてみました。とは言え簡単にgoogleでの検索数(「〜型」で検索)の合計をチェックしただけなので、他の用語とかぶる場合や、インターネット上でHPを作るようなタイプの人間に分布の偏りが見られる可能性も高いですが(笑)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/8/18 ほっと一息 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
とは言え、有効に使えばBRDFについてはほぼあらゆる表現が可能であり、自分にとっては非常に有用なソフトではあるのは確かで、LWのプラグインシェーダを書くことを考えるとその1/10程度、LScriptと比較しても半分程度の労力(+安定性&速度(笑))で同じものが作れるのだが、プログラム言語という事もあり実際使いこなせるLWユーザーは余りいないだろう(せいぜい全体の数%程度か?)、という事ではジョークソフト的意図もある。
LW購入当初非常に興味を持ったのだが、よくよく調べると単にRendermanの入門書に掲載されている単純なサンプルをプラグインで実装しただけというプログラマならある種眉をひそめるような代物であった。 実際LWの標準的なシェーディングアルゴリズムとRendermanのサンプルで使用されているロジックはほぼ同様のものである為、差別化は殆ど無いと言える。 という事で今回のShaderManという名前は、自分がその名前を聞いた時に初めて想像したプラグインのイメージを実現したものでもある、、、とは言えやはりニッチである事は間違いないのだが、まぁ趣味だし自分はメインで使うのでそれでよし、と思ったり(苦笑)
大体一段落したので、次は以前作ったデータ処理向けインタプリタの開発を再開予定。実験データなど大量のデータを処理する為のもので大学時代に欲しかったものなのだが、最近ではめっきり数値処理を扱う事は無く、どちらかと言うと数式処理の方が使用頻度が高いのだが、実際に作れるだけの技術を身に付けた時にはそこまでの計算機能は不要になっている(表計算でも何とかなる)というのは何とも言い難いものがあるが;-) --------------- 非常に期待大です、というかペンツール凄い気持ちいいよ、早く完成させろみたいな(ヲイ
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/7/11 勉強中 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
んで何となくではあるものの見えてきた気分、まだまだ勉強が必要なのだけど、規模にもよるけど、数ヶ月あればインタプリタ・コンパイラも何となく作れそうな「気分だけ」してみたり。 --------------- ・基本的な構文解析がどうやるのか分からない ・再帰による文法の評価順序 ・関数・繰り返し処理など ・構文解析中に確保した作業メモリの解放 ・評価 ・日本語の取り扱い ・lex&yaccを使ったルーチンを部品として自作プログラムに組み込む --------------- とは言えまだまだ勉強しなきゃね;-) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/7/8 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
まずは現状報告、例の所は残念ながら落ちました。会社には期待してなかったものの勤務条件が良かっただけにちょっと残念。まぁでも引きずっても仕方ないので、その件の敗因分析と修正項目のリストアップ及び修正案作成だけやって、現在更に職探し中です(苦笑) --------------- Object指向言語としては基本的にはC++と同様、特徴は主に ・オブジェクトメソッドの呼び出しが全て動的に決定される ・オブジェクトは全て基底としてObjectクラス(ランタイムによりさまざま)を持つ、ライブラリや文法については標準は規定されていない為、細かい部分は実装系に依存する。(異なる2種のObjective-C処理系でライブラリや細かい文法が異なるケースも多い) ・インスタンスは基本的に参照として統一的にid型として扱われる、コピーはdeepCopyなどで明示的に行う。また継承は単一継承で行われる。処理系にもよるが生成したインスタンスは明示的に削除する、但しライブラリで選択的に(Mac)あるいは言語として(POC)リファレンスカウンタなどのgcを持つものもある。
MinGW(gcc) Portable Object
Compiler(POC) また基本的な文法についてはAppleのDevelopperページなんかが役に立つ(一部MacOS用の開発環境に特化した方言もあるものの、概ね他のObjective-Cでも使える) --------------- ただメソッド名等のプログラムミスは実行時にそのパスを通らないと検出できない事、またその回避策も無い為、コンパイラ型の言語に向いているかは少々疑問で、何らかの形で開発環境などがサポートしないと効率が悪いと感じた。 動的とは言え、シンボルなどはコンパイラ型言語の制約を受ける為、あくまでメソッド名(セレクタ)などの要素に限られる点で自由度はそれ程大きくは無い。 ただ(これもコンパイラ型言語の制約は受けるが)POCのブロッククロージャの文法で
などと書けるのは非常に羨ましい、内部的にはコンパイラが無名の関数を別途生成するだけなので、C/C++でも同じ書き方ができたら良いのにと思ったり、Object指向とは余り関係無いけど(^^;;
# 余談だけど、最近また増えはじめたObject指向設計の本を読むと(ものにもよるけど)また昔のブームの時と同様にOODとOOPの混同がある、と思うのは自分だけだろうか:-< --------------- 後は少し興味対象を広げよう、と言う事で色々本を読んでます。ただ人間の各個体の揺らぎの範疇で説明がつく内容についてはどうにも興味を持てないので、生物の進化や機構だったり宇宙の成立だったり大統一理論系だったり、とまぁ(苦笑)ただこういうのは知識を仕入れても個人で実験出来る訳でないのが何とも辛い所。 後子供向けの図鑑が何冊か欲しくなっているので(昆虫、海の生き物、太陽系、宇宙、古代の生き物は欲しい所) この前確認した所大体一冊2000円程度と技術書に比べると安いので、現在良いものを探し中。ただ色々本屋で見ると子供向けとは言いつつ大人でも楽しめる内容なので中々お勧め。 なお調べ物の最中に子供の頃見て正体不明だった宇宙生物じみた生き物の正体を知る事に、トラウマになっているので余り語りたく無いのですが、どうやらコウガイビルと言うらしい。余りにおぞましいのだが、進化上は面白い位置にあり、摂食行動なんかは実に特徴的で改めて見ると感心してみたり(細かくは述べませんが、興味のある人は「コウガイビル」で検索してみると色々出てきます(^^;;
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/6/25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/6/19 割り切り | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
某企業の説明会に行ってきました。面談は予定していなかったものの、先方の希望もあり面談を受ける事に。で、何故かそこでSEになるよう諭される事に。また、他所ではコンサル系の会社からのお誘いもあり。 確かに言わんとする事やニーズも理解できる、数百万行のコードをでっち上げるのは確かに1人では不可能で、世の中にはたしかにどのような状態であれ、それら一式を力任せで用意する仕事も必要だとは思うのだが、やはり自分としては、一通り揃っているものの何ら光るものの無いものよりは、小さいが磨かれたものを作る方が自分は好きだ。 先方は割り切りだと言っていたが、確かにその通りだろう、しかしそれで何かを作っているなどというプライドを持ちたいとは決して思わない(自分がみじめになるだけ、だから;-)
--------------- 6/21追記) 余談だが冷静に考えると200〜300万行という数値はある意味大したものだが、同時に大したものでは無い事に気付く。確かにモノリシックにそれだけの規模があるなら大変だが、モジュール化と階層化、スケルトン部分以外の共通した土台を元にした実際の実装が複数存在する事などを考えるとまぁ妥当な話だろう。しかし、行数というのは確かに大規模では妥当な算定方法なのかもしれないが、やはりそれを強調するのはどうにも胡散臭さが漂うなぁ...言っているのがlinuxのディストリビューションと周辺パッケージ含めて何百万行って言っているようなものだから(苦笑) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/6/14 近況報告 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
友人に「使い方がわからん!!」と言われたのでDeepShadeの簡単な使い方をまとめたメモを同梱、アーカイブ名は変更してませんが、中に入っています。元々自分用のツールなので余り考えていなかったのは認めます(^^;; 現状ではLW+Rendermanという余りにニッチな自分のニーズを埋める為のプログラムなので。なお実際ユーザー会などに出てる人に聞いた所によるとRendermanのまともなユーザーは日本でも数百人位しかいないんじゃないか、との事。とするとわざわざミドルエンドで市販ではまともなエクスポータも無い状態(自分は自作のものを使用している)のLWで使っているのはせいぜい日本で10人程度でしょうかね;-) 実際LWレベルの表面設定機能があれば外部ソフトに頼る必要は余り無い訳なので、実際にはShadeやCarraraとかに組み込む方が有用かもしれない。実際SDKを見る限りでは十分可能だと思うのだけど、如何せん自分が本体を持っていないので何とも:-< --------------- 個人的には体験版の仕様(512x512まで、独自形式のみ保存可)では使う前に放り出していた人もいるのではないかと思うのですが、、、(実際自分も最初に触ったバージョンがそうならまず使わないでしょう) 個人的には非常に良いソフトで、タブレットを使った場合の手書きとのギャップの解消(特に細い線)については、おそらく世界最高水準レベルだと思いますし、最近に至るまで色々なソフトを見ていますが、手書きの再現性とレスポンスについてこれに勝るソフトは見た事が無いので、正直今から楽しみではあります(但しタブレットを持ってないと全く意味ないですが;-) --------------- 実家の方で色々ごたごたしてたり、就職活動を始めたりといった具合で、一応ニューラルネットだったり、古代の生物に関する本を読んだり、神経心理学に関する本を読んだり、癌に関する本を読んだりとはあるのですが、ここに書くまでの話でも無かったので(笑) しかし、最終的にはこの半年近くの間で「自分に足りない」と感じていた内容のかなりの部分を埋める事ができたので非常に有意義な時間だったと思います、、、これから、どう転ぶにせよ、ね;-)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/5/16 ソフトは沢山公開されている筈なのだが | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
最近PCで作業をしていて欲しいもの。 ・対象プログラムのGDIリソース使用状況・種別がリアルタイムでモニタできるリソースモニタ兼リークチェッカ それぞれデバッグ・パフォーマンス分析用とスパイウェア等監視用、まともに作るとシステム寄りのかなり突っ込んだ話になり、フリーソフトなど色々調べてみるも満足行くものは見当たらず:-< 自分で作るとなると作れなくは無いけど単調作業になるので面白みが無いし、システム寄りのノウハウは全部出すから、だれか作ってくれないかなぁと思ったり. ソフトは巷に溢れているのだが、必要なものは見つからない、そして意外と現状のコンピュータに何かをさせるという環境は未だ不自由なまま、微妙に何かがずれている気がする. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/5/13 日常の疑問 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本日何気なく疑問をもった事柄 疑問1) んで、どの辺りで分化したのか、が気になってみたり。結構昔学校で見た進化の図なんかでは魚類はからは書いているのだが、それ以前については書かれていない。多分昆虫はエビとかの仲間に近いのでは、と思ってみたり。多分脊椎が形成されたのが確かカンブリア紀の魚類とも甲殻類ともつかない生物が最初だったと記憶しているので、その頃分化したと考えるのが妥当なのだろうか? 疑問2) また昆虫でも幼生と生体が殆ど同じ機能を持っているものも存在する(ゴキブリとかカマキリとか)。つまりこれらの種と先に書いた種では遺伝子的な生存戦略が異なる訳で、それぞれどのような特徴があるのか、と思ってみたり。また昆虫以外にもウニやエビなどは 幼生の状態と生体の状態で別の生物と言える程違う訳で、これらの無脊椎から分化した生物の生存戦略とはどのようなものなのか、と思ってみたり。 また、昆虫やエビなどについて生命の起源は海中である事から、海の生物の方が速い筈なのだが、どの辺りで分化したのか、と疑問に思ったり。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/5/12 今回の事件の真相に対する一つの仮説 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
あれからWinny作者の件について色々調べてみたのだが、一連の件について辻褄の合う結論が見えてきたのでちょっと追記。 総括すると、どのような理由があろうと警察としては現状のWinnyネットワークの根絶・あるいは回復不能なまでのダメージを与える必要があったのだろう。 今回の作者の件については非常にグレーゾーンでの解釈が多く、一部では余りに強引な法解釈であるとの指摘もある。で、情報を集めていた所、警察関係者の発言として、こういった強引な理由で逮捕に踏み切る場合にはある程度固めれば別の容疑で逮捕できる可能性があるか、あるいは何処かからの圧力がかかった可能性が高いとの事。無論ネット上の情報などその真偽の程は定かでは無いのでこの発言自体に信憑性があるかは非常に疑わしい所ではあるし、また一部では著作権団体の圧力だというような声もあるが、警察の従来までの著作権に対する対応と比較しても異例であり事態はそれ程単純なものでは無いと思われる。 ただ今回の件の本来の意図は単なる著作権云々の問題では無いように思われる。 そして該当文書については単なる一署員の不祥事といった問題では無く、実際に民間人の名簿という形で個人を特定可能な情報が含まれており、Winnyの持つ分散型の特性上、そのような情報が「警視庁の職員の違法活動が原因で」Winnyネットワークが存続する限り恒久的に不特定多数に対して流出している可能性がある事になる。
# この件については客観的分析のみで、物事の善悪については触れない事にする、立場が違えば善悪の規範も異なる、悲しいかな世の中はそれ程単純ではないからだ。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/5/10 嘆きと怒り | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨日、Sassarの作者の逮捕に絡んで色々書いたのだが、正直もっと自分にとってショックな出来事があった. 正直Winnyに関連する文化自体にはネガティブなのだが、分散システムの実験性という点では、一つの試みとして非常に面白いものでもあり、ある意味分散型のシステムでここまで一般に定着した環境としては実に興味深い. しかし、これはそういう問題では無く「プログラムの自由」に関わる問題で、技術に罪を問うかという問題でもある. そういった意味で安直に見せしめを作ろうとする京都府警の態度には怒りと失望を禁じえない. 正直今回の件を受けて思うのは、現在のイラク人のアメリカに対する感情や、アメリカインディオの征服民に対する思いはこのような感情だったのかもしれないと思う. プログラムの自由を信奉する者として、また末席ながら技術に携わる者として今回の京都府警の行動を非難する. # ただ、今回この文を書くにあたってWinnyについて調べてみたのだが、暗号部分にRC4を使ってしまうのは余りにお粗末だと思う。また公開鍵系を使うにしても乱数系列などは時刻をシードにするなどもってのほかで、乱数の離散的特性などを含め慎重に選ばなければならない(自分、一応以前仕事でセキュリティ・暗号関連やってました(^^;;; 備考)ただ同氏について「ネット上でデジタルコンテンツが取引されるのはやむを得ない」、「自らが著作権侵害をまん延させることで新たなビジネスモデルを模索できる」との公衆の場での発言があったとの情報もあり、事実であるならば正直眉をひそめる所ではあるが. 備考2) これ見てて思い出すのはInjector(任意プロセスに侵入して該当プロセスだけの挙動を変更する為のツール、書籍でよくあるCreateRemoteProcessを使う方法では実は色々問題がある為)を作った時の気持ちで、スパイウェアやウィルスに使われると嫌なので公開を見送ったのだけど...技術者の責任って何処までが自己管理なのだろうか? ただ昔と違ってネットワークにいる人間のモラルを信頼出来なくなったという現状も確かにあるのだが、うーん:-< 備考3) ここで書いている「プログラムの自由」に対する認識は、プログラマによっても異なる。ただ経験上の印象ではあるが大きな傾向としては「趣味でプログラムをやっていてたまたまそれを仕事にした者」と「仕事でプログラムをやっている者」とで大きく異なっている模様. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/5/9 ウィルス作者逮捕の記事に感じる感慨 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sassarウィルスの作者が逮捕されたというニュースを見て、時代は変わったのかな、と思う. かつては、ウィルスに感染するようなユーザーはそのユーザーが自己のPCを管理出来ていないのが悪く、プログラムは自由だったと思うのだが. 自分も正直今でこそウィルスなどは作ろうとも思わないが、子供時代にはそのメカニズムに興味を持って、雑誌に掲載されたブートセクタ感染型のウィルスを改造して色々いじる事で、PCのブートシーケンスを理解した経緯もあり、それが世の中の趨勢と共に逮捕されるような状況になった現在というのは考えると何とも切ないものがある. 今でもPCに対する感覚というのはその時代から自分の中で止まったままで、かつて友人とプログラマとは何か、という話をした時も、またかつて実際そうであったように、自分はエンドユーザーでありプログラムはコンピュータを操作する為のオペレーションでしかなく、自分に出来る事である以上、誰でもやろうと思えば出来る事だと思っているという話をした. そういった意味では今回の件は非常にショックだった、薄々、前の会社の人間の対応などでも気になっていたのだが、時代が変わり、そしてコンピュータを使う人間の種類も変わったのかもしれない、と思わせる出来事だった. ...とは言え自分は相変わらず「気に食わなかったら自分で組め、誰でも出来る事なんだから、組めないなら発言権など無い」と言いつづける(自分に対しても他人に対しても同様に)とも思うけど;-P --------------- 苦労したのは余りに初歩的なせいかMIPマップの構造(Σ(1/4)^nの極限値が4/3となる)は説明があっても、それをどう補間するか、については資料が見つからなかった為、結局自分で補間式を試行錯誤で作る事になった事だが、そのお陰で色々勉強になったので良し、今更ながらにRendermanなどのテクスチャやサンプルに対するフィルタ関数がサンプリング理論における窓関数の役割をしている点に気付いたりと少し間抜けな話もあったりして(^^;; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/5/7 試験公開 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
腰痛によりここ暫く死亡していました、現在10日が過ぎるものの、ようやく背中を伸ばして立てるようになった所という事で、まだまだまともに動けるようになるのは後1週間位かかりそうな気配です(未だろくに外出も出来ませんX-< しかし今回の腰痛は思い当たる原因も特に無く、強いて挙げるならせいぜい前日・前々日と立て続けに飲みに行った位のもので、もしかして自分の体を維持出来ない程体力が無いのか、とちょっと不安になってしまいます. --------------- 以前ここの日記に書いていたツールについて本日暫定アルファ版として試験公開。 アルファ版と言っても機能的にはほぼ予定した最低限の機能は全て実装しているので、一応は問題無く使える筈. ベータでは無くアルファとした理由はソフトの設計上これで良いのかという根本的な、所謂アプリケーションの完成形がまだ自分の中で確立出来ていない為です. という事で不具合及び自分自身が使う上での致命的な問題以外に関しては現状暫く凍結して1ユーザーとして判断するつもりなので、取り合えずの区切り.
・テクスチャ機能が弱い(バイリニアのみ、面積フィルタリングはしていない) ・アニメーション機能が弱い ・パターンが少ない(CheckerとかWoodとかお決まりのアレ) ・ドキュメントが無い
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/4/23 つらつら雑記 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Lightwave8が出たのでそれで遊んでます。 まだ深く突っ込んでませんが、IK Boosterが予想以上にいーかんじですね、2軸動かしてもFlipping起こさないし、跳ねないし。バタフライの手の動きがちゃんと表現できます。ただまだ色々な機能との組み合わせでは使ってないので問題がある可能性もありますが。ただボーンを動かしていて通常の編集モードとIK Boosterのモードのどちらなのか分かり難いのが難点かも。. EdgeToolsとRounderは小技的だけど便利ですね、Rounderの方は割り方を気を遣わないと5角以上のポリゴンが出てしまうので注意が必要ですが、仕上げなら問題無い訳で。 ドープシートは便利、ただこれも自作のスクリプトでキーフレームの移動とかやってたので余り目立ちませんが。SpreadSheetの再描画関連の挙動は相変わらず、あれ...ウザいんだけど:-< GIのIrradianceCacheの精度は相変わらずダメダメで、今度も最終的にはモンテカルロか外部レンダラを使うしかなさそうなカンジ、せめてIrradianceGradient位使って欲しい...:-< ダイナミクスはまだ触ってないので不明。人にもよるけど日常的に使う機能ではないから、まぁ(笑) Layoutのマルチアンドゥは今更な感はあるけど、すごく便利。ただプログラマ的に見ればアンドゥは(特に後付けでの)実装が難しい機能なので、ご苦労様という所。 SDKのドキュメントはまだ出てないみたいなので、内部的にどう変わっているかは不明。 しかし、世間的には盛り上がってませんね>今回のUpdate --------------- ただCMでやっている映像が面白いなぁ、と。もろゴシックでベタベタな気もしますが、やっぱゴシックって好きですね、余りマジにやられると見ていて気恥ずかしいですが;-) ただ、CMの映像では面白そうでも、作っている所が日本の会社という事で、実際見てみたらハズしそうな気もするし、やっぱレンタル待ちの方が良いのかしらん? --------------- んで最近思うことがやねうらお氏著の「Windows プロフェッショナルゲーム プログラミング」が面白いなぁ、と。 前半の内容がアプリ内のデータ管理部をどう作るかというマクロ的な話で、デザパタ本とかより具体的な話寄りなのが素敵です、別段ゲームで無くとも非常に役に立ちますね。2の方はどちらかというと演算の効率化とかマイクロスレッドの話で局所的であったり、特化した話な気がするのでまだ購入してませんが(^^;;
...そういった意味ではデザインパターンは便利だし必要だとは思うんだけど、昨今のデザパタ談義はどうかなぁ、と思うんですが、そう思うのは私だけでしょうか?(UMLなんかも同じ、ね) 実際書籍とかでもよく書かれてますが、まずパターンありきで考えるのは間違いという事ですが、書籍なんかの場合パターンだけがクローズアップされて、読者に実際にそういった構造を必要とするものを作った経験が無ければむしろ毒にしかならないのでは、と思ったり。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/4/21 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
--------------- そう思うのは実はまあ、時代に取り残されているのかもしれませんが;-) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/4/20 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
最近Carrara3の体験版で遊んでいます。 ポリゴンベースのパーソナルユースとしては中々いーかんじに一通りの機能が揃っていて、LWの感覚で詰めようとすると底が見えてしまうものの、これはLWとRendermanを比較しても同じようなものなのでまぁ、でも何か触ってて楽しい:-D LWを購入した当時にこれがあれば、取り合えず入門用として買っていたかもしれません(メタセコとの併用が前提ですが)といったカンジで、何か肩の力を抜いて遊べるオモチャとしてちょっと欲しくなってます. ...問題は既にLWを持っているので買っても殆ど意味無い事ですが、うーん;-)
プロシージャル周りは相変わらずな気もするけど、これでインポート機能がもう少し強ければ良いのだけど...:-< ...でもblenderのインターフェイスって旧式のラジオとかいじっているカンジで何か好き(笑) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/4/6 IrradianceCacheの補間 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ソフト開発が煮詰まったので息抜きにRendermanでIrradiance CacheをサポートするDSOを書いてみる。 試験実装なので別段速度などは気にせず線形検索にて実装、数時間で完成するもののAirでは動作するのだが、3Delightで動作しない為半日悩む事に。 結局の所、gridsizeオプション(一度にシェーディングされるマイクロポリゴン数)の問題と判明、IrradianceCacheを使用する場合にキャッシュを探して一致するものが無ければGIを計算、結果をキャッシュにストアするのだが、ここでの計算が並列化されていた為、正常にキャッシュの計算が出来ていなかった、間抜け。 この計算はDSO内では無く、Shader側で複数の文をまたいで計算されている為、仕方ないのでgridsizeオプションを1にする事で無事解決。 ちなみにこのIrradiance Cache、LWではラジオシティの補間モードになる訳だが、LWを使っている人ならおなじみの通り、各サンプルがシミのようになってしまって最終レンダには使いづらい。かといって許容誤差を大きく取ると細かい陰影が飛んでしまうというやっかいなもの。 んで今回のDSOをいじっていて思ったのだが、許容誤差をプレパス(キャッシュ構築時)と補間時に別の値を使用する事である程度の改善がみられないか、という事。一応各キャッシュ上の点についてweightがかかるので単純にプレパスを荒くしたのとは違う結果になる筈。 という事でやってみた。ちなみにGIアルゴリズムはごく単純なMCRTで、サンプリングは72ray/spot、拡散反射は2次まで計算。 【キャッシュ構築時の状態(プレパス)】 【キャッシュ構築時のパラメータで補間】 【キャッシュ構築時よりも許容誤差制限及びサンプル半径を広く取ったもの】 【おまけ: キャッシュ構築・補間時共に上と同じ広いサンプリング精度で計算した場合】
ちなみにレンダリングに2パスを用いるのでLWにはフィードバックは効かなそうではあるが(笑) まぁ自分が余り使わないので正直GIには余り興味が無いのだが(上手く使わないとリアルにはなっても絵として面白く無いし)ボロノイ的なものは他にも色々使い手はあるので勉強としてぼちぼち遊んで見るのも悪くないかもしれない。 # ちなみに最終的なGI+直接照明の合成はCinema4D形式にて。以前デモ版で試しただけだがCinema4DとLWでは同じシーンでもGI使用時に結果の輝度分布がかなり違ったものになるが、これはLWがGI使用時に環境光の影響を無視するのに対しCinema4DではGIの結果にデフォルトの環境光を加算しているのが原因と思われる(両方のロジックを自前のGI実装にて一致検証)まぁ近似なのでどっちでも良いのだけど、主観としてはCinema4Dで使われている方式の方が色合いとしては綺麗に出るなぁ、と思ったり;-)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/4/4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
先日書いたものがある程度形になってきました、編集-プレビュー機能が動作するようになった為遊んでしまって作業がはかどらない(苦笑) というコトでDarkTreeのサンプルにあるようなテクスチャを作って見る。
ちなみに作っているソフトは上に書いたDarkTreeのようなプロシージャルジェネレータで複数のソフトで使う事を想定している為、シェーディングロジックまでは実装していないのだが、ここで感じるのはGradient(入力パラメータをグラデーション化する)とIncident(視点と法線の成す角度を出力する)の偉大さで、正確なシェーディングロジックの実装には及ばないものの、テクスチャだけで無くある程度の材質の違いまで表現できるのは手抜きとしては非常に便利:-D しかし最近のソフトはきっちりしたテクスチャインターフェイスを持っているので、こういったソフトを必要とするのは複数のソフトを使っているユーザーだけだろう;-) 殆どの機能が動くようになったので、暫くは自分で使いながら随時オペレータノードを実装して行くつもり. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/3/28 SoftEtherと同機能の実装を考えてみる | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
前の会社の友人からSoftEtherみたいなものを実装できないか、という事で 連絡があったので、ちょっと実装を考えて見る。 ざっくりと見たカンジではSoftEtherの場合仮想ドライバ(not VXDね)でリダイレクト しているようだが、現状自分の中でEtherのドライバは未知な為、Winsockのフック(lsp) で同様の事ができないか、を検討してみる。 ちなみにそんな話をここに書いて良いのかという点については、会社勤めの頃ならいざ知らず、現状給料を貰っている訳でも無いので気にしない、そんなに興味の ある分野ではないし、その程度の事を企業秘密とか抜かす企業は死んで良い;-) --------------- --------------- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/3/26 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
アーマードコアの新作が出たので、ここ1週間程ハマりまくる。 現在出撃回数350回程...1日平均で50回出撃している事になる、ダメ人間. --------------- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/3/15 実に充実した日々 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本日は近況報告のみ、色々やっているけど フーリエ変換の数式を色々と触ってみてようやく数式としてだけでは無く直感的に理解できたり、ポリゴン描画ルーチンを作ってみたり(まだ途中)、色空間での 減色処理の勉強(K平均法+CIE均等色空間)してみたり。 しかし引きこもりってホント素晴らしいですね、毎日何かしらの新しい発見があって非常に充実しています;-) ...ってそれは人として良いのだろうか?(苦笑) 貯金があるのをすっかり忘れていたので、もう暫く引きこもっていても大丈夫そうです(ぇ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/3/7 矩形に始まり矩形に終わる日々 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ここ暫くはそんなに意識していなかったのだが、職探しをするにあたって重要な事を思い出す。というのも自分の体質についてなのだが、1日が大体25〜26時間周期で回っているという事で、調整は全く効かない。 もう子供の時からなのだが、体力が無いので無理が利かず、寝る時間になると問答無用で寝る。無論徹夜なんてできない。正常な判断はおろか、身体機能まで低下し、平衡感覚は無くなるは意識は飛ぶわ、といった所。無理やり起きて前倒しさせようとしても寝る時間帯を過ぎるとせいぜい1時間程度で目が覚めてしまう。 勿論昼寝も出来ず、睡眠薬も効かず、アルコールに弱い癖に日本酒1リットル近く飲んでようやく2時間程度眠れる。それでも体質上の寝る時間になるとやっぱり寝るというどうしようも無いもの。 実際前の会社でも1ヶ月の半分は大体そういう状態 ...ちなみに現在は昼12時寝、夜12時起き、友達からの電話の応対も出来ません、あー(涙) --------------- 大体セオリーは確立できてきた模様。設計の基本はMVCもどき+ブロードキャスト通知で何とかいけそうなカンジ。MVCのモデル側でコントロールパラメータを提供する方式の方がスマートなのだが、クラスライブラリが前提になるのでこれはNG。 後はモーダルダイアログなんかは初期化・終了処理をもう少しいじり様があるな、とは思うがこれは簡単なので後回し。カスタムコントロール系はもう少し効率よく作れるようになりたい所。 まぁでも後はひたすら矩形処理に慣れる事な気がしないでもなかったり(笑) 結局の所、次の自分にとっての壁は矩形処理と自前描画の部分を如何に定型化するかといった所.。課題として以前BCBで作ったグラディエントエディタやノードエディタでも移植してみるかとか思ったり。 でも自前描画だとどのライブラリでもそんなに手間は変わらないので、結局windowプログラムは矩形に始まり矩形に終わるといったカンジか(笑) --------------- Wizardが生成するデフォルトが、Doc-Viewのフレームワークというのも色々問題があると思ったり、薄いラッパーの癖に変な所だけ過度にラップされていて妙に融通が効かない、かといってCWnd派生の汎用Windowをトップレベルで使おうとするとライブラリがアサートしてみたり(CWndをトップレベルにするのは想定外という事か?)はっきり言って要らん(笑) でも色々調べ物をしていると2ちゃんねるなんかもヒットするのだが、 ま、余り自分ではMFCはそこまで突き詰めたいとは思いませんが;-) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/3/4 そろそろ動き出さなきゃ、とは思いつつ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ここ数日、前の会社から自分の作ったものに関する問い合わせが... 案の定と言えば案の定なのだが、Winsockのフックドライバは荷が重かった模様、友人との与太話で話していた通りで、もう正直何も言えんけど(苦笑) しかし、Winnyの使用をガードするとかの製品を見ていると、応用すれば何かしら ニーズはありそうな気がしてみたり。例えば登録したアプリケーション以外からのネットワークアクセスを一切禁止する、とか...何処かの企業が買い取ってくれないかしらん(笑) --------------- 最近このページを見ているという方から先日のWin32についてメールを頂きました。プログラムのコーナーはともかく、こちらの日記の方は 完全に内輪向けの近況報告のつもりでしたので、見て下さっている方 がいるとは思いもかけず、といった所で妙に緊張してしまいますね(^^;; (ちなみにアクセスカウンタとかログとかは付けてないんで、アクセス状況 とかも全然分かりません、面倒だし、余り興味無いので(笑) --------------- それはさておき、その方からQtというクラスライブラリを紹介頂きました。 実際の所自分の中では大規模クラスライブラリに対する疑問があるので、 それをそのまま自前のスケルトンに取り入れる予定は無いですが、一つ 面白い機構を見つけました。 SlotとSignalという機構で、これはSignal宣言されたメソッドを呼ぶ事で SignalにConnectされたSlotに対しブロードキャストするメカニズムです。 コンパイルには専用のプリプロセッサを通して展開するので、完全にC/C++ の構文で実装されている訳ではありませんが、同様のものとしては.net フレームワークにおけるデリゲートなども類似の機構と言えそうです(実際イベント関連はこれで実装されてますしね;-) こういった機構の必要性について、自分が考えたのはオブジェクトインスタンス としてWindowの各Windowの生成階層と、プログラムの流れが必ずしも一致しない という事ではないかと思います、実際これは自分の中での疑問としてボタン等=オブジェクトというクラスライブラリの設計は正しいのか、正しいとしてもそういった細かいオブジェクトとは別に大まかなレベルでのオブジェクトが必要なのではないかといった疑問でもあるのですが(^^;; SlotとSignalに話を戻すと、例えば実際には親Windowから子を挟んで孫Windowにメッセージングする必要 があるケースなどは非常に多くあります。無論その解決策も幾つかある筈ですが 下手をするとそこで作りこみが発生して融通の利かないプログラムにもなり かねません。 それに対しこのような機構を用意する事で、ライブラリによりWindowあるいはヴィジェットの挙動がプログラミングされている場合はGUIの実装とロジックの実体を分ける事が可能になる筈です。 実際にはGUIの挙動はアプリケーションの設計に左右されるもので、完全に 挙動がプログラムされたWindowクラスorヴィジェットなどは殆ど有り得ない と思いますが、それについてはカスタマイズしたGUIだけを作成し、それに ロジックをバインドするというのも一つの可能性としては非常に面白く思いました。 --------------- 実は一応Upcall/ブロードキャストの機構として自分も同じようなものを考えていたのですが (先のソースでドメインメッセージとある部分、但し先のソースでは幾つか 問題があり実用にならない) 一寸この部分を詰めてみたいと思ってみたり。 余り設計に偏るのも問題で、根本は作るという事を忘れてはいけないんですけどね(^^;; ...まだまだ道は長い、と感じます、ハイ。 いや、もう退職して1ヶ月になるんで、そろそろ次の仕事も探さないといけないんですけどね(苦笑) |
2004/2/27 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/2/26 寝ても覚めてもプログラムの日々 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
JunkコーナーにLWプラグイン2つ程追加してみました。 諸般の理由から正式ナンバーには含めないものですが、誰も気付いてくれないと悲しいので一応こちらにも(笑) --------------- 現在友人に薦められてWin32の再勉強をしている所、一応知識としては既に知っているのだが、余りそれで大規模なアプリを作ろうとは思っていなかった為、実際にアプリを組む時はある規模以上はMFCやBCBに逃げていた。 で、実際ある程度の規模のアプリを想定して触ってみるとこれがなかなかいーかんじで、ある程度の壁を越えれば、逆にMFCなんぞは開発効率を下げるだけ、という友人の主張にも非常に納得、クラスライブラリの勝手な挙動に悩まされる事も無いし、何より鳥瞰図が得られるのが素敵な所ですね。 まだ自前の方法論を色々模索している所ではあるけれど、現段階でもある程度の事前設計さえしておけばBCBで普通に作る程度のGUIは比較的楽に作れそうな気配(流石にBCBよりは時間がかかるが;-) ちなみに、それ以上となると結局全部自前描画となるのでどのライブラリでも大して手間は変わりません(笑) 一応現状としてはこんなカンジです。 --------------- しかし、思考と自由度を妨げないレベルでのフレームワークってなかなか難しい。想定外の事をさせようとするとWindowsの挙動も色々おかしかったりするのが頭の痛い所。 例えばWS_OVERLAPPEDなどが指定されている場合のGWL_HWNDPARENTとGetParent()の挙動の違い、とか:-< 通常オーナーWindowが破棄される時点で子Windowは破棄されるのだが、動的にSetParent()で階層が変わると、例え変更前後が子の関係にあってもWM_DESTROYが呼ばれないとかX-< まぁ時間はまだまだあるので、色々模索して行きたい所。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/2/6 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/2/1 取り合えずの再出発 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ハーイ、という事で今日から「無職」です。 その上「引きこもり」という事でダメ人間街道まっしぐらでございます、これからどうやって生きていくんでしょうね?(苦笑) その辺の経緯は友人などには話しているので、ここでは省略(笑) まぁ仕事などでやっているても、やっている事などたかが知れている訳で、そういったものが無くなって改めて気付くのはやはり己の未熟さですな。 やはりここは片眉を剃り落とし、飛騨の山奥に篭ってクマを相手にプログラムの修行に励みたいと思います;-) --------------- 昨日リリースした無限平面プラグインですが、色々悩んだのですが、諸般の事情からDisplacement機能は付けてません、理由は計算コストの割に透明度やレイトレとの相性が悪い為です。 後は遠方においては殆どDisplacementの影響は認識できない為、通常の無限平面+めり込む部分だけポリゴンオブジェクトの構成で十分と判断した事もあります。 まぁどうしても気軽に使えるSubPixel Displacementを使いたい場合はReyes系のレンダラなどを使う方が良いでしょう、という事で;-); 言い訳終り。 --------------- 例のStac社の特許(特許番号第2713369号)についてはその後調べた所では、やはり例の「オフセットアレイ」が特許回避のキモなようで、実体としてはハッシュ要素に相対位置を記録し、衝突するハッシュの終端チェックはオフセット値の合計が辞書(履歴バッファ)のサイズを越える事でチェックするというものらしい。 で、今となっては昔の話ではあるが、MLのアーカイブからzlibの作者が特許に関して述べている所では、辞書の位置は絶対値を用い、ポインタでのリンクリストで衝突を処理する、というもの。 という事で先の日記で書いた方法は特に問題無いようです。 という事で自前の圧縮ライブラリとしては完全に目処は立った模様、速度的にも他の圧縮ソフトとそう変わらないし、仕事とかやっていると必ずしもzlibなどを使える環境には無いので、そういう時に役立つ気がします...って自分今無職じゃん(笑)
やはり何か抜本的なアルゴリズム上の改善が必要な模様。 という事でまだこちらは実用化のレベルにはなっていない為、まぁボチボチ続けて行こうとは思いますが、そろそろ圧縮は片手間程度として別の事をやろうと思います。 --------------- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/1/27 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
という事で更に圧縮関連。 先日の日記にも書いた通り、Stac社の特許(特許番号第2713369号)についてざっくりと読んでみた所、詳細説明の手段の部分にハッシュの手法が明記されており、かなりの限定が入った手法と思われる。 で、ややこしい特許関連の文章のお陰でまだ頭の中でアルゴリズムを展開するには至ってないのだが、文章だけ読んだ所ではかなり変わった(?)ハッシュの使い方をしているようで、ハッシュのエントリを取った後で。 >次に、履歴アレイポインタとハッシュテーブル手段から読み取られたポインタとの間の差を計算し、 なる処理を行うらしい。 という事で、多分大丈夫なのではないか、と思ってみたり。 --------------- 作ったのはBWTによりソートしたデータ列をMoveToFront法(以下MTF)により局所的偏りを処理し、それをHuffman符号化により圧縮する、という手順。 ブロックサイズは200kbにて実行してみた所、総じて先日のLZ77よりも数%〜10%程度良好な結果を示す模様で、非常に優れた手法と言える。更にHuffman符号化の前段でランレングス、0圧縮を行う事で更に改善できる模様で、正に至れり尽くせり。 と、ここまでは良い事づくめなのだが、問題が一つあってやたら遅いという事X-< BWTではブロックサイズぶんのバイト列に対し、それを1バイトずつシフトしたブロックサイズ個ぶんのバイト列を用意し、それに対しその各バイト列の大小関係をソートする必要があり、この部分が非常にボトルネックになる。 で、先日素直に書いたLZ77は遅い、という話を書いたが、それが可愛く見える位に遅い。 まぁ正確に言うと、連続して一致するデータで顕著になる問題は、ソートロジックの問題というよりは純粋に比較速度がボトルネックになるのだが、比較速度と回数が問題になるので、ソートそのものとも言える。という事でここを何とか高速化する必要がある、というのが本日の結論。 --------------- BWTは近年研究が盛んになっており、それに対するソートの高速化については色々論文などで出ているのだが、論文発表前に特許出願も可能な訳で、ともするとサブマリン特許が存在する可能性は否定できない気がするのは気のせいだろうか?:-< |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/1/25 プログラムのデバッグも考えてみると奥が深い. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ちょっとプログラムの調べ物をしていて面白い関数を見つけたのでメモ。 MiniDumpWriteDump()というもので、その名の通り、プログラムでエラーが発生した時のクラッシュダンプを任意に生成するもの、所謂コアダンプ 詳しい話は なんかが参考になる。 dbghelp.dll自体は再配布可能なので、アプリと一緒に配布すればWin95からクラッシュダンプが使えるようになるらしい。 で、この関数をSetUnhandledExceptionFilter()にて構造化例外のハンドラに指定する事で、プログラムクラッシュ時にログを吐いて、それをWinDbg(free)に読み込ませると、ユーザーにデバッグ情報を渡す事なくスタックトレースやソースの何処で落ちたかなどが判別できる(同時にVC++の吐く.pdbファイルを読み込ませる) という事で簡単なサンプルを書いてみた。 なおVC++以外のBorlandC++などはデバッグ情報を独自形式で生成する為、WinDbgに読み込ませてもアセンブラのアドレス情報しか取れないのだが、下記のツールを使う事で関数シンボル+オフセットまでは読めるようになる。 map2dbg 上手く使うと障害対応などの効率が大幅に上がるのでは、と思ったり。 --------------- しかし、こういったものも突き詰めれば理想の開発環境とは、といった話にも繋がり、ソフトウェア工学的な面白さもある。静的コンパイル言語の限界とか、Smalltalkデスクトップの環境としての哲学とか、インタプリタの本質は動的結合にあるのでは、とか色々考え出すと面白いものだ。 たまにはこういった事も真面目に調べるのもアリかも、と思ってみたり。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/1/22 結局どういう状況でも人間というのは組むように作られているのかも(ぇ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨日は久しぶりに仲の良い元部長とか偉い人とかとかなり大きな商談の話、それこそ今後の事業戦略を大きく左右しそうな話で、ゲームとしては非常に面白いのだが、退職間近の人間がこんな所で話して良いのかは大いに疑問(笑) とは言え技術的にはほぼ問題は無く、自分の周りのプログラマ仲間なら誰でも大丈夫というレベルである為、期間についてはそれで算出したのだが、実際の所それが現在のこの会社の人間に出来るか、と問われると答えようが無い(少なくとも実現可能性は50%を下回る)一応倫理的問題もあるのでその旨は説明はしてあるけど、サテ:-P まぁ、そういう状況にほとほと嫌気がさし、もう考えたくも無い、という事で今回の件と相成るのだが、実際皆さんはどう思われます?:-< --------------- 圧縮率は30〜70%とかなりバラつきがあるが、総じてLHAよりも5〜10%劣る程度。辞書サイズと一致長を工夫すれば少しは改善出来そうではあるし、これならば圧縮がメインでなければ十分自前のライブラリとして使えそうなカンジ。 面白いのはHuffman符号と組み合わせた場合、モデルが違うものの前段のLZ77で殆どの圧縮がかかってしまい、そのあとHuffman符号を通しても95%程度しか縮まない。 エントロピー符号化を考えると、LZ77は一致した場合に<辞書の位置>,<一致長>と出力するのだが、この<辞書の位置>に関してはLZ77のようなスライド辞書を考える場合、かなり均一に値が分散される可能性が高く、LHAなどでは<辞書の位置>のみを別に圧縮している模様。
取り敢えず、ハッシュ要素は辞書の全てのバイト位置に対応するとして、それぞれが自分の保持する絶対位置から3文字分の辞書の内容をキーとして双方向連結リストで構成されるハッシュ表に格納されるようにする。 ハッシュ表に格納される要素は必ず一意の絶対位置を持つので、入れ替えを簡単にする為に、要素は辞書サイズ分の配列で静的に用意し、それぞれが絶対位置に対応するようにする。 後は辞書に新しいデータが追加される度にデータの追加により影響される絶対位置に存在するハッシュ要素を更新し、表を更新する。 思いつきの方法ではあるが、試してみた所では速度面では劇的に改善、決して爆速ではないが、普通の圧縮ソフトと比較してもそれ程気にならない程度までは改善できる模様。
LHA, zlibなどもハッシュを用いているのだが、ハッシュの絡め方がStac社のものとは異なる、との事。慣例では基本技術ではなく組み合わせとしての特許の場合、請求項に対し強い限定が入るのが基本(例えばAの後でBをする、が特許の場合Bの後でAをするは侵害にならない、あくまで請求項に記載されている内容に限定される)なので侵害にはならない、との事。 とはいえこれはあくまで特許通念上の話で、裁判ともなると必ずしも真実が通る訳ではないのが世の中。そういった意味ではグレーとも言える(実際富士通などではLHA等の使用を禁止している)
とは言え、一旦倒産しかけ形振り構わなくなった企業というのは恐ろしいものではある。 そういえばUNISYSのLZW特許はそろそろ切れる筈だが、UNISYSは引き続き関連特許によりLZWのライセンスを要求し続ける、との発表をしているそうな。企業の保有特許全てを分析するのは非常に労力を要する訳で、大抵の企業はそのままライセンスを払う事となる。実際UNISYS社以外にRSA社などもこれをやっているが、こうなるともう特許ゴロと変わらない。この辺り、ソフトウェア特許というのも考え物だ。 まぁ後日Stac社の特許については目を通しておく事にしよう。
レンジコーダ自体はデータの偏りを利用して圧縮を行うエントロピー符号化と呼ばれる手法の一種で、この手法は有名なところではHuffman符号化と算術符号化が挙げられるが、高い圧縮率を誇る算術符号化に関しては特許まみれにというのは有名な話で、これまでソフトウェアで使用されるエントロピー符号化としてはHuffman符号化一色であった。 それに対しレンジコーダは特許フリー(少なくとも現在はそういう認識になっている)しかもHuffman符号化よりも圧縮率が高く、エントロピー符号化でいう所の最大圧縮率(これをエントロピー限界という)まで圧縮できるという触れ込みで、近年広がりを見せつつある。
算術符号化についてはその前の理論として、数学上の無限精度の実数を対象としたElias符号化というのがあり、それをコンピュータ上で実装する為に区間の分割を工夫したものが算術符号化である。 レンジコーダのアプローチはこの前段階のElias符号化の概念まで立ち返って、コンピュータ上での実装を実現したものとは言えるのだが、算術符号化との相違点は実に微妙な所で、先に述べたLHAのハッシュが特許通念上はクリアであっても、実社会ではグレーゾーンにある、という話と非常に似通っている印象を受ける。
まだざっくりとしか見ていないので、語れるレベルでは無いのだが、圧縮対象をブロックに分割し、そのブロック内で特定の方式でソートを行って同じ種類のデータが並びやすいようにした後、MTFなどの処理を行って0近傍のデータを増加させ、エントロピー符号化により圧縮を行うというもの。 説明などではブロックサイズは数バイトで説明されているが、実際の実装では200kb程度を1ブロックとして扱う。 これによりLZ77+Huffmanなどよりも高い圧縮率を叩き出せるという話、少し不思議な気もするが(笑) 実際bzip2やgcaなどで実装されているらしいので、機会を見て勉強してみようと思う。
毛生えに関しても停止状態ですが、TANEさんがGUI付きのプログラムを作成された模様。 ...え?仕事は?ナニソレ?(笑)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/1/12 それでもプログラムは組むわけで... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本日ついでに元旦の雑記も追加、かなり誤魔化しっぽいけど かなり遅ればせなのだが、正月・正月明けと色々あって、現在はちょっとした事情から若干ナーバスになっていたりで更新遅れ気味。
というのを買ったので、これを機会に概念でしか理解していなかったものをちゃんと 取り敢えずはハフマン符号を実装してみる、単体で使った場合平均50〜70%程度の圧縮率。 ちなみに算術圧縮やハフマン符号化、最近ではレンジコーダなどはエントロピー符号化というが、組んでみて納得、データの偏りを冗長性として捉える方式な訳だ。 化学出身の人間からするとどうしてもエントロピー=熱力学第2法則になる訳で、どうして「エントロピー」なのかと長年疑問に思っていたのだけど見事解決、これだけでも有意義な気がする(笑) 算術圧縮は特許の関連で使えないので、次はLZ77(スライド辞書)と組み合わせてどの程度の圧縮率となるか、を試して見ようと思ったり。 勉強を始めてみると、圧縮対象となるデータがどのような特性を持つかを考え、それに対する複数の処理をパズルのように組み合わせて圧縮効果を高める工夫を図る、という点で、結構面白い分野だと認識。
試しに作ってみた所では、3点を取って形成される三角形の外接円内に点が存在しなければデローネ三角形として成立。という手順で良さそうだが、これを如何に効率化するかがまだ見えていない。 ちなみに空間の分割は単純に4点に拡張し、形成される三角錐の外接球の内部に点が無ければ良いようなカンジ、更に計算量は多くなりそうな予感だが(^^;; なお、年末にリンクした論文はちゃんと読んでみた所、上記の3次元デローネ分割により形成される図形を前段階とし、デローネ分割では再現できない凹面を含む形状をどのように生成するか、というものでした、勘違いです(^^;;; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2004/1/1 元旦 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
あけましておめでとうございます、今年もよろしく。 ここ暫くは年越しプログラムが基本だったのだけど、今年は珍しく帰省。 都心と違い、正月という事もあって空気も綺麗で、360度見回せる状況で空を観察できたのはかなりの収穫で、ほぼRayleigh散乱が支配的な状況でMie散乱がそれ程現れていなかった。 実は以前(確か一昨年)友人との話題で空をシミュレーションしてみよう、という事で作ったのだが、観察するにスペクトルはR,G,Bの3色で近似しても問題なさそうな気がした、また今回の実測の太陽に対し90度, 180度の方向での光の分布を見る限りでは基本的なアプローチは間違っていないと思ったり。 ちなみにその時の画像(この頃はまだAirの体験版で遊んでいましたのでウォーターマークが入ってます(^^;;
実はこのシミュレーションには一箇所問題があって、それは 間違えて地球大気の透過距離とかを計算した用紙を捨ててしまい、そのまま据え置きにしていたのだけど、今年はもう一度これをいじってみるのも良いかもしれない、と思ったり。
また以前写真の感光量に対しエネルギー量は対数のスケールを持っている、という話(F. Hurter and V. C. Driffieldによる)があったが(100年前の論文だ(笑) 色々考え始めると面白いこのテーマ、もしこの辺の話に興味がある人がいれば、こことかに色々データがあるので自分で試してみる事も十分可能かと。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/29(暫定) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
暫定日記、ちょっと疲れがたまっているので後で修正予定です(^^;; もう少し修正して、日記からRendermanのコーナーに移した方が良いのかもとも思ったり。 --------------- Rendermanのスプライン(三次曲線プリミティブ)が分かり難いという話があったので、ちょっと解説。確かにAdvanced RendermanやRenderman Specification(RISpec)を読んでも分かり難い。「実践CGへの誘い」(原著 The RenderMan Companion)にはこの辺が詳しく書いているのだけど、邦訳版は絶版だし(原著はまだ購入できますが(^^;;まず三次スプラインの話については省略(ぉ で、その基底行列をどのように選ぶかで補間される点が決まるのだが、 幾つかの基底行列はRendermanに組み込まれており、殆どの場合は行列 を指定せず、名前で指定する。 具体的な指定はBasis文によって行い、名前で指定する場合は Basis u方向の基底行列名 u方向のステップ数 v方向の基底行列名 v方向のステップ数 例) Basis "catmull-rom" 1 "bezier" 3 ここでステップ数は三次プリミティブのセグメントを計算する際にその前の セグメントから次のセグメントを計算する時に影響する制御点の移動量(for文 での増加量のようなもの)を表しており、組み込みの基底行列に対するステップ 数は決まっており、それぞれ
--------------- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/27 忘年会 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
KOJIさん、TANEさんと忘年会、会社の忘年会は出ないくせになどとは言わないように;-) まったり飲むつもりがサカりのついたお姉ちゃんにからまれるわ、謎の外人にはからまれるわ、 挙句その外人と一緒にクラブに行く事になるも、クラブで聞いた所ではその外人は色々常習犯、という 事で、正直付き合いきれんと思い、別のクラブに移動、朝まで踊って翌日は筋肉痛に。 これだけ色々あるのも珍しいので、面白く書きたかったのだけど上手く行かずちょっとヘコむ。 結局は楽しかったんですが(笑) --------------- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/23 毛生え、その後 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
毛生え報告第2段 とは言っても今回は画像はナシ(笑) ガイドの補間式に思いのほか手間取っている。現在は2近傍を求め、更にその2点の成す直線と毛を 生やす点からその直線に直交する線分の交点からガイドのブレンド比率を出している。 これでもガイドの作り方を頭に入れておけばほぼ思い通りのスタイリングが可能なのだが、イマイチ 直感的ではないので非常に気に入らない、Sasquatch なんかはどの程度の使い勝手なのか気になる所 任意の点郡に対し、効率的に空間を補間する方法は無いか、デローニー分割は2Dだし...と 考えていると、ありました(笑) デローニー三角分割を応用した点群からの3Dメッシュ生成法 http://save.k.u-tokyo.ac.jp/jsces/trans/trans2001/No20010032.pdf そもそもデローニー分割 からちゃんと分かっていないので、明日会社のレーザープリンタで印刷して勉強を開始する事に決定、リミットは 年内。こういう時"だけ"は会社は重宝する、色々不満があり、辞めるとかの騒動も起こしたのにまだ 踏ん切りがつかないのはここにあるのだが(苦笑)...今の状況だと会社にいる時間の1/3程度 を仕事に充てれば、後は自分のプログラムを書いていられるし、時間はかなり好きなように使えるので、ね (ただ余り自分の為には良くないので、本当は早めにケリをつけなければいけない、とも思うのだけど... ついでに、ガイドを作るアプローチはSasquatch以外にも毛羽毛現・漢 のようなアプローチもある。こちらの方がコントロールはし易そうで、恐らく日本のCGで見かけるような キャラクター系やゲーム系のデフォルメされたものにはこのアプローチの方が、短冊ヘアの延長で向いている のだろう。欠点はメッシュ表面に生やす訳では無く、あくまでガイドに沿って生成するので、実写の合成やフォトリアルなものへの応用は 難しい所だが、こちらも実装を検討してみたいと思う。 後はガイドスプラインの無条件クローンとか、よりfurモード向けのコントロールアプローチの実装も面白いかもしれない。 Sasquatchのサイトにある三つ編み画像を作るのにはこのアプローチの方が向いていそうな気がする。 --------------- 更にShaderManの新しいバージョンが出ているのを 発見、以前のバージョンであったレンダリングに失敗した時にスレッドが残ってOS終了時に 停止する問題が解消されていると良いのだけど...明日は色々やる事がありそう(^^;; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/21 フサフサ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
--------------- で、TANEさんがちょっと前の日記でRendermanのCurveの話を出していたので 触ってみる事に。とはいえサポートしているツールなど持っている訳ではないので今回も自作(笑) まずは普通に指定したメッシュから毛を生やす所から考える。 といっても任意のポリゴン内の点を選択し、その位置での法線方向にプリミティブ を生成すれば良いので、別段難しい話では無い。 ポリゴン内の補間値は単純な三角形の面積補間により実装、毛の密度は単位面積 辺りの本数とし、ポリゴンの面積は二辺を構成するベクトルの外積から求められる。 後は密度からの各ポリゴン上の毛の本数ぶんループを回し、ランダムな点をピックアップ してその位置での法線の補間値を計算すれば良い。 今回はやらなかったが、アニメーションなどに対応させる場合はポリゴン単位で乱数系列 を初期化し、変形を伴うメッシュについてはリファレンスオブジェクトのポリゴンからその ポリゴン上の毛の本数を決定すれば問題無いだろう。 で毛のシェーディングについては毛の方向(Rendermanの場合dPdv)に対する仮想的な円柱 を想定して書いてみた(ソースはこちら furshade.sl) (ちなみに、まだこのシェーダは完成版では無く、現状では背面のシェーディング結果も 拾ってしまう為、LWでいう所の半透明度100%のような状態になってしまうのを何とか したい所(T_T) でAir(有料)にてレンダリング ![]() 【影なし】 ![]() 【影あり】 一応「天使の輪」らしきものは出ているのだが、イマイチ綺麗じゃない(^^;; とここで考えて見ると、影ありの状態は斑になってしまっているが、これは光源がサイズを 持たない為、影が落ちているか落ちていないか、の2通りの状態しか存在しない。 これに対し現実では光源は面積を持っている為、光の回り込みが発生する。 更に髪の毛は遠距離ではその一本一本を認識する事ができない位細い為、モンテカルロで計算する のには向いていない。 という事で実際には影の量はその髪のボリュームに最初に交差した位置からの透過距離を 入力とする関数で近似できるのでは、と考えてみる。 とは言えRendermanでこれをやるのはきついので、取り敢えず影ありの画像と影なしの画像 を適当な透明度で重ねて見る、この場合は一応定数項だけを持つ関数と等価になる...ちょっと言い訳っぽいけど(^^;; という事でこんなカンジ ![]() 意外とそれっぽく見える模様、静止画とかならこれでいいかも、と思ってみたり。 --------------- 一応Sasquatchのようなガイドを使用したバージョンも作っているのだけど、こちらはまだ もう少し練りたい所なので、詳細は後日書きます(^^;;現状はこんなカンジ ![]() 【マッシュルームカット(笑)】 感触としてはロングヘアモードも意外と簡単に作れそう、というか作りたい。 だって高価な毛生えプラグインとか買うお金無いんだもの(苦笑) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/17 中間報告 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
本業が年末進行中につきやたら多忙、色々やっているんだけど日記書いてる余裕無いです(T_T) 仕事のうち一つは本当にシャレにならないかも、という状況。上手く動かないって事で 調査を依頼されたんだけど、そもそも根本的に間違っている可能性がありそうで、でも 出荷済みかつ新製品のパンフにも書いてしまているらしい、ヤレヤレ。 色々作ってはいるんだけど、もう少ししたらまとめて報告します... その他に「ラチェット&クランク2」にはまっているという状況もありますが(笑)>理由 年賀状のデザインも考えなきゃいけないし、今年は1月中には何とか出したい所、あー(涙) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/07 LenzFlare | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
今更、という感はあるのだが、フレアエフェクトを作ってみる。 オプティカルエフェクトとしては定番のこのエフェクトはCGの台頭とともに多用され 今ではもはや陳腐化し、下手に使うと失笑と種となるようなものになってしまっている。 しかしFF等ゲームのムービーなどでは光の表現が多用され、光学系のエフェクトというのは やはり使えばそこそこの見栄えがする為、誤魔化し等にも使えて便利なのかもしれない。 (3Dの無駄なレイトレースのようなものか;-) 実際の画作りではパラメータを制御できる事が最優先なので、別段シミュレーション 等は考えない;-) で、フィルタアプローチとしてはピクセルを走査し、各フレア要素の中心からの 極座標に座標を変換し、更に中心からの距離に対しフォールオフをかける。 後は加算などで元画像に合成すればよい、別段書く必要も無いのだけど、極座標 への変換は単にatan2を使用する。パターンを回転させる場合はこの結果にオフセット を加えれば良い。 という事で幾つかのパターンを作って見た ![]() 【星型】 極座標thetaでのsinカーブの絶対値を用いて減衰量を変動 ![]() 【ランダムストリーク】 極座標thetaに対する連続ノイズ関数(ここではPerlin Noise)を用いて減衰量を変動 ![]() 【n角形】 これは少し面倒なのだが、n角形は中心から放射状に複数の三角形に分割できるので、どの三角形に 属するかを極座標で求めた後、中心からn角形を構成する辺までの距離を減衰量のスケーリングファクタ として適用 --------------- 減衰関数についてはフレアパターンについてはexp(-x)がかなりそれっぽく見える模様。 後はリングパターンや、虹色のリングなども考えられるが数式的には簡単なので言わずもがな。と、ここまで作った所で飽きた(笑) 後はこれらについてフレアのエレメントを対話的に編集するインターフェイスの問題で しか無いから、なのだけど(^^;;>面白く無い理由 しかし、この手の全ての要素が細かく設定できるレンズフレアプラグインなんかは誰か 作っていそうな気がするのだけど、フリーでは殆ど見つけられなかった。やっぱりみんな 作るのが面倒なのだろうか?(^^; --------------- 一応商用ではAxion FlareEffect (Free版もあるけどイマイチ) Knoll LightFactory2 などがあるみたい。 まぁ作れるものを買うのもアレなので自分が使いたくなった時に再度実装を考えて見ようと思ったり(^^; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/12/01 HeightFieldその2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
昨日の続き ![]() LWのテクスチャを貼れるようにしてみたり(画像はcrumple)、自己の 影を落とせるようにしてみたり、法線計算の細かいバグを潰したり。 しかし、色々なパターンを設定していじるのには面白いのだけど、無限平面 のHeightFieldなんてホント使いように困るなぁと思う。全然使い道が 思いつかない、しかもやたら重いし(笑) 久しぶりにflayを見てみたら、Fake-Skin Shaderにテクスチャやら エンベロープを付けて欲しい、という意見があったけど、使っている人 いるんだなぁと思ってみたり(^^; (ちなみにテクスチャやエンベロープを付けるのは簡単(笑) 実際自分で使ってて、サテュレーションし易くて(設定を調整すれば良いの だけど面倒)ちょっとパラメータを見直す必要があると感じているのだけど(^^; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/11/30 HeightFieldその1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
友人と飲みに行く前にちょこっとプログラム LWのVolumePluginをいじってみる、取り敢えず無限平面を作ってみたが、余り面白く無い ので、ディスプレースメントさせてみたり。 ![]() HeightFieldの交差計算はTexturing&Modelingに記載されているものを使用。 レイの基点からステップ切って前進、前後の値の符号が反転している事から交点を見積もるという単純なもの。 (Texturing&Modelingは現在は3rd editionになっているみたい、内容がどう変わっているかは不明(^^;; 交差部分の法線の計算は交点をpとすると、 p位置でのディスプレースメントされた地形の位置Dは D := (p_x, Displace(p_x, p_z), p_z) となる。 これと同様の計算を p' := p + view_direction * eps p'':= p + view_xvecotr * eps とし、それぞれD', D''を求めてやって V_d := D' - D V_r := D'' - D これがHeightFieldに沿ったベクトルの近似になるのでこれらの外積を取ると N := V_d x V_r となる。 分解度はピクセル単位なのでポリゴンなどで作る地形よりもめり込んでいる部分が精細に 表現できるのだが、計算はかなり重い(5分程度、セルフシャドウなし) しかし、無限平面にしてもHeightFieldにしても広大なシーンをレンダリングする時に 設置しておくと安心ではあるのだけど、それ程日常的に使うものでも無く、汎用的な プラグインにして有用かどうかは、自分の中では結構疑問(笑) この程度ならRenderman使えば何とでもなるし、DisplacementはReyesレンダラとか めちゃくちゃ軽いし、という事でまぁ製作を続けるかは気分次第(^^;;; --------------- 余談だが、LWのVolumePluginをいじっていて、opacityに1.0を設定してもAlpha:=255と ならないので不審に思って調べた所、Plugin側で設定したopacityに対し1.0-exp(-opacity) となる計算を行っているらしい、つまり不透明度 := 1.0-exp(-opacity) よって opacity:=log(1.0/透明度) としてVolumePlugin側では設定しなければならない. 確かに1.0-exp(-x)の減衰式はTexturing&ModelingやAdvanced Rendermanの解説でも 使われているが、単なる透過に対する減衰係数式なので、ジェネリックであるべきプラグインの 標準がこの式を前提にしているというのは非常に違和感を感じる(^^; ...正直こういう(教科書丸写しの)仕様を見るにつけ、一部で言われているようにNewtekの開発力 に疑問を感じてしまう。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/11/27 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
今日も仕事をサボって自分のプログラム、作ったプログラムは本日公開のもの。 ただ、内容を見れば分かるように、そこそこ使いではあると思うけど、作っている側は全く面白くない、アルゴリズムのかけらも無く、ただ面倒で、苦労する所は数少ない情報からLWのプラグインインターフェイスと格闘する、というもの。 これまた本末転倒な気がするし、この程度はソフトの標準であって良い機能だと思うのだけど... 雑記をトップから分離した事でもう少し下らない内容を書こうと思うも上手く行かない。 本当はInjector(任意のプロセスに外部から侵入する為のライブラリ、APIHookなどで使う)を公開したかったのだけど、勤め先の上司から後数ヶ月待ってくれと言われて暫くネタが無い、誤魔化しにAESのコードでも載せてみようかなどとも考える。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/11/13 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Blur量を指定するプラグインがLW7.5で使えないらしい、という事で簡単に作れそうだったので仕事の待ち時間の暇つぶしに作成、ちなみにネタ元となったMoMo掲示板の談義の流れについてはネガティブなので、別にあそこのスレッドで困っているらしい人間を助けようなんて意図は全く無い。 しかしプラグインを増やすとページのレイアウトが見難くなる事に気付きブルーになる。 ついでにPhotoShopのプラグインアーキテクチャの勉強、色々とレガシーを引きずっているのか、どうにも面倒な構成になっている気がする、何でフレームバッファを処理するだけでこんなに面倒なのか。KOJIさんが写真屋のプラグインをサポートしたい、と言っていたのを思い出したけど、これをフルでサポートするホストを作るのは相当大変だろう、と妙に実感。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/11/09 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
テクスチャも貼りたいと思ったのだが、LWのPlugin用テクスチャインターフェイス(LWTxtrEdFuncs)がどうにも上手く動いてくれず(パネルのsubscribe,unsubscribe時たまに落ちる:-<)断念、正直LWのバグではないかと思ってみたり。 LWもユーザー向けの部分は比較的しっかりしているのだけど、開発者向けの部分は結構いい加減で6.0の頃からあるLWSAF_SHADOWフラグが未だに実装されてなかったり、meshinfoのUV取得関数の一部が動いてなかったりと結構きついので、もう少しこの辺をまともにして貰いたい所。 Eetu氏の作品とかぶるのでプラグイン自体は今の所公開の予定なし、まぁ自分&友人向けといった所;-) しかし結局プラグイン作りに追われて作ろうと思ったものは完成せず、本末転倒、嘲笑うべし。 11/10追記: --------------- LWといえば最近はパッチモデリングにはまり中、といっても今の今までCtrl+Fの存在を知らなかったのが問題なのだが、メカ系統はサブパッチよりも作り易くて、今まで不満だった個所が解決されて満足。 優れていると思う所はセグメントに何個でもコントロールポイントを置くことが出来てその複数のコントロールポイントを加味して最終的に双三次曲面の0〜1区間としてポリゴンが生成される所、余りコントロールポイントが多いと分割数を上げないとちゃんと反映されないのは少し不便ではあるが、Shadeなんかもコントロールポイントを追加する度にセグメントを追加するのでなく、この方法なら皺も発生しないと思うのだけど... 更にレンダラも自作なのだから、サブピクセルまでバイナリ適応分割すれば、セグメントの繋ぎ目も問題なく処理できると思うのだが、何とも何とも。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2003/10/26 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
メールアドレス収集ロボット対策の為メールアドレスはHP上に記載しておりません、
ソフト内のドキュメントには記載しておりますので、御用の方はそちらまでお願いします.
since 2003/10/04, Y.Ume/Tabo