忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

"Orcas"とC# 3.0 その3 暗黙的に型付けされたローカル変数

C# 3.0ではローカル変数の宣言時に型を指定しなくて良いのだそうです。
class Program
{
    static void Main()
    {
        var id = 1;  //Int32
        System.Console.WriteLine(id);  //1
    }
}

これは、コンパイラが初期化の仕方から自動的に型を推定してくれるからで、
推定しようがない場合はコンパイルエラーになります。
(別に動的型付け言語になったわけではありません)

Compile Error!
class Program
{
    static void Main()
    {
        var id;
        id = 1;
        System.Console.WriteLine(id);
    }
}

これによって何が良くなったかと言うと、1つには多分変更のしやすさでしょう。
コードコンプリートにあったように、IDを数から文字列に変更したくなった場合、
これだと変更するのは一ヶ所で済みます。
(この例よりも複雑な場合でも、少なくとも変更すべき場所が減るはずです)

class Program
{
    static void Main()
    {
        var id = "1";  //String
        System.Console.WriteLine(id);  //1
    }
}

もし明示的に型を指定してしまえば、その部分もintから
stringへ変更しなければなりません。
暗黙的に型付けしてしまえばその必要はないということです。
より変更しやすくなった、アジャイル向けな機能といったところでしょうか。

もう少し重要な理由としてC# 3.0の匿名型が関係しているのでしょう。
using System;

class Program
{
    static void Main()
    {
        var book = new { 
           Name = "利己的な遺伝子",
           Price = 2940 };
        Console.WriteLine("{0} ¥{1}", book.Name, book.Price);
    }
}

驚くべきことに型を即興で作ることが出来ます。
そしてその型には名前がありません。
(もちろん共通中間言語レベルではあるようですが)

このようなことをすると、varが必要不可欠になります。
型の名前がわからないので指定しようが無いからです。

この匿名型はLinqで結果を手っ取り早くまとめるのに使われるようです。

拍手[0回]

PR

3D酔いの原因

3D酔いとは?

3Dゲームをしていると乗り物酔いのように気分が悪くなり吐き気を催すことがあります。
これを3D酔いといいます。

例えばマイクロソフトのシューティングゲーム、Halo(体験版はこちら)は
面白いゲームですが3D酔いでその面白さが半分台無しになっています。

ワートホグ(車のこと)に乗れば5分も経たずに気分が悪くなってきます。
視点が揺さぶられるわカメラが障害物をすいすい(この「すいすい」がいけません!)避けるわで
すぐにゲームを続けたい気持ちとさっさとトイレに
駆け込みたくなる気持ちの間でアンビバレンツに陥ります。
(まぁしばらくすると落ち着くのですが)
3D酔いの原因

この3D酔いの詳しい原因はよくわかっていませんが、
大体の原因は目から入る情報と三半規管から入る情報のミスマッチであることは間違いないようです。
(こんなことがわかっても3D酔い対策はほとんど出来ないのであまり意味の無い話です。)

つまり、目からは「自分は動いている」と言う情報が来るのに
三半規管からは「自分は止まっている」と言う情報が来るので
脳が混乱して気分が悪くなったり、吐き気がするというわけです。

これはちょうど乗り物酔いの逆で、乗り物酔いの場合は
目からは「自分は止まっている」という情報が来るのに
三半規管からは「自分は動いている」と言う情報が来るわけです。
(ですから乗り物酔いになったときは外の風景を眺めてこの情報の食い違いを解消するのです。)
しかしこれは「情報のミスマッチ」が酔いを引き起こすと言う点で同じです。

また似たような症状として「宇宙酔い」があります。
宇宙酔いというのは宇宙の無重力空間でやはり気分が悪くなり吐き気を催してしまう症状のことで、
現在スペースシャトルの乗組員のだいたい60%が最初のフライトで宇宙酔いに悩まされます。
この原因はおそらく重力が打ち消されているからで、
実際宇宙飛行士が特に吐き気に襲われるのは地上の、
重力のある環境ではありえないものを見たときです。
(例えば同僚の宇宙飛行士が頭をにしていたりとか)
これもやはり目と三半規管のミスマッチが引き起こすものです。

このことから考えて、乗り物酔いにしろ3D酔いにしろ宇宙酔いにしろ全て
目と三半規管から脳に入ってくる情報のミスマッチ」が原因であると考えてよさそうです。



ダーウィン主義的理由

情報のミスマッチがなぜ吐き気をもたらすのでしょう?

一般には単に「それは脳が混乱するからだ」と言われますが、
オックスフォード大学の心理学者のマイケル・トリーズマンは
驚くべき、しかし説得力を持った別の説を提唱しています。

その説によると、「脳はわざと気分が悪くなり吐こうとしている」のです。
一見ありえなさそうに思えますがそうでもありません。
風邪を引いたときに高い熱が出るのは体内の病原体を殺すためです。
同様に、乗り物酔いになり、吐き気がするのにもきちんとした理由があるという理屈です。

この説は次のように進みます。
動物が何かを吐くのは、毒があるものを食べてしまったときに体からそれを排除するためです。
吐き気と言うのは、毒を食べてしまったときにその個体を操って毒を排除するためのコマンドだと言うわけです。
・・・そして毒と言うのは、たいてい神経に働き、神経系を狂わせます。
ということは逆に言って、そのコマンドを発動すべきタイミングは
神経系が何かおかしくなったときに違いありません。

しかし、「何かおかしくなったとき」とは具体的にどう定義すればいいのでしょう?
自然淘汰は基本的にXPでいう仮実装しかしないやっつけプログラマーなのでこう「考え」ます:
「脳のいろんな部分の重力に関する意見を聞けばいい。
重力が無くなったり変わったりすることなんてありえないからいい指標になる。
それでどいつかの意見が食い違っていたらこれはきっと神経系がやられてる。」
よし!これでとりあえず動くでしょう。

かくして、脳の内部に存在している重力(というか加速度)をあつかう
モジュールのいずれかの間で情報の食い違いが発生すると
神経系が毒で狂っていると認識し、「吐き気コマンド」を発行することになりました。

さて、そのような生存機械がもし車の後部座席に乗って本を読んだり、
Haloをプレイしたり、スペースシャトルに乗って無重量状態を体験したらどうなるでしょう?

これがこの説のエッセンスです。
酔いというのは、限られた環境では上手く動く防衛機能が暴走するすることによって起こる、
花粉症のようなものだったのです。

教訓

このことから何が言えるでしょうか。
具体的には、3D酔いを防ぐために何が出来るでしょう?

理論上、神経系がおかしくなったと認識されなければ3D酔いにはならないはずです。
しかしそうするには目から入る情報と三半規管から入る情報を一致させなければなりません。
(いや、目と三半規管に限定するのは危険かもしれません。
脳の中でミスマッチを生むものならなんだっていいはずです)


かといって完全に一致させることなど不可能です。
ゲームをプレイする人は普通いすの上に座って静止しています。
画面が動けば即アウトです。
そんなゲームはちっとも楽しくありません。

もっとも実際にはそんなに厳しくなくて、ある程度動きは許容されるはずです。
というのも自然状態では脳のモジュール間のある程度の誤差はつきものだからです。
少し違ったくらいで毎回吐いていたら体力が持ちません。逆効果です。
おそらく誤差がある閾値をこえて初めて「吐き気コマンド」が発動するのでしょう。

ということはゲームの画面をある程度「止まっている」ように見せればいいはずです。
ある程度、画面を非現実的にして、脳がその情報をあまり信じないようにすればいいかもしれません!
ゲーム画面の視野の角度を小さくして臨場感をあえて抑えると言うのが手です。
いやでも角度が小さすぎてもそれが何らかのミスマッチを生み出し逆効果になるかもしれませんね・・・。
(そして、理論を弄って出る結論としてよくあることですが、こんなことは最初からわかっています!)

カメラをごちゃごちゃ動かさないというのもいいかもしれません。
あんまり動かしすぎると脳内のミスマッチが大きくなる可能性があります。

あるいは逆にカメラワークを上手くすることによって
脳が画面からの情報を重視しないように出来るかもしれません。
もちろんその条件はわかりませんし、第一こんなことが出来るかどうかもわかりませんが。

ソフトウェアからできるのはこのくらいが限界でしょう。
しかしハードウェアを使ってもいいのなら、動く椅子なり
三半規管に電極をつないで動いているような信号を出力させるなり
方法はいくらでもあるはずです。

つまり結論は、「人類はさっさと電脳を実用化させて3D酔いを克服すべきだ」と言うことですね!


 


拍手[0回]


ヤラセ・ドキュメンタリー!

テレビ番組にはウソがつきものです。

そしてそれは内容が正確であるべき
科学ドキュメンタリーであっても例外ではありません。
残念なことに、たいてい変な演出や脚色がまじってしまうものです。


昨日、それを実感させることがありました。
十数年前(1990年くらい?)にあったNHKの
チンパンジーが石を道具として使うところを
はじめてテレビに捉えたドキュメンタリーを見たのですが、
珍しい体験として、そのドキュメンタリーを作る現場に立ち会った人が
合間合間に解説してくれたのです。

といってもNHKの方ではなくて、その番組が追っていた
3人の霊長類を研究していたグループ(?)の一人だったのですが。threeChimpResearchers.JPG
(もう少し詳しく言うと、一人は京都大学の杉山幸丸教授で、
後の二人は当時大学院生でした。
ぼくが話を聞いたのは当時大学院生だった人です)


さて、そのドキュメンタリーというのは
チンパンジーが石を使って植物の実を割るのを
NHKが初めてカメラに収めたものだそうで、
大体全部で一時間くらいのものでした。

まず杉山教授と二人の大学院生、
そしてNHKのスタッフ達は西アフリカのギニア共和国へ向かいました。
(杉山教授はそれまでに何回もそこを訪れていたそうです)
ギニアはフランスから独立する際にけんかをしてしまい
援助を打ち切られインフラがメチャクチャになり、
つまりチンパンジーのいるところまで移動するのに苦労します。
ギニアの中では主に車(フランスと仲直りしたときに寄付してもらったタクシー)を使って移動するのですが
移動の途中で橋のかかっていない川があったりして
そこではいかだの上に車を乗っけて移動します。

そして実際、テレビにはそのいかだの場面が映るのですが
そこで元大学院生の人がビデオを一時停止してこう言います:
「じつはこれ、帰りのなんです」
つまり、帰りに川を渡ったシーンを
あたかも行きのシーンであるかのように編集したということです。
番組はまだ始まったばかりだというのに、幸先の良すぎるスタートです

そして一行はチンパンジーのいるらしいところに着きます。
チンパンジーが住めるだけ大きい森が近くにあるところで、
現地の人が市場を開いています。
そして教授が車の中から、シャツに土ぼこりをつけて、
いかにも「長い間車の中で窮屈だったー」というかんじで出てくるのですが
そこでも元大学院生の人が一時停止してこう言います:
「じつはこれ、別の日なんです」
つまり・・・教授が車の中から出てきたシーンは
到着した日に撮ったものではないということです。
到着してから日がたったときに
タイミングを見計らって撮ったものなのだそうです。

「タイミングを見計らって」というのはどういうことかというと、
実は市場は毎日やっているのではなくて決まったときにしかやっていなくて、
そのにぎやかな日を選んで撮影をしたということです。
教授は演技をしていたわけですね。
ちなみにシャツについていた土ぼこりは撮影前にみんなで協力してわざと付けたそうです。
憎いことをやってくれます!

到着した後、3人とスタッフ達は森へ入ります。
3人はトランシーバーで互いに連絡を取り合いながら
森の中へ別々に入っていきます。
チンパンジーは森の中で簡単に見つけられるわけではないので
別行動は当たり前、とくにおかしくは無いシーンに思えたのですが、
元大学院生の人の一時停止です。

そのシーンはヤ・・・演出だったそうです。

NHKに頼まれて3人とも演技をしていたのだそうです。
そういわれると心なしか、「こちら***、こちら***、チンパンジーは・・・」
というセリフがウソくさく聞こえます。
まぁチンパンジーの生態についてウソをついているわけではないので
深刻な問題というわけでは・・・ないでしょう。

しばらくすると教授がチンパンジーのいた痕跡を見つけます。
しょうがに似た植物がかじられて捨ててあったのです。
さすが教授!
しかし本当は、これを見つけたのは元大学院生の、今解説をしてくれている人だったのです。
まぁたしかに・・・(当時は)無名の大学院生が見つけたという風に撮るのよりも
教授が見つけたということにする方が華があるに違いありません。
NHKはその点をよく心得ているということですね。

さて、そのしょうがに似た植物を教授はまじまじと見つめます。
何をするのかと思えばパクリと食べました。
チンパンジーと間接キスをするなんて・・・!
それとも齧られていないところを食べたのか!?
いずれにせよ、病原体と不必要に接触することになるはずです。
そのような危険を冒してまで、チンパンジーの生態に迫ろうとする
教授の研究者魂には頭が上がりません。
・・・と思っていたら、これは演・・・出なのだそうです。
よくよく考えてみるとこれは当たり前で、
何度も研究で来ているところでわざわざチンパンジーの
食べ物の味を確認する必要は無いというわけです。
(気になるのなら一番最初に来たときに確認しているはずですからね)

その後番組はチンパンジーの生態を追っていきます。
ここから先はぼくの時系列の記憶が怪しくなるので
おもしろい(とぼくが感じた)ところを表にして書いておきます。
(順番は入れ替わっているかもしれません)

 番組で放送された内容  その真相
 チンパンジーの一人(匹?)が枝をへし折って一行に投げつけてきます。(チンパンジーは腕の力が力が人間の5倍はあるので、直径5センチはある、かなり太い枝でした。)
しかし運良く誰にも当たらずにその枝は地面に落ちます。
 投げつけてくるところまでは本物ですが、その枝が地面に落ちるところはスタッフが投げなおして撮りました。
よくよく考えてみるとこれは当たり前で、いきなり枝が投げられたのにそれが地面に落ちるシーンをカメラで上手く撮るのは難しいわけです。
 チンパンジーが木の上にいて動き回っているシーンが続きます。  そのシーンはツギハギでした。別の時に撮ったものをつなぎ合わせたものだったのです。
よくよく落ち着いて観察すればそれはわかることで、木の葉っぱの種類が全然違います。
 教授がチンパンジーが枝と葉っぱで作ったベッド(地上から20メートルくらい!)に座ってどんな具合か確かめます。  スタッフからたのまれてやったそうです。
これもやはり当たり前で、今まで何度も来ているわけですから、わざわざ確かめるまでも無いということです。
 森と森を分ける、木の生えていない道のようなところ(といっても舗装されているわけではないですし、幅も数メートル程度です)をチンパンジー達がたくさん横切ります。  別の日に取ったやつをつなぎ合わせています。そのため、同じ個体が何度も横切ったりしています。

他にも、チンパンジーのある習性(たぶん、肉食のことだったと思う)
をテレビカメラに収めるために、
わざとそれがおきやすいような状況(獲物を人間の方で用意して・・・だったと思う)
を作ったりもしたそうです。
教授はこれじゃあインチキじゃないかと渋ったそうですが、
プロデューサーの理屈では
これはチンパンジーの実際の行動なのでokなのだそうです。
そうかもしれません。
しかし、やはり何か腑に落ちないところがあります。


そして最後に、チンパンジー達の石を使った木の実割りを撮って終わりでした。


教訓

このことから何が学べるでしょうか?
「これだからメディアは信用できない。」、
「こんなに簡単にだまされるなんて大衆はバカだ。ほんの少し注意すれば見破れるのに」
というのもひとつの考え方です。

しかしここでは別の見方をしてみようと思います。
もしかすると人がこうやってだまされるのは
ある意味仕方の無いことなのかもしれません。
ぼくが言っているのは、だからあきらめろとかそういうことではなく、
これはもしかすると人間の「フレーム問題」なのかもしれないということです。

この番組のイカサ・・・演出は注意深く見れば、
あるいは考えれば、見破れるものがほとんどです。
しかし、大半の人はそれを見破れません。
なぜでしょう?
これはおそらく人間はそのように出来ていないからです。
あらかじめ情報を与えられない限り、
こういったドキュメンタリーを「注意深く見たり、考えたり」しないのです。

もし、人間が見聞き体験すること全てに対して「注意深く」なれば、
それにはかなり副作用があるはずです。
「注意深く」なることにはもちろん利点もありますが、同時にコストもあります。
あることに「注意深く」なれば必然的にほかの事が考えられなくなり、
それが重大なことだったとすれば、
そしてそれが緊急のものだったとすれば、
物事はに悪い方向に進みます。

それ以外にも「注意深く」なることそのもののコストもあるでしょう。
人間の脳はかなりエネルギーの消費の激しい臓器だからです。
どのようなことに対しても「注意深く」なれば採算が合わなくなります。
そのため、おそらく人間は限られたものに対してのみ「注意深く」なると思われます。
(この「限られたもの」とは具体的にどのようなものかはわかりませんが、
おそらく「現在自分が扱っているものに概念的に近いもの」といったところでしょう。)

これが何を意味しているかというと、
単に「物を見聞きするときはもっと注意深く!」と人に言うだけでは、
逆効果になりかねないということです。
コストが利益を上回る危険性があります。
というか、まず確実に上回るでしょう。
そして現在の人工知能の研究がぶち当たっている壁と同じものに
行く先を阻まれることになるのです。
そうなれば忠告された人は、
なんだか上手くいっていないことに本能的に気付き
(おそらくこの機能は「飽きる」という感情によって実装されています)、
やがてやめてしまうでしょう。

ただ単に「見聞きしたものを疑え」というだけでは上手くいかないはずです。
ここには人間の能力の限界があるのかもしれないのです。

拍手[0回]


Java OpenGL(JOGL)インストール

Javaで3Dをやる手段の一つにJava OpenGL(JOGL)があります。
先日インストールしたので方法をメモしておきます。

インストールはここ(joglのサイト)から

ページの下の方にCurrently nightly buildというのがあり、そこにいろんなプラットフォーム用のファイルがあるのでそこから適切なやつをダウンロードします。
普通のWindowsなら
"jogl-*.*.*-pre-********-windows-i586.zip"
というやつでいいでしょう。

展開すると中にlibディレクトリがあり、dllやjarファイルが入っています。

gluegen-rt.dll,
 jogl.dll,
 jogl_awt.dll,
 jogl_cg.dll,

 gluegen-rt.jar, 
jogl.jar

dllファイルをJavaのbinディレクトリに、
jarファイルをlib\extディレクトリの中に入れるとインストールは完了するようです。

拍手[2回]



        
  • 1
  • 2
  • 3