2020年8月30日日曜日

Blender で頂点グループソートスクリプトを書いてみた

 Theそんなもん標準機能につけておけ。というシロモノ。
当初作る際に面倒なプログラムになりそうだと思っていたのですが、調べていたらそのまんまな関数がありました。…そこまで作っているなら最後まで実装して欲しいのですが。

# vg sort

import bpy

if bpy.context.mode == 'OBJECT':
    # print all selected objects
    for obj in bpy.context.selected_objects:
        print(obj.name)
        
        # Use objectmode only
        if obj.type == 'MESH':
            bpy.ops.object.vertex_group_sort(sort_type='NAME')
            # bpy.ops.object.vertex_group_sort(sort_type='BONE_HIERARCHY')

これが

こうなる

使用方法はオブジェクトモードで該当するオブジェクトを選択して、スクリプト実行。
一応、2.7系、2.8系両対応です。

ただし、頂点グループのソートが bpy.ops.object に対して、選択されたオブジェクトの検索ループが bpy.context.selected_objects となり齟齬が出ています。

手っ取り早く言うと、複数のオブジェクトを選択してこのスクリプトを実行するとちゃんと動作しない可能性が高いので、1個ずつオブジェクトを選択して実行して欲しいです。

尚、このソースでは名前順に並べ直しますが、コメントアウトした'BONE_HIERARCHY'側を使うと、ボーンの継承順位順にソートされます。

雑記いろいろ

  • 労働力調査、2年目の2回目

お役所さんは無茶を良いなさる。コレ、日雇いの人はどう回答しろというのか?
インターネット回答のタイミングは31日の帰宅後しか無いのですが。せっかちすぎじゃ無いですかね?


  • 新しいノートが欲しいというお話

モデリングもリギングの終わりが…見えてきませんが、いい加減テクスチャ描きに入りたい所。
モデリングもある程度できて、スタイラスペン入力もできる 2in1 は常に求めていましたが、次はかなり高度な物が必要(最低限現在のレッツノートSX2CF-AX2は越えてくれないと)。
で、候補は以前推していた Lenovo C340 の後継機 Lenovo Flex550 の R7 モデル以外無いのですが…公式ページは確かに50%近い値引きセールを展開していますが、商品到着については2カ月間は届かない事しか保証していません。
なんなら2、3年届かない可能性すら…流石に無いと思いたいですが、言い切れない書き方です。

で、他の中華系メーカーを見渡しますと…きれいさっぱり Celeron4100 系やら Core i 6世代(現在の最新は10世代)やらを中心にシフトしてしまっている。
コレはつまり、CPU供給が断たれて、在庫が有る物だけ作っていますね。
中国の深センの特産品となりつつあるUMPC市場が壊滅しないかが心配ですが、理由が政治的過ぎてなんとも言えません。

コロナでネットショッピングしか方法が無い為、中古のノートパソコンはあんまり買いたくないのですけどねえ…中国産以外の新品が買えれば苦労しないですが。


  • そういえば

月初から、今月の半ばまで Brogger のデフォルト行間がやたらに広がっていましたが、不評だったのか元に戻っていますね。
※追記:通常の文章の行間が「標準」から「段落」に変わった為の起こるようです。いちいち手作業で直すの面倒なんですけど…

また、先日 Brogger の仕様が戻った際は字の大きさ設定が増えていたのでそれは改善点だったのですが…デフォルトが html のメタファイル編集になっていて焦りました。いや、昔やっていたブログでは使っていましたけど、最近はそんな事する人いないやろ。

あとはアレですね、先月あたりからやっているバージョンアップとやらで、少なくともウィンドウズから画像一括アップを行うと1枚画を貼り付ける毎にアップした画像が消える。
そして、 gif などの重い画像を貼り付けようとすると、本文の末端に張り付くといったバグが出ています… Google さんもデバッグしてくださいな。

半年ぶりのモデリング

 なんと半年も更新をしていなかった Blender モデリングなのですが…

半年前に拳を作れるようになって、一旦掌から手を引いたのですが、その後、腕部のように『骨に巻き付いている』筋肉のリギングができるようになりました。

ただ、骨に巻き付いた形で筋肉用のボーンをリギングするのでは無く、ボーンの根本から先端までに段階的な捻りボーンを作ることにより、より自然に『ひねる』事が可能になったのです。

…てなわけで、半年経ったボーンの構成がこんな感じ

Befor





After




わかり辛いですが、ボーンの数が増えたな、と思っていただければ良いかと。

で、この動きを表現するにあたり、 Youtube に動画を上げて、ここに貼り付けようかと思っていたのですが…

そこまでうまく行かなかったので、今回は秒間12フレームの Gif を上げてみます。

肘から先…



手首を上げ下げする際に微妙に肘付近の筋肉が隆起するのが解るでしょうか?地味ですから解らないかもしれません。ただ、下腕の2本の骨の存在感は出せた気がします。

地味といえば指の屈筋腱。手首の内側にある縦長な腱ですね。当初全ての指の動きに対して隆起を行おうとしていましたが、あまりにも割に合わなかったので断念、中指の第一関節にのみ反応して絞られるようになっています。画像では、色分けされているので解ると思いますが、色分けしないと相当地味な部分になりますね。

肩から先…


肘の曲げに関しては、上腕二頭筋、上腕三頭筋(二の腕の内、外の筋肉)の隆起が解りやすいと思います。割と大きめに影響度を出しましたし魅せ筋ですしね。

対して、ひねる時に肩甲骨に若干の影響を出す関係で、アバラの肉が少し引けるのですが…流石に気づかれないかもしれない。まあ、仕方ないです。

という訳で「ひねる」筋肉群が作り直しに…ということは…ハイ、大腿四頭筋、大腿二頭筋が作り直しデス。

うん、賽の河原だって識っていたよ。モデリングは終わりが見えないなあ。






2020年8月29日土曜日

やっと終わったイベント

土壇場で1日延長とかなにがあった…。
さておき、ひたすらダルいイベントでしたねえ。迅鯨堀は結局失敗。E2乙Mマス堀を155回S勝利しても無理なんだから流石に無理です。集積さん南無…
Mマスはボスマス扱いではないので「あ号」の為にボスマス24周を取り直さないといけません、ここら辺も改善して欲しい所。

さて、今回はドロップが異常に偏りました。新規ドロップだとヘレナが2隻、有明が1隻のみ。グラーフ、ガングート、照月は早々に出てしまい既に最終改装済み。他には秋津洲が2隻きましたが、未改造では地上攻撃に使えないので育成は無理でした…嫁の秋津洲改はE2掘りで嫌と言うほどレベルが上がりましたが、又2隻目のヒューストンはどうしたら良いのやら。

酷いのは海防艦で石垣x 八丈x 福江x2 大東x2 対馬x1 日振x2 松輪x2 佐渡x2。
…石垣は今回のイベントが始まる前は居なかったんですけどねえ。ドロップ率は迅鯨以下のハズなのにどうしてこうなった。そして、これだけドロップしておきながら、春イベのように「海防艦を合成せよ」系のク〇任務が来ないかと怯えるわけですよ…

地味に注目するべき点はE2で未入手の提督に大和を配った事だと思うんですよね。坊ノ岬の主役が居ないと流石に盛り上がりに欠けるだろう的な。

半年分の新艦を投入しなければいけなかったとは言え、堀が多すぎてゲンナリ。1艦辺り50出撃、250戦闘程度で掘れたとしても、1戦闘は1分程度、掘り艦が5隻で1250戦闘で、掘りの戦闘だけで21時間かかりますからねえ(編成や移動、回復等でその数倍時間がかかる上に、出撃間にはクールタイムが必要)。例年なら海防艦くらいは秋刀魚祭りの通常海域に投入されるのですが、今年は秋刀魚祭りが無さそうとの噂(秋のパン祭りだとか)。秋の鰻祭りでした

そして、今回はこんなに長いイベントだったにも関わらず、初の中間突破率の発表が無いイベントとなりました。
…みんな様子見していたのがバレますからね。援軍無し甲突破者が40名程度しか出なかったという発表のみでした。序盤こそ派手にぶっ飛ばされる集積地さんや「病んでいる」迅鯨が話題になりましたが…笛吹けども踊らずという状況でしたからね。オフイベントが壊滅しているのだから、ゲームに本腰を入れてくれても良さそうなものなのにどうしてこうなった。
コロナの影響で発表できなかった…訳が無いですよね、前述の40名の発表も出来ているし、春のイベントも発表はしてましたし。

秋は不漁の秋刀魚の状況から秋刀魚漁をキャンセルして秋イベント投入も最悪考えられますが…正直秋イベント無しで、「ちゃんとテストプレイした」冬イベが着て欲しいものです。

2020年8月17日月曜日

Blender で未使用頂点グループ削除スクリプトを書いてみた

 …のですが、制作途中にもっとちゃんとしたスクリプトを公開している方が多数居る事に気づきまして…
まあ、雑なんですが、せっかく作ったので公開します。尚、2.7、2.8両対応。

# idle vg remover

import bpy

if bpy.context.mode == 'OBJECT':
    for obj in bpy.context.selected_objects:
        if obj.type == 'MESH':
            list_use = [False]*len(obj.vertex_groups)
            for vertex in obj.data.vertices:
                for group in vertex.groups:
                    idxGroup = group.group
                    list_use[idxGroup] = True
            idx = 0
            for vg in obj.vertex_groups:
                if not list_use[idx]:
                    obj.vertex_groups.remove(vg)
                idx = idx+1

使用方法はオブジェクトモードで該当するオブジェクトを選択して、スクリプト実行。
コレが

こうなる

動作の解説をすると
1.オブジェクトに所属する頂点グループの数だけ使用を検証するフラグリストを作る
2.全頂点に対して使用頂点グループのインデックスを調べ、見つかったインデックスのテーブルフラグを上げる
3.最終的にフラグが上がらなかった(=未使用)頂点グループを削除
…正直面白味も何もないコードですね。というか、なぜ標準でこの機能が無いんでしょうか?

2020年8月15日土曜日

イベントクリア


 甲乙甲乙乙甲丙にて11日に終了。
どう考えてもE6甲が一手足りなかった為、E6甲のラスダンを残してE5で有明掘り。
アシュアは水着スキンを全て入手して再休眠したし、今期は見るアニメも無いので、気合入れようと思ったのですが肩透かし。
結局友軍が着たらE6は一発攻略できました。
で、E7は乙にする意味が薄かったので丙で攻略。結局ラスダンはギミックを解かずにそのまま挑んで一発攻略でした。
去年の初夏のアンツィオさんと同じですね。アレもハンプティダンプティの殻を被ったまま攻略しましたし。
感想としては…ダルい。
過去で最も札が付くイベントだったそうですが…


  • 輸送ゲージ
ステージ1(1本)、ステージ2(2本)、ステージ5(1本)

  • 戦力ゲージ
ステージ1(1本)、ステージ2(2本)、ステージ3(1本)、ステージ4(1本)、ステージ5(1本)、ステージ6(1本)、ステージ7(3本

  • ルート、スタート地点開放ギミック
ステージ1(1か所)、ステージ2(1か所)、ステージ3(2か所)、ステージ4(2か所)、ステージ5(2か所)、ステージ6(2か所)、ステージ7(3か所

  • ボス弱体化ギミック(各1)
ステージ3、4、6、7

…輸送ゲージを8出撃、戦力ゲージを7出撃、ギミックを4出撃で計算すると…


170出撃!?
1.5か月あるし、1日4出撃すれば良いから楽勝だな!
…って、そんな訳あるかい!
攻略サイトを読むのは最低条件としても、全出撃を完遂し、ラスダンも一発攻略という前提。TASでもなければ無理。
札が多すぎて新米提督では完遂できないし、私のような高齢化に片足ツッこんでいる古参では息切れするしで、一体誰に向けて作ったイベントか判らない。
流石に通しデバッグくらいはしていると思うのですが、デバッガーさんはどんな艦隊で何出撃で攻略したんでしょう?
ざっと、1出撃5戦闘としても、攻略までに300出撃1500戦闘程が必要だと思うのですが。(1戦闘は約1分としても、それだけで25時間)
デバッガーさん達は疲労度無し、コンディション値常にマックスの環境くらいでプレーしているとは思うのですが、それでもこんな冗長なイベントにGoサインが出たのが謎です。
毎年「過去最大」のイベントを持ってきますが、面白さに寄与していない気がします。ドロップは確かに豪華なんですけど、徒労感をごまかし切れていないですね。

又、ステージ構成は前半が日本近海なのに後半がソロモン海という脈絡の無さ。ステージ1に至っては北海道です。察するに前半戦は本来春にやるハズだったイベントなのではないか?と思われますが…。
※追記 公式4コマの224話(20年10月)にてBepさんがノリ突っ込みしてますね
薄雲等、先行して制作した艦娘を登場させる為に所縁のあるイベントマップを出さざる得なかったとは言え流石に飛びすぎ。

10月の秋刀魚祭りを考えると、9月に再度イベント開催はあり得ない訳で、6月開始と8月開始の各3週間イベントで良かった気がするのですが…
恐らく、長いイベントを作るより短いイベントを作る方が難しいのでしょうね長くするだけなら、ギミック数を増やすなり、攻略ゲージを伸ばすなりするだけの作業です。
逆に短くするなら要点を絞りつつ、ゲーム性を損なわないように調整し、且つ攻略可能な突破率になるように計算しなくてはなりません。
近年、イベント期間の2週間ほどの延長は恒例になっていますが短期間イベントではそこまで延長できませんし。
ゲームの規模が大きくなりすぎて作業量が増えたのは判るのですが、根本のゲーム部分がダメになっている気がします。

さて、悪い部分ばかりを連ねましたがゲーム以外の部分は良い出来でした、なによりも音楽のデキは良かったです。
新艦もいろいろ居ましたね。まさか2020年にぽよよんろっく氏のキャラを拝めるとは。
次いで、前半戦。やたらナーバスなボスが多かったのですが、理由を調べてみると確かにね…という内容でした。
なんなら掘り下げれば良いのですが、雑に2個のイベントを接合しているので掘り下げがたりないような…
E3は又、海に穴が空いてますが、法則性有るんですかね?今後の展開に期待して良いのでしょうか?


笑ったと言えばコレ


今夏最も安心できないカットイン攻撃。いや、はいてますよ?
現在、有明は70周目くらいで取得し、迅鯨掘りに移行中です。
流石に今年は、アニメ発表→坊ノ岬→信濃実装で盛り返してくれると思ってたんですけどね。
昨今は涼月もお冬さんを忘れ始めていますし、ちょっと先行き不安ではあります。

2020年8月2日日曜日

Blender でアドオンを作ってみた その1

以前作った Blender 2.7 2.8 両対応スクリプト。
流石に毎回使うたびにソースをコピペするのが面倒なので、アドオン化してみたのですが…

roll_zero.py

import bpy

bl_info = {
    "name" : "Set Bone Roll Zero",
    "author" : "100H",
    "version" : (0,1),
    "blender" : (2, 79, 0),
    "location" : "armature > Bone Roll 0",
    "description" : "Set Bone Roll 0",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "Rigging"
}

class CSBRZ(bpy.types.Operator):

    bl_idname = "armature.sbrz"
    bl_label = "Set Bone Roll Zero"
    bl_description = "Set Bone Roll 0"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):
        for obj in bpy.context.selected_objects:
            if obj.type == 'ARMATURE':
                print(obj.name)
                for bone in obj.data.edit_bones:
                    print(bone.name)
                    bone.roll = 0
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator("armature.sbrz")

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_armature_specials.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_armature_specials.remove(menu_func)

if __name__ == "__main__":
    register()

ボーンロール0化
カテゴリー:リギング
出し方:アーマチュア編集画面で、スペシャルメニュー(ショートカットW)


pair_vg_maker.py

import bpy

bl_info = {
    "name" : "Pair Vertexgroup Maker",
    "author" : "100H",
    "version" : (0,1),
    "blender" : (2, 79, 0),
    "location" : "object > pair vg create",
    "description" : "Pair VG Create",
    "warning" : "",
    "wiki_url" : "",
    "tracker_url" : "",
    "category" : "Rigging"
}

class CPVGM(bpy.types.Operator):

    bl_idname = "armature.pvgm"
    bl_label = "Pair VG Maker"
    bl_description = "Pair VG Create"
    bl_options = {'REGISTER', 'UNDO'}

    def execute(self, context):

        for obj in bpy.context.selected_objects:
            print(obj.name)

            if obj.type == 'MESH':
                list_add = []
                for vg in obj.vertex_groups:
                    pair_name = ''
                    length = len(vg.name)
                    if vg.name[length-2:] == '.L':
                        pair_name = vg.name[:length-1]+'R'
                    if vg.name[length-2:] == '.R':
                        pair_name = vg.name[:length-1]+'L'
                    if pair_name != '':
                        if not obj.vertex_groups.get(pair_name):
                            list_add.append(pair_name)

                for name_add in list_add:
                    print(name_add)
                    obj.vertex_groups.new(name = name_add)
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator("armature.pvgm")

def register():
    bpy.utils.register_module(__name__)
    bpy.types.VIEW3D_MT_object_specials.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.VIEW3D_MT_object_specials.remove(menu_func)

if __name__ == "__main__":
    register()

左右対面頂点グループ作成
カテゴリー:リギング
出し方:オブジェクト編集画面で、スペシャルメニュー(ショートカットW)



使い方は前述のページの通りなんですが…
2.7専用
なんで互換性が無いんですかね。実行部分に互換性があるのにUIで引っかかって動かないなんて…
今後は2.7系は作らない気がしますがげんなりです。