2020年5月2日土曜日

Switch「ナンプレ Relax」で遊ぶ

GW直前にセールしていたので買ってしまいました。「ちょっとした時間潰しにプレイしよう」と思っていたのですが、プレイし始めると延々と続けられてしまうのが恐ろしい。

どんなゲーム?

難易度Easy、Normal、Hardの100問ずつで合計300問が収録されている数独ゲームです。数独ゲームは他にもいくつかあるようですが、デザインは一番良いように感じます。L・Rで数字をクルクル回しながら選択する操作がお気に入りです。

ゲームで数独をプレイするメリットは、数字を配置したときに正解・不正解がすぐにわかることだと思います。雑誌などの紙で解いていると自分で答え合わせをしないといけないですし、終盤に間違っていると気付いたときの「うわぁ。どこだろう、めんどくさい……」って気持ちにならなくて済みます。

デメリットは収録されている数独の質(難易度)が購入前は不明なところでしょうか? 雑誌ならパラパラッとめくって簡単なのか難しいのかを確認できますが、ゲームだと実際にプレイするまでわからないです。

ひとまず、Easyの100問を解き終わりました。Easyの難易度は「【1】から順番に埋めていこう」の方針で大方埋められる程度です。あまり考え込まずにサクサク解ける、と思います。

アンロック要素は早々にコンプリートできてしまいました。解禁条件が不明なので偶然なのでしょうか? 次はNormal全クリアを目標に進めてみます。

2019年8月20日火曜日

ProcessingのPythonモードでスペクトルアナライザーをつくる

ここ最近は『ジェネラティブ・アート』を読んでいました。Processingを使って偶然性に頼ったプログラムによるアートをしてみよう、という内容です。Processingだと簡単にビジュアルを生成できて楽しいですね。ツールの選び方として「作業だけに没頭できるか?」の観点は大事だな、と思いました。

今回はPythonで音楽ファイルを読み込んで再生時にアニメーションを表示する、スペクトルアナライザーを作ってみます。下の図みたいな動画でよく見かけるアレを作ります。『ジェネラティブ・アート』の前半くらいまでの内容と、オーディオを扱うためのライブラリー「Minim」の組み合わせで充分です。

ProcessingはJavaでコードを書くのが通常ですが、モードの切替えでPythonを使うこともできます。ただ、Pythonモードが実装されてから比較的に日が浅いからなのか、書籍もWebもPythonによるサンプルはあまり見かけません……。ライブラリーもサンプルはJavaだけが多いので、JavaのコードをPythonで読み替えていく作業が必要です(大したことではないけれど)。

コード

コード全体は下に載せてあるとおり。Minimは事前に追加されていることが前提です。音楽ファイルはProcessingのエディターにドロップしておく(プロジェクトファイルと同階層にフォルダーを作ってコピーされる)と、ファイル名だけを記述すれば良くなってラクです。

add_library('minim')

def setup() :
    # 初期化
    size(640, 480, P2D)
    background(0)
    smooth()
    
    # 音楽取込み
    global _minim
    global _player
    _minim = Minim(this)
    _player = _minim.loadFile('test.mp3')

    # 描画用変数
    global _width_pad    # 幅/y方向のウィンドウパディング
    global _height_pad   # 高/x方向のウィンドウパディング
    _width_pad = 20
    _height_pad = 80
    global _width_div    # 幅/y方向の分割数
    global _height_div   # 高/x方向の分割数
    _width_div = 30
    _height_div = 20
    
    global _cell_width   # セル幅
    global _cell_height  # セル高
    _cell_width = (width - _width_pad * 2) // _width_div
    _cell_height = (height - _height_pad * 2) // _height_div

    # 周波数解析
    #    10[Hz]〜サンプリングレートの1/2までをカウント
    global _fft
    global _log_band    # _width_divに応じた対数の帯域
    global _band_base   # 10[Hz]
    _fft = FFT(_player.bufferSize(), _player.sampleRate())
    _band_base = 10.0
    _log_band = pow((_player.sampleRate() / 2.0) / _band_base, 1.0 / _width_div)


def draw() :
    background(0)
    stroke(255)
    
    # セットアップ
    _fft.forward(_player.mix)
    translate(_width_pad, height - _height_pad)
    
    # 描画
    for x in range(_width_div) :
        # 列ごとの周波数帯域を計算して平均値を得る
        band_start = _band_base * pow(_log_band, x)
        band_end = band_start * _log_band
        spec_ave = _fft.calcAvg(band_start, band_end)
        
        # 対数[dB]に変換する
        signal = -100
        if spec_ave > 0.0 :
            signal = 20.0 * log(spec_ave/255) / log(10)
        
        # 高/x方向の分割数へマッピングする
        pile_num = map(signal, -100, 0, 0, _height_div)
        
        PileUpRect(_cell_width, _cell_height, 3, int(pile_num))
        translate(_cell_width, 0)


def PileUpRect(width, height, padding, quantity) :
    pushMatrix()
    # quantityの数だけセルを積む
    for q in range(quantity) :
        rect(padding, -padding, width - padding, padding-height)
        translate(0, -height)
    popMatrix()


def keyPressed() :
    # キーで再生オン/オフ
    if _player.isPlaying() == True :
        _player.pause()
    else :
        _player.play()

2019年1月27日日曜日

『Blender 3DCG モデリング・マスター』に取り組む

年始早々にKindleの50%オフコーナーを眺めていたら、3Dモデリングの本が対象になっていました。

Blender自体は過去に何度か触ったことはありましたが、当時はメッシュの点座標をチマチマと動かすようなツールを全く使いこなせていない状態でした。最近はARやVRのXRまわりが賑わっているし「モデリングできると、より楽しめるかな?」と思い、取り組んでみることにしました。

どんな本?

Blenderを初めて触る人を対象に、画面の見方から基本ツールの使い方を「モデリングに特化」して丁寧に解説してくれる本です。テクスチャーやボーン、アニメーションなど、Blenderで使用できる全機能が解説されているわけではありません。

解説は全16種類のお題を通して行なわれます。『星』のような簡単な形状から徐々にステップアップして、最終的には『人の顔』をモデリングします。過去に登場した操作やコマンドが繰り返し登場するので、全部のお題をクリアするだけでも十分なスキルが身に付くと思います。

3時間×4日くらいで終えられるボリュームでした。モデリングがどんなものかを知るのに丁度良いのでは?

出来上がり

モデリングしてみて気に入ったモノを何点かレンダリングして載せておきます。解説はモデリングのみなので、色や質感のマテリアルは自分で勝手に付けてみました。

おまけ

手順がキチンと示されていれば、完成まで辿り着けるのは当然のはず。なので、自分でお題を決めてモデリングしてみました。

デレステで登場していた『金のぴにゃこら太像』を下絵の用意から始め、マテリアルで金属質にしました。個人的には満足な出来なのですが、如何でしょう?