Zoomquiltを作成

あらゆる種類の興味深い自己参照ギズモに関する一連の投稿を続けたいと思い、Zoomquiltジャンルについて書くことにしました。 検索を行ったところ、Habréにはすでに1つの投稿があることがわかりました。 とにかく投稿を書くことを考え、考え、決定しましたが、Zoomquiltを作成する技術については技術的です。



そもそも、実際にはジャンルについてです。 伝えるよりも表示する方が簡単です。



zoomquilt.org



zoomquilt2.madmindworx.com/zoomquilt2.swf



www.syfy.com/tinman/oz



www.deviantart.com/art/kopfsalat-digital-edition-30069104



写真に近づき、ある時点で拳のサイズのピクセルを見るのではなく、次の写真を見て、手順を何度も繰り返します(実際、1つの非常にスムーズなプロセスのように見え、アーティストがうまくやったら、「参加」しますまったく表示されません)、最終的に元の画像に戻ります。 一般に、アーティスト専用のマルチキーン。

そして、そのようなことはどのように行われますか? もちろん、フレームごとに描画することもできます。さらに、才能のあるアニメーターの中にはこれを完全に処理できるものもあります。 しかし、このジャンルのほとんどすべての既存の作品は、これらが集合的な創造性の成果であることを示しています。 通常、アーティストのチーム、プロジェクトコーディネーター、プログラマーが実際にすべてをまとめてインターフェイスを作成します。



創造の技術についてさらに。 カットの下にたくさんの写真。



創造の技術に関する情報を探し始め、幸運でした。 最初のZoomquiltのソース画像に出会いました。 それらの1つを次に示します。







各「ソース」は1024 * 768のイメージで、その中央はサイズが512 * 384の黒い長方形です。



まず、これらの「ソース」からzoomquiltアセンブリを見つけましょう。 写真を将来のアニメーションのフルフレームに変えましょう。

画像の中央にある黒い長方形をリスト内の次の画像に置き換え(最後の画像では次が最初)、適切なサイズに縮小する必要があることは明らかです。置換する前に、次の画像で同じ手順を実行する必要があります。 それはすべて停止条件のない無限再帰のような匂いがしますが、幸いなことに、画像は離散的であり、ピクセルより小さいものを描くことは不可能です。 画像の中央の黒い長方形は完全に消えるまで小さくなり、この時点で交換を停止できます。







もちろん、受信したフレームのうち、アニメーションを収集できます







しかし、断続的になります。なぜなら キーフレームのみが関係します



キーフレームごとに、いくつかの中間的な近似を使用して作成できます。







最終版は記事に挿入するには難しすぎることが判明しましたが、元のビデオとほとんど変わりません。



これはすばらしく、完成したものから組み立てる方法をすでに知っていますが、誰かが「ソース」を描画する必要があるため、すべての遷移が非常にスムーズであるため、1つの画像が終了して別の画像が開始する場所がわかりません。

そして、私が理解しているように、次のようにすべてが起こります:

まず、プロジェクトコーディネーターは1人以上のアーティストに次の画像を提供します。







アーティストは、緑のゾーン全体を塗りつぶし、黒に触れないようにする必要があります(より正確には、彼らはそれに触れることができますが、そこに描くすべてはアセンブリ中に考慮されません)。 その後、アーティストが作品を完成すると、それぞれの絵を2人のアーティストに転送できます。 次の形式で画像を取得します。







別の、これで:







緑の長方形のサイズは両方のペインティングで同じであることに注意してください。アーティストがコーディネーターに引き渡すのはこの長方形のコンテンツであるためです(または、コーディネーターが送信された画像から必要な部分を切り取ります)。



十分な数の絵画が収集されると(最小-2、最大は制限なし)、コーディネーターはいくつかの(おそらくプロジェクトで最も強力な)アーティスト(作品の最初に空の絵画を受け取ったアーティストの数に等しい)のような絵画を発行します:







この時点で、円は閉じ、ウロボロスは静かに尾を消化し、次の作品を熱心に見ていきます。



この記事のために私が書いたコードは次のとおりです。膝の上で約40分間書かれているので、誰かが人間のやり方で書いた場合、喜んで感謝してここに挿入します。



import PIL from PIL import Image from images2gif import writeGif X,Y = 1024,768 IMAGES_NUM = 46 def render_images(raw_images): cur_index=0 count = 0 while True: count+=1 if count == 100: break prev_index = cur_index - 1 if prev_index == -1: prev_index = len(raw_images)-1 cur_image = raw_images[cur_index] prev_image = raw_images[prev_index] prev_image.paste(cur_image.resize((X/2,Y/2)),(X/4,Y/4)) cur_index = prev_index def before_image(im): im1=Image.new("RGB",(X,Y),(0,255,0)) im1.paste(im.resize((X/2,Y/2)),(X/4,Y/4)) return im1 def after_image(im): im1 = im.copy() im1=im1.resize((X*2,Y*2)) im1.paste(new_image(),(X/2,Y/2)) return im1 def between_image(im1,im2): im = im1.copy() im=im.resize((X*2,Y*2)) im.paste(before_image(im2),(X/2,Y/2)) return im def new_image(): im1=Image.new("RGB",(X,Y),(0,255,0)) im1.paste(Image.new("RGB",(X/2,Y/2),(0,0,0)),(X/4,Y/4)) return im1 def between_frames(key_frame, number_of_frames): step_x = X/4/number_of_frames step_y = Y/4/number_of_frames l=[] for i in xrange(1,number_of_frames+1): x=step_x*i y=step_y*i l.append(key_frame.crop((x,y,x+(X-2*x),y+(Y-2*y))).resize((X,Y))) return l def crop_image(im): im1=im.copy() x,y=im.size black=Image.new("RGB",(X/2,Y/2),(0,0,0)),(X/4,Y/4) if x==X: im1.paste(black) elif x==X*2: im1=im1.crop((X/2,Y/2,X/2+X,Y/2+Y)) im1.paste(black) return im1
      
      







独自のZoomquiltを作成するために必要なすべての機能を備えています。 不明な点がある場合は、お問い合わせください。

私がコーディネーターになれるように、個人で書いて欲しいアーティストがいるなら、私たちはhubrazmviltを作ります:)。



このジャンルの他の作品を知っている人がいれば、リンクを送ってください。



ご清聴ありがとうございました。



All Articles