2020/01/07(火) [n年前の日記]
#1 [love2d] love2dのImageDataについて動作確認
love2d には ImageData なるクラス(?)があるようで。画像の生データを入れて管理できるらしいけど、どういうことができそうなのかちょっとよく分からなかったので、動作確認してみたり。環境は、Windows10 x64 1909 + love2d 11.3。
こんな感じでどうか。
ImageData を使って、グラデーションを作成。カーソルキーの上下で明るさを変える処理も入れてみた。 *1
つまり、ImageData を使えば、1ドットずつ RGBA を指定して画像を作成、みたいなことができるのかな。たぶん。
RGBAの各値として渡せるのは、0.0 - 1.0 の値で、0 - 255 ではない点に注意。love2d 11.0 より前は 0 - 255 を渡していたけれど、love2d 11.0 以降は 0.0 - 1.0 の範囲になった模様。
何にせよ、こういうクラスがあるのであれば、フィルタ処理等も書けるのかもしれないな…。もっとも、フィルタ処理などは、 _Shader を使ったほうが良さそうかな…。事前に何かしら画像処理をして、そのデータを持っておいて時々使う、といった用途であれば、ImageData は便利なのかもしれない。たぶん。
こんな感じでどうか。
ImageData を使って、グラデーションを作成。カーソルキーの上下で明るさを変える処理も入れてみた。 *1
つまり、ImageData を使えば、1ドットずつ RGBA を指定して画像を作成、みたいなことができるのかな。たぶん。
◎ ソース。 :
_conf.lua
_main.lua
function love.conf(t) t.version = "11.3" -- love2d version t.window.title = "ImageData test - love2d" t.window.vsync = 1 t.window.width = 640 t.window.height = 480 -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- ImageData test on love2d function make_gradation(imgdata) local w, h = imgdata:getDimensions() local x, y for y = 0, (h - 1) do for x = 0, (w - 1) do local r, g, b, a r = x / (w - 1) g = y / (h - 1) b = (x / ((w - 1) / 4)) % 1.0 a = (y / ((h - 1) / 4)) % 1.0 imgdata:setPixel(x, y, r, g, b, a) end end end function brighten(x, y, r, g, b, a) r = math.min(r * 1.5, 1.0) g = math.min(g * 1.5, 1.0) b = math.min(b * 1.5, 1.0) return r, g, b, a end function darken(x, y, r, g, b, a) r = math.max(r * 0.75, 0.0) g = math.max(g * 0.75, 0.0) b = math.max(b * 0.75, 0.0) return r, g, b, a end function love.load() love.graphics.setDefaultFilter("nearest", "nearest") local w, h = love.graphics.getDimensions() imgdata = love.image.newImageData(w, h) make_gradation(imgdata) img = love.graphics.newImage(imgdata) end function love.update(dt) end function love.draw() love.graphics.clear(0, 0, 0, 1) love.graphics.setColor(1, 1, 1, 1) love.graphics.draw(img, 0, 0) love.graphics.print("Hit Up/Down key", 2, 20) love.graphics.print("FPS: " .. tostring(love.timer.getFPS()), 2, 2) end function love.keypressed(key, isrepeat) if key == "escape" then -- ESC key to exit love.event.quit() elseif key == "up" then imgdata:mapPixel(brighten) img:replacePixels(imgdata) elseif key == "down" then imgdata:mapPixel(darken) img:replacePixels(imgdata) end end
◎ 少し解説。 :
- imgdata = love.image.newImageData(w, h) で ImageData を作成できる。
- imgdata:setPixel(x, y, r, g, b, a) で、(x, y) の位置のドットにRGBAを指定できる。
- love.graphics.newImage(imgdata) で、ImageData から Image を作れる。Image にすれば、Canvas に描画することができる。
- imgdata:mapPixel(関数) で、ImageData の全ドットに対して処理ができる。
- Image:replacePixels(imgdata) で、Image の内容を ImageData で置き換えることができる。
RGBAの各値として渡せるのは、0.0 - 1.0 の値で、0 - 255 ではない点に注意。love2d 11.0 より前は 0 - 255 を渡していたけれど、love2d 11.0 以降は 0.0 - 1.0 の範囲になった模様。
何にせよ、こういうクラスがあるのであれば、フィルタ処理等も書けるのかもしれないな…。もっとも、フィルタ処理などは、 _Shader を使ったほうが良さそうかな…。事前に何かしら画像処理をして、そのデータを持っておいて時々使う、といった用途であれば、ImageData は便利なのかもしれない。たぶん。
◎ 参考ページ。 :
_ImageData (日本語) - LOVE
_ImageData:setPixel (日本語) - LOVE
_ImageData:mapPixel (日本語) - LOVE
_(Image):replacePixels (日本語) - LOVE
_ImageData:setPixel (日本語) - LOVE
_ImageData:mapPixel (日本語) - LOVE
_(Image):replacePixels (日本語) - LOVE
*1: ただし、今回は、一度明るさを変更すると元のRGB値が微妙に失われていくので、最初の状態には戻らない。
[ ツッコむ ]
#2 [cg_tools] D5 Render Engineを少し試用
D5 Render Engine なるリアルタイムレンダラー?があるそうで。
_フォトリアリスティックな結果を生み出してくれるD5 Render Engineがリリース | 3DCG最新情報サイト MODELING HAPPY
_D5 Render - リアルタイムレイトレーシングに重点を置いた新レンダリングエンジン(旧:D5 Fusion?)!現在無料ダウンロード可能!
気になったので少しだけ試用してみたり。環境は、Windows10 x64 1909 + Intel Core i5 2500 + RAM 8GB + GeForce GTX 1060 6GB。
D5_Render_installer-cn2-latest.zip をDLして解凍すると、セットアップファイルが出てくる。実行してインストール。
起動したら、ランチャー画面が出てきたけれど。なんだか中国語っぽい文字列が…。中国の方が開発してるのだろうか。そのへんちょっとよく分からない。
サンプルをDLできるっぽい画面が表示されたので、辿ってDL。D5Demo1.zipを入手して解凍。
D5Demo1.drs を開いてみた。右ボタンドラックでカメラ位置を変更できるっぽい。右上のほうに、3Dと、もう一つ足跡っぽいアイコンがあるけれど。足跡っぽいアイコンを選べば、WASD + QE でカメラの移動ができるようで。カメラの向きは右ドラッグ、なのかな。
リアルタイムで描画しているのに、比較的綺麗な画面が出てくる。凄いなあ…。ただ、画像出力レンダリングは、リアルタイムというわけではないようで、若干時間がかかった。
何かの拍子に落ちてしまうこともあるようで、「ビデオドライバをアップデートしてみたらどうかな」的メッセージが表示された。いや、コレを動かす前に、念のために GeForce Driver を 441.66 にアップデートしたんだけど…。GTX 1060 という、ちょっと古いビデオカードだからアレなのかな。
何にせよ、今後に期待してしまうレンダラーだなと…。
_フォトリアリスティックな結果を生み出してくれるD5 Render Engineがリリース | 3DCG最新情報サイト MODELING HAPPY
_D5 Render - リアルタイムレイトレーシングに重点を置いた新レンダリングエンジン(旧:D5 Fusion?)!現在無料ダウンロード可能!
気になったので少しだけ試用してみたり。環境は、Windows10 x64 1909 + Intel Core i5 2500 + RAM 8GB + GeForce GTX 1060 6GB。
D5_Render_installer-cn2-latest.zip をDLして解凍すると、セットアップファイルが出てくる。実行してインストール。
起動したら、ランチャー画面が出てきたけれど。なんだか中国語っぽい文字列が…。中国の方が開発してるのだろうか。そのへんちょっとよく分からない。
サンプルをDLできるっぽい画面が表示されたので、辿ってDL。D5Demo1.zipを入手して解凍。
D5Demo1.drs を開いてみた。右ボタンドラックでカメラ位置を変更できるっぽい。右上のほうに、3Dと、もう一つ足跡っぽいアイコンがあるけれど。足跡っぽいアイコンを選べば、WASD + QE でカメラの移動ができるようで。カメラの向きは右ドラッグ、なのかな。
リアルタイムで描画しているのに、比較的綺麗な画面が出てくる。凄いなあ…。ただ、画像出力レンダリングは、リアルタイムというわけではないようで、若干時間がかかった。
何かの拍子に落ちてしまうこともあるようで、「ビデオドライバをアップデートしてみたらどうかな」的メッセージが表示された。いや、コレを動かす前に、念のために GeForce Driver を 441.66 にアップデートしたんだけど…。GTX 1060 という、ちょっと古いビデオカードだからアレなのかな。
何にせよ、今後に期待してしまうレンダラーだなと…。
[ ツッコむ ]
#3 [anime] 「BEASTARS」最終回を視聴
BSフジで放送されていた3DCGアニメ、「BEASTARS」最終回を視聴。
凄いアニメだった…。オレンジは凄いな…。「宝石の国」も面白かったけど、コレも面白い…。独特な原作を、最高の映像でアニメ化してるというか…。素晴らしい。
凄いアニメだった…。オレンジは凄いな…。「宝石の国」も面白かったけど、コレも面白い…。独特な原作を、最高の映像でアニメ化してるというか…。素晴らしい。
[ ツッコむ ]
#4 [game] PCエンジンのこともちょっとは思い出してあげてほしい気もする
思考メモ。
Webブラウザのブックマークを整理してたら、しくじり先生なるバラエティ番組の、メガドラ回の視聴を忘れていたことに今頃気づいてしまった。失敗した…。自分、なんで忘れてしまったのか…。
どんな放送内容だったのか気になったのでググってみたら、なるほど、メガドラタワーをネタにして失敗談に仕立て上げたのですな…。アレで笑いが取れるところまで順々に説明していくのは結構大変だったのでは。講師役の方、頑張ったなあ。などと本編を見ていないのに感心してしまったり。
それはともかく。メガCDの話が出てきたあたりで、PCエンジン+CD-ROM^2の存在が無かったことにされて、メガCDが初のCD-ROMゲーム機として紹介されちゃったらしいと知り、なんとなく悲しい気分になったりもして。いやまあ、バラエティ番組向けにメガドラ関係で笑いを取るなら、PCエンジン(以下PCEと表記)が一切出てこないほうが話としてはスッキリするので、それもまた仕方ないのだろうなあ、とも思うのだけど。
PCE + CD-ROM^2の存在は、結構大きいと思うのだよな…。と言うのも、あのハードウェア向けに作られたゲームタイトルの中には、特定のゲームジャンルを確立することに貢献したものが含まれているというか…。
例えば、ときメモ。アレが出てきたことで、その後、恋愛シミュゲーというジャンルが確立して、一時期流行したわけだけど。アレは、メガCDしか市場に存在しない世界線なら出てこないよなと。某社の偉い人達は、メガドラやメガCDは海外市場がメインと捉えてたから、日本国内でしか売れそうにない企画は通さなかったはずで。国内向けとしてシェアを持ってた PCEが存在して、かつ、大容量のCD-ROMが使えるからこそ通った企画というか。
更に、メトロイドヴァニアというジャンル(?)も、PCE + CD-ROM^2 でド○キュラXが作られたから、その発展・改良版としてプレステ1版でスタイルを確立できたのだろうと思うし…。PCE版のスタッフがスーパー32X版を作り始めていたけど、上のほうから、メガドラからも撤退して次世代機向けに開発を集中するぞ、とお達しが出てプレステ版に、という流れだった記憶が…。なので、もしPCE版が無かったら、あのタイミングで、あのジャンル・スタイルが生まれていたかどうか…。 *1
てな感じで、某社の事例のみを考えても、PCE + CD-ROM^2 があったからこそ生まれたジャンル、その後の流れを作った部分ってあるよなーと思うし、更に他社まで範囲を広げたら、PCEがあったおかげでこうなった、みたいな話がたくさんありそうだよなと。
ということで、どうかPCEのことも忘れないで、たまには思い出してあげて…みたいな気持ちになってしまったのでした。
などとメモ。只の思考メモです。
Webブラウザのブックマークを整理してたら、しくじり先生なるバラエティ番組の、メガドラ回の視聴を忘れていたことに今頃気づいてしまった。失敗した…。自分、なんで忘れてしまったのか…。
どんな放送内容だったのか気になったのでググってみたら、なるほど、メガドラタワーをネタにして失敗談に仕立て上げたのですな…。アレで笑いが取れるところまで順々に説明していくのは結構大変だったのでは。講師役の方、頑張ったなあ。などと本編を見ていないのに感心してしまったり。
それはともかく。メガCDの話が出てきたあたりで、PCエンジン+CD-ROM^2の存在が無かったことにされて、メガCDが初のCD-ROMゲーム機として紹介されちゃったらしいと知り、なんとなく悲しい気分になったりもして。いやまあ、バラエティ番組向けにメガドラ関係で笑いを取るなら、PCエンジン(以下PCEと表記)が一切出てこないほうが話としてはスッキリするので、それもまた仕方ないのだろうなあ、とも思うのだけど。
PCE + CD-ROM^2の存在は、結構大きいと思うのだよな…。と言うのも、あのハードウェア向けに作られたゲームタイトルの中には、特定のゲームジャンルを確立することに貢献したものが含まれているというか…。
例えば、ときメモ。アレが出てきたことで、その後、恋愛シミュゲーというジャンルが確立して、一時期流行したわけだけど。アレは、メガCDしか市場に存在しない世界線なら出てこないよなと。某社の偉い人達は、メガドラやメガCDは海外市場がメインと捉えてたから、日本国内でしか売れそうにない企画は通さなかったはずで。国内向けとしてシェアを持ってた PCEが存在して、かつ、大容量のCD-ROMが使えるからこそ通った企画というか。
更に、メトロイドヴァニアというジャンル(?)も、PCE + CD-ROM^2 でド○キュラXが作られたから、その発展・改良版としてプレステ1版でスタイルを確立できたのだろうと思うし…。PCE版のスタッフがスーパー32X版を作り始めていたけど、上のほうから、メガドラからも撤退して次世代機向けに開発を集中するぞ、とお達しが出てプレステ版に、という流れだった記憶が…。なので、もしPCE版が無かったら、あのタイミングで、あのジャンル・スタイルが生まれていたかどうか…。 *1
てな感じで、某社の事例のみを考えても、PCE + CD-ROM^2 があったからこそ生まれたジャンル、その後の流れを作った部分ってあるよなーと思うし、更に他社まで範囲を広げたら、PCEがあったおかげでこうなった、みたいな話がたくさんありそうだよなと。
ということで、どうかPCEのことも忘れないで、たまには思い出してあげて…みたいな気持ちになってしまったのでした。
などとメモ。只の思考メモです。
*1: 当時の某社のPCE担当部署ではPCE版とX68K版のド○キュラを作って、メガドラ担当部署ではSFC版とメガドラ版が作られたけど。プレステ版はPCE版の延長だよなと…。そもそもタイトルにXが入ってるし、開発初期メンバーはPCE版の方々だし。もっとも、元メガドラ担当部署の方々も途中で開発に加わってるから、東京開発でこれまで作ってきたアレコレの集大成・全部入りがプレステ版ですよー、ということになるのだろうけど。
[ ツッコむ ]
以上、1 日分です。