人の顔のモデリング3回目。
更新頻度が下がってきているこのごろですが、ちょっとづつ勉強がてらモデリングしています。懲りずにまた人の顔のモデリングしていました。前回と比べると形もまともになってはきていると思いますが、意図せずして黒人さんぽい(唇がでかい)顔になってしまいました。バランス調整って難しいですね。あと耳がめんどくさすぎる。

ここまで細かい調整も含めてけっこう時間がかかってしまいました。ポリゴンの流れをきれいにしなくてはいけないし、耳なんて三次元的なモデリングをするので大変です。以下のZbrushのモデリングなんか見たら、Zbrush欲しくなってしまいます。
次回からはこの顔のみのモデルを使ってサイバーパンクな感じに仕上げていく予定です。
ザベルの作業途中風景。
少しずつ進めていたザベルの制作ですが、全体像はできたものの、どうにも資料が無いためにディテールをつめることができずモンモンとしています。

今回は人間のモデルを作るときは全体をローポリゴンで作ってからどんどん細かくしていってディテールを追加していくという手順を実感できただけでも勉強になったとして、一端ザベルの制作は休止することにしました。
次のモデルは今までが既にあるものだったので、オリジナルのモデルを制作してみようと思います。
できれば勉強できそうな感じのヤツを・・・。
名無しの宇宙人のレンダリング。
前回のエントリーでモデリングした宇宙人に色をつけました。半年前はこの作業だけでアップアップだったのが懐かしい・・・。
「宇宙人」ということなので、なるべくキモいカラーにしてみました。銃がキラリと光っているのがお気に入り。指が四角くなっているのが残念な点ですね・・・。
ただ服の柄はphotoshopのブラシを適当にペタペタしただけです。
今回はせっかくなのでUVマップを作成し、設定するテクスチャイメージをphotoshopにて色をつけてみました。単にイメージマップ(.tgaでも.jpgでも)を外部ソフトで読み込むとUVマップが無い状態なので編集しにくいです。なのでUVマップを.eps形式で書き出してやります。
やり方は書き出したいUVマップを選択した状態で、メニューの「テクスチャ」から「UVをEPSに書き出す」で書き出します。

あとはイメージマップと書き出した.epsファイルをphotoshopで読み込んで塗るだけです。
3DCGの集まり「C3D」に参加してきました。
3月15日にmixi内の中部地方を中心としたコミュニティ「C3D」の集まりがありました。集まりといっても私を含めて3人(229blogの229さん、YASHILOGのYASHIさん)だけでしたが、とても有意義な時間を過ごすことができました。とくにテーマを決めて短時間でモデリングするというのは集中できてよいですね。自分の現在の実力を知るきっかけにもなると思います。
またYASHIさんのZbrushも見せてもらったのですが、う〜ん。Zbrush欲しい・・・。ただYASHIさんはZbrushのディスプレースメントがmodoにうまく適応できなくて困っているご様子でした。どこかにうまいやり方があると思うんですけどねぇ・・・。マニュアルにもZbrushのモデルを読み込む内容がありますし。
さて、今回やった短時間でモデリングのテーマは「宇宙人」。時間は1時間半くらい。まずは落書きからキャラクターを練るのに30分程度、その後のこりの1時間でモデリングすることにしました。落書き時間はあっという間に過ぎてしまったので、練り込みが足りないままモデリングに。モデリングもブーリアンができなくて困りましたが、時間がないので別のやり方を探ることにして、なんとかキャラが見える程度にはできました。この、限られた時間で、できることを探ることに勉強があるんだと思いました。

この日には未完成でしたが、せっかくなので最後までつくってみることにしました。手とせっかくなので銃を持たせました。銃はわかりやすい形で。でもあるだけで違いますね。
まだ色付けはできなかったので後日に。
ED-209をpapervision3Dで表示できた。
「ED-209」をpapervision3Dで表示させるという当初の目標が達成できた。
【操作に関して】
・ドラッグ操作で動かせます。
・カメラの動きをいじくれます。
・オブジェクトの大きさ、位置をいじれます。
ほぼpapervision3Dの確認用に設置したパラメータです。

最初はドキュメントクラスでやっていたのですが、うまくいかなかったので(勉強不足)flashに書き込みました。
想定外だったのがマウスイベントでオブジェクトを動かすイベント。viewに対してマウスイベントを設定すると画面全体に対してイベントが有効になると思っていたのですが、オブジェクトだけだったみたいです。今回はflashで画面いっぱいの四角形のMovieClipを作って(ソースのboxがそれ)、それにイベントを割り当てました。これが無いとED-209の上にカーソルがある時はドラッグ操作ができますが、外れるとドラッグできません。またオブジェクトのポリゴンが欠けまくるのも問題。対処方法があるみたいですが、うまくいきませんでした。
またpapervision3D用のcolladaファイルの作成に関しては.obj型式ファイルをメタセコイアに読み込み.mqoで書き出し、VixerMotionというソフトで.mqoファイルを読み込み、daeで書き出ししています。メタセコに取り込みに関しては以下のエントリーを参照してみてください。
⇒メタセコイアに読み込み
あとasの関数って日本語使えるみたいなので日本語にしてみました。問題なく動作しているのがなんか信じられない。
import flash.events.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.render.*;
import org.papervision3d.objects.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.parsers.Collada;//*******セットアップ
//viewport
var viewport:Viewport3D;
viewport = new Viewport3D(0,0,true);
box.addChild(viewport);//render
var renderer:BasicRenderEngine;
renderer = new BasicRenderEngine();//scene
var scene:Scene3D;
scene = new Scene3D();//camera
var camera:Camera3D;
camera = new Camera3D();
camera.x = cameraXNum.value;
camera.y = cameraYNum.value;
camera.z = cameraZNum.value;
camera.focus = 500;
camera.zoom = 1;//collada
var ed209:Collada;
ed209 = new Collada(“http://www.uxic.net/wp-content/uploads/2009/03/ed209.dae”);
scene.addChild(ed209);ed209.scaleX = 0.05;
ed209.scaleY = 0.05;
ed209.scaleZ = 0.05;addEventListener(Event.ENTER_FRAME, レンダリング);
function レンダリング(event:Event):void {
renderer.renderScene(scene, camera, viewport);
}//*******カメライベント
cameraXNum.addEventListener(Event.CHANGE, カメラX);
cameraYNum.addEventListener(Event.CHANGE, カメラY);
cameraZNum.addEventListener(Event.CHANGE, カメラZ);
scaleNum.addEventListener(Event.CHANGE, 大きさ);
function カメラX(event:Event):void {
camera.x = cameraXNum.value;
}
function カメラY(event:Event):void {
camera.y = cameraYNum.value;
}
function カメラZ(event:Event):void {
camera.z = cameraZNum.value;
}
function 大きさ(event:Event):void {
ed209.scaleX = ed209.scaleY = ed209.scaleZ = scaleNum.value;
}XNum.addEventListener(Event.CHANGE, ED209X);
function ED209X(event:Event):void {
ed209.x = XNum.value;
}
YNum.addEventListener(Event.CHANGE, ED209Y);
function ED209Y(event:Event):void {
ed209.y = YNum.value;
}
ZNum.addEventListener(Event.CHANGE, ED209Z);
function ED209Z(event:Event):void {
ed209.z = ZNum.value;
}//*******マウスイベント
mouseObject.addEventListener(MouseEvent.MOUSE_DOWN, グリグリスタート);
mouseObject.addEventListener(MouseEvent.MOUSE_UP, グリグリエンド);var guriX:Number;
var guriY:Number;
var guriZ:Number;//使わないかも
var yawX:Number;
var pitchY:Number;function グリグリスタート(event:MouseEvent):void {
guriX = stage.mouseX;
guriY = stage.mouseY;
addEventListener(MouseEvent.MOUSE_MOVE, グリグリ中);
}
function グリグリ中(event:MouseEvent):void {
//マウスによる差分値を取得
yawX = stage.mouseX – guriX;
pitchY = stage.mouseY – guriY;//差分を代入
ed209.yaw( yawX / 2 * -1);
ed209.pitch( pitchY / 5);
}
function グリグリエンド(event:MouseEvent):void {
removeEventListener(MouseEvent.MOUSE_MOVE, グリグリ中);
}


