2014-07

2014-07-14 

10年ぶりぐらいにMTGに復帰するかと思って、M15のプレリリース大会に行ってきた。地元じゃ12日にしかやってなかったが、大学時代からの友人から13日にもやってる店舗があるという事で誘われたので、急遽秋葉原のアメニティドリームへ。

フォーマットはM15のシールドで、参加時に選んだ色のプロモカード入りのパック1つ+残り5パックでの構築になった。俺は予約してなかったこともあり人気の黒なんかは無くなっていて、2/2先制攻撃で止まるプロモカードの入っている緑のパックを選ぶことになった。そんでそっから出てきたプールがこれ。

1 天麗のペガサス
1 精油の壁
1 儚き盾
1 オレスコスの速爪
1 急報
1 真面目な捧げ物
1 ヘリオッドの巡礼者
1 光の柱
1 三つぞろいの霊魂
2 衆生の熾天使
2 脱走魔術師
1 打ち寄せる水
2 虚空の罠
2 現実からの剥離
1 否認
1 不可視
1 蛙変化
1 霜のオオヤマネコ
1 珊瑚の障壁
1 アンフィンの抜け道魔導士
1 諸島の雨雲
1 窮地の主
1 チフス鼠
2 血の署名
1 永遠の口渇
1 黒猫
2 夜の子
1 爛れ暗がり
1 屍食いカラス
1 呪われたスピリット
1 堕ちたる者の饗宴
1 血の宿主
1 リリアナ・ヴェス
1 苛性タール
1 血の盟約
1 民衆の好意
1 鋳造所通りの住人
1 障害排除
1 槌手
1 炉の小悪魔
1 アルタクの求血者
1 稲妻の一撃
1 発生器の召使い
1 松明の悪鬼
1 激しい抵抗の模範
1 落とし子の守り手
1 密林の酋長
1 溶岩の斧
1 轟きの巨人
1 溜め込むドラゴン
1 陽刃のエルフ
1 自然に帰れ
1 サテュロスの道探し
1 帰化
1 剛力化
1 根囲いの壁
1 生命の遺産
1 ルーン爪の熊
1 狩人の待ち伏せ
1 新緑の安息所
1 咆哮するプリマドックス
1 弱者狩り
2 生きているトーテム像
2 人喰い苔野獣
2 包囲ワーム
1 草タイタン
1 残忍な実体化
1 召喚の調べ
1 進化する未開地
1 戦場の鍛冶場
1 羽ばたき飛行機械
1 トーモッドの墓所
2 青銅の黒貂
1 太陽の大魔術師の杖
1 野性の大魔術師の杖
1 心鍛のゴーレム

プールは悪くないどころか結構強いのではないかと思う。ただ除去とフィニッシャーが各色に散らばっているため2色だと若干手数が足りない気がしたので、メイン1色にタッチ2色かなあと思って、組んだのは以下の白青緑。

緑白青
6 森
5 島
5 平地
1 進化する未開地
1 天麗のペガサス
1 精油の壁
1 霜のオオヤマネコ
1 珊瑚の障壁
1 アンフィンの抜け道魔導士
1 諸島の雨雲
1 窮地の主
1 陽刃のエルフ
1 根囲いの壁
2 生きているトーテム像
2 包囲ワーム
1 急報
1 光の柱
1 三つぞろいの霊魂
1 不可視
1 蛙変化
1 剛力化
1 生命の遺産
1 新緑の安息所
1 弱者狩り
1 残忍な実体化

よくよく見たら3マナ域が物足りないプールだったので、じゃあ地上がっちりから召集でデカブツ出して、そのまま押しきるか膠着状態からアンブロッカブルと飛行で殴ればいいかなというプラン。いや10年ぶりなんで雑に殴るプランしか思いつかんかった。以下、スイスドロー5回戦の簡単な試合結果。

1回戦(青黒)
1R:後手で事故気味なところに寛大な拷問者出されて負け。
2R:平地引かなくて負け。
2回戦(黒緑)
1R:先手で包囲ワームに不可視が付いて勝ち。
2R:後手ダブマリでさらに事故って勝てるわけねーだろ!
3R:途中まで互角の盤面だったが寛大な拷問者出されて負け。
3回戦(赤緑)
1R:マナフラッドしてる間に威嚇持ちに殴られ続けて負け。
2R:白があんまり有効でなかったのでタッチ赤にサイド。途中から土地しか引かずに負け。
4回戦(黒緑)
1R:生物引かない間に夜の子を強化されて負け。マリガンミス。
2R:序盤で出した精油の壁にブロック制限のエンチャント付けられ、押えきれずに負け。それさえ無ければデカ物並べて勝ってた。
5回戦(赤白)
1R:相手が土地詰まってる間に天麗のペガサスが殴りまくり、立ち直られるころにはこっちが並べていて勝ち。
2R:ブン回って勝ち。

というわけで1-4で負け越し。その後別のデッキに組み替えて一緒に行った仲間と遊んでみたら、屍食いカラスに+1/+1カウンター乗せまくって勝ったりした。というわけで結果から言えばこれは構築ミスであった。並べて召集という戦略と回避能力持ちを生きているトーテム像などで強化という戦略は間違っていなかったと思うが、序盤の盤面が弱すぎてフィニッシャーが来ても相手が盤面整えすぎててどうにもならんというのが多かった。進化する未開地とかあるのに事故が多めだったのもあれだったが、事故らなかったマッチも落としているからな。逆にブン回ると圧倒的に相手を蹂躙できたので、召集でマナカーブ無視する戦略と緑中心の構築は悪くなかったのではないか。ただ均等三色に近くなったのはちょっと冒険だったか。あと1枚マナサポートか軽量ドローがあれば安定したかもしれない。

以下は使って、あるいは使われて強かったカード。

根囲いの壁
終盤になってもドローになるのは強い。
包囲ワーム
並べるデッキだと5ターン目ぐらいに5/5トランプルが降臨。単純にデカくて地上を制圧できる。
弱者狩り
包囲ワームなどのデカ物を強化しつつ相手のクリーチャーを除去できるので、相当強い。
生きているトーテム像
回避能力持ちをこれで強化できるとヤバい。咆哮するプリマドックスで延々使い回すコンボが成立するともっとヤバいかもしれない。
新緑の安息所
ライフゲインしつつ色事故防止できるんだから十分。
夜の子
絆魂持っててパワー2のため、ダメージレースで差が付きまくる。
不可視
これが間に合ったゲームは全部勝てた。
三つ揃いの霊魂
1/1飛行3体出てくるのは順当に強い。
光の柱
意外とタフネス3までの危険生物が多いのでそこまで当てにはならんが、やっぱりデカ物除去できるのは大きい。
屍食いカラス
これが止まらなくて負けた。
寛大な拷問者
これで2回殺されてる。タフネス3なので光の柱で除去できないし。
クレンコの処罰者
威嚇持ちは強い。というか心鍛のゴーレムを入れてなかったので酷い目にあった。
暴君の機械
タッパーをケアできないとまあ死ぬよな。

事後にいろいろ判った事としてては

  • 全体的に除去が薄い環境っぽい。
  • 召集持ちは相当マナカーブを無視できる。
  • 軽めの回避能力持ちが止まりにくい。

というところから、以下のパターンのうち黒緑タッチ青をメインにして相手によって組み替えるのが良かったのかもしれない。

  • 回避能力持ちを強化して殴り、リリアナが出ればゲームセットの黒緑タッチ青。
  • 衆生の熾天使をフィニッシャーにした横に並べる白黒緑。
  • ヘリオッドの巡礼者で不可視持ってきてクソゲーにする上記とは別の白青緑。
  • 全力でテンポ取りにいく赤青緑。

あと草タイタン入れとけば寛大な拷問者でアドバンテージ取られなかったなあと。

そんでまあ復帰したとはいえ時間とかあんまないので、まあカジュアルにやっていこうかと。下の環境はまず無理だし。

2014-07-19 

なんか検索したら大会やってたんで、松戸のホビーステーションのM15のシールドに行ってきた。参加者13人でスイスドロー4回戦。

カードプールは以下。

1 無私の聖戦士
1 急報
1 アジャニの群れ仲間
1 不屈の河川司令官
1 キンズベイルの騎士
1 オレスコスの速爪
1 神聖なる好意
1 ヘリオッドの巡礼者
1 原野の霊
1 深夜の護衛
1 カミソリ足のグリフィン
1 不屈の宣教師
1 清められた突撃
1 光波の語法印
2 束縛スリヴァー
1 三つぞろいの霊魂
2 打ち寄せる水
2 研究助手
1 予言
1 雲散霧消
2 珊瑚の障壁
2 硬化
1 飛空士の修繕屋
1 練達の変身術士、ジャリラ
1 立ちこめる霧の模範
1 窮地の主
1 霊気渦竜巻
1 氷河の壊し屋
1 嵐潮のリバイアサン
1 黒猫
2 屍嚼み
1 堕ちたる者の饗宴
1 魔女の使い魔
3 肉は塵に
1 影外套の吸血鬼
1 腐敗喰いの蛆
1 終わりなき従順
1 血の契約
1 激情のゴブリン
1 稲妻の一撃
1 アルタクの求血者
2 業火の拳
2 炎の壁
1 ゴブリンの荒くれ乗り
1 クレンコの処罰者
1 激しい抵抗の模範
1 火のるつぼ
1 屑鉄場の雑種犬
1 溶岩の斧
1 爆炎の稲妻
1 剛力化
1 帰化
1 生命の遺産
1 サテュロスの道探し
1 再利用の賢者
1 網投げ蜘蛛
1 新緑の安息所
2 狩人の待ち伏せ
1 弱者狩り
1 再供給
1 突進するサイ
1 カロニアのツイングローブ
2 包囲ワーム
1 圧倒
1 トーモッドの墓所
1 暴君の機械
1 青銅の黒貂
1 精神の大魔術師の杖
1 野性の大魔術師の杖
1 心鍛のゴーレム
1 光輝の泉
1 進化する未開地

青と白に強烈過ぎるエンドカードがあるが、4マナが貧弱でそもそも生物が足りてない。ちょっと整理するとこんな感じ。括弧内はクリーチャー数で、トークン生成スペルはクリーチャーにカウント。0マナは1マナにカウント。

マナ 合計
1 1(1) 2(0) 0 1(0) 0 3(0) 6(2)
2 6(5) 2(2) 1(1) 4(1) 4(1) 2(1) 19(11)
3 3(3) 7(3) 4(1) 4(4) 5(2) 2(0) 26(13)
4 1(1) 2(2) 0 3(2) 1(0) 0 7(5)
5 3(1) 2(1) 5(2) 1(0) 2(1) 0 13(5)
6 3(3) 1(1) 1(0) 1(0) 1(1) 1(1) 8(6)
7 0 0 1(0) 0 3(2) 0 3(2)
8 0 1(1) 0 0 0 0 1(1)
合計 17(14) 17(10) 12(4) 14(8) 16(7) 8(2) 84(45)

赤の3マナ生物は2体壁なのでそこは考慮する必要がある。こうしてみると青白以外はクリーチャーの選択肢が乏しい。赤は壁ばかりあっても仕方ないし(シールドなんで飛行持ちがそこそこいるわけで)、緑は重すぎ、黒は生物がマジでいない。なので青白は確定、タッチするにしてもせいぜい赤のオーラをいれるか、さもなくば緑で帰化系かというところ。どっちにしろ事故率上げるだけかもしれなかったので採用せず。

最大の問題は4マナ域の薄さで、ここをどうにかして誤魔化す必要がある。幸いM15は召集がキーワード能力として採用されているので、一つ二つ程度上のマナ域のカードを召集前提で考える事で乗りきれる。はず。ちなみに俺のシールド戦の基本的な考え方は、rizer's answerで提唱されている「まずはミッドレンジ」に思いっきり影響を受けている。

そんなこんなで出来上がったのがこれ。

白青
1 進化する未開地
1 光輝の泉
8 平地
8 島
1 不屈の河川司令官
1 アジャニの群れ仲間
2 研究助手
1 原野の霊
1 ヘリオッドの巡礼者
1 飛空士族の修繕屋
2 珊瑚の障壁
1 カミソリ足のグリフィン
1 立ちこめる霧の模範
1 窮地の主
1 心鍛のゴーレム
1 束縛スリヴァー
1 嵐潮のリバイアサン
1 急報
1 暴君の機械
1 予言
1 精神の大魔術の杖
1 光波の護法印
1 清められた突撃
1 霊気渦竜巻
1 三つぞろいの霊魂

研究助手と予言で掘るのと重いカードがあるのとで土地18の41枚デッキ。光波の護法印か窮地の主か嵐潮のリバイアサンで大雑把に勝つか、飛行生物のいない相手の頭上をグリフィンとトークンと師範のサポートで殴るかというところ。青の貧弱な生物も、師範の+1/+1修正と飛行付与で2点クロックになる。そして6マナスペルのうち2枚は召集前提で4マナにカウントしたので、クリーチャーのマナカーブ的には。2マナ5枚、3マナ5枚、4マナ4枚、5マナ2枚、6マナ以上2枚と悪くない形ではないかと。まあ、パワー低めで線が細いんだが。

が、結果としては構築ミスだった。清められた突撃は一部のアタッカーに依存する戦略に噛み合っていないし、暴君の機械は起動マナが確保しにくい。束縛スリヴァーは少々重い。全部抜いて硬化2枚入れて、土地1枚とクリーチャーを交換すべきだったかもしれん。ってかヘリオッドの巡礼者で持ってこれるじゃん。除去がタッパー2枚と霊気渦竜巻という擬似除去3枚だけじゃキツい。あとやっぱ雲散霧消も入れるべきだったかな。シールドはドラフトよりもさらに遅い上に相手も爆弾レア持ってる事を前提にすべきなので、そこケアできる雲散霧消は入れても良かった。

以下は戦績。

1回戦(赤緑)
1R:光波の護法印が心鍛のゴーレムに付いて勝ち。
2R:ワンマリ。ライフ5まで詰められるも、霊気渦竜巻から杖で7点ぐらい回復して粘り、最後リバイアサンで勝ち。
2回戦(白黒タッチ緑)
1R:光波の護法印でクソゲーにして勝ち。これアーティファクトか帰化系入れてないと止まらんのだよな。
2R:序盤土地事故→持ち直す→ガラクの目覚めでリセットされてピンチ→窮地の主が出てきて勝ち。
3回戦(赤黒)
1R:包囲ドラゴン2体出されて負け。勝てるか!
2R:ワンマリするも光波の護法印が窮地の主について勝ち。
3R:包囲ドラゴン出されて負け。
4回戦(黒緑)
1R:相手ブン回って負け。
2R:平地が全然引けず負け。マリガン判断ミス。

というわけで2-2の5位。硬化入れておけば相手のクロック止まって護法印か窮地の主かリバイアサンで勝てたゲームもあったように思える。プレイミスやマリガン判断ミスもあったが、構築が不味かった。

あとはまあ、研究助手抜いて白の殴れる生物入れた方が良かったか。オレスコスの速爪に護法印付けば5点クロック×4ターンで勝てるわけだし。

2014-07-21 

10年ぶりにMTGに復帰して思うのは、なんというか昔はクリーチャーが弱くて呪文が強かったんだけど、徐々に呪文が弱体化されて行って(丁度俺が離れたオデッセイ〜オンスロートあたりか?)、それでクリーチャーの質が上がったんで昔とはクリーチャー主体のデッキとクリーチャーが少ないデッキの数が逆転してる感じ。まあこれは昔の方がバランス的にダメだったんだろう。

MTGは初期から4つのカテゴリが不当に強くて、それは土地破壊、手札破壊、ドロー、カウンター。各種の確定除去や赤の火力も強かったが、剣を鍬にと稲妻がブッチギリで強かったぐらいじゃないかな。で、それらの内土地破壊は露天鉱床がはるか昔に禁止制限され、俺はSinkholeのない時代にMTGを始められたことを幸運に思っている。手札破壊も精神錯乱が禁止制限を喰らっていて(何故か持ってたけど)、Hymn to Tourachは気の狂ったカード満載のレガシーでしか使えない。最序盤から土地を落とせるのはやはりマズいようだ。今では土地破壊デッキはかなり冷遇されていて、それに準ずるマナ拘束デッキもあまりないようだ。手札破壊は「情報的アドバンテージを取れるがテンポを失う」「カードアドバンテージを取れるがテンポを失う」の2種類に分かれている模様。

そんな中でドローは嘘か真かや蓄積した知識のようなドローが長く作られており、カウンターも対抗呪文が8版で落ちるまでは全体的にかなりのスペックだった。最近のカードを見るに、無条件での確定カウンターは3マナで青マナ2つ、不確定カウンターや条件付きカウンターは1〜2マナといった調整のようだ。軽くて無条件の確定カウンター呪文というのは要するにあらゆるカードにテンポを取れるわけで、今が適正かどうかはわからないが、少なくとも昔は適正ではなかったように感じる。

そういや「日本人が青が好き」という俗説があるが、単純に日本でMTGが広がり出したころには上記の不当に強いカテゴリのうち手札破壊と土地破壊が調整されていて、単純に残った不当に強いカテゴリを最大限に生かせる青が流行っていたというだけではなかろうか。確か日本語版のMTGが販売されたのは96年ぐらいで、そっから1年で露天鉱床が制限カードに入ってカウンターポストが作られて……という印象が俺よりも前の世代の人たちには強くて、それが延々と都市伝説みたいに受け継がれてたんじゃないかなあと。

2014-07-28 

とりあえずJavaFX回りの仕事は俺の手を離れてはいるのだが、今でもちょっと手伝う事があるので、JavaFXのパフォーマンスチューニング関連のメモを書いておく。今まで書いてきたことの繰り返しになる部分もあるが、まあまとめておくという事で。

VRAM容量 

4K2Kみたいな高解像度のアプリケーションを作る場合(そこまで行かずともMacBook Pro Retina見ると現実的に2K2Kぐらいはありうる)、VRAMの容量に注意すること。もしも何枚もキャンバスでレイヤーを重ねるような場合、VRAMが不足する可能性がある。VRAMの容量をオーバーした場合、NullPointerExceptionがJavaFXのかなり低レイヤーな部分で発生する。確かNGRegionを生成するところでコケるはず。

そうでなくともVRAMの容量不足でSystem.gc()が呼ばれてしまい、パフォーマンスが落ちてしまう事がある。その場合はVRAMの容量を増やすことで改善する可能性があり、それにはprism.maxvramで指定する。もしもGCのログを取って不審な動きがあったら、この値をデフォルトの256MBから増やすと解決するかもしれない。

ロギング 

JavaFXのパフォーマンスログは、-Djavafx.pulseLogger=trueと指定することで標準出力に吐き出される。吐き出される情報の詳細は以下の通り。ざっとコードを読んで解析しただけなんで、パフォーマンス的に重要でない部分は適当。

T12とかT9とか出てる部分
スレッド番号。片方がJavaFXアプリケーションスレッドで、片方がJavaFXレンダースレッドになる。
CSS Pass
CSSの評価部分。CSSをヘビーに使ってると重くなる。
Layout Pass
レイアウトの評価部分。どのぐらい重くなるかはアプリケーション次第。
Waiting for previous rendering
前の描画処理が終わってない場合、ここで待ち合わせが発生する。JavaFXの描画処理はシングルスレッドのためだ。またこことLayout Passの間にコンポーネント境界の更新という処理が入る。そのためLayout Passが数msで終わってるのにWaiting for...の部分でやたら時間が経っているというケースがある。ふざけんな馬鹿野郎。
Copy state to render graph
変更のあったノードになんかやってる。面倒なんで詳細は書かん。パフォーマンスチューニングで多分ここは問題にならんだろうし。
Dirty Opts Computed
ラスタライズ後の矩形のどの部分が更新されるのかの計算をしてる模様。
Render Roots Discovered
ダーティリージョン毎に描画ルートを探している。その後にいくつか関連したメッセージが出る。ちなみに描画ルートの説明は面倒なんでしたくないが、ノード同士の重なり合いを計算してダーティリージョンの描画に最適化をかけてると思えば。
Painted
実際にラスタライズして描画してる所のはず。D3DやES2とターゲット毎に処理が違うので、コードを追いたい人はプラットフォームに合わせてまあ読んでみて。
Presentable.present
イマイチまだよくわかってないが、垂直同期関連でなにかしてるっぽい?
Counters
描画処理のときに処理したノード数や実際に描画したノード数が表示される。Nodes renderedの数値が万単位になると死ねる。

欠落している情報があったりイマイチ挙動のわからん部分が多いが、まあこの辺で概ね挙動とボトルネックはわかる。ただし、高負荷なアプリケーションをフルスクリーンにしたり、サブウィンドウを出したりしてるとPulseLoggerが死ぬので、その辺はまあPerformanceTrackerを使って気合で乗り切ること。

同時に描写するNodeの数に比例してパフォーマンスは加速度的に悪くなっていくので、そこがチューニングポイントになる。最悪、イベントを拾わないノードは全部キャンバスに描くという方法もある。

キャンバスとノードのパフォーマンスの差 

「キャンバスが重い」という人は多分、ノード数があまり多くないアプリケーションを作っているのだろう。先に書いた通り、業務によっては数万単位のノードがユーザの操作の度に描画されるケースがあるので、その場合に全部ノードでやってたらパフォーマンス的に破滅する。一方であらかじめ全部画像として作っておいてそれを張り付けて動かすみたいな場合、キャンバスはむしろパフォーマンスの足手まといになったりする。(再描画の時に全部描き直すので。)

とはいえ、ノードの数を減らすのが正攻法になる。setVisible(false)を指定したノードは描画処理の対象ではなくなるので、上手く利用するといいかもしれない。あとノードの大量生成は凄まじく時間がかかる。Sceneと関連付けられたノードの操作はJavaFXアプリケーションスレッドでしか行えないが、そうでなければ別スレッドで行えるはずなので、それを利用して遅延初期化をしていくのも手の一つと思われる。

PerformanceTrackerの使い方 

前に書いたので省略。


他にもJavaFXについては書くべき事がないわけではないが、面倒なのでこの辺で。