夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

【Blender】CR-Xにスムーズシェーディングをかけつつエッジを立てる

引き続き現在開発中のレースゲームに登場予定のCR-X風スポーツカーのモデリングBlender上で進めています。
現時点ではこんな感じです。

f:id:takujidev:20151013215408p:plain
f:id:takujidev:20151013221914p:plain

参考までに、Verts 3,627、Faces 3,551、Tris 6,974となっています。

前回作成したAE86トレノ風スポーツカーではフラットシェーディングを使用していたため角ばっていました。
というのも、スムーズシェーディングをかけるとせっかく作り込んだディテールがなくなってしまうからです。

参考:
tf.hateblo.jp

スムーズシェーディングを掛けつつもエッジを立てる方法はいくつかあるようですが、今回はBlenderのAuto Smoothとエッジのシャープ指定でエッジを立ててみました。

f:id:takujidev:20151013220452j:plain

Object dataのAuto Smoothをチェックし、立てたいエッジ毎にShadingのSharp指定をしていきます。
(上の図の赤い四角で囲った部分)
Sharp指定をしたエッジは水色で表示されます。

フラットシェーディングの場合:
f:id:takujidev:20151013221130p:plain

スムーズシェーディングの場合:
f:id:takujidev:20151013221155p:plain

スムーズシェーディングかつ必要なエッジを立てた場合:
f:id:takujidev:20151013221224p:plain

それぞれ見え方が違いますが、3番目が一番綺麗に見えると思います。

心配なのが、この方法で立てたエッジがUnity上でも同じように見えるかどうかというところですが、この通りちゃんとBlenderと同じように見えています。

f:id:takujidev:20151013224032j:plain

AE86では色の違う部分は全て違うマテリアルを割り当て、マテリアル毎に色やツヤを調整していたのですが、複数のマテリアルを使うとドローコールが増えるため処理が重くなるらしいです。
そこで、CR-Xでは処理の軽量化のため全てのオブジェクトの全てのポリゴンを同じマテリアルに割り当ててみました。
現在はテクスチャマッピングで色をつけた段階で、部位毎のツヤの調整はまだなのでタイヤがやたらとテカテカしていますが、これは今後調整する予定です。

https://itunes.apple.com/jp/app/toraberushutingu-retorona/id917570972?mt=8&uo=4&at=10laCt
https://itunes.apple.com/jp/app/beecluster-wu-liaono-zongsukurorushutingugemu/id663801586?mt=8&uo=4&at=10laCt

Blenderのループ選択を思い通りに操る方法

BlenderでAlt+右クリック(左クリックで選択を設定している人は左クリック)で面のループ選択するとき、あらぬ方向にループが展開し、
「そっちじゃねー!」
と思わず叫んでしまうことってありませんか?

エッジのループ選択であればおそらく百発百中で成功すると思います。
しかし面のループ選択は上手くいったりいかなかったりです。
場合によっては必ず失敗するので「そういうものなのかな」と諦めかけていました。

例えば、こんな風にタイヤの円周方向に面選択をキメたい時、

f:id:takujidev:20151006211831j:plain

そんな時に限ってこうなるわけです。

f:id:takujidev:20151006211913j:plain

面の場合、ちゃんと意識してクリックしないと失敗する確率が高いです。
何がどうなっているかというと、面の中のクリックする場所によってループが進む方向が決まっているのです。
具体的には、面の中の進みたい方向にある辺の上をクリックすると確実にその方向にループを展開させることができます。
円周方向に選択したい場合は下図の矢印で示したあたりを狙ってクリックすると成功します。

f:id:takujidev:20151006213725j:plain

つまり、この例のように円周方向に長い面の場合、何も考えずに適当にクリックすると違う方のエッジの近くをクリックしたと判定され、何度やっても半径方向にループが展開してしまうということになります。
細長い面ほど判定がシビアになるので慎重にエッジの真上かつ中心を狙いましょう。

クリックしても何も選択されない、という時は、もっとエッジに近いところをクリックします。思いっきり拡大して試してみると分かりますが、面の中心付近にはループ選択のクリックのあたり判定はありません。

頂点のループ選択の場合も同様です。律儀に頂点の真上を狙うとどっちへ進むかわかりません。
進みたい方向のエッジの上をクリックすると上手くいきます。つまりエッジのループ選択と同じ感じでクリックします。

面のループ選択のややこしいところは、頂点やエッジのループ選択の時とは違う方のエッジを狙う必要があるところですが、そういうものだと納得して慣れるしかないですね。

ちなみにBlenderのバージョンは2.75aを使っています。