2008年6月24日火曜日

etc - 戦場のヴァルキュリアが凄い

西川善司の3Dゲームファンのための「2007年の3Dゲームグラフィックス」講座
私が2007年に愛したシェーダーグラフィックスたち
http://watch.impress.co.jp/game%2Fdocs/20071227/3d.htm


ここ経由で知ったんですが、PS3の戦場のヴァルキュリアが鉛筆風ハッチング・シェーダーだそうです。

戦場のヴァルキュリアOP




鉛筆っぽいテクスチャをスクリーン座標で重ねてるっぽいですね~。やってることはトーンシェーダーとかと大して変わらないと思うんですけど、効果抜群。
色付きの3Dにドットみたいなトーン重ねてもキモイだけだから、こういう使い方のほうが良いですね。

なんか見てたら無性に欲しくなってきたんだけど、うちにはプレステ3もテレビも無いんだ・・・。残念。

------------

上記リンク先見てると、なんかもう、自分の作ってるヘボい3Dは何だよ!って思いますね。
同じリアルタイムでこのレベルかよ!と。リアルタイムじゃなくても勝てねぇよ!と。

トゥーンなら全部リアルタイムで十分じゃん!と。

ま、最後のは常々思ってることですが・・。早く成果を出したいです。。

2008年6月22日日曜日

etc - シェーダー云々

とりあえず動画とか。未だに色とか未調整。
video

本当はモデリングとかアニメーションとかバリバリやりたいんですけど、プログラムのほうで、まだやることがあり、全然Blender触ってません。

今後シェーダーとか適用できるように

以下妄想====>

周知の通り、BlenderはOpenGLで描画されており、XSIのようにリアルタイムシェーダーとかありません。しかし、DirectX側で自前のシェーダーと連携することならアイデア次第で可能なはずです。

まず、思いつくのがマテリアルのノードと連携ってのですが、これは何かめちゃくちゃシェーダー書かないといけないような気がするので却下。次に、Textオブジェクトにシェーダー名を書いて連携というのを考えたんですが、調べたところ、Textオブジェクトには文字列自体は保存されてなくて、Curveが入ってるだけなので却下。

残るはEmptyです。Emptyに自前のシェーダ名を書き、parentにオブジェクト(例えば服の一部など)を設定します。parentが無いEmptyは全オブジェクトに影響するシェーダーということにします。さらにそのEmptyのchildとして、パラメーターを設定できることにします。そして、適当にlocationキーなどを打ちます。マテリアルキーなどと違って、NLAで確認できるという利点があります。そのキーの有効範囲だけ、DirectX側で指定したシェーダーを適用するようにします。

こうして、自前のあらかじめ用意したシェーダーを、特定部位に時間指定で適用できるように

<====妄想ここまで

なればいいのになー。



ところで、XSIのファイルフォーマット、ちらっと見たところ、物凄いサポートされててうらやましいー。

2008年6月19日木曜日

blender - VS2005proでBlender2.46のビルド

はじめに、2008/6/19時点でのビルドです。時と場合によっては、この通りに上手くいかないこともあると思います。思い出しながら書いてるので、どっか抜けてたりするかもしれません。また、エラーの対処法で、もっといい方法があれば教えてください。


と書いたら、コメントでもっと簡単なビルド方法があるのを紹介されました。感謝!
Blender.jp - フォーラム - CMake + Visual C++ 2008 Express EditionによるBlender SVNのRelease版ビルド方法
http://blender.jp/modules/newbb/viewtopic.php?topic_id=871&forum=4&post_id=4311#forumpost4311



-------------以下、簡単ではないビルド方法の残骸


0.要るもの:VS2005とsubversionとTortiseSVNあたりがあると良し。あと時間が必要。

1.https://svn.blender.org/svnroot/bf-blender/trunk/ をチェックアウト

---

2.blender/extern/make/msvc_7_0/extern.sln を開く、変換する、完了

3.VS2005の再生ボタン(デバッグ開始ボタン)の横にあるソリューション構成を、Blender Debugにする

4.verseを右クリックしてビルドする

5.build_install_allを右クリックしてビルドする(もしくはソリューションのビルドをする)

6.VS2005の再生ボタン(デバッグ開始ボタン)の横にあるソリューション構成を、Blender Releaseにする

7.同様に4、5をする

---

9.blender/intern/make/msvc_7_0/intern.sln を開く、変換する、完了

10.VS2005の再生ボタン(デバッグ開始ボタン)の横にあるソリューション構成を、Blender Debugにする

11.build_install_allを右クリックしてビルドする(もしくはソリューションのビルドをする)

12.guardedallocを右クリックしてビルドする

13.VS2005の再生ボタン(デバッグ開始ボタン)の横にあるソリューション構成を、Blender Releaseにする

14.同様に11、12をする

---

15.blender/projectfiles_vc7/blender/blender.sln を開く、変換する、完了

16.VS2005の再生ボタン(デバッグ開始ボタン)の横にあるソリューション構成を、Blender Debugにする

17.blenderを右クリックしてビルドする(もしくはソリューションのビルドをする)

18.エラーがいっぱいでる

19.blenderを右クリックし、プロパティ→構成プロパティ→リンカ→全般→追加のライブラリディレクトリの ..\..\..\lib\windows\openexr\lib を ..\..\..\lib\windows\openexr\lib_vs2005 にする

20.DNA_makednaのHeaderFilesにはいってる、dna.cの位置が違うらしいのでdna.cをプロジェクトからはずす

21.既存の項目を追加で、blender/source/blender/makesdna/internにあるdna.cを、DNA_makednaと、BLO_loaderにも追加する

22.再びビルドする。警告はいっぱいでるけど、エラーが0だったら成功。再生ボタン(デバッグ開始)押して起動。

23.VS2005の再生ボタン(デバッグ開始ボタン)の横にあるソリューション構成を、Blender Releaseにする

24.17~22をする

----

他に参考になる記事
Blender.jp - フォーラム - VisualStudio2005でビルドがうまくできない

http://blender.jp/modules/newbb/viewtopic.php?topic_id=746&forum=3





----

という感じで、苦労の末、ビルド成功しました。
前回の日記にあるようにBlender2.46のIKのPoleTargetを使ってしまったので、2.45ベースでエクスポートするとモーションが壊れるので、急遽ビルドしました。

2008年6月15日日曜日

blender - IKのPoleTarget使ってみた

なんか腕がくるくる回転するの何とかしたいと思ってググってたんですよ。
そしたらこんなの見つけました。

IKのためのボーン基礎知識
http://www.gashow.jp/cinemail/tips/ik-bone/index.html


えーっと、何か良く分からないけど、ジンバルロックで大変だと。
で、これBlenderに無いの?と思って探したところ

Blender2.46 - Pole Target
http://www.blender.org/development/release-logs/blender-246/inverse-kinematics/


それっぽいのを発見。
早速やってみました。


良く分かって無いけど、こんな感じにしてみました。
設定したあと、初期状態で腕が変に回ってたら、PoleOffsetに -170~170くらいまでの間の値を適当に入れるとうまくいきました。

設定があってるか、そもそも使い方があってるか、激しく謎ですが、以前より動きがマシになったのでよしとしよう・・・。

video

etc - シェーダーできたかも

レンダリングはDirectXで、レンダリング時間は大体60分の1秒です!

…って1回言ってみたかっただけです。すいません。



色とかは全然調整してないので、ミクの緑っぽい青のColorRampで、緑っぽくなってます。
あと、頂点カラーでは無理があったらしく、服の一部模様が変になってます。
もうちょっと長門らしい色に変えて行きたいところ。その前に苦手なボーン入れか…。いや、その前に輪郭線か…。

ちなみにColorRampはこんな感じ


うーん、全然わからんな・・・。512x512にして、マテリアル名埋め込もうかなぁ。

アンチエイリアスx8

昨日間違って17時間寝てしまい眠れない…


---

一応ボーンも少しずつ入れてるけど、動かしたいところに本数気にせずガシガシ作ってみたら、こんなになりました。うげー、こんなにセットアップしたくない!



今はウェイトペイントで塗り捲って誤魔化してるけど、やはり限界があるので、ポリゴンの割り方とかも何とかしないとなー。あとIKとか、実は何も分かって無いしw

2008年6月13日金曜日

blenderXML - ColorRampのエクスポート

とりあえずグラデーションランプとかいうのは、いつもやってるやつと余り変わらないことが分かったので、(mmV customShader.reference参照)ColorRampを出力しようとしてみる。

Blenderのコードの山から宝を探す作業なんだけど、これがまた非常にメンドクサイ。
宝なんて目の前に落ちてるほうがいいに決まってる。
とか文句垂れながら何となくやり方がわかる。午前4時。

この時点で寝れば良かったんだけど、つい欲が出て実装しようとしてしまった。眠いので、さっさと終わらせようと、BlenderXMLのエクスポート処理の中に、libpngでカラーバンドをpng出力しようとした。これが後々考えると、アホだったなーと。それから無駄な時間を割いて、libpng.hのインクルードエラーだとかで時間食って、結局「急がば回れ」ということで、コンバーター側でpng出力するように書き換えて、出来た。



とりあえず、サブセット毎に、上からずらっと並ぶので、それをシェーダーで使う予定。

2008年6月12日木曜日

etc - 折角だから…

ちょっと不調なので、気分転換に、らぶデス2の初音ミクモデルをコンバート。
おんださんが超絶神過ぎるのは勿論だけど、このミクモデル作った人もかなり凄いと思う。

普段らぶデス2で1体表示で34fps程度なので、どうなることかと不安に打ちひしがれながら実行。

video

シェーダー無しの固定機能だけど60fps越えました。
fraps起動したときの左上に出てる数字が60だから、60は間違いないはず。
よかったー。固定機能で30とかだったら、今まで俺は何やってきたんだとw

ってか、やっぱ全然違うなぁ。かわいさが。かわいすぎるなー、これ。
ちなみに△49684ポリゴンでした。

2008年6月10日火曜日

etc - デュアルディスプレイ

友人にモニタ付きでPC売ってから、しばらくディスプレイ1つでがんばってたんですが、ヤフオクでついに2つ目を買っちゃいました。

左のQuixun(クイックサン)のディスプレイです。




最近プログラムするとき、SXGA(1280x1024)のディスプレイを縦に使うと、かなりやりやすいことが判明し、コーディング時とモデリング時で毎回回転させて使っていたのですが、これで毎回回転させなくて済みそうです。

------

長いこと待っていたんですが、ついに完成版出てましたね!!いやー、凄い。凄すぎる。早速保存してお気に入り3D動画行き。
らき☆すた+涼宮ハルヒの憂鬱(完成版)
http://www.nicovideo.jp/watch/sm3613437



ところで、これ↓は3Dなのかな?3Dっぽいけど。気になる。
Wii用ゲーム 涼宮ハルヒの激動
http://www.haruhi.tv/fanclub/goods_etc_game_wii.html#part2

2008年6月8日日曜日

blender - どうなってるんだ、法線

レイヤ毎の切り替えに対応して、オブジェクト毎の切り替えも、そのうちできそうな感じです。

つまり、着せ替え対応までもうすぐ!ってことで。

video
シェーダーは、まだ試行錯誤中なので、とりあえずライトなしの、固定機能な表示。
クリックでレイヤを切り替えてます。

-------------

さて、法線ですが・・・

まず、Alt-D で、リンク付き複製をして、Ctrl-Mで対象移動させて鏡面化します。
気の済むまで頂点をいじったりモデリングした後、Ctrl-Jで結合します。

すると法線が片方ひっくり返ってます。

まぁここまでは公式の説明にも、Ctrl-Nで直してねと書いてあるんですが、これを、バージョンが違うBlenderに持っていくと、直らなかったり、W→FlipNormalsとかやって直しても、Ctrl-Nの結果は覆りません。
あと、Ctrl-Jするときの選ぶ順序で、結果の法線が変わったりすることもあります。

もうどうなってるのか、さっぱりわかりません。

エクスポーターで全メッシュの法線に同じ処理をしているはずなんですが、結局、正常に変換するには、目視で確認して、裏なやつを手作業で、全てFlipする必要がありました。

結果、正常にコンバートできたのが、こんな感じに。
(ピンクのはテクスチャの関連付けが失敗してるだけなので、関係ないです)


俺のコンバーターがカス、というわけでも無いはず。

-----------------

追記:
ちょっとだけボーン入れてみた。
もうボーンの関連付け作業がめんどくさ過ぎて死ねる。しかも適当にやってもこれだけメンドイのに、ちゃんとウェイト付けるとなると・・・。しかも1回ならまだしもローポリ、ハイポリ用作るとなると2回もこの作業をしないといけないのか・・・。

video
シュバッ!!シュバババッ!!!

2008年6月6日金曜日

etc - コミケ

落ちた(´・ω・`)

く~、残念。明らかに激戦区(204)だったからかなぁ・・

まぁ夏までは止まらずに全力で行きます!

etc - 3D勉強中

この土日でライティング(Lighting)を何とかする予定なので、1から勉強。



当初から目をつけていたリアルタイムレンダリングを借りてきて読み始めた。
なんかかなり文字が多くて分かりやすいので、ライティングと余り関係無い、サンプリング処理のところを全部読んでしまった。

で、肝心のライティングのところも基礎から読み始めたんですが、ディフューズは分かったけどスペキュラで「?」となりアンビエントで大量の式が出てきて「???」となり死亡。ちょっと後回しにしよう…。

次、NPR。シェーディングが知りたかったんですが、この本では主に輪郭線中心。一通り見たけど、全部紹介程度で、なんか昔輪郭線調べまくったときに見たことあるようなのばっかりだった。輪郭線は当初の方針通りZ(+-)マテリアルIDで行こうと思う。

とりあえず現在ここまで。今後積読にならないようにしたいです・・・。

----

あと、本屋でアニメーションノートNo5を買ってきた。背景特集で、新海誠監督とか、まなびストレートとか載ってます。

「まなび」は作画もストーリーも良く、特に髪のシェーディングが参考になりそう。
それから、Maxのアニメライズ本をチラ見してきたんだけど、マテリアルは法線のグラデーションランプが基本みたい。近々やってみる。

2008年6月3日火曜日

etc - 空中キャンプ

タグFISHMANS!いいなー。いいなー。いいなぁぁ。←大ファン

「しろいそら」初音ミク/オリジナル曲
http://www.nicovideo.jp/watch/sm3445770


おもちゃで遊んでるみたいな8bitライクな音がいいですね~。ってかnanoloopかー。昔サークルで持ってる人がいたなぁ。よくぞアレでここまで。

----

で、今月中に3DPVを1つ作る予定なんですが、どうしよう、何も考えてない。曲どうしようか。動きは、やっぱコンテかかないと駄目かなー。そもそも2Dの絵なんて描けないし。

2008年6月2日月曜日

blender - PythonのNode実験(3)

前回の方法を使えば、マテリアル別に色が違う輪郭線モドキを楽に設定できます。法線での検出なので精度が悪いんですが、法線マップみたいなのと合わせればマシになるのかな・・・?



さて、自分は、「いつか、きっとどこかの誰かがunReal Xtreme2みたいなのを作るはず」と思ってひたすら待ってるんですが、Blenderのトゥーンなユーザーは、余り増えませんねー。9月になって誰もやってなかったら、挑戦してみようかな・・・

2008年6月1日日曜日

blender - GLSL ViewPort

GLSLのViewPortが追加されたApricot branchが出ていたので、早速テスト。



前より安定してる気がする!!これは期待ですね!!
頂点カラーは無理なのかな?とりあえずマテリアルカラーで。
また、折角なので少し透けさせてみました。
UVマップもいけるみたいですが、何かうまくいかなかったので目なしで。(tgaじゃないと駄目っぽい?)

まぁ自分のはデチューンされたアニメ絵なので余り面白くありませんが、
フォーラムに3Dなテスト動画がありました。素晴らしい。
http://blenderartists.org/forum/showthread.php?t=126020

blender - PythonのNode実験(2)

マテリアルノードでトゥーンシェーディングをやるとして、
従来のやり方だと、マテリアル毎にいちいちNodeEditorかCol Rampを開いて、色の調整をしないといけなかった。

マテリアル数が増えてくると、これは非常にメンドクサイ。
マテリアル色と別に、シェーディング用の色を設定しないといけないので、手間が2倍だ。

また、DirectXで使うことを考えると、ノードのエクスポートは若干面倒なので、もっと楽に扱えて、エクスポーターもノードをエクスポートせずに何とかする方法を考えたい。

つまり
・2色を閾値で区切る or 2色のグラデーションでOK
・一度設定したらノードエディタを開かず、全てマテリアルパネルから操作できるように
・色はマテリアル色や頂点カラーから流用

くらいが出来れば良しとしよう。

よろしい、ならばPyNodeだ。

とりあえずライトのベクトルの取得法が良く分からないので、正面にライトがあることにする。
また、とりあえずは、閾値で区切るスイッチ動作だけとする。


from Blender import Node
from Blender.Mathutils import *

class ToonColorNode(Node.Scripted):
def __init__(self, sockets):
out = Node.Socket('Color', val = 4 * [1.0])
color1 = Node.Socket('Color1', val = 4 * [1.0])
color2 = Node.Socket('Color2', val = 4 * [1.0])
weight = Node.Socket('weight', val = 0.5)
sockets.i = [color1, color2, weight]
sockets.o = [out]

def __call__(self):
color1 = self.i['Color1']
color2 = self.i['Color2']
weight = self.i['weight'] * 100

vec1 = Vector(self.shi.surfaceViewVector)
vec2 = Vector(self.shi.viewNormal)
vangle = AngleBetweenVecs(vec2, vec1)

if vangle > weight:
self.o['Color'] = color1
else:
self.o['Color'] = color2

__node__ = ToonColorNode


これをDynamicに読込む。

また、ノード内にマテリアルを2つ設定し、
1つめ(Link and Pipelineの上のほう)はshadelessなVColPaint(頂点カラー)に設定
2つめ(Link and Pipelineの下のほう)はshadelessだけ(=マテリアルカラー)に設定する。
また、2つめのほうは、alphaを閾値として使う。

すると、以下のような感じになる。



色と閾値をマテリアルパネルから操作できて(*)、エクスポート時にノードをエクスポートしなくても閾値含めてエクスポートできる。

(*) 1つめのマテリアルは頂点カラーなので、NodeEditorで切り替えなくても、VertexPaintで色を変えられる。まぁこれはこれで面倒かもー。



・・・・で、ライトベクトルってどうやって取得するんだろう?orz