mieki256's diary



2014/03/28(金) [n年前の日記]

#1 [dxruby][neta] DXRubyのプリセット画像云々について妄想

DXRuby作者様の、 _プリセット画像というアイデア - mirichiの日記 という記事を読んでるうちに、そこからなんだか色々とおバカなことを無責任についつい妄想してしまったのでメモ。プリセット画像決定の選択肢にも、色々ありそうだなと…。

あくまで自分のバカ妄想をメモってるだけなので…。 _アドバイス罪 とやらは適用しないでほしいです…。

あっぱれくんとしじみ姫を起用。 :

Rubyと言えば松江市。松江市と言えば「あっぱれくん」と「しじみ姫」、らしい。

_あっぱれくん、しじみ姫が結婚します! - あっぱれくんのブログ - Yahoo!ブログ

この「あっぱれくん」「しじみ姫」をプリセット画像にできれば、絵柄がどうとかそんなレイヤーとは関係なく、誰もが採用理由に納得してくれるだろうなと。

「何ですか、この画像?」
「Rubyと関わりの深い松江市のマスコットキャラらしいよ」
「ああ…そういう…」

うむ。これで誰もが納得。ある種の大人の事情(?)ってやつ。松江市の中学生さんだって「ああ…そういう…」で納得。絵柄や質は無関係。そんな次元で決めてねえし。みたいな。

問題は…。
  • 使用許諾を得るのが面倒臭そう。誰に話を通せばいいのか分からない。
  • 妙な使用制限がついて回りそう。この手のキャラは「商用利用不可」「公序良俗に反する〜利用不可」「宗教に〜利用不可」等々が次々に出てくるものだし…。せっかくDXRubyの使用制限が緩いのに、プリセット画像のライセンスだけで足を引っ張られそう。
  • 件のキャラは、最近あまり活躍してないっぽい。松江歴史館のキャラらしいけど、公式サイト内でキャラ紹介ページを発見できないぐらいに露出が皆無。緩やかに死へと向かってるキャラではないかという不安が…。
  • DXRuby作者様が、この手のソレに拒否反応を示す体質だったらどうしよう…。

大崎一番太郎を起用。 :

_大崎一番太郎 は、 _大崎駅西口商店会 のご当地キャラ。日本国内の様々なキャラとの大きな違いとして、使用ライセンスがCC0になってる点が挙げられます。こんなライセンスのキャラは、日本では彼ぐらいじゃないかな…。

メリットは、上記の通りライセンス面の問題がないこと。3Dデータが公開されてるので好きなポーズをつけられること。そして何より見た目が(そこそこ)可愛い。松江市の女子中学生にも「DXRuby(のプリセット画像)ってカワイイ!」と言ってもらえる。四角や丸では、こうはいかない。

まあ、静止画はともかく、動くと可愛いほうじゃないかと…。

_【MMD】大崎一番太郎がみっくみくにしてやんよ! - ニコニコ動画:GINZA
_大崎一番太郎とニシナガレでLove&Joy - ニコニコ動画:GINZA
_MMDモデル 大崎一番太郎 | みさきる!

問題は…。これまたDXRuby作者様の好みと合わない可能性が。

OpenGameArt.orgから頂いてくる。 :

_OpenGameArt.org で、CC0 で探せば、かなりの画像がリストアップされるわけで。CC0で公開してる時点で、絵描きさんは「誰でも好きに使ってくれや」てなノリのはず。利用させていただいても問題ないはず。 *1

メリットは、画像が既に存在していること。新規に描いてもらうのは心苦しい云々の心配をしなくて済む。

問題は、これまたDXRuby作者様の好みと合うかどうか。しかしこれだけあればどれかしら…。いや、どうだろ…。日本人好みの絵柄は、ぶっちゃけ、ほとんど無いような…?

全部ツッコむ。 :

「プリセット画像を募集します」と発表して、届いた画像は全部ツッコむ、とか。

質とか絵柄とか、DXRuby作者様の好みとか、そんなの関係ねえ。貰いもんは全て闇鍋状態でブチ込むぞと。小学生が描いたリアルなウンコの画像も平気で入れちゃうよ? てなノリで…。や、真面目な話、意外とウンコ画像はゲームに使えそうですけど…。「コレは危険」「触れたらアウト」と一目で分かるし。たぶんソレがアフォーダンスってやつだと思う…。

プリセット画像となると採用したらそれからずっと「これがDXRubyだ!」というレベルで印象に残るポイントにならざるを得ないわけで、

プリセット画像というアイデア - mirichiの日記 より

そんな懸念とはオサラバ。DXRubyを使う側が、それぞれ勝手に好みの画像を選んで使うのだから、作者様が「どれがいいのかなあ…」なんて悩む必要無し。ユーザさんから選ばれることが比較的多かった画像が、自然とDXRubyの「顔」としてコミュニティ内外で認知されていくはず。

問題は…。
  • バイナリが無駄に巨大化。exe化したサンプルバイナリの中身のほとんどがプリセット画像、てなオチに。
  • 拡張ライブラリ化すると、数十個とかそういう話になりそう。(逆に、募集しても全然集まらなくてショボイ画像の拡張ライブラリがポツン、だったら悲しいけど…)
  • ライブラリを頻繁に更新・追加することになると、作者様の負担が増えてしまう。自動化するか、募集時期を決めて追加・更新は無しにするか…。
  • 描いてはいけないキャラが送られてくると対応に困る。黒いネズミが! 初音ミクが! 混ぜるな危険! (ライセンス的に!) とか。…事前に「ヤバイキャラは描かないで」と言っとけばいいのかな。
  • 皆がウンコ画像ばかり使う展開になったらどうしよう…。

アンケートを取る。 :

たぶんDXRubyの利用者数として一番多いのは松江市の中学生さんだろうから、彼等に画像を見せてアンケートを取ってウケが良い画像をプリセット画像に採用、とか。一番使ってそうな人達に選んでもらえれば間違いなさそう。

そういえば…。昔、某ゲームのキャラを決める時、某イベント会場でアンケートを取って決めたっけ…。アンケートは準備が面倒だけど、「選んだのは俺じゃねえです」と言い張れるので精神的にちょっと楽…。

アンケートを取ると、比較的無難なモノが選ばれる傾向があるあたりは一長一短ですけど…。例えば自分は _「まんとくん」より「せんとくん」 が好きなのですが、しかしアンケートを取って決めてたら「せんとくん」は絶対に選ばれないわけで…。

プログラムで画像を作る。 :

DXRuby の Imageクラスに、レイトレーシングで画像をレンダリングするメソッドが用意されてたり、与えた数式を使って画像生成するメソッドが用意されてたり。とか。

絵が描けないならコンピュータに描かせればええんや…。俺達の目の前にあるコイツは、数式さえ与えれば何でもできる魔法の箱やで…。(その「数式を与える」あたりが大変なんだけど。)

問題は…。
  • そんな実装、できるの? アルゴリズムは?
  • なんだかよくわからないライブラリになりそうな…。2Dゲームライブラリなのに、プリセット画像生成部分だけはガチで3D計算…なんだか困惑…。
テクスチャ画像なら自動生成は比較的できそうだけど…。

レイトレーシングで思い出したけど、デジカメのファームウェアを書き換えてデジカメ内でレイトレーシングさせる事例を以前見かけたっけ…。

_hirax.net::デジカメ内部でレイトレーシング計算をさせてみる!?
_hirax.net::続 デジカメ内部でレイトレーシング計算をさせてみる!?

iPhoneでもできるらしいですな…。

_《挑戦》「iPhone」で無理矢理リアルタイムレイトレーシングをやってみました。 | smatcha スマッチャ スマートフォン情報メディア

PC-9801でめっちゃ時間かけて試してた頃を思い出してクラクラしてきましたが、今時のソレならプリセット画像をレイトレーシングで、なんてのも全然アリなのかなと。デジカメや携帯電話のCPUですらやれちゃうレベルの処理になったのだろうし…。

アイコンフォントを同梱する。 :

今時はアイコンを含んだWebフォントが結構あるので、それを利用させてもらう、とか。Webデザイナーさんしか使ってないのは、なんだかもったいないし。

_気軽に使えるアイコンフォントまとめ|社員ブログ|株式会社Qript
_Fontello - icon fonts generator

メリットは、ライセンスが明確な場合が多いので選ぶ際に楽。ベクターデータなのでバイナリサイズが少なくて済む。今時のWebデザインに使われるだけあって、クールでオシャレなデザインが多い。てなあたりかなと。

問題は…。Webフォントってデスクトップアプリ上で使えるのか自分は知らなくて。svgを指定してたりもするから、ベクターデータをビットマップ画像としてレンダリングする機能が必要になのかしら。でも、ttfも一緒に指定してるし…。よくわからない…。

考えてみたら、Windowsに標準で入ってるフォントでも十分かもしれない…。 _趣味のぱそこん−記号や特殊文字の挿入 を眺めると、MSゴシックに含まれてる記号だけでもかなりソレっぽい画像が入ってるような…。

Rubyの場合、 "\u2603" みたいな指定で文字指定ができるみたいだし、DXRuby上で試したら、img = Image.new(64, 64).drawFont(0, 0, "\u2603", font) みたいな指定で画像生成できたし。文字描画だから色も変更できるはず。となると、ゲームでも使えそうな記号の番号をあらかじめ文字列定数にしておくだけでも違ってくるのかしらん。

プリセット画像としては何が必要になるのだろう。 :

このように色々妄想してたのですが。

そもそも、プリセット画像としては何が必要になりそうか、そのあたりの仕様が分からないと具体的な選択もできないような気がしてきたり。必要な画像種類の洗い出しをすれば、何か見えてくるのかも…。
  • アクションゲームなら、キャラ画像があると嬉しい…? 自機と敵は、DXRuby 1.4.1 で追加されたらしい Image#change_hls() とやらで色替えかな…。
  • キャラ画像は、クマ、猫、ラクダ、ヘビ、ペンギン、悪魔等々、人間以外の生物でも問題なさそう。
  • マップを作る際は、ブロック画像も必要になりそうだけど、これはレンガ等で良さそうだし、絵柄はあまり関係ないかなと。
  • パズルゲームなら、宝石の類が数種類あれば…。宝石と言えばRubyだろう…。Ruby画像を色替えで数種類用意する、とか…。
  • シューティングゲームなら、自機、弾、雑魚敵があれば最低限なんとか。
  • 紙芝居ゲームは、ウインドウサイズと等しい背景画像等が必要になるから…。それはもうフリー素材をかき集めてもらうしかないので、プリセット画像として用意するのは難しそう。
ゲームジャンルって他に何かあるかな…。

アクションゲームとシューティングゲームは、双方に画像を流用できるといいのだろうけど。どちらでも通用するモチーフってあるのかな…。生物? メカ? 幾何学図形?

画像サイズや色数も決まってたほうがいいのだろうか。例えば、8x8ドット白黒2色とか、16x16ドット白黒2色とか?

白黒2色はメリットありそう。
  • 「だったら俺も描けそう」と言い出す人が増えそうな。8bit PC時代のノリというか、外字作成ノリに近いし。
  • 白黒2色なら色変更も楽。
  • バイナリサイズを減らせる。
その代り、見た目がMSXの画面に…。

8bit PC+BASICや、MSXの単色スプライトでゲームを作ってた頃の、チープでシンプルな見た目を目指すか、それとも、フルカラーでゴージャスでリッチな見た目を目指すか…。そういった方向性を決めれば仕様も固まってくるのだろうなと。

しかし、若い人達には、シンプルとゴージャスのどっちが魅力的に見えるのか、そのへん自分はちょっと分からなくて。自分達の時代は色も解像度も容量も無かったから、単純にゴージャスな見た目に憧れたけど、ゴージャスだらけの現在は、シンプルなほうがクールに見えたりしないのかなと。流行のフラットデザインも、ちょっとそういうところがありそうだし。どうなんだろう…。

何にせよ、「クール」 or 「カワイイ」が見える画像だといいなあ…。

作者様の好みが分からないことにも気付いたり。 :

考えてみたら、上記の全ての選択肢は、「DXRuby作者様の好み」が問題点なのだなと。しかし、その好みが不明だなと…。例えばゲームだったら何のゲームの見た目が好きなのか、そこからして自分は知らなくて…。

仮に、プリセット画像を一般から募集、かつ、作者様の好みが採用理由に反映されるなら、「俺の好みは○○だから、ソレ系で描くと採用されるかも」等を示しておかないと、絵描きさん側は回り道しそうだなと思えてきたり。募集内容の傾向が事前に分かってれば、そこからあまりに外れた画像は最初から送られてこないだろうし、不採用になっても納得してもらえそう。苦労して描いても理由が分からないまま没になった時に、「どうしてコレで没になるんだ」と不満を持つのだろうし…。そのあたり明確にしておけば、ガンガン没にしても問題は起きないのかもしれない、と思えてきたけど、さて…。

必要な画像種類、画像サイズ、色数もそうだし、作者様の好みもそうだけど、おそらくは、仮でもいいから「枠」「制限」を設けてみれば、この件の光明が見えてきそうな気もしてきたり。

やっぱり面倒臭いですね。 :

妄想をメモって垂れ流しただけなのに、自分で読み返してるうちに面倒臭くなってきました。色々な方向性がありそうで、どれを選べばヨサゲなのか、そこからして悩みそう。プリセット画像を用意・決定するのって、やっぱり面倒臭いですね。

それはともかく個人的には、MSゴシックの記号だけでもそこそこ見た目を華やかにできそうな気がしてきたので、そのうち実験してみたいところ。アルファベットを重ね描きするより全然イケそうな予感。Windowsの中に既に入ってるから、リソースの新規追加も必要無いし。プロが作ったベクターデータだから質も全然OKだし…。

*1: CC0はともかく、CC-BY の画像はどう扱えばいいのだろう…。DXRubyのドキュメントに画像作者名を書いとけばいいのだろうか…?

#2 [ruby][dxruby] Rubyでレイトレーシングってできるのかな

気になってググってみたら、ソースを公開してくれてる方が。ありがたや。

_index ( Ray Tracing Project )
_Ray Tracing Project ( Ruby )

処理内容はさっぱり分からないけど、コピペして動かしてみたら、たしかにレイトレーシング画像が出力された。

試しに処理結果だけを DXRuby で表示するようにしてみたり。
# Ray Tracing Project ( Ruby )
# http://www.not-enough.org/abe/manual/ray-project/ruby.html

require 'dxruby'

class Vector
  def initialize(x, y, z)
    @x = x
    @y = y
    @z = z
    self
  end

  def + (v)
    Vector.new(@x + v.x, @y + v.y, @z + v.z)
  end

  def - (v)
    Vector.new(@x - v.x, @y - v.y, @z - v.z)
  end

  def * (t)
    Vector.new(t * @x, t * @y, t * @z)
  end

  def normalize
    d = Math.sqrt(@x * @x + @y * @y + @z * @z)
    @x /= d
    @y /= d
    @z /= d
  end

  def innerproduct(v)
    @x * v.x + @y * v.y + @z * v.z
  end

  attr_accessor :x, :y, :z
end

def make_eye(x, y)
  Vector.new(-2.0 + x/50.0, 2.0 - y/50.0, 3.0)
end

def intersect(from, to, point, rad)
  v = from - point
  b = to.innerproduct(v)
  c = v.innerproduct(v) - rad*rad
  d = b*b - c
  return -1 if d < 0
  det = Math.sqrt(d)
  t = -b + det
end

def shading(t, from, to, point, img, x, y)
  l = Vector.new(0.5773, 0.5773, -0.5773)
  v = from + to * t - point
  v.normalize
  d = l.innerproduct(v)
  col = (255.0 * d).to_i + 50
  col = 255 if col > 255
  col = 0 if col < 0

  # print col," 0 0 "
  img[x, y] = [255, col, 0, 0]
end

def make_imag_ray(w, h)
  img = Image.new(w, h, [0, 0, 0, 0])

  rad = 1.0
  to = Vector.new(0, 0, -1)
  point = Vector.new(0, 0, 0)

  (0...h).each do |y|
	(0...w).each do |x|
      from = make_eye(x, y)
      t = intersect(from, to, point, rad)
      if t >= 0
        shading(t, from, to, point, img, x, y)
      else
        img[x, y] = [0, 0, 0, 0]
      end
	end
  end
  return img
end

img = make_imag_ray(200, 200)

Window.bgcolor = [64, 64, 64]
Window.loop do
  break if Input.keyPush?(K_ESCAPE)
  Window.draw(0, 0, img)
end
LLでも全然速いなあ…。一瞬で結果が表示される…。

しかし考えてみたら、GPUを使ってリアルタイムレイトレーシングもできたりするのだろうか。ググってみたら、そういうサンプルに遭遇。

_仮眠プログラマーのつぶやき : HLSLでリアルタイムレイトレーシング
_GLSLでレイトレーシング - tompngの日記

HSP + HLSL でレイトレーシングとか、GLSLでレイトレーシングとか…。今時は色々なソレでレイトレーシングができちゃうのだなとなんだか感動。どのハードも桁違いに速くなったのだなと…。

#3 [ubuntu] キューブ機にvsftpdその他をインストール

色々インストールした。

vsftpdをインストール。 :

FTPサーバ vsftpd をキューブ機(Ubuntu機)にインストール。
  • sudo aptitude install vsftpd でインストール。
  • sudo vi /etc/vsftpd.conf で設定ファイルを修正。
  • sudo ufw allow ftp
  • sudo ufw allow ftps
  • sudo ufw allow 20
  • sudo ufw allow 50000:50004/tcp みたいな指定で、PASVモード用のポートを開ける。
vsftpd 2.3.5 がインストールされた。しかし、やっぱりログインできない。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
と怒られる。状況としては以下と同じなのだろうと。

_ubuntu Server 12.04LTSのvsftpdにログインできないぃー。:ヘイター君の棚:So-netブログ

sudo chmod a-w /home/ユーザ名 を試してみたら、たしかにログインできた。しかしコレでは今までのサーバの状態と違うので、ちと困る。

以下を参考に、おそらくパッチを当てた?版をインストール。/etc/vsftpd.conf にも一行だけ設定を追加。

_linux ubuntu 12.04.1 vsftp FTPルートを書き込み可能にする。 | KoganeCloud(コガネクラウド)
_Making vsftpd with chrooted users work again ・ Ubuntu 12.04 | Transcending Frontiers
_500 OOPS: vsftpd: refusing to run with writable root inside chroot

vsftpd のバージョン3は、このあたり改善されてるらしいので、公式に公開されるまではコレを使って我慢せい、ということらしい…。

vsftpdをinetdで起動するようにした。 :

DDNSでサーバ公開してる場合は、vsftpd 動作中にIPアドレスを記憶してしまうことで問題発生の可能性があるらしく。以下の記事が参考になった。

_Ubuntu10.4でFTPサーバ 備忘録 - すけさんのページ
_(Linux)NAT内でFTPサーバ立ち上げるにはアドレス変換が必要 : 3流プログラマのメモ書き
_№2659 vsftpd FTPクライアントからPassiveモードの接続が出来ない - Web Patio - CentOSで自宅サーバー構築
_vsftpd を xinetd 経由で実行 at technote
_チラシの裏にでも書いてろ な!: vsftpdをinetd経由で動かす

要求があるたびに、inetd もしくは xinetd を通じて vsftpd を毎回起動し直せば問題を回避できるらしいので、そのように設定。/etc/vsftpd.conf、/etc/inetd.conf、/etc/services を修正。sudo service openbsd-inetd restart で inetd を再起動。

最初、Ubuntu 12.04 には xinetd が入ってるのかなと思い込んでたけど。実際には inetd が ―― openbsd-inetd がインストール済みらしいので、ソレに従って作業。

PASVモード設定で悩む。 :

vsftpd の動作時、PASVモードで接続すると、ローカルIP(192.168.x.x 等)をそのまま相手に返してしまって転送ができなくなるそうで。以下の項目も設定しておかないといけないらしい。
pasv_addr_resolve=YES
pasv_address=ドメインアドレス
しかし、これだとLAN内からアクセスした時に困りそう。どうしたもんか…。

local_umaskは設定しておかないといかんらしい。 :

最初、local_umask を設定しないで転送したら、ログインしたユーザにしかアクセス権がつかなくて。local_umask=022を指定したら、グループその他にも、r・xがついてくれた。とメモ。

ufwをGUIで設定できるツール。 :


以上、1 日分です。

過去ログ表示

Prev - 2014/03 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project