2008年4月 6日 (日)

Second Life * Half-Life = ?

最近Half-Life 2というゲームを遊んだのですが、3年以上も前のゲームなのにとても綺麗でした。Half-Life 2やSecond Lifeは、シェーダという機能を使って綺麗な陰影や海、空などを作っています。
そこで、Half-Life 2のシェーダをSecond Lifeに持ってくると綺麗になるのかなと思い、Half-Life 2で使われている方法の一部を作ってみました。試される方は、以下のファイルをダウンロードしてください。

シェーダファイル+今回のシェーダ用の空ファイル sl_hl_shader.zip

※ 2008年 4月 7日更新 : オブジェクトに色が設定されている場合の処理を間違えていたので修正しました。

※ 2008年 7月 5日更新 : ちまちまとした変更を加えました。多少見ためが変わっていると思います。

お遊びのつもりで作ったのですが、使ってくださっている方もいらっしゃるようです。ありがとうございます。

 

主な変更は次の3つになります。

露光量の調節

Second Lifeは、Atmospheric Shaderをオンにしたときの露光量がかなり高めに設定されます。コントラストが上がり綺麗に見える反面、下の画像のように、白飛びしやすくなると言う欠点が存在します。そこで、今回はSkyEditorで調節できるように変更しました。
変更するにはHaze Horizon(空と遠景の露光)をいじってください。0.00の時はWindLight導入前のViewerの露光量、1.00の時はWindLightの露光量になります。また、この変更を加えたためプリセットの空では暗くなってしまいます。そこで、空のファイルも同梱しました。
Exposure

ハーフランバートモデル

Half-Life 2では、一般的な陰影よりも柔らかい陰影にするためにハーフランバートモデルを導入しています。下の画像を見ると柔らかくと言うよりも、明るめの陰影になっていることが分かります。
Half_lambert

フレネル反射

フレネル反射は、簡単に言うと輪郭周辺が明るくなる処理です。下の画像を見ると、輪郭周辺が明るくなっていることが分かります。かなり大ざっぱな処理にしてしまったのですが、思ったより良い効果が出ました。
fresnel

簡単に作れる部分だけですが、ちょっとHalf-Life 2みたいかな?かなり怪しいです(笑)。

| | コメント (2) | トラックバック (0)

2008年2月 1日 (金)

GraphiteでいろんなオブジェクトをSculpted Primに変換(2)

前回に引き続き、Graphiteを使ってSculpted Primを作るお話です。前回、説明すると書いて説明しなかった「なぜ、オブジェクトに穴を空ける必要があるのか」の説明をします。さらに今回は、ちょっとだけ手間をかけて綺麗なUV展開をしてみます。

まず、なぜ穴を空けるのかというと、穴の部分がUVマップの端にマッピングされるからなのです。そのため、穴が1つも無い場合や、2つ以上穴があった場合は、UV展開が上手くいかずGraphiteは強制終了してしまいます。

Cube

では2つ穴が空いている円柱は、どのようにすればいいでしょうか。
Cylinder

正解の一例として、2つの穴を繋ぐ辺に切れ目を入れることで1つの穴になります。
Cylinder2

また、トーラス(ドーナツ型)は次のような切れ目を入れることでUV展開ができます。
Torus

実際にこの切れ目を用いてトーラスを展開してみます。
Step1

展開はされましたが、格子模様が汚く見えます。どのようにUV展開されたのかを見てみます。前回はBlenderで確認しましたが、今回はGraphiteを使って確認してみます。

Graphiteのメニューから「Window->show 2d editor」を選択します。
Step2

このUV展開では、切れ目の交差部分の頂点がUVマップの四隅にないため、PRIM_SCULPT_TYPE_TORUSを指定したときにうまく繋がってくれません。そこで、指定した頂点がUVマップの四隅に来るようにします。

まず、交差部分の頂点を分かりやすくするためにGraphite 3D Editorのメニューから「Atlas->parameterize->parameterize with HLSCM」を選択してください。すると、交差部分の頂点が分かりやすい形で展開されます。既に頂点が分かっている場合は、この操作は必要ありません。
Step3

Graphite 2D Editorの右側のタブを「Shaders」から「Tools」に変更します。Toolsの中から「edit anchors」を選択して、UVマップの四隅に来る頂点をクリックします。
Step4

Graphite 3D Editorのメニューから「Atlas->parameterize->parameterize」を選択します。表示されたダイアログのparameterizerを「stretch」、use locks as cornersにチェックを入れてOKボタンを押します。
Step5

このように、選択した頂点がUVマップの四隅に来ていることが分かります。
Step6

しかし、UV展開の結果がぐちゃっとしているため、UV展開の最適化を試してみます。

Graphite 3D Editorのメニューから「Atlas->Optimizer->setup param optimizer」を選択してください。表示されたダイアログのcriterionで、最適化の方法を選択します。今回は「weighted_harmonic」を選択しました。

Step7

Graphite 3D Editorのメニューから「Atlas->Optimizer->optimize parameterization」を選択します。

Step8

このように、最適化を使うことでUVマップが綺麗になります。しかし、効果がない物やUVマップが崩れてしまう物もあります。

最後に、CG界で一番有名(たぶん)な「Utah Teapot」をSculpted Primにしてみました。

Step9

ティーポットを4つの部品に分けてそれぞれに対してSculpted Primのテクスチャを作ります。

Step10

SecondLife内ではこんな感じです。ちょっと欠けてしまいました。テクスチャには、BlenderのAmbient Occlusionを使いました。
Teapot

このように、Sculpted Prim用ではないオブジェクトでも簡単にSculpted Primにすることが出来ます。まだ私自身Graphiteをがっしり使えていないので、「こうすれば綺麗にUV展開できた」などの情報があったら教えて頂けると嬉しいです。

| | コメント (2) | トラックバック (0)

2008年1月31日 (木)

GraphiteでいろんなオブジェクトをSculpted Primに変換(1)

BlenderでSculpted Primを作るときは、円柱や球のテンプレートが必要でした。でもテンプレートを使うと、モデリングの自由度がかなり下がってしまいます。そこで、Graphiteを使うことで自由にモデリングしたオブジェクトからSculpted Primを作る方法を紹介したいと思います。

今回の説明で使うソフトは次の3つです。

Blender
オープンソースのモデリングソフトです。今回はモデリングソフトにBlenderを使って説明を行います。
Sculpted Prim Blender Script(zipファイルへのリンクです。thanks to Domino Marama)
BlenderでSculpted Primを作るときの補助スクリプトです。Sculpted Primのテクスチャのimporterとexporterが入っています。これは無くても良いのですが、あると便利です。スクリプトは"[Blenderをインストールしたフォルダ]/.blender/scripts"に入れることでインストールされます。
Graphite
GraphiteはCGの研究用のためのソフトです。今回はSculpted Primに必要なUV展開を行うために使います。

立方体をSculpted Primにする例を使って、変換方法を説明します。

まずオブジェクトの頂点を分割します(頂点数が多いオブジェクトは必要ありません)。

Step1

オブジェクトに1つだけ穴を開けます(この理由は後述します)。

Step2

Blenderのメニューから「File->Export->Wavefront (obj)...」を選んで、オブジェクトをobjファイルで保存します。

Step3

Graphiteを起動して保存したobjファイルを読み込みます。

※追記 : ファイルのパスに日本語が入っていると読み込みに失敗するようです。

Step4

右上のコンボボックスを「Plain」から「Textured」に変更します。

Step5

Graphiteのメニューから「Atlas->parameterize->oprimize stretch L2」を選択して、出てきたダイアログの「OK」ボタンを押してください。ここで、オブジェクトに穴を開けていなかったり、2つ以上穴があると強制終了します。

Step6

Graphiteのメニューから「File->save current」を選択して、オブジェクトを再びobjファイルで保存します。

Blenderに戻り、メニューから「File->Import->Wavefront (obj)...」を選択して、Graphiteで保存したobjファイルを読み込みます。このとき、前のオブジェクトが残っている場合は読み込む前に消しておいた方が、オブジェクトが重ならずに混乱しません。読み込んだファイルのUVマップを見ると、展開されていることがわかります。

Step7

このままbakeすると裏表が逆になってしまうため、UVマップを反転させます。UV/Image Editorですべての頂点を選択した後、UV/Image Editorのメニューから「UVs->Mirror->X Axis」を選択します。

Step8

Sculpted Primのテクスチャをbakeするための画像を作ります。UV/Image Editorのメニューから「Image->New」を選択して、任意のサイズの画像を作ります。

Step9

Sculpted Primのテクスチャをbakeします。Scripts Windowのメニューから「Scripts->Render->Bake SecondLife Sculpties」を選択します。Sculptie Bake Optionsというダイアログの「OK」ボタンを押し、Sculpt Typeは任意の物(今回はPlane)を選択します。

Step10

このテクスチャを保存して、Sculpted Prim用のテクスチャが完成です。

Step11

実際にSculpted Primにするとこんな感じです。

Result

穴を開ける理由など、詳しい説明は次回に続きます。

| | コメント (0) | トラックバック (0)

2008年1月30日 (水)

Graphite-1.9-alpha4 非公式ビルド

Graphiteは、CGやモデリングに関する研究を行うために作られたソフトです。
配布元では現在ソースコードのみが提供されています。開発者の方に問い合わせたところ、3月頃に公式ビルドを配布する予定とのことです。
公式なビルドが登場するまでは、本ページで非公式ビルドの配布を行いたいと思います。

Graphite-1.9-alpha4 Windows版 非公式ビルド graphite_1.9_alpha4_win32.zip

※ 2008年12月13日:公式サイトにてGraphite 2.0 alpha 1のリリースおよびWindow版のビルドも配布されているため、こちらでの配布は終了します。

配布元
ALICE web page(http://alice.loria.fr/software/graphite/)

| | コメント (0) | トラックバック (0)

2008年1月15日 (火)

SecondLifeの録画を改良しました SecondLifeWindLight 1.18.6.76886版

SecondLifeの録画機能を改良したので、公開しますー。

VFW版とlibavformat & libavcodec版の2つがあります。VFW版は今まで使っていた録画機能そのまま使った物で、libavformat & libavcodec版は別の録画機能を使って作った物です。インストール方法はreadme_jaを読んでくださいませー。

比較用に改良前、VFW版、libavformat & libavcodec版、frapsで録画した動画とその画像を用意しました。改良前、VFW版、libavformat & libavcodec版はcodecにHUFFYUVを用いて録画しました。文字をクリックするとH.264でエンコードしたmp4動画(4MBくらい)がダウンロードされます。見られないという方は画像をクリックすると、録画した動画を1フレームだけ切り出した画像が表示されます。FPSあたりから高速に録画出来ていることがわかります。

この量の文章を書くだけで、ものすごい疲れてしまいました(笑)。何かありましたらコメントを頂けると嬉しいですー。

追記 : 動画のリンクがすべてorig_vfw_huffyuv.mp4になっていたのを訂正しました。

| | コメント (0) | トラックバック (0)