LightWaveで二次元キャラ系人物モデリング奮闘記 ―服装編3―

最終更新:2016/09/06

基礎的なモデリングももう大詰め。最後にまったく手をつけていなかった靴を作る。

足の調整

まず、どんな靴を履かせたいのか検討し、それに合わせて足の形状を調整する。最初は次の画像のように爪先から踵までぴったり地面に着いている。当初はヒールの高い靴のことを想定していなかったため。

Clothes100

そこで、爪先側のポイントを選択して下(Y軸方向のマイナス方向)に変形させる。移動量は、仮に靴のサイズを24cmとした場合、7cmのヒールがある靴だと大体足の大きさの3分の1くらいが目安。単純に爪先を下げるだけだと足全体のサイズが大きくなってしまうので、少し後ろに下げて足の大きさが不自然に伸びてしまわないように調整する。

Clothes101

靴の基礎を作る

ローポリゴン・モデルでは靴を脱がないことを前提にして足を直接加工して靴を作ってしまうという方法が一般的。ウェイト・マップの設定が簡略化できるなどの利点もあるけど、靴の種類を変えたい場合などに後の応用がきかないので、あえて別パーツで作る。

まず、片方の足首から下の部分をコピーして別のレイヤーに貼り付ける。デフォルトでいいので靴用のサーフェースを設定しておくとわかりやすいだろう。他の服装と同じようにThickenツールで厚みをつけてもいいんだけど、靴は入口がひとつしかなく出口もなくて比較的簡単なので、別の方法を使ってみる。

先に裏地を作る。もうひとつ同じものを別のレイヤーに貼り付け、全体のポリゴンを反転(Fキー)させる。

Clothes103

足首から下の部分は必要ないので削除する。服の裏地は方向によっては見えることもあるかもしれないけど、どんな方向から見ても靴の中まではさすがに見えない。モデリングを簡単にするためにもポリゴンを減らしておく。

Clothes104

最初にコピーしたレイヤーに戻り、靴の外形を形成する。ここではスムース拡大縮小ツールを使用する。ここでは20mm拡大している。普通の拡大縮小ツールと異なり、法線方向を参照して拡大縮小してくれるので、足の形を単純に大きくしただけのゴム長靴のような形にはならない。

Clothes102

裏地を作ったレイヤーを切り取って外形のレイヤーに貼り付ける。次の画像のように表地と裏地の間に隙間ができているので、エッジを1組ずつ選択してブリッジで接続していく。いっぺんにブリッジできれば便利なんだけど、想定外のところとブリッジしてしまうことがあるので、八角形くらいならひとつずつ確実に処理していく。

Clothes105

ブリッジが終わってサブパッチを適用すると次の画像のようになる。まだ靴下のような形だけど、これが靴の基礎になる。

Clothes106

爪先と足の甲を作る

さすがに八角形のままではポリゴンが少なくて加工しにくいので、正中線を挟んで右左のポリゴンをバンドソープロで分割する。まず左側を分割。

Clothes107

右側も同様にバンドソープロで分割する。

Clothes108

靴らしい形に整えていくために、爪先の部分のポリゴンと足の甲にあたる部分を次の画像のように選択する。

Clothes109

拡張プラス(Eキー)でポリゴンを増やし、更にスムース拡大縮小ツールで更に20mm拡大する。

Clothes110

靴底が丸くなっていて陸上競技用のランニングシューズのようになっているので、更にエッジを追加して靴底の角を立たせると同時に装飾をはっきりさせる。普通は拡張プラスを使っていくんだけど、いつも同じでは芸がないので、ここでは実験的にラウンダー(Rounder)を使ってみる。サブパッチを解除し、次の画像のようにエッジを選択する。

Clothes111

ラウンダーの設定は次の画像のとおり。「Rounding Polygons」を「1」に、「Inset distance」を「10mm」にしてある。

Clothes112

ラウンダーを実行すると次の画像のようになる。うまく外縁部のエッジにだけラウンダーがかかった。サブパッチを適用してみると爪先の靴底がかなり平らになり、足の甲の装飾部分も少し際立った。

Clothes113

踵とヒールを作る

次に、踵の部分のポリゴンを選択し、拡張プラスとスムース拡大縮小ツールで踵の厚みを増す。

Clothes114

そのままの状態で選択をエッジに(Sel Edges)を使用してエッジ選択モードに切り替える。

Clothes115

選択しているエッジを減らし、次の画像のように踵の上と下の部分のエッジだけ選択しておく。

Clothes116

ここで更にラウンダーを実行する。設定は爪先と同じ。踵のほうでは上下のエッジが縦に接続されてしまい、角を丸めるためのポリゴンが追加されてしまった。

Clothes117

ラウンダーの動作としてはまったく問題ないんだけど角を丸めるポリゴンは必要ないので、ポイントの統合ツール(Ctrl+W)か平均統合を使って間を詰める。すると、線ポリゴンが多数できるので、Wキーを押してポリゴン状態ウィンドウから「2頂点」のものだけを次の画像のように選択して削除する。

Clothes118

ラウンダーを使用したら、サブパッチ(正確にはキャトマル)がかかっていない部分ができてしまった。

Clothes119

「面」という行に表示されているポリゴン数がサブパッチがかかっていないところなので、それだけを選択して、Tabキーを押してサブパッチを適用する。

Clothes120

サブパッチがかかっていないポリゴンだけを選択した状態が次の画像。投げ縄選択なんかでも選択できそうだけど、サブパッチがかかっているところとかかっていないところが入り組んでいると問題ないところまで更にトグルしてしまうので、ポリゴン状態ウィンドウを使ったほうが確実。

Clothes121

もちろん、ラウンダーを使用しなければこういった事態は起きなかったかもしれないので、サブパッチ・モデリングにラウンダーを持ち込むのは少々無理があるようだ。

このあたりで軸でポイント整列(Align Points to Axis)ツールを使って踵周囲のポイントのY軸を揃えておいたほうがいいと思う。先走って先に進めてしまったので、後で整列させることになってしまったけど、加工を始める前に整列させておいたほうが賢明。

次にヒール部分を作る。踵の底面のポリゴンを選択し、拡張プラスと移動ツールで引き伸ばしていくいつもの方法。

Clothes122

先細り(Taper2)ツールでヒールの先を20%程度まで尖らせておく。

Clothes123

選択範囲を1段階拡張(}キー = Shift+])し、斜体(Shear)ツール([キー)でヒール部分を前にずらす。フォールオフ形状は初期設定の「右上がり」では踵のほうが動いてしまったので、次の画像のように「右下がり」に変更してヒールのほうが動くようにする。

Clothes124

斜体を実行した後の状態が次の画像。

Clothes125

靴底の整理とサブパッチ強度の調整

足の甲のあたる部分のポリゴンが前後に長く、爪先や足首側のエッジを大きく引っ張っていて操作しにくいので改善したい。バンドソープロで分割するのが手っ取り早いんだけど、足から切り取って靴を作った都合で足の裏にあたるポリゴンが少し込み入っていてうまく分割できない。そこで、靴底のポリゴンを少し整理する。

ポリゴンの切り分けを変更するためにトポロジーが集中している箇所の次の画像に示したエッジを選択し、デバイドを1回使ってポイントを1つ増やす。

Clothes126

スペースキーを押してポリゴン選択モードに切り替えると次の画像のようになっているので、選択をポイントに(Sel Points)を使用して関連するポイントを絞り込む。このあたりは細かいポリゴンが集中していてマウスによるポイントの選択や選択解除が難しいので、いったんサブパッチを解除して大きく拡大し、自分がどのようにポリゴンを区切りたいのかよく検討する。

Clothes127

次の画像がポリゴンの分割方向を切り替え終わった状態。

Clothes128

3ポイントのポリゴンができているので、靴底側の隣りのポリゴンと結合(Shift+Z)する。これでトポロジーがすっきりする。

Clothes129

次に、靴底中央部分にあたるポリゴンも整理したいので、次の画像の矢印で示した方向でポリゴンを選択し、バンドグル(Band Glue)ツールで自動統合させる。バンドグルを使いたい時は、統合させたい方向にエッジと交差するように選択しなければならない。同じポリゴンを選択していても、選択方向を間違えると統合のされ方が変わってしまう。

Clothes130

バンドグルで統合し終わった状態が次の画像。選択したのは矢印で示したポリゴンだけだけど、その隣りにある2ポリゴンも同様に統合されているのがわかる。今回は4組8ポリゴンだったので手動で統合していってもそれほど苦労はないんだけど、これが数十組という単位になった時、一括で処理してくれるバンドグルは特に高い威力を発揮する。

Clothes131

靴底のポリゴンの整理が終わったので、靴の周囲のポリゴンをループ選択で綺麗に選択できるようになる。うまく選択されない場合は、バンドグルの処理の過程で生じた不要なポイントが残っていることがあるので、それらを削除する。

Clothes132

このポリゴン群をバンドソープロで3等分した。2分割でもいいかとも思ったけど、もう少し作り込みたいので、3分割にした。

Clothes133

バンドソープロで分割したのが次の画像。分割前の上の画像と比べてみると、足の甲と爪先の部分の引っ張られ具合が緩くなり、無理矢理引き伸ばしたような印象がなくなった。

Clothes134

片方の靴が大体できたら鏡面 Xで反対側の靴を複製する。

途中経過

まだ靴にベルトなどの装飾を加えていきたいけど、同じような操作の繰り返しになるので省略。出来映えはともかく、必要なものはひととおり揃ったこともあり、モデル本体の作り方の過程はひとまずこれで終わり、次回からボーンやウェイト・マップを設定するリギング作業に移っていきたいと思う。

まずはひととおり完成させないことにはポーズひとつ満足につけられない。UVマップの展開やテクスチャの作成などやるべきことはまだたくさんあり、モデリングにばかり時間を使っていられなくなってきたのもある。

Clothes135

関連記事

LightWaveで二次元キャラ系人物モデリング奮闘記 ―服装編2―

最終更新:2016/09/27

前回はおおまかな形にするところまでで終わってしまって大幅に省略したので、ここからは細かいところを作り込んでいく。今回はジャケット編。

襟を作る

最初に襟を作る。Thickenツールで厚みを増した生地の端を選択する。

Clothes025

拡張プラス(Eキー)でポリゴンを追加し、上に伸ばしていく。

Clothes026

襟に段差をつけていきたいので、伸ばした部分の前方部のポリゴンを選択し、削除する。裏側もあるので忘れずに。

Clothes027

表面のポリゴンがなくなって空洞になった部分のポイントの表と裏それぞれを選択し、襟側のポイントに統合(Ctrl+W)する。サブパッチがかかっているとループ状になってわかりにくくなるので、一度解除してから統合ツールを使ってもいい。なお、統合ツールは後に選択したポイントに吸着する特性があることを頭に入れておくと思わぬところに吸着されてしまうミスは防げる。

Clothes028

Thickenツールで厚みをつけると、概ねベースになったポリゴンの法線方向にシフトするので、襟の端にあたるポリゴンのエッジは斜めになっている。ここで後の作業がしやすいようにポイントを整列させて少し整理する。

次の画像のように襟の一番前側のポイントを最初に選択する(対称モードを使用しているので2つ選択している)。

Clothes029

整列させたいポイントを次の画像のように追加し、「変形」メニューグループにある軸でポイント整列(Align Points to Axis)ツールを選択する。

Clothes030

前後方向を揃えたいので、Z軸を選択し、「Align to」を「First Point」に設定し、「OK」をクリックする。最初に選択したポイントのZ座標に合わせて他のポイントが整列される。

Clothes031

同様にして、襟の上面にあたる部分もY軸座標で整列させる。整列が終わった状態が次の画像。

Clothes032

再度サブパッチをかけると次の画像のようになる。ほとんど変わっていないように見えるけど、整列をやっているのといないのとでは以後の作業のしやすさが大きく変わってくる。

Clothes033

移動ツール(Tキー)で襟を大きく広げる。内側に向いているポリゴンをいっぺんに大きく移動させると無理が出てくるので、回転ツール(Yキー)などで向きを調整しながら少しずつ広げていく。多少ポリゴンがよじれてしまっても問題ないので、無理に平面を維持しようとしなくてもいい。ただ、襟の厚さが途中で大きく変わってしまうのは問題なので、表と裏をもれなく一緒に移動させたり回転させたりする。そこだけ意識するようにしたい。

Clothes034

襟の上半分の連続したポリゴンをいくつか選択し、ループ選択で表から裏までぐるっと選択する。

Clothes035

ちなみに、ループ選択は多用する割にはショートカットキーが割り当てられていないので、「˜」(Shift+^)に割り当てている(日本語キーボードには書いてないけど、BackSpaceキーの2つ隣り)。初期設定では「曲げる」ツールに割り当てられているショートカットだけど、そんなに頻繁には使わないので上書きしてしまった。「`(グラーブアクセント記号)」(Shift+@)のドローツールを「開いたカーブ(Make Open Curve)」に置き換えてあるので、隣り合うキーにショートカットを割り当てておくと曲線を量産したい時に便利。どんな場合に曲線を量産する必要があるのかはいずれ説明したい。

バンドソープロで次の画像のように2分割する。ループ選択をするまでもなく、バンドソープロはループしながらポリゴンを分割していくので、いきなりバンドソープロでも同様の結果は得られる。

Clothes036

襟の上半分の前側のポリゴンを次の画像のように選択する。

Clothes037

拡張プラスと移動ツールで次の画像のように前に押し出す。

Clothes038

更にループ選択してバンドソープロを使って3分割する。

Clothes039

バンドソープロの設定は次の画像のとおり。5%と95%の部分で分割するようになっている。

Clothes040

分割し終わった状態が次の画像。主な目的は、そのままでは丸みがありすぎて締まりがない角をきちんと立たせ、制服っぽいハードな襟に見せるため。ここで先ほど表に見えているポイントを整列させた効果が出てくる。斜めのまま放置しておくとどんなにバンドソープロで分割しても傾いたままになってしまう。ここからポイントを整列させようとすると手間は単純に4倍になる。

Clothes041

拡大して更に襟を作り込む。次の画像のように襟の先端のポリゴンをひとつ選択する。

Clothes042

拡張プラスでエッジを増やし、移動はさせないで次の画像のように拡大縮小ツール(Shift+H)で50%まで縮小する。

Clothes044

今まで特に触れてこなかったけど、「アクションの中心」は「選択範囲」モードにしておく。マウスなどのポインティング・デバイスの位置で中心点を決める「マウス」モードではどうしても大雑把な指定になってしまうので、ある程度モデラーの計算に任せる。特に意図がある場合以外、基本的には「選択範囲」モードを使用している。

Clothes043

更に拡張プラスと移動ツールで窪みを作る。押し込む移動量は大体でいいけど、とりあえず襟の厚さの半分くらいにした。

Clothes045

今度は次の画像のように前側の先端のポリゴンを選択する。

Clothes046

同様に拡張プラス、拡大縮小ツール、拡張プラス、移動ツールの順に適用し、次の画像のように側面と同じような窪みを作る。

Clothes047

サブパッチを解除すると次の画像のようになっている。

Clothes048

前面と側面の窪みを繋げて切り欠き状にしたいので、余分なポリゴンを削除する。側面の窪みが目論見の切り欠きに近いので、前面の窪みのほうのポリゴンを削除していく。

Clothes049

ポイントの統合ツール(Ctrl+W)を使って前と横をつなぎ合わせいく。側面の窪みを基準にして要所でポイントを整列させながら統合していくと綺麗にできる。色々つぎはぎはしたけど、4ポイントのポリゴンしか使ってないことがわかると思う。

Clothes050

このような切り欠きを作りたいのであれば、ブーリアンの減算を使うほうが簡単だと思うかもしれない。もちろんそれでもいい。

ただ、ブーリアンの場合は背景レイヤーに切り欠きに相当するオブジェクトを別途用意しなければならないし、今回のようにちょうど半分の大きさの切り欠きにしたい場合は位置合わせにも神経を使う。また、ブーリアンを使った直後は前景レイヤーと背景レイヤーのポリゴンが交差した部分のポイントが統合されていないので統合する手順が必要になる(統合し忘れるとサブパッチが崩れる)。その上、4ポイントのポリゴンを維持するには分割ツール(Ctrl+L)で丹念に切り分ける必要が出てくる。切り欠きの形状が複雑な場合はブーリアンを使うメリットのほうが大きいかもしれないけど、今回のような単純な直方体の場合は拡張プラスを活用して1レイヤー完結でジオメトリを構築していったほうが後始末は簡単に済む。要は適材適所といったところで、どの方法を使うのが能率がいいかはその時々で判断していくしかない。

サブパッチを適用すると次の画像のようになる。目的の切り欠きにだいぶ近くなってきた。

Clothes051

まだエッジの角が丸く、思ったほどのシャープさがない。更にポリゴンを分割してエッジを追加していってもいいんだけど、細かいところに過剰な労力をかけても仕方がないので、別の方法を使う。

切り欠きのエッジを全部選択し、「詳細」メニューグループにあるシャープネス設定を選択する。

Clothes052

ここではひとまず「50%」に設定してみる。何も設定していなければ0%になっているので、基本的には増やす方向。100%を超える値や負の値にはならない。

Clothes053

シャープネスを設定すると次の画像のように思い通りの切り欠きになった。100%にするとサブパッチがまったくかかっていない状態と同じになるけど、あまりシャープネスを上げすぎても周囲の丸みをおびたエッジに比べて不自然になるのでほどほどにしておく。「シャープネス増加」と「シャープネス減少」を1回クリックすると10%ずつ増減するので、それで様子を見ながら設定してもいい。

Clothes054

ここで言うシャープネスというのは、「エッジ・ウェイト」のことで、設定すると「Edge Weight」という名称のウェイト・マップが自動的に作成されてそこに情報が保持される。ウィンドウ右下の「W」ボタンを押し、「Edge Weight」を選択した上でビューポートの表示モードを「ウェイトシェイド」にすると設定状態を視覚的に確認することができる。エッジを選択した状態でIキーを押してエッジ情報を表示させても数値を確認でき、一括で値を変更することもできる。

Clothes099

エッジの先鋭化(シャープネスの増加)は、エッジ選択ができるようになるLW 9.6の前までは対象ポイントにサブパッチ・ウェイトを設定することで実現していたものなんだけど、サブパッチ・ウェイトはその名のとおりサブディビジョン(SubD種)が「サブパッチ変換」の時しか作用しないもので、エッジを先鋭化させたい場合は3ポイント又は4ポイントのポリゴン以外は許されないサブパッチ変換によるモデリングを余儀なくされていた。ところが、エッジ・ウェイトは5ポイント以上のポリゴンも許容される「キャトマル変換」でも有効で、見た目の上ではサブパッチ・ウェイトと何ら変わりがない。事実上、サブパッチ・ウェイトを使うかどうかは、古いLightWaveで作成した過去の作品を活かしたい場合を除いてはユーザーの好みの問題だけになった。

肩章を作る

ミリタリー風のジャケットやコートなどによく見られるエポレットを作る。特に難しいところはない。

肩と袖がつながっているあたりのポリゴンを次の画像のように2つほど選択する。

Clothes055

拡張プラスでポリゴンを増やし、拡大縮小ツールで適度にサイズダウンする。選択範囲モードで縮小すると肩の高さより低くなるので、移動ツールで高さを揃えておく。布の部分なのでそれほど厳密でなくてもいい。

Clothes056

拡張プラスと移動ツールで引き延ばしながら先端のポリゴンを45°ずつ回転させていき、90°回転したところで襟側に向かって引き延ばす。先端の位置が大体決まったら前後方向を縮小して先端を少し尖らせておく。

Clothes057

肩章はこれで終わり。ただ、なんとなくおかしい感じがしたので画像検索でエポレットが備えられた服飾を調べてみたら、こんなに大きいループを描くエポレットはほとんどなかった。肩の生地に水平に縫い付けられていてほとんど隙間がないことが多いので、ちょっとやりすぎた。資料はよく見ましょう…。

やりすぎてしまった場合は「構造」メニューグループにあるバンドグル(Band Glue)ツールでポリゴンを減らして適当な形になるように調節する。

袖章を作る

袖章はテクスチャで描いてしまってもいいんだけど、せっかくサブパッチを活用してハイポリゴン・モデルを作っているので、オブジェクトで作る。昨今はZBrushをはじめとするスカルプチャ・モデリングができるソフトウェアの台頭でテクスチャ・マップやノーマル・マップに頼らなくても3Dモデルに直接精緻な彫刻を施すことが可能になっているので、可能な限り凹凸をポリゴンで再現していきたい。

まず、袖に袖章を接続するための土台を作る。袖の下腕部分を選択してバンドソープロを使用する。表側だけでいいので、裏地のポリゴンも分割してしまわないように。最近のPCは安くても高性能なものが多いので、多少ポリゴンが増えたところで体感できるほどレンダリング時間が延びることはないけど、用もない分割は極力避けたい。

Clothes075

バンドソープロの設定は次の画像のとおり。10%の位置で分割するようにしてある。半分に切って移動ツールでポイントかエッジを移動させてもいいんだけど、袖には多少なりともテーパーがかかっているものなので、できればその先細りを維持したい。

Clothes074

なお、作業の途中でWindows 10にアップグレードしてしまったので、ここからスクリーンショット内のウィンドウデザインが変わってしまうけど、ご勘弁願いたい。ちなみに、Windows 7/64bitからの移行だったけど、LightWave10.1はちゃんと動作している。

袖の上側のポリゴンを4つ選択し、拡張プラスと拡大縮小ツールで土台を形成し、袖口のほうへ移動させておく。次の画像のようになった。

Clothes076

土台ができたので、袖章を作っていく。当初は袖を拡張プラスなどで盛り上げて作る方法も考えたんだけど、手動で加工するとどうやっても歪むので、別のレイヤーでディスクから作ることにした。袖章のモールにはループがあるデザインなんだけど、それを可能な限り円形に近くしたいから。

まず、ディスクツールで正八角柱を作る。Y軸方向に3分割してある。例によって八角形なのは土台が4ポイントのポリゴン4つで構成されているから。

Clothes059

後で縮小するのは余分な手間なので、袖の太さと比較して適度な大きさになるように最初から小さく作っておく。中心点は後からでも調整がきくので、とにかく正八角柱を作る。

Clothes058

上面と底面のポリゴンは必要ないのでDeleteキーで削除する。サブパッチでモデリングしていく場合、ディスクの上面と底面は大抵必要ない。

Clothes062

平均統合(Weld Average)を用いて八角柱の外縁のポイントを中心位置で統合させる。上面と底面のポリゴンが残っていると点ポリゴンになってしまうので注意。

Clothes060

高さを揃え、上面の8つのポリゴンを選択する。拡張プラスでポリゴンを増やし、拡大縮小ツールで40%まで縮小する。40%という数値はあらかじめデザインしておいた袖章の比率から求めた。

Clothes061

底面も同様に加工し、上面と底面の合計16ポリゴンを選択する。

Clothes063

ブリッジで中央に穴を開ける。ブリッジは本当に便利。ブーリアンの減算のように交差したポイントが分離されてしまうこともない。

Clothes064

ブリッジの処理で残ってしまった中心のポイントを削除する。

Clothes065

ここまでやってしまってから八角形のポリゴンのまま縮小してブリッジしても結果が同じだったことに気付いたけど、この程度の加工は頭を使わなくても進められるし、よくあることなので気にしない。

穴の内側のポイントの位置を調べる。X座標は2.733mであることがわかったので、これをコピーする。

Clothes066

ナイフツール(Shift+K)のX座標に2.733mをペーストし、次の画像のようにカットする。本当は内側まで切り進めたいところなんだけど、交差する座標がまったく同じだと結果が不確定になるので外側のひとつ目までにしておく。

Clothes068

なお、途中までカットしてできる宙に浮いたポイントを内側のポイントに接続すると、ポリゴンが分割されたことにならず、7ポイントの1ポリゴンとして扱われてしまってサブパッチ適用時におかしいことになってしまう。途中まで切り進めたポイントはもったいないけど残さず削除する。

Clothes067

地味だけど、分割ツールで次の画像のように内側のポイントとエッジを接続して3ポイントと4ポイントのポリゴンに切り分ける。

Clothes069

袖章の腕の部分を引き延ばしていく。角に直接つながっている3ポイントのポリゴンがあるとサブパッチ適用時に想定外の方向へ歪むので、次の画像のように外側のエッジを選択して半分にデバイドしてポイントを増やす。

Clothes070

デバイドしたポイントと内側のポイントを接続するために次の画像のように分割ツール(Ctrl+L)で切り分ける。

Clothes071

3ポイントのポリゴンを選択してポリゴンを結合(Shift+Z)する。

Clothes072

反対側の腕も伸ばして袖章の基礎は完成。サブパッチをかけてみて次の画像のようになっていれば成功。

Clothes073

ここまでできたら、袖章の裏側のポリゴンは削除する。裏側をそのままにしていると袖と接合した時にポイント間の距離が0になり、サブパッチが処理しきれなくなって奇妙なトゲのような出っ張りができてしまう。おそらく、0で除算すると計算結果が無限大になってしまうという数学の反比例の関数のグラフと同じような現象なんだろうと思う。

袖章をジャケットのあるレイヤーにコピーする。ここで袖の正中線に合わせて位置を調整しておく。

袖章の形に袖側の土台を合わせていきたいので、袖章のポリゴンのスケッチ色を「詳細」メニューグループにあるスケッチ色で赤に設定する。これによって間違って袖章を構成するポイントを動かしてしまった時にすぐに気付けるようにする。

Clothes077

残念ながらLightWaveのモデラーには他のソフトウェアにあるようなマスクに相当する機能がないため、任意のポリゴンを誤って操作することがないようにロックすることはできない。運用面でカバーするしかないわけだけど、このスケッチ色という概念は他の3DCGソフトウェアには意外とないものらしい。レンダリングの結果にはまったく影響しないものだけど、ポリゴンの簡易グループとして使い方次第ではかなり重宝する。ただし、スケッチ色は「なし」も含めて14色しかないので、本格的なグループ化をしたい場合はパーツ作成機能を使う。

あとは、とにかくどんな手段を使ってもいいので、袖側のポイントを袖章に接合する。サブパッチを解除して内側から順に接合していくと少しはやりやすい。

Clothes078

途中で袖側のエッジが足りないことに気付いたので、ポリゴンの分割方向を切り替えたり、無理矢理デバイドで接合先のポイントを増やしたりもしている。はっきり言っておすすめできないし、あまりにややこしくて詳しい手順を書く気にもならない。袖章のモールを円形にしたいだけの理由でわざわざ背負っている苦労だから。もはやこだわりの問題で、ローポリゴン・モデルのようにテクスチャとノーマル・マップで作ることにしてしまってもまったく問題ない。

大体接合が終わったら、スムース押し出しで袖章の続きとなるモールを作る。スムース押し出しはポリゴンの法線方向にシフトしてくれるので、意外に簡単にできる。

Clothes080

特に示すまでもないかもしれないけど、スムース押し出しの設定は次の画像のとおり。

Clothes079

袖章の腕を統合ツール(Ctrl+W)でスムース押し出しで作ったモールと接合する。どこがモールなのかわかりやすいように全体のスケッチ色を統一して仮にマテリアルを割り当ててみた。

Clothes081

袖章の上の部分は平らのままなので、回転ツールを使って袖の曲率に極力合わせる。この時、回転の中心を袖章の正中線に位置しているポイントから取得するようにすると歪まなくて済む。ポイントをひとつ選択して「選択範囲」モードで回転ツールを適当に動かしてみるとポイントの座標が中心点に代入されるので、ポイント情報からコピー&ペーストする手間が省ける。1ポイントなら回転させようがないので、誤って変な方向に動かしてしまうこともない。これは結構おすすめな方法。

Clothes082

袖章のポリゴンを隠す(-キー)でどかしてみると、袖の表面は次の画像のようになっている。相当ゴチャゴチャなトポロジーになっているけど、目的のためには手段を選んではいられない。ちょうど袖章の裏打ちになるようにしている。

Clothes084

袖章のポリゴンを透明にしてみるともう少しわかりやすいだろうか。スムース押し出しで作った部分にも裏打ち用のポリゴンを追加してある。

Clothes083

袖側のポリゴンで裏打ちをしてあることによって、遠方にある袖のポイントに引っ張られて袖章の形が大きく崩れてしまうのを防いでいる。こう書くとすごい工夫のように思うかもしれないけど、かなり苦肉の策で、本当のところは反則技。

この方法を用いると、ひとつのエッジを3つ以上のポリゴンで共有することになってしまい、他のソフトウェアにこのようなオブジェクトのデータをインポートしようとするとエラーが出る。通常はエッジを共有するポリゴンは2つまでというのが常識。3つ以上あるということは、そのうちいずれかのポリゴンの法線方向が不確定ということになり、オブジェクトの外形を構築できなくなるからだ。特に、中身が詰まっていて表面に見えていないポリゴンがないことを前提としているスカルプト系のソフトウェアでは間違いなくエラーになる。

本来は反則技なわけだけど、LightWaveでは許されてしまうので、このまま進める。なんで問題を放置するかというと、袖章は1種類ではないから。この袖章は少尉のもので、最低でも中尉、大尉、少佐までの4種類の袖章を用意する必要がある。必要分が揃ってから裏打ち問題をどうにかすることにしても遅くはない。正攻法では、袖章の側面をバンドソープロで分割して袖側のポイントに引っ張られないように制限をかける。他のソフトウェアへのデータ移行の際はその時に考える。

合わせ部分を作る

最後に、ジャケットの前にあたる合わせ部分を作り込む。途中から対称モードが使えなくなるので、左右の対称性に疑問が残る場合はX軸の0座標で半分に切って鏡面 Xで再度貼り合わせて不安要素を取り除いておく。合わせ部分を最後に残しておいたのは、対称モードが使えなくなるからに他ならない。

Clothes085

内側に向いている合わせの端のポリゴンを選択する。まだ対称モードは使える。

Clothes086

拡張プラスと移動ツールでメッシュが大体均等になるように2段階に分けて左右を交差させる。目的によっては段階をもうけないで一気に引き伸ばしてもいいけど、そうするとメッシュが極端に伸びるためにポイント間の距離が遠くなって生地の端も内側に引っ張られる力が強くなる。結果、元の形状を維持できなくなることには注意したい。

Clothes088

ただ、こういった点に注意しなければならないからと言ってそれがただちにLightWaveの欠点になるわけではない。他のソフトウェアでも、ポリゴンのメッシュが他の部分と比較して極端に粗いところがあるとサブディバイドをかけても粗くて制御しにくいのは変わらないため、あらかじめ適度に分割しておく必要がある。むしろ、サブディバイドをかける前に結果がある程度予想できるという点はLightWaveの長所と言える。

右側が前になるデザインなので、左側の合わせを後ろに移動させる。右側から飛び出してしまう場合は回転ツールなどを使ってなんとか内側に収まるように調節する。左側は以後前に出てくることはないので、インナーにぶつからない程度であれば位置決めはおおまかでいい。

Clothes089

元の襟の形の影響で斜めになっている部分があるので、軸でポイント整列(Align Points to Axis)でX軸を揃えておく。

Clothes091

どこのポイントを基準にするか特に決まりはないけど、ここでは裾側のポイントを基準にした。

Clothes090

右側の合わせは上側で折り返すデザインなので、右側の合わせの上面のポリゴンを選択する。

Clothes092

拡張プラスと移動ツールで上に伸ばし、そのまま回転ツールで90°前に回転させ、更に拡張プラスと移動ツールで前に伸ばし、もう一度90°、合計180°回転させて折り返す。更に下に伸ばし、前に垂らす。

Clothes093

斜体(Shear)ツール([キー)で前に垂らした部分を斜めにずらす。斜体ツールはちょっとクセのあるツールだけど、間隔を変えずに均等に斜めにしたい場合は移動や回転ツールを使うよりも斜体ツールを使うほうが便利。メカのモデリングでは装甲厚を変えずに断面を斜めにしたい時などに活躍するツール。

Clothes094

奥に押し込んだ左側の合わせ部分も同様に斜体ツールでずらして襟を大きく開ける。斜体の基準点が右側になってしまってうまくいかない場合は、フォールオフの形状を「右上がり」から「右下がり」に変更してやり直す。

Clothes095

前に垂らした襟を形成する。角の部分のひとつが要らなくなったので、ポリゴンを3ポイントに分割し、端のポリゴンをひとつ減らしてある。

Clothes096

前に垂らした襟に装飾を施す。ここでもあまりおすすめできない方法をたくさん使っているので詳しくは書かないけど、ベベル(Bevel)ツール(Bキー)のインセット量で生地の端からのマージンを一定量確保してから各ポリゴンごとに分離してしまったエッジを再度貼り合わせ、拡張プラスと移動ツールで襟をまつった上でバンドソープロでエッジを立たせてある。手順が煩雑な上、どのポリゴンが余分かを判断して切り落としていく過程がわかりづらいかもしれない。

一般的な方法としてはスムース押し出し、ノーマル移動、拡大縮小ツール、拡張プラスなんかで作っていくのが常套なんだけど、細かいところで法線方向に一斉に動かれるとジオメトリがゴチャゴチャになって自分でもどこがどうなってるのかわからなくなりやすい。裏は表と反対向きに形成することを考慮しなければならないため、私としてはシフト量を0にしたベベルを使い、シフトをツールに任せずに自力で調整したほうが気が楽だと思ったのでそのような方法を採った。

Clothes097

過程を記録していたGIMPがファイルの保存時に異常終了してしまったので、スクリーンショットがいくつか飛んでしまった。Windows 10はまだ新しいためか、7よりも安定性が悪い気がする。Win 7ではGIMPがフリーズしたことは記憶にある範囲では1回もなかったのに。

それはそうと、Windows 10にアップグレードして数日してからモデラーのカラーワイヤーの色が変わってしまった。サーフェースの設定を変更していないのにOpenGLのシェーダのかかり具合も前と比較して明らかに異なる。他でLightWaveを扱っているブログなんかを見ると、確かこんな感じの色だった気もするので、これが正しい表示なのだろう。以前は選択した直後のポイントやポリゴンの色が異様に濃かったりしたので、むしろ前のほうがおかしかったのかもしれない。特に設定をいじった記憶はないのでGeForceのドライバーとの適合が適正化されたということなんだろうか。調べてみたけど、詳細な原因は不明。

途中経過

ひとまずジャケットは完成。レンダリングするとやはり袖章の周囲の影が少しおかしい。やはり反則技は反則ということか。あとまったく手をつけていないのは靴だけ。髪型が変わってるけど、実は髪の毛もやり直し中。

Clothes098

関連記事

Janetterにフォロワー数/リツイート数/いいね数を表示する

最終更新:2017/01/27

カスタムテーマを設定すると、アカウントのアイコンの下にフォロワー数が表示される。6桁までは表示できた。リツイートされたツイートだとしても、ツイート元のアカウントのフォロワーが表示されるようになっている。また、本文の下にリツイート数といいね(お気に入り)の回数が表示されるようになる。自分のツイートでは良い条件のツイートがなかったので、ニュース記事のツイートを借りてきた。

TwitterクライアントJanetter(ジャネッター)にはタイムラインの表示方法やデザインを選べる「テーマ」という機能がある。標準で実装されているシンプルなテーマ群でも実用上はそれほど困らないんだけど、本家のTwitterのウェブ・クライアントと比べて情報量がやや少ない。

本家では「リツイート」や「いいね」(旧仕様の「お気に入り」)の回数がこれといった操作なしに常に表示されているけど、Janetterでは各ツイートの日付・時刻に備えられたリンクをクリックしてブラウザで確認しないとどのくらい「リツイート」や「いいね(お気に入り)」されているツイートなのか確認できない。

また、そのツイートをつぶやいたアカウントがどのくらいのTwitterユーザーにフォローされているのかはアカウントのリンクをクリックしてプロフィール用ウィンドウを表示させなければならない。本家のウェブ・クライアントではマウス・ポインタをユーザー名の上に置けば簡単なプロフィールを確認することができる。

全部は無理としても、アカウントのフォロワー数とツイートのリツイート数といいね(お気に入り)の回数くらいは視覚的に確認できるようにしたい。なお、名前が変わっただけで、Twitterの内部的には「いいね」と「お気に入り」はまったく同じもので、APIから送られてくるツイートの情報は相変わらず「Favorite(d)」になっている。

そこで、改良したユーザーテーマを作成してこれらの情報を表示させてみようと思う。なお、テーマの作成は一種のプログラミングなので失敗しても当方は責任を負えない。プログラムやスクリプトの作成経験がない場合は特に慎重に。

言うまでもないことだろうけど、Janetterを終了してからテーマの変更を行う。

テーマの移設

テーマを最初から全部作成するのは大変なので、標準のテーマのうちのひとつを複製して移設する。ここではもっとも標準的なSparrowテーマを使用する。

テーマを構成するデータは次のフォルダに入っているので、これをフォルダごと複製し、まずはフォルダに適当な名前をつける。ここでは仮に「TestTheme」とする。

C:\Program Files (x86)\Janetter2\Theme\Items\Sparrow

本来は*.janetthemeというテーマ・ファイルからJanetterに読み込ませてテーマを自動インストールするんだけど、自作の場合はフォルダを増設することで手動インストールすることができる。また、テーマ・ファイルは名前が違うだけで実態はzip形式の圧縮ファイルなのでJanetterの代わりに自分が解凍済みのデータをインストールしたと思えばいい。

TestThemeフォルダに入ったら、theme.iniという初期設定ファイルを開く。UTF-8(BOMなし)で記述されているので、Windows標準のメモ帳(Notepad)よりはあらゆる文字コードに対応した高機能テキスト・エディタを使用したほうが無難。

[TestTheme]
name = TestTheme
description = Left side menu
sample_image = sample.jpg
author = Jane, Inc.
url = http://janetter.net
twitter_id = Janetter_jp
main_frame_html = index.htm
popup_html = ..\..\Common\notice\notice.htm
image_viewer_html = ..\..\Common\viewer\viewer.htm
map_viewer_html = ..\..\Common\viewer\map.htm
profile_html = ..\..\Common\profile\profile.htm

最初の2行を書き換える。Janetterは最初の1行でテーマの存在を識別するので、必ず2行とも書き換える。また、標準のテーマから移設した場合、index = 0010といったようにインデックス番号を付けられているけど、この行は削除しておく。あっても害はないけど、Janetterでのテーマの表示順に関係しているので、最後に表示させることにする。

テンプレートの改造

次に、標準テーマで共通で使用されている共有テンプレートのtweet.tplファイルをTestThemeフォルダにあるtemplateフォルダにコピーする。

C:\Program Files (x86)\Janetter2\Theme\Common\template\tweet.tpl

また、同じフォルダにあるtweet.cssファイルも同様にコピーしておく。

C:\Program Files (x86)\Janetter2\Theme\Common\template\tweet.css

tweet.tplファイルを開くわけだけど、ここからは本当に高機能テキスト・エディタを使うべき。コードの間違いなのかファイルのデータ形式の問題なのか区別できなくなるので、信頼できるコーディング用テキスト・エディタを使うことを強くおすすめする。無料で使えるところではStyleNote5などがおすすめ。ウェブ作成関連で使用しそうな言語やマークアップにはすべて対応しており、コメントの閉じ忘れなど単純な書き間違いはその場でわかる。

フォロワー数の表示

テンプレートはJartyという一種のスクリプト言語で記述されている。ファイルの最初のほうは次のようになっている。わからなければprofile-boxというクラスを目印にして検索するといい。

				<div class="profile-box">
					{if $retweeted_status}{* RT *}
						<p class="main-profile">
							<a action="all"><img src="{$retweeted_status.user.profile_image_url}"></a>
						</p>
						<p class="sub-profile">
							<a action="all" class="sub-profile"><img src="{$user.profile_image_url}"></a>
						</p>
						<div class="icon-rt"></div>
					{elseif $user}{* Normal *}
						<p class="main-profile">
							<a action="all"><img src="{$user.profile_image_url}"></a>
						</p>
					{elseif $sender}{* DM *}
						<p class="main-profile">
							<a action="all"><img src="{$sender.profile_image_url}"></a>
						</p>
						{if $isMe}
							<p class="sub-profile-dm">
								<a action="all" class="sub-profile"><img src="{$recipient.profile_image_url}"></a>
							</p>
							<div class="icon-dm"></div>
						{/if}
					{else}{* Search *}
						<p class="main-profile">
							<a action="all"><img src="{$profile_image_url}"></a>
						</p>
					{/if}
				</div>

profile-boxクラスはツイートしたアカウントやそれをリツイートしたアカウントのアイコンが表示される領域で、そこにツイート元のアカウントのフォロワー数を表示する行を追加する。

				<div class="profile-box">
					{if $retweeted_status}{* RT *}
						<p class="main-profile">
							<a action="all"><img src="{$retweeted_status.user.profile_image_url}"></a>
							<div style="width:36px; margin:0 0 4px 0; text-align:center; color:Black; font-size: x-small;">{$main_user.followers_count}</div>
						</p>
						<p class="sub-profile">
							<a action="all" class="sub-profile"><img src="{$user.profile_image_url}"></a>
						</p>
						<div class="icon-rt" style="top: 57px;"></div>
					{elseif $user}{* Normal *}
						<p class="main-profile">
							<a action="all"><img src="{$user.profile_image_url}"></a>
							<div style="width:36px; margin:0 0 4px 0; text-align:center; color:Black; font-size: x-small;">{$main_user.followers_count}</div>
						</p>
					{elseif $sender}{* DM *}
						<p class="main-profile">
							<a action="all"><img src="{$sender.profile_image_url}"></a>
						</p>
						{if $isMe}
							<p class="sub-profile-dm">
								<a action="all" class="sub-profile"><img src="{$recipient.profile_image_url}"></a>
							</p>
							<div class="icon-dm"></div>
						{/if}
					{else}{* Search *}
						<p class="main-profile">
							<a action="all"><img src="{$profile_image_url}"></a>
							<div style="width:36px; margin:0 0 4px 0; text-align:center; color:Black; font-size: x-small;">{$main_user.followers_count}</div>
						</p>
					{/if}
				</div>

リツイート数/いいね(お気に入り)数の表示

次に74行目付近。tweet-bodyクラスが記述されている。ここにツイートの本文を表示するようになっている。

							<div class="tweet-body">
								{if $retweeted_status}{* RT *}
									<p class="text">{$retweeted_status.text}</p>
								{else}
									<p class="text">{$text}</p>
								{/if}
							</div>

本文の直後に「リツイート」の回数が2回以上あればリツイート数を表示し、「いいね(お気に入り)」の回数が1回以上あればいいね(お気に入り)数を表示するコードを記述する。

							<div class="tweet-body">
								{if $retweeted_status}{* RT *}
									<p class="text">{$retweeted_status.text}</p>
								{else}
									<p class="text">{$text}</p>
								{/if}
								{if $retweeted_status}{* RT *}
									{if $retweeted_status.retweet_count>1}
										<p class="rtcount">{$retweeted_status.retweet_count}</p>
									{/if}
									{if $retweeted_status.favorite_count>0}
										<p class="favcount">{$retweeted_status.favorite_count}</p>
									{/if}
								{else}
									{if $retweet_count>1}
										<p class="rtcount">{$retweet_count}</p>
									{/if}
									{if $favorite_count>0}
										<p class="favcount">{$favorite_count}</p>
									{/if}
								{/if}
							</div>

$retweet_count変数はTwitterから取得したリツイートの回数を、$favorite_count変数はいいね(お気に入り)の回数を格納している。ただし、これらの変数の数値はリツイートの場合($retweeted_status == true)にはリツイートした人のツイートについての情報になるため、元のツイートのリツイート数を知りたい場合は$retweeted_status.retweet_count変数から参照しなければならない。いいね(お気に入り)の回数についても同様で、$retweeted_status.favorite_count変数から参照する。

以上でテンプレートの編集は終了。ファイルを保存する。

CSSの追加

次に、tweet.cssファイルを開く。ファイルの最後までスクロールし、次のスタイルを追加する。リツイート数といいね(お気に入り)数の表示にはそれぞれrtcountとfavcountというクラスを割り当ててあり、それをどのような表示形式にするかという指定にあたる。CSSの記述方法を知っているのならば、ここは好みで自由に変更できる。

.rtcount {
	color: #fff;
	background-color: #19cf86;
	display: inline-block;
	width: 25%;
	border-radius: 5px;
	text-align: center;
	font-weight: bold;
}
.favcount {
	color: #fff;
	background-color: #e2264d;
	display: inline-block;
	width: 25%;
	border-radius: 5px;
	text-align: center;
	font-weight: bold;
}

厳密には、Jartyが表示する場所や内容をクラスで管理していると言ったほうが正しく、新しい表示要素を追加したい場合にはそれに対応するクラスを新たに定義しなければならない。

例えば、textクラスはツイート本文のクラスだけど、ただのテキストだからと思ってこれを別の用途に流用しようとすると、ツイート本文が2回、3回と連続で表示されたりする。また、クラスを定義していないHTMLタグを記述するとタイムラインが表示されなくなる。つまり、クラスはCSSのためだけにあるのではなく、内容にも紐付けられて管理されているということになる。

最初はHTMLを動的に生成するPHPのようなものかと思っていたけど、テンプレートに特化したスクリプトなのでPHPほどには融通はきかない。フォロワー数がクラスを定義しなくても表示できたのは本当に偶然。なんで大丈夫なのかは今でもよくわかっていない。とは言え、Jartyは構文をPHPに似せて作ってあり、関係演算子などはそのままコピーできるように設計されているようだ。

アイコン画像パスの変更

Sparrowテーマは独自のtweet.cssファイルを持っていないため共通ファイルから引っ張ってきたわけだけど、アイコン画像は共通のものをそのまま使いたいのでパスを変更しなければならない。基本的には、../../Common/images/timeLine/../../../Common/images/timeLine/に一律に置換すればいい。

独自のtweet.cssファイルを最初から持っているテーマから移設した場合は変更しなくてもいい。なお、CSSには独自にかなり変更を加えてしまったので、行番号は大体の位置。

「お気に入り」アイコン。今のTwitterの仕様で言うところの「いいね(お気に入り)」をしたツイートの左上隅に表示される黄色い星のアイコン。

.favorited .star-batch{
	position: absolute;
	top:0px;
	left:0px;
	width: 15px;
	height: 15px;
	background-image: url(../../../Common/images/timeLine/star-batch.png);
}

相互フォロー(スマイル)アイコン、非公開アカウント(鍵)アイコン、未読アイコン、位置情報(ジオピン)アイコン。

span.friend{
	float: left;
	display: block;
	width: 9px;
	height: 9px;
	margin: 4px 1px 0 1px;
	text-indent: -99999px;
	background-image: url(../../../Common/images/timeLine/smile.png);
}
span.protected{
	float: left;
	display: block;
	width: 9px;
	height: 11px;
	margin: 5px 0 0 2px;
	zoom: 0.9;
	text-indent: -99999px;
	background-image: url(../../../Common/images/timeLine/key2.png);
}
span.unread{
	float: left;
	display: block;
	width: 9px;
	height: 9px;
	margin: 4px 0 0 1px;
	text-indent: -99999px;
	background-image: url(../../../Common/images/timeLine/unread.png);
}
span.geopin{
	float: left;
	display: block;
	width: 9px;
	height: 11px;
	margin: 0 2px 0 0;
	text-indent: -99999px;
	background-image: url(../../../Common/images/timeLine/geopin2.png);
}

タイムラインのギャップに表示される波型のアイコン。

.gapArea{
	margin: 3px 0 10px 0;
	height: 24px;
	text-align: center;
	background-image: url(../../../Common/images/timeLine/gap_line.png);
	background-repeat: repeat-x;
}

以上でCSSの編集は終了。ファイルを保存する。

CSSファイルを保存したら、Janetterを起動する。設定画面から「デザイン」を選び、最も右に作成したTestThemeがあるので、それを選択し、「テーマを変更する」ボタンをクリックする。もしも、画面が真っ白になってしまって変化がない場合はテンプレートのコードがどこか間違っているので、別のテーマに戻して不具合を探す。エラーコードなどがはっきり出るわけではないので、変更した箇所をよく確認する。CSSの記述が間違っている程度であればタイムラインが止まってしまうような事態が起こることはまずない。

問題点

Janetter002
(参考)Janetterを利用したことがない方のために変更前のSparrowテーマの表示。フォロワー数、リツイート数、いいね(お気に入り)の回数は表示されない。サムネイル画像のサイズが大きいのはカスタムスタイルシートを設定してあるため(前の記事参照)。

フォロワー数は概ね期待どおりの結果になったんだけど、リツイート数といいね(お気に入り)の回数には少し問題があった。

リツイート数といいね(お気に入り)の回数はあくまでも大体のものだと思ったほうがよさそう。Janetterが定期的にAPIを叩いた時点での数値なのでツイートを読むまでに時差があった場合、本家のウェブ・クライアントと比べてみるとリツイート数にかなり差が出てしまっていることもよくある。

特に、「いいね(お気に入り)」の回数はかなりあてにならない。実は、実装はしていても$favorite_count変数はJanetterの公式でも現在公開されていなくて、信頼性が低いことは認識しているようだ。

それから、フォローしているアカウントのツイートが流れる「ホーム」のタイムラインに限ってはリツイート数もいいね(お気に入り)の回数も表示されないことがある。「再読み込み」をかけると表示されるんだけど、リアルタイムで追加されていくツイートには表示されない。一方、同じくリアルタイムで追加されていくものでも「リスト」では正しく表示される。

テンプレートは同じものを使っているので、おそらくリアルタイム性を重視したホーム用のユーザーストリームAPIとリストのデータをまとめて読み込むクローラーAPIの違いなんだろうと思うけどTwitter本家の仕様なのでクライアント側ではどうしようもない。Janetterがリツイート数といいね(お気に入り)数の表示に標準で対応していないのはこのへんに理由があるのかもしれない。

表示例

関連記事

参考記事