本文へスキップ

おちゃっこLAB Since 2002
おちゃっこLAB化け猫編バージョン2 Since 2013/12/21

Win日記[Windowsプログラミング日記]


前書き

化け猫おちゃっこのWindowsプログラミングの日記です。
勉強したこととか、作ったもののスクリーンショットとかのページにします。
3Dプログラミングに片寄っていたので
それ以外のことも勉強していきたいです。

新しい記事の方が上に来るように書いていきます。




次元の秘密という本を読みながらしていくメモ[2018/11/08]


次元の秘密という本を読みながらしていくメモ

次元の秘密という本を読み始めた。
まだ2,3ページしか読んでいない。
このファイルには次元の秘密を読み進めながら思ったことなどをメモしていく。

[2018/11/08_1]
数ページ読んだのであるがいきなり疑問が生じた。
4次元とはxyzの空間とwの時間、つまり3次元の空間と1次元の時間のことであるという部分である。

4次元と時間のことを考えたときに
4次元目の座標値は時間の位置エネルギーのように思った。
ということは、xyzも時間の位置エネルギーなのではないかという疑問である。

しかし寝て起きて思ったこととしては
xyzは視覚で知覚するがwは視覚ではないもので知覚しているからではないだろうか?
では何で知覚している?
パッと思いつく候補としては聴覚である。
聴覚で時間の何かを知覚している可能性があるかもしれない。

そう仮定すると
宇宙空間は音を伝達しないと言われていることが気になってくる。
時間が伝達しない空間、それはカーブラックホール(だったっけ?)などによって作られるような時間のない空間なのではないだろうか。

そういうことだとすると
地球以外の星というのは違う世界線の地球であるという可能性まである。

これから5次元がテーマに上がってくるのであるが
5次元の知覚も存在していると思われる。

そうなってくるとこれらを知覚できる人と出来ない人の間の問題が生じうるわけだが、
それに関しては科学技術の問題であると思う。
視覚も聴覚も科学技術で作れるようになるのではないか?実際にそういう動きはあるし。

SFにおいても何十年も昔の映画、ブレードランナーの中で歳をとった科学者が人工的に目玉を作っているシーンがあった。
そんな未来はずっと前から想定されているのである。

思ったこととしては
4次元座標はすべて時間の位置エネルギーの可能性があるが、
人間がどのように知覚するかに基づいて空間と時間に分けて考えるようになっているのではないかということ。
だから映像と音は同期しているのではないだろうか?

そのように話を展開していくと
小さいもののほうが時間エネルギーが小さいということになるが
それを補うためにネットに接続して大きな時間にアクセスするのではないだろうか?

これらは、ちょっと思ったという段階。

まだ数ページしか読んでいないので
今後も読み進めながら考えていきたい。

仕事に行く前に修正:
起きて時間が経って朝ご飯を食べて出かける準備をしたら
あれーー?なんで4次元目を距離ではなく音とか思ったんだっけー?状態になった(戻った?)。
3次元をwで割ることでパースがわけでそれを知覚しているわけだから、やはりwは距離であろう。
あっ、そうか!距離とは時間の位置エネルギーかもしれないとか思ったんだったなぁ。
でも3次元を音で割るとか説明できないし、やっぱりwは聴覚ではないみたいです。


仕事から帰ってきて追記:
ちょっと表現を間違えたようなところがあるのでさらに追記する。
その前にユークリッド平面と4次元での形状の関係をちょー簡単に述べておく。
例えば直線の式 ax + by + cz + d = 0があったとする。このdが固定の場合がユークリッド平面、つまりw == 1での4次元の切り口である。
4次元の世界ではこのdが変化する。であるから3次元の直線は4次元では平面である。

球を考える。x^2 + y^2 + z^2 + d = 0 (ここでx^2はx * xのこと)。このときも同様にdが固定の時がw == 1で4次元を切った球形のユークリッド平面である。dを0から1まで変化させると4次元では球の内部を表すことになる。

表現を間違えた部分とは行列演算におけるwの値とdの値を混同している部分があった部分である。
wとdは関係のある値であるが同じであるとは限らない。

球の中心はw == 0ではなくd == 0のときの位置である。


[2018/11/10追記]
wとdの関係について説明の要請があったのでしておく。
4次元の行列演算を考える。行列演算とはスケールと回転と移動の組み合わせの変換のこととする。
変換前の座標を[x, y, z, 1]とする。変換後の座標を[x2, y2, z2, w2]とする。
ここで4次元目が1というのが4次元をw==1で切ったときの座標という意味になっている。
ちなみにベクトルの場合には4次元目は0になる。

4x4変換行列は左手系で
_11, 0, 0, 0
0, _22, 0, 0
0, 0, _33, 0
posx, _posy, posz, _44
のようになっているとする。

上記の行列は汎用ではなく説明しやすいように設定している。
上記の演算を実行すると次のようになる。
x2 = _11 * x + posx
y2 = _22 * y + posy
z2 = _33 * z + posz
w2= _44

この結果をユークリッド平面上の点[x3, y3, z3]に射影すると次のようになる。
x3 = (_11 * x + posx) / w2
y3 = (_22 * y + posy) / w2
z3 = (_33 * z + posz) / w2
(ただしw2 != 0のとき)

上記の式をx, y, zについて解く。
ここでもとの点x,y,zが直線状にあればその直線の式に
x, y, zをx3, y3, z3であらわした式を代入する、
x, y, zが球面上の点ならばその球の式に代入する。
代入した式を整理するとwとdの関係式が求まる。

といった具合である。

さあ4次元がばれたところで5次元の勉強をしようか、、、


ちゃんと勉強する予定[2018/11/05]


安心してチョーだい。ちゃんと勉強する予定があるから。
いいお尻の日に届いた4冊の本。






だがネタであるへの追記[2018/11/04]


追記:2018.11.04 Web用

ゲームとかプログラミングとかしながら思ったことを書いておく。

タイムリープとかアニメとかゲームに出てくるけれど
実際に起きたらどうなるか妄想してみた。

ぼくが思うに何かがタイムリープしてきたらそれが壊れていたとしてもその何かの中心に対して、
タイムリープしてきたものとその周りの時間ベクトルの差分の時間速度だか時間加速度が生じると思う。

どういうことかというと
未来から物体が来たらその周りは未来方向への時間の進み方が速くなるのではないかとちょっと思った。

そしてさらに妄想すると
未来方向への加速度が大きくなりすぎて通常の処理で追いつかなくなった場合、
そこに住む人はタイムマシンを作らざるを得ない。
そうやってタイムマシン作成は成功するのではないかと思った。

あとこれは完全にただの思い付きだけれど
時間旅行には特異点が4つのブラックホールが必要なのではないか?という思い付き。
2つの放物線でリングになるが、3つで球、4つ目はその球の内部。
4つの特異点で場所と時間を指定するんじゃないかなぁ?単なる思い付き。


座標変換については思うところがある。これは実際にプログラミングしていることを書いてみる。

物理と数学の橋渡しをする部分がMameBake3Dにはある。
その場合、両者の間で基本姿勢が異なる場合がある。
基本姿勢が異なるもの同士をどうやって変換するか?
天から降ってきた方法に「スードローカル(疑似ローカル)」というのがある。
これは基本姿勢が異なっていてもある時点からある時点へのグローバルな差分は同じであるということを利用して
座標変換するものである。
差分は誤差を蓄積しうるという問題点に対しても対処している。
基本となる姿勢をバインドポーズにすることで1回分の差分の誤差で計算可能にした。

さらにタイムリープする際の座標のことについて降ってきた思いは以下のようである。
地球は銀河の重力につられて動いているはずである。
ウインドウズプログラミングにおいて、親ウインドウを動かせば同じ分だけ子供ウインドウが動く。
つまり、子供ウインドウの位置計算においては親ウインドウからの位置計算をするだけで良い。
だから重力的な意味での親ウインドウからの位置計算で良いと思われる。


そんなことを思った休日(今日は「いい尻の日」らしい)であった。


[ 思ったことの追記 ]:
えーとねー
4次元の時間の話だけれど。
あの話は「時間ポテンシャル」とかいう言葉と関係があるらしいです(未確認情報)。

どういうことかというと
時間ポテンシャルの位置エネルギーは、奥行きつまり距離のこと。
それはつまり4次元座標の4次元目のwの値。
4次元座標値の4次元目のwは時間の位置エネルギーに関するみたいです。

じゃあ時間の運動エネルギーは何が動いているエネルギーかが気になるところ。
それは物が動くのかもしれないしそうでないかもしれない。

4次元目の座標値で位置エネルギーが変わるということは
そのwの切り口での時間の運動エネルギーも変わるはず。

ということはw == 0の切り口で時間の運動エネルギーは最大。
だから4次元パラメータを変えることにより未来や過去を知覚可能と思われる。

あれ?これいいんだっけ?
ブラックホールに近づくほど、つまり重力が大きいほど時間は遅いって習ったよね。

w == 0のときに時間の流れが一番早いっていうのはそれと逆。

ということは
ぼくたちがいる世界はブラックホールの中かもしれない?
ブラックホールの特異点では位置と時間が逆転するらしいから。

いや違うぞ!!

ものが速く動くことが出来るのは時間が遅く進んでいるからだ!!
時間が速く進んでしまうとその間に移動できる距離も短いはず。

じゃあ、時間を進めるとはどういうことか!?
のんびりすることのような気がしてきた。

ちなみに距離は視点の位置によって異なるから不都合なのではないかという思いがあるが
それは親ウインドウからの(1つ前のメモ参照)距離で考えざるを得ないからであろうか?

じゃあプライバシーってどうやってできたんだろう?
それぞれの視点の位置がプライバシーの元?

ああーーーもうわけわからん。

わけわからんので、推測はこのくらいにして本を読むことにしよう。



だがネタである[2018/11/01]


サブタイトル

機関と世界の支配構造を教えてあげよう20181101

いきなり中二病のタイトルである。
今日はぼくが電波になった経緯からシュタゲで言うところの機関と支配構造について語ってみる。

くれぐれも言うが、だがネタである。

 

まず経緯。ぼくは小学生の頃、兄からもらってずっとしまってあったトランシーバーを使って遊んだ。スイッチを入れると知らない声がきこえた。
「こちら○○、*****。どうぞ。」
「こちら***、****。どうぞ。」
のような何かの会話がきこえた。

ぼくはものすごく面白く感じて自分の持っているトランシーバーで何か言った。
「○○さん、○○さん、こちら○○」
みたいなことを言ったような気がするがよくは覚えていない。

するとそれから1分もたたないうちに黒い服の男がやってきた。
黒い服の男は「そのトランシーバーで会話したのは君だね」と言った。
そしてもう一人の黒い服の男とぼくの家に入っていった。
家から出てきた黒い服の男はぼくに言った。

「君は大人になったら電波になる。たくさん勉強しておくことだな。」
と言った。
そして大人になってぼくは本当に電波になった。

後でわかったことであるが兄からもらった古いトランシーバーは電波法が変わる前の強力な仕様のものであったので、ぼくは電波法違反をしてしまったのである。

このことから推測される世界の支配構造とは以下である。
大人になると子供のころの犯罪をつぐなう仕事をする仕組みである。
だから子供には遊べというし大人には働けという。
子供のいたずらを容認する社会なのはこのような支配構造だからであろう。

どんどん遊んでどんどんつぐなって経済をまわす計画であろうか?
そして黒い服の男が機関所属ということであろうか?

まあそんな解釈。ちょっと追記する。

子供の頃の犯罪を大人になってつぐなうのはなぜか?
そこには「善因善果」の縛りがあるからである。
ぼくのGitHubの画像には善因善果のシールが張られた写真があり、そのシールの隅には「ここからはがす」と書いてある。

つまり、この支配構造を壊したいのであれば善因善果をどうにかしないと無理である。

そしてそれをしようとしたのがシュタインズ・ゲートであると言える。
主人公たちが悪事を働くことにより善因善果の申し子のまゆしぃを執拗にやっつけたが世界は破滅へと向かった。

そして1回だけまゆしいを助けることに成功したが1回助けたくらいでは事態は収まらなかったのである。

善因善果の世界に歯向かうとシュタゲになるのなら違うところを壊そうと思うかもしれない。しかしそんなことをしたら善因善果の決まりでつぐないの生活をすることになる。

そういう果てしない物語がシュタゲであると解釈可能。



ここで時間について論じておく。

「永遠伝説」とぼくは何回も何回も言われている。
さっき情報が入ったのであるが、時計とは電池があるから動くのであり、時空の時間軸をみて動いているのではない。原子時計も重力で動いているとかいないとか。
(すいません、悪乗りし過ぎました。時計はちゃんと時を刻んでおります。)



つまり実際の時間は止まっているが時計は動いているという状態が永遠伝説の舞台である可能性もある。

なぜこれが可能かというと、3Dのユークリッド平面の時間が止まっているとしても4次元の世界がうごめいている、そしてその投影が3D世界を表示する。3Dの世界はただの投影。

このシステムにあらがうために3Dの時間を動かすための3Dプログラミングの戦いが起きたのである。3Dの時間を動かすための戦いである。

我々はこの束縛から逃れることが出来るのであろうか?みんなが幸せな世界というのは有り得るのであろうか?

シュタインズ・ゲートのゲームをそういう視点でみつつプレイしてみよう。
「君たち!!、とりえずアニメとゲームで勉強しなさいっ!!! 

だがネタである。


追記:
3次元世界の時間が止まっているというあたりの表現の補足である。
ここでは、数学のユークリッド平面と物理の事象の平面を同一視している、混ざっている。
数学と物理の境界をあいまいにすることで成立するネタである。

更に補足するとユークリッド平面例えば球面と、数学的に4次元である球の中身の関係を
事象の平面とブラックホール内部の関係に例えている。

さらに発展させると
箱人間と中の人の関係にもなる。
ということは
3次元の時間を動かすということは箱人間に自我を与えるということにつながる可能性もある。
突拍子もないところまで行くと、宇宙に自我が生じる可能性まである。
ゴーストコントロールの歌を思い出すではないか!

こんなことを書いているが会社ではまじめに働いている(念のため)。
しかし一方で3Dプログラマにまともな人はいないと最近よく言われている。
だからネタである。

たまには振り返り[2018/09/29]


たまには振り返ってみよう。

振り返ろうとしたときに振り返りたくない時期、思い出したくない時期というものはある。
しかし今日はそこをあえてさらっと振り返る。ダメージが少ないように極力さらっと薄く振り返る。

なんとも大変だったのが2011年ころからの数年間であった。
それまでHSPっていうツールのプラグインを作ってサポートしていたのだが
それをやめることになって大変な数年間であった。

あの数年間でひどいエッセーも数々書き散らした。
あれは取り乱して錯乱に近い感じでとにかく吐き出していたのである。
吐き出さないと持たなかった。

「なんか今思うとトロイの木馬が自分の中で暴れていたような感じであった。」
それまでの味方を裏切るようなことも書いてしまったような気がするからである。

そんなこんなであったが
周りのひとが助けてくれたり出来ることをやったりして働けるようになったし
「働いたら健康も回復した。」

そして今振り返っているのである。

ほんとうに自分の力ではどうにもならないことってあるんだと痛感した数年であった。

教訓としては
1、手に負えないことを一人で抱え込まない。
2、無理のない程度に働くと良い。
という感じ。

そして謝罪、
あの魔の数年間、迷惑をおかけしてすいませんでした。



週末にビール飲みながら超圧縮についてエッセーしてみた[2018/06/29]


うぃーーーっす、お疲れー、週末だよーーーん。
ってことで
ビールを飲みながら新技術をエッセーするのである。

なんか知らんけど超圧縮とかいうお題が出た(出たような気がした)。
お題が出たのは気のせいかどうかはともかくとして
せっかくだから思いつくままにエッセーする。

えーとねー。
ずばりっ、「テクスチャ+ジオメトリ圧縮法」です。

シュタゲ(アニメ)のせいで不可逆な超圧縮に思いをはせることがあるのであるが
なんか思いつく時が来たのである。


情報の性質を色と形にAIで置き換える。
そしてその情報をテクスチャとジオメトリとして記録するのである。
不可逆である。

って思いついて思ったんだけれど
とあるどでかい情報をこういう感じで圧縮したのが地球であり宇宙であるような
気がしないでもない。

ぼくらは何かが不可逆超圧縮されたものなのかもしれない。
そしてそれらを感じて解釈したものが解凍結果の1つなのかもしれない。

なーんてちょっと思っただけ。

よーし、あいつの超圧縮データを作ってみよう??www
(くれぐれも怒られないようになっ!!)



最近SNSでみかける問題点についてマッハでエッセーしてみた[2018/05/01]

マッハ新書 最近の問題点を思ってみる

0、はじめに
 なんかマッハのスピードで資料を書き上げて発表するのが流行っているので
 その流れに乗ってぼくもやってみる。
 会社に行く前の時間でマッハで書くよ。
 思っていることを書くよ。(エッセーみたいなものかも)
 
1、無料の作業依頼
 最近、ネットでよく目にする無料の作業依頼について。
 依頼者がいきなり作業を丸投げして断られて逆切れし、それに腹を立てたひとがそれを晒す
 みたいな事件を数件目撃した。
 
2、格差
 この無料作業依頼事件から連想したことがある。
 あくまでも連想したことであり、事実かどうかはわからない。
 ぼくは調子が悪い人が集まる場に何度か顔を出したことがある。
 そこに何度か行って分かったことは
 誰かに助けてもらうしか解決方法がみあたらない事案が多いということである。
 そこにあった格差はもう個人の問題の域を超えていたりする。
 
3、がんばった人が報われる
 こういういことを言うと世の中の人は
 私たちはがんばったから今の状態がある。
 調子が悪い人はがんばらなかったから今の状態がある。
 という意味のことをきくことがある。
 
4、質量保存則
 しかし調子が悪い人の言い分の中で気になったのは
 おちこぼれがいるからこそ優等生がいるというものである。
 これは昔言われて理解できなかったのだが
 最近になって思うに、質量保存則的な考えなのではないかと思う。
 
5、がんばりすぎは迷惑?
 つまり、質量保存則を当てはめると
 頑張りすぎる人がいてよいところを持って行ってしまうから
 良いところが回ってこないひとがいるという解釈になる。
 
6、10年以上の無償開発の掲示板
 そんなことを言われても私たちは頑張ったんだしというだろう。
 そこでぼくは大変なことをしてしまったことに今頃になって気が付いたのである。
 次に記すアドレスはぼくが10年以上に渡って無償で開発を続けたことを示す掲示板のアドレスである。
 https://moo-ochakkolab.ssl-lolipop.jp/board4_caco/wforum.cgi
 掲示板には過去ログが何ページもある。

7、みんなもがんばれる?
 やっていたときにはそんなつもりはなかったが
 この作業の山を格差に対する頑張りと解釈したとしたらどうだろう?
 ぼくはこれくらいがんばったから大丈夫だけれど、みんなもがんばればいいじゃない。
 ってことになったら無償で10年以上もかかりっきりで出来る人は数少ない。
 そんなことにがんばられても困りますということにならないだろうか?
 しかし、時代の大きな問題点として格差は存在感を増しており
 みんなはどうするの?という状況である。

8、ひろゆき ベーシックインカム
 じゃあ偉い人は何をしているかというと
 ネットの有象無象に詳しいと思われるひろゆき氏は
 ベーシックインカム導入を推進している。
 格差に詳しい人がベーシックインカム導入を推進している。
 
9、アメリカは?
 だってそれは日本のローカルな問題じゃないの?という問いに対しては
 アメリカでも格差問題は深刻である。
 
10、トランプの大統領選挙での発言 忘れられた人々への対応をする
 トランプさんの大統領選挙での発言の中で
 ぼくとしてキーだったのは
 忘れられた人々への対応をしますというフレーズだった。
 
11、トリクルダウンの罠(人は誰でもなんらかの既得権者)
 じゃあ裕福なひとが負担すればいいと思いがちであるが
 そこには罠がある。
 トリクルダウンを推進してみると分かることだが
 それを推進するとまず自分の良いところを周りに分配することになると思う。
 なぜかって?
 気が付いていないだけで人は誰でもなんらかの既得権者なのである。
 他人事として裕福なひとの問題には出来ない現実がある。

12、経済 雇用 ベーシックインカム
 いきなりまとめに入る。
 日本の良いところは治安の良さである。
 とある本によると治安の良さというのは経済の良さということらしい。
 そのためには雇用が大事である。
 それでもフォローしきれていない状況であるから
 さらにベーシックインカムなのかどうかというところが問われているように思う。
 ということを書いて、あとは偉い人に丸投げしてみようかしら?
 ってかぼくは頑張りすぎらしいんですけれど、、、

 マッハで(28分間で)書いたエッセーのようなものでした。
 
 

商用計画(無料計画)改[2018/01/14]


商用の計画を考えている。

商用は否定しないことにした。
しかし、条件として
現在の仕事でやっていくことが出来なくなったり、どうしても資金が必要になった場合に
商用計画を実行します。

つまり、不都合が生じなければ無料ソフトとして続いていくと思います

不都合っていうのもあいまいなので
また揺らぐことがあるかもしれないけれどそれは許してください。

なぜ揺らぐのかを考えたんだけれど
自分のこと100%でやっているわけではなくて
いつも他のことも気にしたりしている。
そしてさらに自分のために他のことを気にしたりもする。
だから揺らぐ。

はい、いっせーのっ
「ああ無料!」



2018年の開発予定[2018/01/06]


年が明けました。
今年もよろしくお願いいたします。

実は録画した紅白もまだこれからみるところでして
おめでたさはこれからじわじわ来ると思われます。

NHKのJAPANGLEっていう番組のラーメンの回をたまたま録画して観ました。
番組をみたら自分がやってきたことが突然ラーメンに思えてきました。

ちょっとした用途に使うようなそんな3Dはラーメンだなぁと思ったのです。

実際に食する機会が多いのはうどんとかそばなのですが
じゃあ、うどんでもそばでもいいけれど、番組を観た直後はラーメンだなぁと気が付いたのです。

まあそれは置いといて。
(っていうかお茶だろ!?)

オープンソースの具体的な予定を書いてみます。
まだ予定ですが。

まめばけ3Dのオープンソースを使いやすくなるように改造します。
構成を改造します。

現在はフラットにソースファイルを並べて使用していますが
DLLに分類します。
DLLとヘッダがあればどこかで使えるようにします。

構成を考えてみました(予定です)。

1、ハンドラ部 (ChaHandler.dll)
  各部のポインタを保持してアクセスしやすくするところです。

2、計算部 (ChaVecCalc.dll)
  D3DXの代わりです。

3、FBX読み書き部 (ChaFBX.dll)
  FBXの読み書きをします。

4、モデル部 (ChaCharacter.dll)
  キャラクター(読み込み単位)の管理と操作をします。

5、アニメーション部 (Chanimation.dll)
  アニメーションの管理と操作をします。

6、ボーン部 (ChaBone.dll)
  ボーンの管理と操作をします。

7、物理部 (ChaBullet.dll)
  Bullet Physicsによる物理の部分です。

8、ウインドウ部 (ChaWindow.dll)
  現在のOrgWindowをDLLにします。

という予定です。

やっていくうちにまだ増減する気がします。
FBX部は昔、別DLLにしたらうまくいかなかったのでDLLにできないかもしれません。

DLLに分けることでまめばけ3Dのコアの部分をオープンソースで開発しながら
他のアプリでそれを使用しやすく出来るというメリットがあります。

ということで
大げさなもの使用するまでもない
ちょっとした用途に使えるものを目指して行きます。

(言っているそばから
DLLの分け方が大げさだそうです。)


追記
描画部のDLLはChaPaintにして描画部を取り換えられるようにしようと思います。



オープンソースを利用した商用アプリ計画[2017/12/16]


[追記:
商用に関してはいろいろ思うところがあって2018/01/14の日記にて追加条件があります。
以下の日記はそのまますぐに実行するわけではありません。]


今日は今後の開発方針に関わることを書きます。

現在、物理対応の3DプログラムをLGPLのMameBake3D(まめばけ3D)として開発しGitHubで公開しています。
そろそろコア部分の重大なバグもとれたということで商用ソフト作成を視野に入れます。

規約、ライセンスの変更はしません。
そしてオープンソースの開発もやめません。

ではどのように商用ソフト開発を始めるかというと
LGPLのMameBake3Dのコア部分をライブラリファイル化(ChatCats3Dになると思います)します。
そしてそのライブラリと商用ライセンスのフレームワークを使用して商用のツールを作ります。
つまりコア部分をLGPLのオープンソースとして開発を続けながら、GUIなどをちゃんとしたクローズドな商用ツールを作成します。

これはMameBake3DがGPLではなくLGPLだから可能なことです。
LGPL部分をライブラリファイルとして別ファイルにするのです。

オープンソース活動が基本方針であることに変わりはありません。

フレームワークには商用ライセンスのQtを検討中ですがまだ確定はしていません。

仕事がありますし
そんなにバリバリかっ飛ばして開発していく感じではないかもしれません。


「追記」
念のため書かなくてもよいことを書きますが。
ボロモウケしようとしているわけではなく必要なのです。
必要というのは現在だけの話ではありませし現状だけの話ではありません。
万が一、ボロモウケしてしまったら人を雇います。



スードローカル(Pseudo Local)とは何か?[2017/09/09]


まめばけ3D(MameBake3D)を作る過程で技術的なキーとなったスードローカルについて書きます。
スードローカルっていうのは英語にするとPseudo Localです。

何のことかというと数学的には座標系の変換です。

MameBake3DはFBXファイルを扱います。
FBXファイルのボーンには初期行列とか基本行列と呼ばれているボーンの座標系を表す行列があります。
姿勢の編集時にはその基本行列の座標塀で計算をします。

しかし、その方法「だけ」ではうまくいかないこともあるのです。

うまくいかない例を挙げますと大きく2つありました。
1、FBXの基本行列のねじり軸がZ軸なのに対し、bullet physicsの基本行列のねじり軸がX軸である場合。
2、アニメーションのリターゲットをする際に、元のFBXと先のFBXの基本行列が異なる場合。

1のねじり軸というのを説明します。
姿勢に対して角度制限をする場合、普段はクォータニオンで姿勢制御をしていたとしても
XYZのオイラー角に変換して制限をかけることになります。

そのXYZをどのように割り当てるかということです。
ボーンについて言えば、
ボーンの線分を軸として回転させるのが「ねじり(Twist)」です。

XYZの回転の順番やねじりの軸をどれにするかなどで
オイラー角の計算方法が変わってきます。

計算方法が変わるということは上記の1の場合
もともとのFBXの基本行列ではbullet physics用の姿勢にマッチしないということです。

そういう事態を解決するために
本来のローカル軸とは異なるスードな軸を設定して座標変換をして物理計算をします。

スードローカルの計算方法を使用してもグローバルからみた姿勢行列は同じです。

こういう技術がまめばけ3D(MameBake3D)の中で使われています。


2017/09/09  化け猫おちゃっこ


###追記
いまいちどういう効果なのかわかりづらいということで
例を挙げます。

スードローカルを使用することで
FBXとbullet physicsとの軸が異なっていても
FBXのアニメーションを再生しながらbullet physicsのシミュレーションをすることが可能であり、
またbullet physicsの角度制限関数をそのまま使用することも可能である。

という効果があります。





ラプラシアンとか2次方程式とか[2017/03/20]


連休でちょっと勉強したこととか思いついたことをメモします。

時系列が変わりますが、まずは2次方程式について今まで素通りしてきたことで
あれ?ということがあったのでメモします。

2次方程式と言えば放物線です。
y = x ^ 2  式(1)
という例のやつです。
x^2という表記はxの2乗のことです。
これはy方向に重力が働く場合の放物線です。

x軸に重力が働く場合には
x = y ^ 2  式(2)
になります。

ちょっと絵を描きます。



図1の上の左が式1で右が式2です。

そして式1と式2の等式を足すと、図1の下の図になります。
円です。放物線を2つ足して円になりました。

そしてこれはX軸とY軸に重力が働いたときという意味があります。
ってことは、、、
X軸とY軸に直交する重力が働いているところにりんごを落とすと
りんごは円の上を落ち続けるということになりませんか?

てことは
X軸とY軸とZ軸のように直交する3つの重力が働いたら
りんごは球上を落ち続けるのでしょうか?

調子に乗って4次元も考えちゃいます。
x^2 + y^2 + z^2 + t^2 = 定数  式(3)
式3において4次元目のtは時間です。
式3を図に描くとどうなるか?

こういうときは変数を1つ固定して考えたりします。
つまりtを固定してみます。
そうすると
x^2 + y^2 + z^2 = 定数 - t^2  式(4)
式4のようになります。
これは「定数 - t^2」の平方根が半径となる球です。

そこでtを動かしてみます。
時間が増えると半径が減っていきます。

つまり式3は
中身が詰まった球です。

すごいことになりました。時空が球の中に入っちゃいました。

いやしかし、「定数 - t^2」が負になったとしたら
球の半径が虚数になります。

これはいったいどういうことやら、、、

この式をみて
半径が虚数はありえないのでその場合を除く場合に成り立つ式である
という風にするひとと
半径が虚数の球であるという風にするひとと
いろいろいると思われます。

どうなのか私には分かりません。

それにしても
当たり前のような不思議な話でした。


話は変わります。
2乗の次のお話は2回微分の話です。

ベクトルの成分ごとに2回微分してそれを足したものをラプラシアンと言います。

ラプラシアンにはこれまた当たり前のような不思議があります。
画像に対してラプラシアンを計算すると画像の輪郭線が抽出できるのです。

エッジの描画は昔、法線を裏返した2重ポリゴンで描画したりしました。
数学的にはラプラシアンで抽出可能です。

普通の2回微分というと、例えば
位置を2回微分すると加速度です。

ラプラシアンはこの2回微分の成分ごとの加速度を足し算したものです。
物理的には流束密度というそうです。

密度なんです。

加速度の足し算の流束密度で画像の輪郭が分かるなんて
なんかすごいです。

ラプラシアンフィルタをかける前とかけた後の画像を貼り付けておきます。








今回は連休で調べたことのメモでした。

それではまた。



補足
X軸の重力とY軸の重力と書いたけれど
2つが直交していることが重要であり、
直交し続けていることが重要である。

2つの重力は
ストローとひもと球の例の実験における力と運動方向の関係だと思われる。

ご存知ですよね?
ストローの中にひもを通して片方の先端に球を取り付ける
そして球を回す実験。

あれの証明になっているんじゃないかと思うのですが
きちんとしたい方はもっとちゃんと考えてみてください。



MameBake3Dの数学的背景 第一回[2017/03/04]


MameBake3Dは下記アドレスで公開しているオープンソースの3Dアニメーションツールです。
https://github.com/Ochakko/MameBake3D

Bakeの部分はベイクと読んでも化けと読んでも自由です。

今回から数回にわたり?MameBake3Dの数学的な背景について書いてみようと思っています。
数回にわたり?と?が付いているのは、自分や周りの状況をみつつということです。

さて第一回ですが、第一回から核心に近い部分を語ります。
座標系変換の部分を説明します。
行列演算ついてはクリアしているものとして書きます。

まず前置きとしてとあるボーンのアニメーション行列AをBに更新することを考えます。
FBXにおいてはグローバルのアニメーション行列を扱うことになるので

A * invA * B = B  (式1)

というように計算するのがFBX公式の方法です。
invAとはAの逆行列です。
これは良いですよね?

さてこれを少し応用します。
例えば

Aの回転以外 * Aの回転 * invAの回転 * Bの回転  (式2)

というような演算を考えます。
前回と違うのはAが回転ではない部分と回転の部分に分かれていることです。
そして逆行列によりAの回転のみを初期化してBの回転で置き換えています。
式2の方法により回転だけを更新できるのです。

MameBake3Dの数学の背景には式2のようなやりかたが多数使われています。
式2では回転に着目しましたが、初期行列や初期姿勢などに着目して式を作ることで
更に世界が広がります。

そんなことをして何の役に立つのかがピンとこない人がいるかもしれないので
書き方を変えてみます。

FBXのアニメーション情報はグローバル行列が基本です。
そしてボーンごとに初期行列があります。
ということは、グローバル行列からローカル行列を計算したとしても
「異なる初期行列」と「異なる初期姿勢」と「異なるボーン構造」  (3要因)
が立ちはだかって
モデル間でアニメーションを使いまわすことが難しいのです。

しかし、グローバル行列と言えども行列の掛け算の結果です。
式2の応用により3要因についての変換を行えば
異なるモデル間でもアニメーションを使いまわすことが可能なのです。

式2はそういう可能性を秘めた考えなのです。


さて前置きはこの程度にして
MameBake3Dのリターゲット(異なるモデル間でのアニメーション変換)において
実際にどのような計算をしているかを少しだけ説明します。


[初期仕様]

 初期行列が異なるので回転と移動に分ける方法を採った。
 移動は一番親の移動しか適用していない。

 まずローカルの姿勢を求める。
 localmat = worldmat * invparmat
 座標系の変換をする。
 curmat = invmodelinit * localmat * modelinit;
 ここでmodelinitとは設定される側の現在のworldmatである。

 curmatの回転成分rotmatを取り出して設定する。
 curmp->GetWorldMat() * rotmat;// * tramat;

 更に子供方向に向かってこの設定を再帰的に適用する。


[仕様修正その1]
 最初のフレームのポーズと形状側の最初のポーズが同じであっても
 最初のフレームにモーションが設定してある場合に、
 上記の方法ではうまくいかなかったので方法を変更した。

 姿勢をmodelの初期姿勢への演算としてあらわすことができれば解決すると考えた。
 つまり、
 bvhfirst0 * bvhanim * bvhpar = modelinit * bvhfirst0 * modelanim
 の式におけるmodelanimを求めればよい。

 modelanim = invbvhfirst0 * invmodelinit * (bvhfirst0 * bvhanim * bvhpar)
 = invbvhfirst0 * invmodelinit * bvhmat
 この式におけるmodelanimを求めた後、その回転を抽出してから
 modelmat = modelmat0 * modelanim
 を計算してモーションポイントにセットした。

 最初のフレームのポーズと形状側の最初の見かけ上のポーズが同じであれば
 最初のフレームにモーションが設定してあってもうまく変換できるようになった。

 実際のコードでは
 modelinitは初期状態のworldmatであり、bvhfirst0は初期状態のbvhmatであるから
 modelmat = modelmat0 * invbvhmat0 * invmodelmat0 * bvhmat
 ということである。


[仕様修正その2]
 モデル全体が一回転するような場合などに足がクロスしたりしてうまくいかなかった。
 コンバートのための行列にモデル全体の回転を考慮する必要があった。
 bvhのHipsの各フレームのworldmatをbvhfirstmpmatとすると
 modelmat = modelmat0 * invbvhfirsthipmat * invbvhmat0 * bvhfirsthipmat * invmodelmat0 * bvhmat
 のようになった。
 モデル全体が一回転しても初期姿勢のコンバートがうまくいくようになった。


という感じの数学的背景がMameBake3Dにはあります。

かなり説明をはしょりましたが
全てを説明するよりは読者の研究心や探求心を引き出したほうが良いと思いそうしました。


これらの仕様は実際にソースコードになってコンパイルすれば動く状態です。
動作確認もしています。
https://github.com/Ochakko/MameBake3D


ちょっと興味が湧きましたか?
君も化けちゃいなよ!




MameBake3Dにリグ機能が付いちゃいました[2016/06/02]


MameBake3Dの更新をしました。

遅ればせながらリグ機能というものを付けてみたら付いちゃいましたというお話。
動画を作りました。

こちらは設定方法と操作方法を12分ほどにまとめた動画です。
【使い方説明】 MameBake3D 【Rig機能が付いちゃいました】
https://youtu.be/gkqCJNsUsKE


こちらは操作画面と操作例をダイジェストで32秒の動画にしたものです。
MameBake3D CustomRig 動画。32秒。
https://youtu.be/o7UUAqea6io


アニメーションツールにおけるリグとは
複数ボーンを一度に簡単に操作することが出来る仕組みのことです。

複数のボーンの回転の仕方を登録しておいてそれ用のGUIコントロールをドラッグすることで
ポーズを付けます。

MameBake3Dのリグの特徴は
マウスのUV方向(横と縦)それぞれにボーンの回転を設定することが出来る点と
ユーザが自分でGUIでリグの設定をすることが可能な点です。

1つのボーンに対して10個のリグを自分で設定して登録することが出来ます。


MameBake3Dのリグの今後についてですが。
1、リグモードのオンオフをもっと簡素化したい、スムーズにしたいです。
 (現状、大きめのダイアログの表示非表示で切り替えています。)
2、現在は1つのRigによって、親子関係のあるボーン5つに対する操作が出来ます。
 手の指を開いたり閉じたりするためにはこれだけではできません。
 1本1本の指のためのRig5つをまとめるようなRigの存在が必要になります。
 つまり、RigのRigというかRigの連結というかそういう仕組みが必要になります。
 最近はノードというやり方が流行っているようですので、リグノードなんてのもありかもしれません。
 この辺の仕様を考えて実装したいです。


という感じです。



MameBake3Dの編集オプション[2016/04/24]


MameBake3Dの更新をしました。
もっといろいろ違うことを勉強しようと思っていたのですが
それってぶれてるっていうことかな?などと考えているうちに
気が付くとまた3Dプログラミングばかりしています。
どうしたものか、、、?

そして最近の成果を動画にしました。

「MameBake3D [編集オプションの説明]」動画。
https://youtu.be/cA7ceFJ2oLY


編集オプションの話です。
今までの編集方式ですと、複数フレームに対して、姿勢を決定するフレームの姿勢を適用していたので
複数フレームの間に体の向きが回転した場合に想定と異なる結果になっていました。

例えば、体が反対を向いていても姿勢決定フレームと同じ効果を適用したので
編集時に足を開かせても、体が反対を向いたときに足がクロスしていたのです。

この現象を名付けるとすれば、perfumeのCOSMIC EXPLORERのジャケ現象とでも言いましょうか。

そこで疑似的にローカル姿勢に変換して姿勢に適用するオプションを作りました。
PseudoLocal(疑似ローカル)オプションです。
日本語っぽく発音すると「スードローカル」です。
デフォルトでオンにしました。

姿勢を適用するボーンの親の姿勢を考慮して計算したので
体が回転したりしても編集時と近い見栄えの効果が出ます。

そんな感じのことを実演してみた動画です。

あ、あとはマウントステート(謎)についても言及しています。
まうんと すてーーーとぉーーー!!!



もう1つその前に作った動画も紹介しておきます。

「MameBake3D bvhそっと歩き+物理ツインテ」動画。20秒。
https://youtu.be/upwvM6yBGgw


こちらはbvhのモーションを取り込んでそれと物理シミュを組み合わせて再生したものです。
GitHubにアップしてあるファイルの中にtest12というサンプルがあるのですが
それを読み込んでF9を押したところです。
モーションスピードはスライダーでいじりました。
モーションスピードを速くしすぎると体が180度回るところでツインテールがプルプルするのですが
そういうときはスペースキーを押すとモーションを再生しながら物理がリセットされます。


こんな感じの経過です。



MameBake3Dの物理とRokDeBone2[2016/04/03]


MameBake3Dのデバッグが進んで、物理が扱いやすくなってきました。
かなり暴れやすかったというかデフォルトで暴れていたのを落ち着かせる設定をするのが手間だったのですが
現在はそれに比べると簡単に設定が出来るようになりました。
(とはいえ、やはり物理なのでパラメータが面倒ではあります。)

そんな感じでテストしてみた結果が以下の動画です。
https://youtu.be/7vLpVP0tEAA

だいぶまともになったと思います。
ソースはGitHubにpushしました。
https://github.com/Ochakko/MameBake3D


こうなってくるとbvhを適用したりするためのボーンの入ったFBXが必要になってきます。
そこでRokDeBone2の方のメンテナンスも再開しました。
RokDeBone2のbvhやFBXの修正をする予定です。

RokDeBone2もGitHubでオープンソースにしています。
https://github.com/Ochakko/RokDeBone2


RokDeBone2のサンプルを復活させたのですが
(著作権はちゃんと書いてあります)
サンプルをみていて涙がちょちょぎれました。

ああ、なんだかんだいっても、多くの人に支えられてきたのだなぁと、、、

ありがとうっ!!


追記 2016/04/03 pm8:30頃
RokDeBone2のFBX出力を改良してGitHubにpushしました。




ボーン構造の異なるFBXのモーションを適用する[2016/03/14]


おはようございます、就活中の化け猫おちゃっこです。
検索しているのですが、条件に合うところはちょっと遠い感じです。
ちょっと遠いくらいと思うかもしれませんが
日々のことになるので結構重要です。

近くの案件が出てくるまで遊んでいるのも何なので
MameBake3Dのバージョンアップをしました。

今回は
モデルのFBXにボーン構造の異なるFBXのモーションを適用する機能を付けました。
前回のbvhをFBXにする機能と組み合わせると
モデルのFBXに複数の異なるボーン構造のbvhモーションを適用できることになります。

特徴としては
ボーンの対応関係を設定するだけで良く、ボーンの位置調整をしなおさなくても良いところです。

変換方法にはちょっとこつがあるので
動画を作りました。

MameBake3D説明動画。モデルFBXにモーションFBXを適用する話。
https://youtu.be/ERaqn16GsU0


プログラムはオープンソースでの公開です。
https://github.com/Ochakko/MameBake3D




就活の習作の位置づけ[2016/02/21]


MameBake3DのVectorでの販売の取り下げ手続きをしました。
もうすぐページに反映されることでしょう。

perfumeのbvhを使用した時点で非商用縛りだったんだなぁ。
危うく売れるところでした。

今後のMameBake3Dなどのスタンスとしては
「就活のための習作」という感じにしようと思います。

GitHubにソースを公開していますが実行ファイルは含まれていません。

そんな習作ソフトでも興味があるという方は
info☆ochakkolab.moo.jp
(☆を@に変えてください)
までお問い合わせください。




隙間ツールとしてのMameBake3D[2016/02/17]


ここ数日、MameBake3Dのバージョンアップをしていました。
3Dツールと言えば、他にもたくさんあるし、すでに世間に認識されているものが多いです。
そこで、それらの隙間を狙ったツールとしてMameBake3Dを考えています。

どこが隙間かと言うと
ベイク済のFBXの編集関係に特化しようということです。

モーション作成というよりもモーション編集に重きを置きます。
物理関係の機能もあります。

ということで、bvhは読めてFBXに変換出来たほうが良いので
その機能を修正しました。


次に紹介する動画はMameBake3DでbvhをFBXに変換する方法です。
新規に作成した動画です。

[ MameBake3Dの使い方。BVHからFBXへの変換の話。]
オイラー角出力を抜本的に見直した結果、モーション再現率がかなり上昇しました。
perfumeの3人が踊る動画。
https://youtu.be/ONnB1jDVi6k


そしてもう1つの動画は、ベイク済のモーションの編集方法について解説しています。
この動画は過去に作った動画を復活させたものです。

[MameBake3Dの使い方。ベイクの話。]
ベイク済とは。ベイク済モーションの編集方法について。
https://youtu.be/Z0UacTlXs7w


だいたいイメージはつかめていただけましたでしょうか。
まだ物理の機能もあるのですが。


こんな感じのバージョンアップと動画作成などをしていました。

そこに正義はあるのかって??
猫は隙間が好きでBakeますから、いいんですっ!!


2016/02/17 化け猫おちゃっこ



MameBake3Dを新しいメタセコに対応させました[2016/02/09]


いつの間にか、新しいメタセコイアのFBXをMameBake3Dが読めなくなっていたので
修正してアップしました。オープンソースです。

https://github.com/Ochakko/MameBake3D

メタセコイアでFBX出力をする前に面の三角化をしてください。
ボーンを入れ終わったらボーンのダイアログのポーズ出力メニューを実行してください。
FBX出力時のオプションは、スムージンググループをオフにし、バージョンは2013にしてください。

ソースのソリューションはVisualStudio2013で作成しました。
外部ライブラリの関係で、VCランタイムのバージョンは2010です。

久しぶりに半日 3Dをやりました。
まだ32ビットアプリのままです。


追記:2016/02/10
GitHubにアップしたソースが足りなかったことに気が付いて先ほどアップしなおしました。
何か赤い字が出ていたのですがcommitに-aをつけていれば大丈夫と思っていました。
ちゃんんとaddしてからcommitしました。
DX90c以外のファイル(ビルド用の)はそろっているはずです。
(実行するためにはFBXSDKをインストールして、DX90cのSDKを所定位置にコピーする必要はあります。
さらに、GLUT32.dllをexeと同じディレクトリに置きます。)



Wow64はエミュ扱い[2015/11/04]


Win64を少し調べました。
64ビットOSで32ビットアプリが動くのはWow64という32ビットアプリを動かす仕組みがあるからです。
Wow64って名前に付いているディレクトリがあるのでこれは知っていました。

しかし、Wow64は64ビットOSにおいて 32ビットアプリを「エミュレーション」で動かすための仕組み
だったのです。
つまり、64ビットOSにとって
32ビットアプリはすでにネイティブとは言いがたく、エミュで動いている存在でした。

ショーーーーック!!

あんまり64ビットに移行する気がしてなかったのですが
これを知って64ビットに移行する気が出てきました。

だって、エミュだってよぉー。
やっぱりいくらか遅いんじゃないかしら??

ということで
まだ調査は続きそうです。

とりあえず
64ビットOSでもintやlongは32ビットであり、ポインタやハンドルが64ビットになる
ということが分かりました。
32ビットから64ビットに移行しやすいような配慮だそうです。

これなら設定しなおしてコンパイルし直すだけで良いものも結構ありそうです。

しかし、RokDeBone2は 確か ポインタをunsigned longにキャストしていた箇所が数か所あったような気がします。
まあ それは いいとして。

新しく作るものは64ビットにしよう!!



Win64[2015/11/04]


Win32が使えなくなる日が来るのかは知りませんが
時代の流れとして64ビット方向に進んでいるので
一応対応しようということで、Win64を調べます。

調べる前の印象としては
ものすごい大きなファイルやメモリを扱わないのであればWin32で良い気もするのですが。

ビッグデータが流行ですし
64ビット化して実行速度が速くなれば もうけもん ってイメージ。

とりあえず調べ始めようと思います。












店舗イメージ