ヒマをみつけてWeb開発
その場の思い付きを、ヒマをみつけてWebサイトにしてみるブログ

ARの力でVRをカオスにする、カソウセカイカメラをリリースしました

Friday, 3 August 2012 02:18 by sabro

仮想世界カメラ

世の中はいま、アクセルワールド、SAOみたいな仮想世界アニメが好調で、先日はサマーウォーズのテレビ放送なんかもありましたが、セカンドライフの話題はまったくありませんでしたね。そんなちょっと忘れられ気味なセカンドライフ向けの新サービスをリリースしたので紹介させていただきます。

カソウセカイカメラ
http://www.kasousekaicamera.com/

ARとVRの先端技術を組み合わせれば、超最先端になるはずという思い込みを出発点に、仮想世界の中で拡張現実ができるサービスになってます。詳しくは、発表会で使った資料をみてもらうとわかりやすいと思います。

 

 

このブログはウチの技術ブログという位置づけなので、内部で使用している技術をちょっと紹介( ̄∇  ̄ )

仮想世界向け独自GeoHash

緯度、経度の情報をハッシュ化し、位置のインデックスを作るGeoHashという技術があります。当然、カソウセカイカメラのコメントインデックスにも応用できそうなのですが、あれは緯度、経度が有限という前提なので、無限に広がる仮想世界ではうまく使えませんでした。そこで、4バイト整数の最大値2,147,483,647メートル四方をインデックスできる、独自のGeoHashを作成しました。といっても、ハッシュ自体の作り方は全く同じです。個人的にはGPSにしろGeoHashにしろ、人が住むのは地球だけという狭い視野で作られているので、月面基地、スペースコロニー、仮想世界など、人が活動するあらゆる場所から一意に特定できる新しい仕組みが必要になるときが来るとおもいます。

3次元空間の位置を2D画面にマッピングする透視投影変換

3次元空間上にあるコメントを、HUDの2次元座標に変換するのに透視投影変換を使いました。ゲームではおなじみのアルゴリズムですね。ただ、ゲーム制作の場合はライブラリがこのあたりを受け持ってくれることが多いみたいですが、セカンドライフのスクリプトLSLにはそんな機能はもちろんないので、ローレベルなところから実装が必要で大変でした。

技術的に面白く、内容もそこそこ面白い、カソウセカイカメラをよろしくおねがいします( ̄∇  ̄ )

セカンドライフ向けクエスト作成サービス「クエストマイスター」をリリースしました

Saturday, 6 August 2011 20:29 by sabro

久々の更新です。

今だにセカンドライフで活動しているのですが、今回、セカンドライフ向けのクエスト作成サービスを作ったので紹介させていただきます。

クエストマイスター
http://questmeister.com/

QuestMeister

クエスト作成

クエストマイスターは、Web上でクエストの情報を入力して、インワールドでミスティックストーンというオブジェクトを設置するだけでクエストの作成ができます。全くスキルが必要ないので誰でもクエストを作成でき、公開してわずか数日ですが、すでにクエストを色々作っていただいてます。

クエストプレイ

プレイする場合は、ミスティックストーンを探しだして、特定のキーワードをチャットするなどしてクリア条件をみたす必要があります。クリア条件は、セカンドライフのLSLスクリプトでプログラム的に設定可能なので拡張性が大きく、工夫次第で面白いものも作れるようになってます。

世間ではセカンドライフの評価は相変わらず低いですが、Webサービスと連携することで大きく可能性は広がると思いますよ。みなさんは、どう思われますか( ̄∇  ̄ )

Tags:   , ,
Categories:   Second Life
Actions:   Permalink | Comments (15) | Comment RSSRSS comment feed

Flashのお絵かきツールでアンチエイリアスをOFFにする

Sunday, 1 November 2009 14:05 by sabro

先日、Flashのお絵かきツールで描いた絵を、セカンドライフのボードに表示できるSLらくがきボードというのをリリースしました。実際のお絵かきツールは、こことかで見れます。

このツールではアンチエイリアスのON、OFFが可能になっていますが、実は先に実現可能かどうかは考えたわけではなく、そのうち出来るようにするからーとアナウンスして、とりあえずリリースしてしまったものなのです。
アンチエイリアス
後から調べたところ、ニコニコ大百科のお絵カキコや、Sumo Paintなどでも、アンチエイリアスOFFは実装されてないことを知って、出来ないのかなと慌てふためいたのですが、色々試したところなんとか出来たので、そのやり方を書いてみようと思います。

本格的な説明に行く前に、私が作ったお絵かきツールのキャンバスの構造の説明から。キャンバスは、もろもろの理由により以下のようになっています。
キャンバス
これは、5枚のレイヤーがあって、3枚目が選択されている場合の図です。3枚目の前に描画用のレイヤーがあり、ここへ描いた線や図形などを実際のレイヤーに、BitmapData.drawメソッドで転写する仕組みになっています。

Bitmap.drawメソッドの引数はいくつかありますが、ColorTransformクラスを渡すことで転写時の色合いや透明度を変化させることができます。ColorTransformのフィールドには、alphaOffsetという項目があり、これを255に設定すれば転写時の非透明度は常に最大になります。最初は、これでいいんじゃねと思ったんですけど、なぜかアンチエイリアスの効いた線になってしまいました( ̄□  ̄ ||

// 実際のレイヤーキャンバスのImageコントロールを取得
var image:Image = getImage();

// ImageコントロールからBitmapDataを取得
var bitmap:BitmapData = image.source.bitmapData;

// Bitmapへ描画用レイヤーの内容を転写
bitmap.draw(getDrawLayer(), 
			null, 
			new ColorTransform(1, 1, 1, 1, 0, 0, 0, 255),	// 透明Offset255
			null, 
			null, 
			false);

で、試行錯誤して辿り着いた結果が次のヤツです。まず一時的なBitmapDataへ描画用レイヤーの内容を転写し、その一時BitmapDataを実際のレイヤーキャンパスへ再転写しています。これでなぜかうまくいきました( ̄∇  ̄ )

// 一時ビットマップを作成
var tmpBitmapData:BitmapData = new BitmapData(width, 
											  height, 
											  true, 
											  0x00FFFFFF);
			
// 描画レイヤーの内容を一時ビットマップへ転写 
tmpBitmapData.draw(getDrawLayer(),
				   null, 
				   null, 
				   null, 
				   null, 
				   false);

// 実際のレイヤーキャンバスのImageコントロールを取得
var image:Image = getImage();

// ImageコントロールからBitmapDataを取得
var bitmap:BitmapData = image.source.bitmapData;

// Bitmapへ一時BitmapDataの内容を転写
bitmap.draw(tmpBitmapData, 
			null, 
			new ColorTransform(1, 1, 1, 1, 0, 0, 0, 255),	// 透明Offset255
			null, 
			null, 
			false);

仕組みとかどうなっているのかは、よく分かりません。描画用レイヤーは実際に画面に描画されるので、その際になにか特別な処理でもされているんでしょうか?

まあ、とにかくアンチエイリアスを切りたいときは、一時BitmapDataに転写しとこうってことですね。しかし、Flashでお絵かきツールを作ってる人って日本で100人いるのかな? とてつもなくニッチなネタになってしまった気がします。

LSLのSyntaxHighlighter Plugin

Thursday, 24 September 2009 09:15 by sabro

SyntaxHighlighterという、ソースコード色付けツールがありますが、実は、さぶろーはそれのLSLプラグインを作ってます。今回そのプラグインをまとめたページを作った方がいまして、LSLプラグインも紹介していただけるとのことなので、ここに使い方を書いてみます。

List of available brushes for Gorbatchev’s SyntaxHighligher
http://www.undermyhat.org/blog/2009/09/list-of-brushes-syntaxhighligher/

LSL用のプラグインは、ここにあります。これは、Google Page Creator上に置いてあるのですが、ざっと規約を読んだところ、おそらく直接参照しちゃっても大丈夫だと思います(勘違いしてたら教えてください)。
for ver.1.5 http://public.webkai.net/shBrushLsl.js
for ver.2.0 http://public.webkai.net/shBrushLsl2.0.js

 

ver 2.0の設定

1、Webページのヘッダーに、以下を追記します。alexgorbatchev.comというのは公式のホスティング先なので、直接参照しちゃって大丈夫です。
<head>
・・・
・・・
<!-- ▼追加部分▼ -->
<link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" />  <link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" />  <script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js"></script>  <script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/current/scripts/shLegacy.js"></script>  <script type="text/javascript" src="http://public.webkai.net/shBrushLsl2.0.js"></script> <script type="text/javascript">  window.onload = function () { SyntaxHighlighter.config.stripBrs=true; //←改行無視が不要なら消す SyntaxHighlighter.config.clipboardSwf = 'http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf'; SyntaxHighlighter.all(); dp.SyntaxHighlighter.HighlightAll('code'); } </script> 
<!-- ▲追加部分▲ -->
</head>

2、LSLをブログに書き、preタグで囲みます。
<pre name="code" class="brush: lsl">
/*
   マルチラインコメント
*/

// 1行コメント

string single = "文字列";
string multi  = "マルチライン
                 文字列";

default
{
    state_entry()
    {
        if (TRUE) {
            llSay(0, "テスト");
        }
    }
}
</pre>

 

 

ver 1.5の設定

1、Webページのヘッダーに、以下を追記します。
<head>
・・・
・・・
<!-- ▼追加部分▼ -->
<link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/1.5.1/styles/SyntaxHighlighter.css" /> <script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/1.5.1/scripts/shCore.js"></script>  <script type="text/javascript" src="http://public.webkai.net/shBrushLsl.js"></script> <script type="text/javascript">  window.onload = function () { dp.SyntaxHighlighter.BloggerMode(); //←不要なら消す dp.SyntaxHighlighter.ClipboardSwf = 'http://alexgorbatchev.com/pub/sh/1.5.1/scripts/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code'); } </script> 
<!-- ▲追加部分▲ -->
</head>

2、LSLをブログに書き、preタグで囲みます。
<pre name="code" class="lsl">
default
{
    state_entry()
    {
        llSay(0, "ご存じ、ないのですか!? これがSyntaxHighlighterです!!");
    }
}
</pre>

 

以上です( ̄∇  ̄ ) LSLをブログに書く方は、ぜひ使ってみてください。

セカンドライフ連動Webサービス「クリエモン」の先行テスト版リリースしました

Thursday, 11 December 2008 15:50 by sabro

3月くらいからコツコツと、.NETで開発してきたセカンドライフ連動型Webサービス「クリエモン」の先行テスト版をリリースしました。

クリエモンは、セカンドライフで配布しているアバターの表情を、Webサイト上でCGMする、そこそこ画期的なサービスです。ユーザが日々アップロードする「目、鼻、口、その他装飾」のパーツを組み合わせて表情を作り、それをセカンドライフからロードして使います。

クリエモン
http://www.creamon.net/

[トップページ]

[マイページ]

アバターはちょっとしたハックで日本人向けのアニメ調に仕上げました。パッと見、セカンドライフに見えないのではないでしょうか。右上のパーツに表情がロードされてるのも確認できると思います。

[セカンドライフ]

アバター配布場所
nippori(155/166/23)

将来的に有料オプションはつけるかもですが、ずっと無料でも使えます。まずは、気軽に試してみてください。

Tags:   , ,
Categories:   Second Life
Actions:   Permalink | Comments (2) | Comment RSSRSS comment feed

メニーコアって使い道あんの? → メタバースに使えばいいんじゃないという話

Monday, 26 November 2007 05:36 by sabro

CPUをメニーコアにして、いったい何に使うの? っていう記事が、いたるところに見られるけどメタバースに使えばいいんじゃないかとふと思った。

SecondLifeやってても、サーバ側は明らかにマシン性能足りてないわけで、メニーコアのサーバが一般化してくれると、メタバースにとっては結構追い風になるんじゃないかなあ。

クライアント側も、1コアのCPUでメタバースはつらい状況だし、メニーコアにすれば快適さが増すかもしれない。

まあ、メモリとのやり取りやネットワークも高速化しないと効果も半減だろうけど。特にネットワークの高速化は、今の100Mbpsから1桁上げようと思うと、かなり時間がかかるだろうけどね。

Tags:  
Categories:   Second Life
Actions:   Permalink | Comments (2) | Comment RSSRSS comment feed