QuKuMu-blog-

絵(SAI、Photoshop)、3D(Blender)、情報工学(人工生命、セルオートマトン、ニューラルネットワーク)などに関する技術的なことを中心に

Blender+pythonでライフゲーム

Blender2.62

blender2.5系のpython練習もかねて作りました
ちょっと修正したら3次元ライフゲームも簡単にできますね



Screenshot_1_20120417


以下python scriptと説明

import bpy

##const
w = 20
h = 20
firframe = 0
endframe = 100

#####################
def showcell(x,y):
    ## GAIA=0 -> gt=0.45  GAIA=1 -> gt=1.2
    gt = 0.75*(GAIA[x][y])+0.45
    bpy.data.objects["eg" + str(x) + "_" + str(y)].scale = (gt,gt,gt)
    

#####################
def Krd(arg1,arg2):
    ret = 0
    if arg1 == arg2:
        ret = 1
    else:
        ret = 0
    return ret

#####################


##########################

##define
for i in range(w):
    for j in range(h):
        bpy.ops.mesh.primitive_cube_add(location=(i*3,j*3,0))
        obj = bpy.context.object
        obj.name = "eg" + str(i) + "_" + str(j)

bpy.ops.object.select_all(action="SELECT")
GAIA = [[0 for j in range(w+2)] for i in range(h+2)]
SAIA = [[0 for j in range(w+2)] for i in range(h+2)]

##glider
#GAIA[7][1] = 1
#GAIA[7][2] = 1
#GAIA[7][3] = 1
#GAIA[8][3] = 1
#GAIA[9][2] = 1

##F-pentomino
GAIA[5][2] = 1
GAIA[5][4] = 1
GAIA[5][3] = 1
GAIA[6][3] = 1
GAIA[4][4] = 1

##init
bpy.ops.anim.change_frame(frame = firframe)
    
for x in range(0,w):
    for y in range(0,h):
        showcell(x,y)

##


##culclate
for t in range(firframe+1,endframe+1):
    bpy.ops.anim.change_frame(frame = t)
    for x in range(1,w+1):
        for y in range(1,h+1):
            
            gt = GAIA[x][y]
            s = 0
            for dx in range(-1,2):
                for dy in range(-1,2):
                    s += GAIA[x+dx][y+dy]
            s -= gt
            SAIA[x][y] = s
            
    for x in range(0,w):
        for y in range(0,h):
            gt = GAIA[x][y]
            ss = SAIA[x][y]
            GAIA[x][y] = Krd(3,ss)+gt*Krd(2,ss)
            showcell(x,y)
    bpy.ops.anim.keyframe_insert_menu(type="Scaling")

print("finish")
 


生セルと死セルをCubeの大きさで表現しています
scriptを走らせた段階で(endframe-firframe)分だけの世代をフレームにactionとして焼き付けます

■処理の流れ 
##define部分
w*h個のMeshオブジェクトを作成
2次元配列GAIAとSAIAを用意します
bpy.ops.object.select_all(action="SELECT")で全てのオブジェクトを選択しています(重要
GAIA配列に生セルを追加

##init部分
##define部分で追加された生セルをfirframeにscaleのアクションとして焼き付ける(showcell関数の処理)

##culclate部分
bpy.ops.anim.change_frame(frame = t)でフレームを変えています
1つめのxyループではGAIA[x][y]のまわりのセルの総和を計算してSAIA[x][y]に代入しています
2つめのxyループでは以下のように世代更新計算をしています
 GAIA[x][y] = Krd(3,ss)+gt*Krd(2,ss)
  (Krdはクロネッカーのデルタ)
全てのセルの周囲セルの総和を予め計算しておくことでGAIAセルを順番に更新することができます
ここでは(23/3)ルールを使用しています
仮に(abc/def)ルールを使用するなら (a,b,c,d,e,f は数字)
  GAIA[x][y] = gt*(Krd(a,ss)+Krd(b,ss)+Krd(c,ss)) + (1-gt)*(Krd(d,ss)+ Krd(e,ss)+ Krd(f,ss))
となります 
eqn20120428_01

2つのxyループを抜けた段階で
bpy.ops.anim.keyframe_insert_menu(type="Scaling")によってactionに焼き付けています

図形連想ポーズ作成法 天井のシミ法 〜理系のための絵の練習法〜

人体のポーズは二種類に分類できます。
 
 1.カメラを意識しない、何かの行動の瞬間、なにげない仕草、日常的ポーズ
  2.カメラを意識した、決めポーズ、グラビア写真、非日常的ポーズ
それぞれ
  1.「日常的ポーズ」は テレビに映り慣れた芸能人の番組、ドラマ(小説が原作)、映画(小説が原作)
  2.「非日常ポーズ」は テレビのCM、ドラマ(漫画が原作)、映画(漫画が原作)、グラビア

によく見られれます。
漫画を描くためには「日常ポーズ」、一枚絵を描くためには「非日常ポーズ」をよく知る必要があります。

前回の記憶輪郭法によって数百のポーズを覚えたならおそらく二種類のポーズが混在しているはずです。
そこで、効率的に記憶した物を思い出し描く方法を考えました。
また、いつもただ立っているだけの絵を描きがちな人にもお勧めです。




1.図形連想ポーズ作成法
これは「日常ポーズ」を描く時に有効です。

 1.まず、適当な図形を描きます。(記憶輪郭法をたくさんやった方ならおそらく人体の輪郭が作りやすそうな形が思い浮かぶはずです)
110817_02
 2.その図形から人体の輪郭の一部を連想しましょう
   (この時点でポーズが思い浮かばなければ記憶輪郭法をもっとやりましょう)
   心のおもむくまま輪郭を描き足します
110817_03


 3.内側に線を描き足します。裏側(鏡像)から見た場合も考えましょう。

110817_04
110817_05



 補足.いろいろな図形で試してみましょう
110817_01



2.天井のシミ法 
これは「非日常ポーズ」を描くときに有効です。 

 説明. 天井のシミをみて形が別の何かに見えたとき、右脳が活発に働いています。脳内ではシミの形といままでに記憶したシンボル(輪郭を記号化したもの)での中で一番形が似ているものを思い出そうとします。
     それを応用して、今までに記憶したポーズを思い出します。

 1.まず、適当に赤などでペンを走らせて行きます。このときどこかが体の一部に見えないか意識しましょう(円を多く描くと体の一部に見えやすいです。また、全体にバランスよく描くといい構図ができやすいです)
       110818_01

 2.描いているうちどこかが体の一部に見えてきたら、黒で一気に描きます
       110818_02
 
 


 以上、記憶輪郭法によって記憶したポーズを思い出す方法でした。
図形連想ポーズ作成法ははっきりとした記憶、天井のシミ法はあいまいな記憶を呼び出します。
それぞれ場合によって使い分けましょう。


記憶輪郭法〜理系のための絵の練習法〜

  記憶輪郭法

 この練習法は物の形(特に人物のポーズ)を完全に記憶し、いつでも思い出せるようにします。
イメージ投影輪郭法を併用することで、この練習法で記憶した物の形をいつでも描くことができるようになります。


. はじめに静止画(写真、テレビや動画の一時停止、静物であれば実物も可。絵は避けましょう)を用意します。(人物であれば全身が見えているものが良いと思います)
   (写真素材 足成http://www.ashinari.com/さんからお借りしました。)
   a0002_004961

. 人物の輪郭を観察し、記憶(※1)します。(この時、人物そのものを見ずに周りの外形
(※2)を意識すると形を覚えやすいです)
2-1
(※1) 写真のこの部分の輪郭の形を記憶します。これはあくまで頭でのイメージです
2-2
周りの外形とはこの斜線部分のことです。(B.エドワーズ著「脳の右側で描け」ではネガのスペースとして紹介されています)


.  だいたい覚えたと思ったら写真を見ずに手元だけを見て、記憶した線をゆっくり描いていきます
  2-3

.  描き終えたら写真を見て比較します。そして修正を、納得がいくまで繰り返します
    (輪郭の内側に普段通りの線を入れていけばおかしな部分が分かるかと思います)
 2-4
補足.  ・この練習法で覚えた輪郭はまず忘れないと思います。そしてきっかけさえあればいつでも思いだして描くことができるかと思います
      ・はじめに「絵」を資料にするのは避けるよう書きましたが、「絵」は描いた人のデフォルメ(誇張、変形、抽象化)が意図的または無意識にされており輪郭の情報が少なくなっています。なので「絵」の輪郭を覚えるというのは応用がききません。この練習法で覚えた輪郭は記号として覚えられているので必要に応じでデフォルメできるかと思います
      ・なるべくたくさん覚えましょう

イメージ投影輪郭法 〜理系のための絵の練習法〜

  イメージ投影輪郭法
  
  この練習法は頭で考えている線を鮮明にしてそのまま描けるようにします。頑張れば、紙に頭で考えてる線が見えるようになります


. はじめに、ひらがなやカタカナ、漢字、アルファベット、など文字を1つ決めます 例( あ )
   その文字の太字を頭に思い浮かべます
1_1

 
.  なるべく一筆書きでその文字の輪郭を描いていきます(頭の中の文字の輪郭を”見る”というのが重要で、実際に書かれている文字を見てはいけません)
1_2

. 完成したらバランスが整っているか見ます
1_4

  太さが一定でない場合や輪郭がずれている場合、バランスが悪い場合は何度もやりなおします


補足. 難しさは アルファベット<カタカナ<ひらがな・漢字 の順番だと思います

発展. 複数の文字を繋げたり並べ方を変えると難しさがアップします
 1-61-5

Blenderで2D絵を描く方法

使用バージョンは2.49bです

BlenderでIllustratorで描くような絵を描く方法です

3dtest01


簡単な設定でできます
トゥーンシェーディングとほぼ同じ設定でですが
ShadersパネルのDiffuseShaderをtoonにする必要は無く
設定をまとめると


オブジェクトについては
ShadelesをON
色はマテリアルのColをそのまま使えます
02

環境設定については
背景色のみを設定
03

エッジの設定については
EdgeをON
04


画面構成はこんな感じにしました
 01


アニメ

いままで見てきたアニメをまとめたかったので アニメポータルサイトに登録しました!

アニメワン

現在は378個 総話数5279話 人生の約3割をアニメ見る時間に使ってる計算です。
このサイトの「見たログランキング」見ると500とか1000とか上には上がいますね。
なので全然廃人じゃないです!

お気に入りに入れてるアニメはおすすめなのでぜひ一度観てみてください!

-

-

等角投影図練習

今日も等角投影図の練習です
少しは線きれいになったような

20101016_0120101016_02 

立体図練習

等角投影図クォータービューを描くための方眼紙を買いました
立体図方眼紙とか斜方眼紙とか言います

たぶん物の形をうまく把握する練習になるんじゃないかと思います。
20101014_0220101014_01 












ちなみに買ったのは(これ)です
もう大手は生産してないみたいですね 

JQueryプラグインJScrollPaneのIE7でのバグ

http://www.kelvinluck.com/assets/jquery/jScrollPane/jScrollPane.html


どんな要素にでもスクロールバーを表示させることができるJQueryプラグインです。

IE7でのみ起こりうるエラーを見つけたので書いておきます。
(7のみ検証。IE全部かも?Chorome6.x、firefox3.6.xは問題なし)

scrollbarMargin + scrollbarWidth <= 要素の幅width でないとエラーが発生してスクロールバー表示されません
気をつけましょう

あまりこういう使い方する人はいないと思いますがね・・

正しい例

<head>
<script type="text/javascript">
$(function()
{
$('#pane2').jScrollPane({
showArrows:false,
scrollbarWidth: 50,
scrollbarMargin:0
});
});
</script>
</head>
 
<body>
<div class="holder osX">
<div id="pane2" class="scroll-pane" style="width:50px">
<div style="height:500px;">
</div>
</div>
</div>


昭和の部屋のような宇宙船

syouwa3_s4


完成しました!

どう考えても労力と完成品が見合ってないですほんとうに(ry

ひとつ前の記事に載ってますが背景は3Dで作ったものを自力で線画におこしました
影は3Dで作ったものを少し加工して使用してます。3D様様です。 
3Dで背景全部作ったのははじめてなので習作ですね
結構時間かかりました。3Dの製作も含めると1ヶ月くらいでしょうか・・?^o^



pixiv ↓大きいサイズです
記事検索
Tumblr
読書メーター
くくむの最近読んだ本
AX
  • ライブドアブログ