mieki256's diary



2021/08/01() [n年前の日記]

#1 [linux] サブPCのLinux Mintを20.2にアップグレードした

サブPC(CPU : AMD A6-3500, ケース : SilverStone SST-LC19B-R)に入っていた Linux Mint 19.3 を 20.2 にアップグレードしてみた。

Linux Mint 19.3 の状態で、sudo apt update、sudo apt upgrade をして、インストールしてあるパッケージを全部更新してから、デスクトップ上でアップデートマネージャを開いて、編集 → "Linux Mint 20.2 Uma"にアップグレード、を選んだような気がする。1時間ほどかかっただろうか…。USB接続の無線LAN子機経由でルータに接続しているので、各パッケージのDLが遅かった可能性があるかもしれない。

Linux Mint は MATE を入れていたのか Cinnamon を入れていたのか忘れてしまっていたけれど、手元のメモを検索してみたら MATE を入れた上で Cinnamon もインストールしていたっぽい。

#2 [nitijyou] マスキングテープを購入

Seriaで黒のマスキングテープを見つけたので購入。幅15mm。

新自宅サーバ機の電源LEDが眩し過ぎるので、このマスキングテープを貼って減光できないものかと。

ただ、電源LEDは、直径9mmの円の形をした電源スイッチと一体化されてるので、その円の形にテープを切り抜かないといけない。どうやって切り抜き作業をしようか…。コンパスで作図(?)できるほどの大きさでもないし…。テンプレート定規でもあればと思ったけど、その手の画材・道具は、PCだのCADだのが使えるようになった時期に捨ててしまった気もするし…。AR_CADで円を作図して、プリンタで印刷して、重ね合わせつつ切り抜き作業、かなあ…。

_フリーの2D汎用CADソフト「AR_CAD」 - オフィシャルサイト『AR_CAD MANIA』 - PDF, DXF, SXF, JWW, JWC, JPG, BMP, PNG形式 に対応!!
_「AR_CAD」直感的な操作で手軽に図面を作成できる2次元CAD - 窓の杜

2021/08/02(月) [n年前の日記]

#1 [nitijyou] ダンボール工作中

手元に、ワットチェッカー サンワサプライ TAP-TST5 があるのだけど。

_TAP-TST5【ワットチェッカー】消費電力などの数値を瞬時に計測。8種類の測定ができる検電器。 | サンワサプライ株式会社

このワットチェッカー、背面に電源プラグ(?)があるので、延長コードを繋ぐと横倒しになって液晶表示が見えなくて。どうにかしたいものだなと…。

とりあえず、ダンボールで仮の台を作れないものかと、メモ用紙にラクガキしたり、AR_CADで作図したりして形状を検討中。

2021/08/03(火) [n年前の日記]

#1 [nitijyou] ダンボール工作中その2

ワットチェッカー サンワサプライ TAP-TST5 の台っぽいものをダンボールで作成。

元々はこういう状態で…。こんな体勢(?)だから、電力表示も読みづらくて。

wattchecker_base_ss01.jpg


ダンボールで、こういう台を工作。

wattchecker_base_ss02.jpg


こんな感じになった。

wattchecker_base_ss03.jpg


液晶表示が斜め45度になったことで、とても見易くなった。ここまで見易くなるとは予想外だった。もっとも、長期間この角度で置いてあると、埃がガンガン溜まってマズいことになりそうだけど。

さておき。この状態では、台の強度が足りない。横から押すとグラグラしてしまって不安。台に高さが無いと電源延長コードがワットチェッカー本体を押してしまって変な体勢になってしまうので、そこそこ高くしてみたのだけど、高くすればするほど、そりゃ不安定になるわなと…。

何より、100Vの電気が流れてる場所にダンボールを使うのはあかんやろ…。せめてMDF材を使うとか…。

でもまあ、常に電源を入れてるわけでもないし…。各機器の消費電力量を確認できたら、その後はワットチェッカーを外してしまうし。ワットチェッカーを使う時は、必ずその場に居るから、何か起きても対応できるし。というかその場に居ないと消費電力の数値がそもそも読めないし。そういう使い方だから、これでも問題無いかなあ、とも。

でも、もうちょっとどうにかしたい…。

2021/08/04(水) [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、17:25-19:00の間、自宅サーバ止めてました。申し訳ないです。

#2 [nitijyou] 某所に行ってきた

昨日、某所から、メールでPCトラブルの連絡があったので、電動自転車で行ってきた。09:30-10:40まで作業。

詳細はGRPでメモしてあるけど、一応、ここにも簡単なメモを残しておく。

プリンタから印刷できない件。 :

1件目は、複合機 EPSON PX-M6711FT が印刷できなくなったという相談。複合機はLANに有線接続されている状態。

原因は、某所のD様が、iPadから印刷したいと、EPSON PX-M6711FT の無線LAN設定を弄って有効にしてしまったことだった。PX-M6711FT は、有線LAN接続と無線LAN接続が排他仕様で ―― どちらかを有効にするともう片方は無効になる仕様なので、複合機の無線LANが有効 → 有線LANは無効・切断 → PC群から全く見えない状態になっていた。

「iPadで印刷しようとして設定を弄った〜」と聞いた瞬間、複合機ってそこらへんは排他仕様じゃないのかなー、と気づけたので、比較的早く解決できた。

以前、複合機が欲しくなって色々調べてみた時に、そういう仕様の製品が多いと感じて、それが頭の片隅に残っていたわけで…。まあ、当時はそうだったという話で、今時の複合機は違うのかもしれないけれど、そういうトラップもあるよ、ということで。

PCがビープ音を鳴らし続けて起動しない件。 :

2件目は、D様のPCの電源が入らないという相談。電源ボタンを押すとビープ音が鳴り続けて起動しないとの話で、実際に現場(?)で聞いてみたら「ピピピピピ」という感じの音だった。

AWARD BIOS が載ってるM/Bなので、その手の資料を眺めたけれど、電源異常を示すビープ音のような気がする…。

以前、自分の手元のサブPCも、ビープ音を出して起動しない症状になったけど、電池切れが原因だったことがあったので、一応ソレも疑ってみた。M/B上のコイン型電池を外して、テスターで電圧を測ってみたけれど、ちゃんと3Vに近い電圧だった。電池切れではないなと…。

件のPCは以前も同じ症状が発生していたので、当時の作業メモを確認したところ、M/B上の電源コードの類を抜き差ししたら何故か治った、と記述が…。今回も試してみたら、変なビープ音が止んで、起動してしまった。何故。コレって一体何が原因なんだ…。わからん…。

帯電関係かなあ…。電源コードを外した状態で電源ボタンを何度か押して放電を試みたりもしたし…。それとも、コイン型電池を外したことで、BIOS設定がリセットされて異常状態を脱したのだろうか。あるいは、M/B上の電源コネクタ部分のはんだ付けがおかしくなってるとか…。しかしソレなら、もっと頻繁に症状が発生してもおかしくないような…。

2021/08/05(木) [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、12:55-17:00の間、自宅サーバ止めてました。申し訳ないです。

#2 [nitijyou] 眼鏡屋さんで視力測定をしてきた

運転免許証更新の時期なのだけど、視力がどのくら落ちてるのかが不安で。免許更新センターに行ってから「視力がダメ」と言われたら面倒なので、事前に調べておきたいなと、比較的近所にある眼鏡市場さんに寄って視力測定してもらった。ちなみに、視力測定だけなら無料でしてもらえるらしい。

眼鏡をかけた状態で、両目で1.5、左目が1.5、右目が1.2だった。免許更新の条件は全然クリアできてるそうで。助かった。ありがたや。

AM11:00頃に電動自転車で行ったけど、既に気温31〜32度で、汗だく状態。日差しの強さを舐めていたなと…。

#3 [nitijyou] ダイソーで色々購入

眼鏡市場さんからの帰りにダイソーに寄って色々購入。
蓄光シールは、30分光をあてると8時間光る、と書いてあった点が気になったので購入。随分昔に蓄光テープを買って、部屋にまだ転がっているけれど、その商品は30分ぐらいしか光らないとパッケージに書いてあったので、実際に違いがあるのかどうか気になったわけで。とりあえず、リモコンや、部屋に転がってるLEDライトの類に貼りまくってみた。停電時、どこにあるのかすぐ分かって、役立つかもしれない。それはともかく、実際に使ってみたら…以前購入したのと似たような感じだなと…。1時間ぐらい経つとほとんど光らない…。でもまあ、あらかじめカットされてる分貼りやすいから、これはこれで。

指保護サックは、以前100円ショップで購入したマジックハンドの先端につける予定。そのマジックハンドは、先端がプラスチック製だからつるつる滑ってモノを挟めないわけで…。何か滑り止めをつけておかないといけない。最初から500円ぐらいのマジックハンドを買っておけば、そちらは先端にゴムがついてるから苦労しなかったのだろうけど…。

角棒とL字型金具は、ワットチェッカーの土台関係の工作に使う予定。

LANケーブルはフツーに使えた。初期不良品じゃなくてホッとした。

ケーズデンキでヘッドフォンを購入。 :

ケーズデンキに寄って、audio-technica ATH-P100M と、maxel製CR2032 x 1個を購入。

今までもTV視聴用に ATH-P100M を使ってたけどスポンジ部分がボロボロになったので買い替え。

2021/08/06(金) [n年前の日記]

#1 [nitijyou] 部屋に蚊が居る

部屋に蚊が居る…。参った…。蚊取り線香をつけたけど、夕方頃になって「プゥーン」という音が…。まだ居る…。

蚊取り線香を使うと自分自身がダメージを受けるのでアレなのだけど、ここまでつけておいても倒せないのは困る…。

2021/08/07() [n年前の日記]

#1 [nitijyou] ワットチェッカーの台を再作成中

ワットチェッカー サンワサプライ TAP-TST5 の台になりそうなモノを、角材とMDF板を使って再作成中。100Vの電気が流れる場所で、ダンボール製はマズイよなと…。

角材を切ってMDF板にボンドで貼り付けたけど、固定されるまで24〜48時間かかるのが、ちょっと…。もっとサクサクと接着できる何かは無いのだろうか。グルーガンとやらはどうなんだろう。

板同士を垂直に接着したいのだけど、さて、どうすればいいのやら。L型金具を仮で貼り付けて、かなあ…。

#2 [zatta] 舞台裏をその場でリアルタイムに見せてしまうのはどうなんだろう

思考メモ。

TVをつけたら、たまたま何かのスポーツのライブ映像が流れていて。

自分はスポーツに全く興味が無いので、競技名すら知らないのだけど、シンクロナイズドスイミングっぽいアレというか…何人もの人がプールに入って一糸乱れぬ動きをして得点が入るソレで。

なんとなく、ぼんやりと、しばらくそのまま流してたら、水中の様子を捉えたカメラ映像が何度も何度も画面に出てきて。そのカットを見た瞬間、「オイ! それはダメだろ! 何考えてんだ!」と腹が立ってしまったというか…。

あの手の競技って、水上の見た目の美しさ云々を競うものじゃないのかと。だって、その場に居る観客や審査員からは水中の様子は見えないわけだから、水上は評価の対象になるけど、水中は評価の対象にならないはずだよなと。水上で足がスラリパッパッと奇麗に動く様を見せるために、水中では必死に手を動かしてるわけだけど、全ては、水上の鮮やかな動きを見せるための行為なわけで…。

選手達が見せたいのは、水上の動きのはず。水中の様子は、いわば舞台裏のようなもの。

今まさに舞台で演技中だと言うのに、リアルタイムで舞台裏を見せてはダメだよなあ、と…。

例えば、ウルトラマンが空を飛んでるシーンで、ウルトラマンの人形をピアノ線で吊って動かしてる操演のおじさんの汗だくの顔が一瞬インサートされてしまったらどうですかと。そりゃダメだろうと。

例えば、南野陽子演じるスケバン刑事が仲間の亡骸をお姫様抱っこしつつ演技してるシーンで、亡骸役の女優を下から必死に支えるADさん2人の図がインサートされてしまったらどうですかと。そりゃダメだろうと。

それはそれで面白い画だけど、本編内で平然と流しちゃダメな画で…。もし流すなら、メイキング映像等の別枠をしっかりと用意して、そっちで流すべき種類の画なわけで。

なのに、スポーツ関係は平気でそういう見せ方をしてしまう…。雑過ぎる。あまりにも考えが浅過ぎる。何を考えてるんだ。いや、何も考えてないからこうして流しちゃうのかな…。

撮影機材の様々な技術革新によって水中の画も撮れるようになって、ドヤ顔でガンガン見せたくなっちゃうその気持ちは十分に分かるのだけど。ソレはたぶん「床屋の満足」だよなあ…。

何より、これまで血がにじむような練習を延々繰り返して、ようやくそういう場所に立つことができた選手達に対し、あまりにも失礼な見せ方じゃないのかと…。彼等・彼女等の努力を一体何だと思っているのか。彼等がどういう種類の努力をしてきたのか本当に分かっているのか。

これがもし、泳ぎの速さを競い合う系の競技であれば、水中映像を見せても問題無いだろうけど…。しかし、「見せる」ことを意識しなきゃいけない競技まで、同じ感覚で平然と水中映像を流しちゃダメだよなと。選手達が「何をどう見せるのか」について必死に考えて工夫してきたというのに、「見せられる技術がもうあるんだからとにかく見せちゃえ」というスポーツ中継側の姿勢・思考は、あまりにも幼稚で粗雑…。

せめて、競技中は水上だけを見せておいて、競技が終わったあたりで「リプレイ映像」と称して水中も見せるとか、そのくらいの気配りをしてみてもバチは当たらないよなあ、と…。

あるいは、「どうしても我々は水中映像を見せたいんじゃ! 見たいんじゃ!」と言うなら、水中でどんなアクションをするかを競い合う別競技を新規に作ってしまうほうがいいのではないか。

要するに、「別枠」で流す分には何も問題無いし、「別枠」として印象付けるやり方も色々あるはずなんだけど、何の工夫もせずに本編で流してたから「ちょっと待て」という気分になったという、それだけの話なんですけど。

とにかく、今回の東京オリンピックの中継映像は酷いなあ…雑だなあ…。てなことを思ったのでメモ。思考メモ。 *1 *2
*1: でもまあ、どうせスポーツ関係は脳筋だから、「コレのどこがいかんのだ」「○○オリンピックでもやってたではないか」とか言い出すんだろうなあ…。「本来はどういう競技だったのか」「何をどう見せるのか」についてちゃんと考えたら、そういう意見は出てこないのではないかと思うのだけど…。
*2: 「水中の様子も得点に影響する時代になってる」と言われそうな気もするけど、仮にそうだとすれば、水中映像が得られない状況で開かれた競技会では正当な審査ができていないことになってしまって、ますますマズイのでは、という疑問も…。審査条件が激変するのに、ソレを競技として扱ってもいいのだろうか…? まあ、そもそも、その手のスポーツって、一体何を審査しているつもりなんだろう、その得点は本当に妥当な点数なのか、という根本的な疑問もあるのだけど…。

2021/08/08() [n年前の日記]

#1 [nitijyou] グルーガンについて少し調べてた

木工作業にグルーガンって使えるのかなと気になったので、その手の記事をググって眺めているところ。

どうやら木材同士の接着にはフツーに使えるらしいし、表面が凸凹している素材ほどしっかりくっつくので、むしろ木材の接着は実に効果的、ではあるけれど強度的にはビミョーだから仮止め程度と捉えるべき、という話もあるようで…。

接着面積が強度に関係してくるようだけど、自分が工作する時は細い角材をくっつけるとかそんな感じの作業ばかりなので、ポロッと剥がれ落ちそうだなと…。接着に時間がかかってしまうのがツライけど、フツーにボンドの類で接着するほうがいいのかなと…。

でも、あったらあったで、便利そうでもある…。何か使い道を思いつくかもしれないし…。

#2 [nitijyou] M厚型刃が気になる

木工作業時にカッターを使って角棒を切っていたのだけど、OLFA製の万能M厚型カッターの刃が短くなっていることに気が付いて。替刃が欲しいけど、近所では売ってないのだよな…。かといって、通販で買うほどのものかな、という気も…。

そもそも、M厚型刃って何があるのかも把握してないわけで。フツーのM厚型と、特専黒刃があるみたいだけど、特専黒刃は切れ味が鋭い代わりにすぐ刃先がダメになるという話も…。

OLFA公式サイト上で紹介されてる型番と、通販ショップで扱われてる商品の型番がビミョーに違うのも気になる。ヨドバシでは10枚入りの商品が売ってるけど、公式サイトでは5枚入りと20枚入りしかないように見えるし。どうなってるんだろう…。

もうちょっと調べてみるか…。

#3 [anime] 「東のエデン劇場版」を視聴

BS12で放送されてたので視聴。元々はノイタミナ枠で放送されていたTVアニメシリーズで、その続編となる劇場版、という説明で合ってるのだろうか。攻殻SACシリーズの監督で有名な、神山監督作品。劇場版は二部作で、先週は前編、今週は後編。

面白かった…。実に神山監督らしいお話だったなと…。ところどころで出てくる台詞が、チクリチクリと現実の日本社会批判になっていたあたりもなんだか面白い。こういうアニメを作ってみせるあたりに、独特な作家性が感じられるというか。貴重な映像作家だなあと再認識。

ラストまで見てスッキリしない視聴者が多そうな気もしたけど、むしろ 社会が大激変しちゃったらそれもそれで嘘臭くてモヤモヤしそうな気もするわけで…。まあ、これがもしハリウッド映画ならドーンと変えちゃうのだろうけど、そういうのはハリウッド映画がやればいいことなので…。「なんじゃそりゃ」よりは「まあそうなるよね」のほうがしっくりくる時もあるよなと。

それにしても、「100億円渡されてこれで日本を良くしろと言われたら、お前は何をする?」という問いは、実に面白い気がする…。

その問いに対して、君ならどう答えるのか。みたいな。「100億あってもそりゃ無理だ」という答えを出す人も居れば、「アレ? ソレって100億無くても…今からでも始められるんじゃね?」という答えを出す人も居たりするのかなと…。

まあ、アイデアマンなんてほとんど居ないから、こういう現状になってるのだろうけど。ていうか自分も「うーん」と言ったまま黙り込んじゃうけど。こういうことをすれば国が良くなるんじゃね? という妄想ネタすら何一つ浮かばないのが現実…。

2021/08/09(月) [n年前の日記]

#1 [nitijyou] ワットチェッカー用の台を作り直した

MDF板と角材を使って、ワットチェッカー サンワサプライ TAP-TST5用の台を作り直してみた。

wattchecker_base_05_ss.jpg

使った材料は以下の2つ。どちらもダイソーで購入。 角材をイイ感じの長さで切って、超多用途ボンドと謳う、セメダイン スーパーXクリアタイプで、MDF板に接着していった。

誰も使わないだろうけど、一応、横から見た時の図面も置いておく。ちなみに図面は AR_CAD 1.6.0 を使用して作図。

_wattchecker_base_05.pdf

wattchecker_base_05.png

感想。 :

数日前に作ったダンボール使用版と比べて、強度面は安心できそう。また、コレは以前も書いたけど、斜め45度にするとワットチェッカーの液晶がとても見易い。 *1

ただ、出来上がったソレを眺めているうちに、工夫すれば角材だけでも作れたのではと思えてきた…。MDF板を使って、ここまでガッチリしたものを作らなくても良かったのでは…。

ワットチェッカーの裏側の、電源延長コードのコネクタ部分ががっしりしているため、台にある程度高さを持たせるしかなかったわけだけど。そのコネクタ部分の角度や大きさを工夫できれば、100円ショップで売っているスマホスタンドの類を流用して楽ができたのではないかと思わないでもない…。ただ、電源延長コードのコネクタって、形状面でほとんど選択肢が無いわけで…。変換プラグだかコネクタだかを新規購入しないと、角度を変えられないのだよな…。

*1: ただ、斜め45度にすると埃が溜まりやすくなるだろうから、ずっとそこに設置し続ける使い方をしたい場合は、かなりよろしくないと思う。

2021/08/10(火) [n年前の日記]

#1 [nitijyou] 運転免許を更新してきた

郡山運転免許センターに行って、運転免許証の更新をしてきた。お袋さんが運転する車で送迎してもらった。ありがたや。

センター内は、相変わらずめちゃくちゃ混んでた。コレ、どうにかしたほうがいいと思うのだけど…。現場の人達にとっては、毎日が戦場なのでは…。

かかった時間としては、以下のような感じ。
優良ドライバーの場合、その日の2回目の講習が 09:40-10:10、3回目の講習が 10:10-10:40 になっていた。

以前Web上で見かけた記事では、優良ドライバーの場合、2回目の講習で更新作業が終わるから、10:15頃には終了するという話だったけど。コロナウイルスの感染対策で、講習を受ける会議室(?)の席は飛び飛びに配置してあったので…。単純計算では、通常時と比べて一度に受講できる人数が半分になるはずだから、その分、1日に行う講習回数が増えていて、終了時間もずれこんでいるのではないかと想像してみたりもして。

感染対策について。 :

センター内では、あちこちで、一応それっぽく感染対策をしているようにも見えた。
  • 中に入る人は必ずマスクを着用するように言われる。
  • 入り口には非接触タイプの体温計を設置。
  • 書類を書く部屋では、各机に、透明なビニールの壁?を設置。
  • 行列ができる場所では、足元に足跡マークが貼ってあって間隔を確保するように誘導。
  • 講習を受ける会議室では、窓を開けて空気の循環をしている、と説明された。

ただ、それでも、そもそも人数が多くて…。ここで感染しちゃっても全然おかしくないよなあと思える密集具合…。でもまあ、やれるだけのことはやってあったから、これで感染したらもう仕方ないわな…。

そういえば、講習を受けてる最中、後ろの席の人が「ゴホゴホ! ゴホ!」とずっと咳をしていて…。助けて。勘弁して。怖くて怖くて講習内容が頭に入ってこないよ!

いやまあ、皆でマスクをつけているから飛沫の拡散も弱まってはいるだろうし、そもそも無症状感染者がウロウロしてる可能性だって高いだろうしで、気にしても仕方ないのだろうけど…。

人が多過ぎるのはどうにかならないのかな。 :

毎日毎日、こんなにも密集する仕組み自体がおかしいよなと思えるわけで。

更新作業の時間短縮ができれば、センターから立ち去る人数も増えるわけで、つまりは密集する機会を減らせるはずで…。
  • 事前に家で書類を書けるようにするとか。
  • インターネットを利用して書類作成・入力作業ができるようにするとか。
  • 視力測定を別の場所でもできるようにするとか。
  • 写真撮影を事前に済ませることもできるようにするとか。
何かしら改善できそうな気もするのだけど…。

運転免許センターの数を増やすという手もあるのかな。福島と郡山にしかないのって、どうなんだろ。でも、増やすと予算面の問題が出てきちゃうのかな…。

2021/08/11(水) [n年前の日記]

#1 [ruby] Windows10上でRubyをアップデートした

Windows10 x64 21H1上に Ruby 2.6.6 x86 をインストールしてあったのだけど、気が付いたら 2.6.8 が配布されているようなのでアップデートしてみた。

_RubyInstaller for Windows
_Downloads

2.6.8 x86 の他に、2.7.4 x64 と 3.0.2 x86 もインストールしておくことにする。以下のファイルをDL。 今回は with Devkit 版をDLした。Devkit版には MSYS2 が含まれていて、C言語等で書かれた外部ライブラリもビルドして使うことができる。その代わり、それぞれ、1〜2GBほどファイル容量を食う…。

それぞれを実行してインストール。今回は以下にインストールした。
今現在の RubyInstaller は、既に Ruby がインストールされていると、インストールされている場所を自動検出してアップデートしてくれるらしい。Ruby 2.6.6 から 2.6.8 にする分には、どこにインストールするか尋ねてくることはなかった。Ruby 2.7.4 と 3.0.2 については、メジャーバージョン(?)が異なるので、インストール場所を尋ねてきた。

pik や uru に登録。 :

pik や uru を使って、Rubyの複数バージョンを共存できるようにする。pik, uru は別途インストールが必要。
pik add C:\Ruby\Ruby27-x64\bin
pik add C:\Ruby\Ruby30-x86\bin
pik list
pik 274
pik 302
uru admin add C:\Ruby\Ruby27-x64\bin --tag 27
uru admin add C:\Ruby\Ruby30-x86\bin --tag 30
uru ls
uru 27
uru 30

pik は 0.2.8 を使用。
> pik --version
pik 0.2.8
0.3.0 は、何か不具合があったような気がするけど…何だったっけ…。

_Downloads - vertiginous/pik
_Rubyアソシエーション: 複数のRuby環境の構築
_windows10 Pikを使ってRubyのバージョンを管理する | mebee

pik に何のRubyが登録されているかは、C:\Users\[USRNAME]\.pik\config.yml で記述されている。

uru は 0.8.5 を使用。
> uru version
uru v0.8.5 [windows/386 go1.10]

_jonforums / uru / ダウンロード - Bitbucket
_Windowsで異なるバージョンのRubyを使う方法(uru) - Qiita

#2 [ruby] Windows10上で Ruby 2.3.3 をインストールしようとして少しハマった

Windows10 x64 21H1 + Ruby 2.6.8 p205 x86 上で DXRuby 1.4.7 を利用しようとしたら、ogg再生ライブラリの Ayame が使えなくて…。もしかして Ruby 2.1 - 2.3 じゃないと使えないのかなと気になったので、Ruby 2.3.3 をインストールして試してみようかと。

しかし、gem が使えなくて、ちょっとハマった…。

Ruby 2.3.3 本体のインストール。 :

RubyInstaller をインストール。

_Download Archives

rubyinstaller-2.3.3.exe をDLして実行。C:\Ruby\Ruby23-x86\ にインストール。

複数バージョンの共存。 :

Widnows上で Ruby の複数のバージョンを共存させたい場合、pik や uru を別途インストールして利用する。複数バージョンを共存しない場合は、pik や uru は不要。

> pik add C:\Ruby\Ruby23-x86\bin

> pik list

  187: ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
  233: ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
* 268: ruby 2.6.8p205 (2021-07-07 revision 67951) [i386-mingw32]
  274: ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]
  302: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [i386-mingw32]

> pik 233

Select which Ruby you want:
1. 302: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [i386-mingw32]
2. 233: ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
?  2

> ruby -v

ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]

> uru admin add C:\Ruby\Ruby23-x86\bin --tag 23

> uru ls

    187         : ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
    23          : ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
    27          : ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]
    30          : ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [i386-mingw32]
=> system      : ruby 2.6.8p205 (2021-07-07 revision 67951) [i386-mingw32]

> uru 23

---> these rubies match your `23` tag:

[1] 187         : ruby 1.8.7 (2010-12-23 patchlevel 330) [i386-mswin32]
                   Home: C:\Ruby\Ruby187p330mswin32\bin
[2] 23          : ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]
                   Home: C:\Ruby\Ruby23-x86\bin
[3] 27          : ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]
                   Home: C:\Ruby\Ruby27-x64\bin
[4] 30          : ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [i386-mingw32]
                   Home: C:\Ruby\Ruby30-x86\bin

select [1]-[4] to use that specific ruby (0 to exit) [0]: 2
---> now using ruby 2.3.3-p222 tagged as `23`

> ruby -v

ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]

DevKitを入手して解凍。 :

DevKit を導入することで、C言語その他で書かれた外部ライブラリをビルドして使うことができるようになる。

DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe をDL。実行すると解凍場所を尋ねてくるので、今回は C:\Ruby\devkit200-x86\ を指定した。

ちなみに、Ruby のバージョンによって利用する DevKit は異なる。
  • Ruby 1.8.7 - 1.9.x : DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe をインストール。
  • Ruby 2.0.0 x86 以降 : DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe をインストール。
  • Ruby 2.0.0 x64 以降 : DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe をインストール。
  • Ruby 2.4.4-1以降 : Ruby+Devkit Installers という版を使えば DevKit も一緒にインストールしてくれる。

DevKit をインストール。 :

以下を参考にして作業。

_Rubyをインストール/アップデートするには?(Windows編) - Build Insider

DOS窓を管理者権限で開いて、DevKit を解凍した場所に移動。
cd /d C:\Ruby\devkit200-x86

Ruby の複数バージョンを利用している場合は、Ruby 2.3.3 に切り替える。
pik 233
or
uru 23

DevKit を適用するための設定ファイルを作成。
> ruby dk.rb init

[INFO] found RubyInstaller v2.6.8 at C:/Ruby/Ruby26-x86
[INFO] found RubyInstaller v2.7.4 at C:/Ruby/Ruby27-x64
[INFO] found RubyInstaller v3.0.2 at C:/Ruby/Ruby30-x86
[INFO] found RubyInstaller v2.3.3 at C:/Ruby/Ruby23-x86

Initialization complete! Please review and modify the auto-generated
'config.yml' file to ensure it contains the root directories to all
of the installed Rubies you want enhanced by the DevKit.

2.3.3以外にも、2.6.8, 2.7.4, 3.0.2 も対象になってしまっている。2.3.3 以外は除外したい。

C:\Ruby\devkit200-x86\config.yml を編集。2.3.3 以外の行を削除。

正しく編集できたか確認。
> ruby dk.rb review

Based upon the settings in the 'config.yml' file generated
from running 'ruby dk.rb init' and any of your customizations,
DevKit functionality will be injected into the following Rubies
when you run 'ruby dk.rb install'.

C:/Ruby/Ruby23-x86

DevKit をインストール。
> ruby dk.rb install
[INFO] Updating convenience notice gem override for 'C:/Ruby/Ruby23-x86'
[INFO] Installing 'C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/devkit.rb'

gemを更新。 :

gem (rubygems) を使うと、Ruby の外部ライブラリ/パッケージをインターネット経由でインストールすることができる。

しかし、Ruby 2.3.3 をインストールしたばかりの状態では、gem の利用時にエラーが出る。
> gem install dxruby
ERROR:  Could not find a valid gem 'dxruby' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)

_Windows環境でgemがSSLエラー 2016 - Qiita

Rubygems をアップデートしないといかんらしい…。

> gem -v
2.5.2

_Download RubyGems | RubyGems.org | コミュニティのGemホスティングサービス
_SSL Certificate Update - RubyGems Guides
_GemとSSLに関するトラブルについて

rubygems-3.2.25.zip をDLして解凍。フォルダの中に入って、ruby setup.rb を実行。

> gem -v
3.2.25

rubygems を更新できた。この状態なら gem install hoge が使える。

DXRubyをインストール。 :

DXRuby は、Windows + Ruby の環境でDirectXを利用できるようになる、2Dゲーム制作用のライブラリ。

DXRuby 1.4.6 なら、Ruby 2.3 用のバイナリも含まれているので、gem でバージョンを指定してインストール。
pik 233
gem install dxruby -v "1.4.6"

これで DXRuby が使えるようになった。

ただ、Windows10上では、DircetX9関係のDLLを別途インストールしないと使えないらしい。以下の記事がそのあたり説明してくれている。ありがたや。

_DXRuby 1.4.6 をWindows10で使う時の注意点とインストール方法 - Qiita
_DXRuby 1.4.7 でエラーになった時の対処法とインストール方法 - Qiita

自分の環境では、C:\Windows\System32\D3DX9_40.dll, C:\Windows\SysWOW64\D3DX9_40.dll が既に入ってた。

Ayameの動作確認。 :

DXRuby はそのままだと、サウンドファイルについてはMIDIかwavしか再生できない。Ayame/Ruby を利用することで oggファイルの再生もできるようになる。

以下で Ayame/Ruby が入手できる。

_Home - mirichi/dxruby-doc Wiki

ayameruby004-mswin32-ruby23.zip をDLして解凍。中に、Ayame.dll、ayame.so、sample1.rb 等が入ってる。ruby sample1.rb を実行すれば、oggファイルの再生ができるかどうか確認できる。

とりあえず、Windows10 x64 21H1 + Ruby 2.3.3 x86 + DXRuby 1.4.6 + Ayame/Ruby 0.0.4 で、oggを再生できることは確認できた。

Ruby 2.6.8 その他で使うためには、ayame.so をビルドし直さないといかんのだろうか…。

一応、昔、ayame.so のビルドに挑戦していた時期があったらしいのだけど…。

_mieki256's diary - Windows版Rubyの拡張ライブラリをビルドする方法が分からない
_mieki256's diary - ayame.soをビルドしようとしてハマり中
_mieki256's diary - ayame.soのビルドでまだハマり中
_mieki256's diary - dllからMinGW用のライブラリファイルを作成
_mieki256's diary - Visual C++ で Windows版RubyのC拡張ライブラリがビルドできるか実験

昔の自分は一体何をやっていたのか、読み返しても分からん…。

2021/08/12(木) [n年前の日記]

#1 [firefox] FirefoxのUIが改悪されてしまった

Windows10 x64 21H1上で、Firefox が 91.0 に自動アップデートされたのだけど、UIが改悪されてしまった…。例の Proton UI が強制的に有効に…。about:config による無効化設定が反映されなくなっている…。

仕方ないので、以下を参考にして userChrome.css を弄ることにした。

_Firefox 89の新UI「Proton」に手を加えてみる (userChrome.cssの編集など) - とある人柱のblog

Firefox開発陣は「新しい Proton UI がこんなにも受け入れられた!」とそのうち言い出すのだろうけど、ソレ、俺は使ってないし、受け入れがたいクソデザインと思っているぞと、今のうちに言っておくよ…。

何故ツライかと言うと、あちこちで縦方向の余白を増やしちゃったのが非実用的だと感じているわけで。今時のPCのデスクトップ画面は16:9とか1920x1080とかなので、4:3とか1600x1200とかだった時代に比べると縦方向のドット数が少ないから、縦方向の padding が増えると一度に表示できる情報量・一瞬で目に入る情報量が減ってしまってしっくりこないのだよな…。

ひょっとして Fierfox のUIデザインしてる人は、縦1200ドットの、マイナーだけど縦ドット数が多いディスプレイ、あるいはリッチな4Kディスプレイを使ってデザインしているのだろうか。それとも普段は GoogleChrome を使っていて Firefox なんて常用してない人がデザインしてるとか。

今現在の userChrome.css をメモ。 :

今現在の userChrome.css の内容をメモ。
/* Hide "Saved to Library!" bookmark confirmation popup */
#confirmation-hint { display: none !important; }

/*  Change the background color of the title bar when the window starts to the OS theme color */
:is(#TabsToolbar, #toolbar-menubar):not(:-moz-window-inactive) {
color: -moz-accent-color-foreground;
background-color: -moz-accent-color;
}

/*  Changed the height of the title bar to the same height as the conventional compact mode */
* {
--tab-min-height: 29px;
}

/*  Change tab shape to rectangle */
.tab-background {
border-radius: 0px !important;
margin-block: 0px !important;
}

/*  Change tab shape to rectangle 2 */
/*
.tab-background {
border-radius: 4px 4px 0 0 !important;
margin-block: 0 !important;
}
*/

/*  Adjust the spacing between toolbar icons */
#nav-bar toolbarbutton {
padding-left: 0px !important;
padding-right:0px !important;
}

/*  Adjust dropdown / context / pop-up menu spacing */
menupopup > menuitem,
menupopup > menu {
  padding-block: 2px !important;
}
:root {
  --arrowpanel-menuitem-padding: 2px 4px !important;
}

/* bookmark item padding */
.bookmark-item,
.bookmark-item > menupopup,
.bookmark-item > menupopup > menuitem {
padding-block: 0.2em !important;
}

#2 [nitijyou] 体調が悪い

16:00頃から耳鳴り、19:00頃から軽いめまい。立っているとふらふらする…。熱を測ったけど平熱。なんだろうな、コレは…。

2021/08/13(金) [n年前の日記]

#1 [dxruby] DXRubyでoggを再生したいのだけど問題が

DXRubyでoggを再生したいのだけど問題が…。

少し解説。 :

DXRubyは、Windows上でRubyというプログラミング言語を使って2Dゲームを作れるライブラリ。DirectX9を利用しているので画面描画が高速で、更に他のゲーム制作ライブラリに比べると記述がシンプルで覚えやすいのが売り。

_Project DXRuby

ただ、DXRuby のサウンド関係はちょっと貧弱で、wav か MIDI しか鳴らせない。せめて ogg ぐらいは鳴らしたい…。

一応、他のライブラリを組み合わせることで、DXRuby で作ったゲームでも ogg を鳴らすことができる。

_ DXRubyのドキュメント で推奨されていたサウンド関係のライブラリは、以下の3つ。
  • Ayame/Ruby : Ayame.dll + ayame.so で構成。Ayame.dll はフリーで使える。
  • voxrb (vox.rb) : Vox.dll + Vox.rb で構成。Vox.dll はフリーで使えるが機能が少ない。
  • bassrb (bass.rb) : bass.dll + Bass.rb で構成。bass.dll は機能豊富だが、商用利用はライセンス料がかかる。非商用で利用するなら料金はかからない。

という話を踏まえた上で。

先日 Ruby 2.6.8、2.7.4、3.0.2 をインストールしたついでに、DXRuby で ogg を鳴らせるか動作確認しようとしたところで問題が発生してしまった。

Ayame/Rubyの問題。 :

Ayame/Ruby は以下から入手できる。

_Home - mirichi/dxruby-doc Wiki

しかし、Ruby 2.1、2.2、2.3 用のバイナリ(ayame.so)しかないので、今時の Ruby、3.0.x、2.7.x、2.6.x では動かないっぽい…。

voxrb、bassrbの問題。 :

voxrb、bassrb にも、問題点が2つあって。

voxrb、bassrb は、前述のドキュメントによると、以下から入手できると書いてあるのだけど。
http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi

このWikiページ、今現在は消滅している。つまり、voxrb も bassrb も、今では簡単には入手できない。これが一つ目の問題点。

ただ、一応、WebArchive で以前のページを見ることができた。

_DXRuby プロジェクトWiki - ファイル置き場 (WebArchive)

そこから辿って、今現在もファイル群が残っているディレクトリに到達できた。

_http://dxruby.osdn.jp/files/

voxrb.zip (2009/05/15), bassrb.zip (2009/06/14) が、目的のファイル。ということで、頑張ればなんとか入手できなくもない…。

これで ogg を鳴らせるかなと思いきや、さにあらず。

昔の Ruby (1.8, 1.9, 2.0) は .dll を利用する際に win32api というモジュールを利用することになっていて、voxrb も bassrb もソレを利用していて…。DXRubyの作者様のblogで、そのあたりの変化が分かりやすく解説されているけれど。

_DLとWin32APIとFiddle - mirichiの日記

この win32api、今時の Ruby では使用は非推奨になっていて、使おうとすると一々警告が出てくるらしい。更に、Ruby 3.0.x に至っては、とうとう削除されてしまったそうで…。

_【Ruby 3.0 Advent Calendar 2020】Win32APIが廃止された【11日目】 - ゲームリンクスの徒然なる日常

つまり、voxrb も bassrb も、win32api を使っているから、今時のRuby (3.0, 2.7, 2.6)では利用できない。これが二つ目の問題点。

てなわけで、DXRuby で ogg を鳴らしたいなと思っても、今時の Ruby を使おうとすると鳴らせない状況になっているっぽい。困った。wav と MIDI だけでどうにかすることを強要されてしまう…。

余談。Vox.dll, Vox.dllのソース, bass.dll は以下から入手できる。

_Voxの詳細情報 : Vector ソフトを探す!
_ウマイハナシ (Web Archive)
_Un4seen Developments - 2MIDI / BASS / MID2XM / MO3 / XM-EXE / XMPlay

解決策をぼんやり考える。 :

どうしたら解決できるのだろう…。

選択肢その1。今時の Ruby を使うことを諦める。Ruby 2.3 とか、いっそ Ruby 1.8 とか 1.9 を使ってしまえばいい…。でも、せっかく Windows に Ruby をインストールするなら、今時のバージョンを使いたいよな…。たぶん。

選択肢その2。ayame.so を今時の Ruby でも動くようにビルドする。しかし、ayame.so のビルド方法が分からん…。今時の RubyInstaller は DevKit(MSYS2)が同梱されてるけど、それだけでビルドできるのか、それとも Visual C++ を入手しないといかんのか、それすら分からない…。

選択肢その3。voxrb や bassrb を今時のRubyの仕様に合わせて、つまりは fiddle とやらを使って動くように修正する。でも、fiddle とやらの使い方が分かってないと修正なんてできない…。それに、たしか Vox.dll はループ再生に関して不具合があった記憶が…。bass.dll はライセンス料が絡んでくるし…。 *1

選択肢その4。DXRubyを使うのを諦めて _gosu に移行する。だけど、gosu で ogg を扱うと、 _ループ再生で不具合があった 記憶が…。今もおかしいままなんだろうか。

選択肢その5。そもそも Ruby を捨てて、 _Lua言語で2Dゲーム制作ができるlove2d 等を使う。Rubyは、Ruby本体のバージョンアップが激しい上に、後方互換性を比較的無視して仕様変更がガンガン入るあたりがアレなわけで…。Rubyを捨ててしまえば色々と楽になる…。

他にも、ogg再生を諦めて wav と MIDI だけで頑張るとか。Ruby で ogg が再生できそうな別のライブラリを探すとか。策はあるのかもしれんけど…。

voxrbをfiddleで動くように修正してみた。 :

前述の選択肢その3に少しチャレンジしてみた。voxrb (Vox.rb) を、fiddle を使って動くように修正してみようかと。

一応、出来たかもしれない。ライセンスはオリジナル版に倣って Public Domain ってことで。

_Vox.rb (fiddle使用版)

fiddle が使えるのは Ruby 2.0以降という話を見かけたので、Ruby 1.8 や 1.9 上で動く場合は以前のオリジナル版そのままの処理になるようにしてみた。また、各種メッセージに日本語文字列が含まれていると、Rubyのバージョンによってはエラーを出して動かなかったりしたので、できるだけASCII文字列のみで置き換えてみた。

Vox.rb を利用するサンプルと ogg は以下。

_ogg_play_voxrb.rb
_loop_bgm.ogg

ruby ogg_play_voxrb.rb を実行すれば DXRuby のウインドウが開いて、z, x, c, vキーを叩けば音が鳴ったり、一時停止できたり、フェードアウトしたりする。

一応、関連ファイルを全部zipにまとめて置いときます。

_ogg_play_with_voxrb_20210818.zip
_ogg_play_with_voxrb_20210813.zip

動作確認環境は以下。
  • Windows10 x64 21H1
  • Ruby 1.8.7 p330 x86 (i386-mswin32) + DXRuby 1.0.9 x86
  • Ruby 1.9.3 p551 x86 (i386-mingw32) + DXRuby 1.4.1 x86
  • Ruby 2.3.3 p222 x86 (i386-mingw32) + DXRuby 1.4.6 x86
  • Ruby 2.6.8 p205 x86 (i386-mingw32) + DXRuby 1.4.7 x86
  • Ruby 2.7.4 p191 x86 (i386-mingw32) + DXRuby 1.4.7 x86
  • Ruby 3.0.2 p107 x86 (i386-mingw32) + DXRuby 1.4.7 x86

この調子で bassrb の修正にもチャレンジしてみようかなと思ったけど、さて…。

2021/08/18追記。 :

Vox.rb の一部の記述でバグってたので修正。

*1: もっとも、base.dll の場合、非商用なら無料で使えるから、作った何かしらを無料で公開するなら問題無く利用できるだろうけど。

#2 [dxruby] DXRuby 64bit版が動かなくて悩んだ

DXRuby 1.4.7 から、64bit版も同梱されるようになったと知った。素晴らしい。

しかし、Windows10 x64 21H1上で DXRuby 1.4.7 の動作確認をしてみたら、Ruby のバージョンによっては、require "dxruby" をしただけでエラーが出て悩んでしまった。

調査結果。 :

以下の Ruby バージョンでは DXRuby 1.4.7 64bit版が動かない。require "dxruby" をしただけでエラーが出る。
  • Ruby 3.0.2 p107 x64 (2021-07-07) (rubyinstaller-devkit-3.0.2-1-x64.exe)
  • Ruby 2.7.4 p191 x64 (2021-07-07) (rubyinstaller-devkit-2.7.4-1-x64.exe)
  • Ruby 2.7.3 p183 x64 (2021-04-05) (rubyinstaller-devkit-2.7.3-1-x64.exe)

しかし、Ruby 64bit版上では必ず動かないというわけでもない。以下のRubyバージョンなら DXRuby が動く…。
  • Ruby 3.0.0 p0 x64 (2020-12-25) (rubyinstaller-devkit-3.0.0-1-x64.exe)
  • Ruby 2.7.2 p137 x64 (2020-10-01) (rubyinstaller-devkit-2.7.2-1-x64.exe)

また、最新の Ruby では必ず動かないというわけでもない。以下のように、32bit版なら、最新の Ruby でも DXRuby が動く…。
  • Ruby 3.0.2 p107 x86 (2021-07-07) (rubyinstaller-devkit-3.0.2-1-x86.exe)
  • Ruby 2.7.4 p191 x86 (2021-07-07) (rubyinstaller-devkit-2.7.4-1-x86.exe)

このことから推測できることは…。

  • DXRuby 32bit版 (x86版) なら、どのRubyのバージョンでも動く。たぶん。
  • DXRuby 64bit版 (x64版) は、動くRubyのバージョンが限られている。

おそらく、DXRuby 64bit版のバイナリがビルドされた時期に公開されていたバージョンの Ruby 64bit版を使えば、DXRuby 64bit版も動くのではないか、という気もする。

Ruby 64bit版は、Ruby 32bit版に比べて、拡張ライブラリのバイナリ互換性が低いということなのだろうか…?

余談。Ruby 64bit版にも対応してる gosu はどうしているのかなと gem install gosu をしてみたら、ビルドが始まった…。ということは、DevKitの導入が必須なのか…。バイナリだけを配布して動かすことを諦めている気配がする…。

動作確認時のエラーメッセージ等をメモ。 :

Ruby 3.0.2 p107 (2021-07-07) x64-mingw32 の場合。
> ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32]

> gem install dxruby
Fetching dxruby-1.4.7.gem
Successfully installed dxruby-1.4.7
Parsing documentation for dxruby-1.4.7
Installing ri documentation for dxruby-1.4.7
Done installing documentation for dxruby after 0 seconds
1 gem installed

> irb
irb(main):001:0> require "dxruby"
<internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': failed create window - CreateWindow (DXRuby::DXRubyError)
        from <internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from C:/Ruby/Ruby30-x64/lib/ruby/gems/3.0.0/gems/dxruby-1.4.7/lib/dxruby.rb:3:in `<top (required)>'
        from <internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `require'
        from <internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:160:in `rescue in require'
        from <internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:149:in `require'
        from (irb):1:in `<main>'
        from C:/Ruby/Ruby30-x64/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
        from C:/Ruby/Ruby30-x64/bin/irb.cmd:31:in `load'
        from C:/Ruby/Ruby30-x64/bin/irb.cmd:31:in `<main>'
<internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- dxruby (LoadError)
        from <internal:C:/Ruby/Ruby30-x64/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from (irb):1:in `<main>'
        from C:/Ruby/Ruby30-x64/lib/ruby/gems/3.0.0/gems/irb-1.3.5/exe/irb:11:in `<top (required)>'
        from C:/Ruby/Ruby30-x64/bin/irb.cmd:31:in `load'
        from C:/Ruby/Ruby30-x64/bin/irb.cmd:31:in `<main>'

Ruby 2.7.4 p191 (2021-07-07) x64-mingw32 の場合。
> ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]

> gem install dxruby
Fetching dxruby-1.4.7.gem
Successfully installed dxruby-1.4.7
Parsing documentation for dxruby-1.4.7
Installing ri documentation for dxruby-1.4.7
Done installing documentation for dxruby after 0 seconds
1 gem installed

> irb
irb(main):001:0> require "dxruby"
Traceback (most recent call last):
       10: from C:/Ruby/Ruby27-x64/bin/irb.cmd:31:in `<main>'
        9: from C:/Ruby/Ruby27-x64/bin/irb.cmd:31:in `load'
        8: from C:/Ruby/Ruby27-x64/lib/ruby/gems/2.7.0/gems/irb-1.2.6/exe/irb:11:in `<top (required)>'
        7: from (irb):1
        6: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:147:in `require'
        5: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:158:in `rescue in require'
        4: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:158:in `require'
        3: from C:/Ruby/Ruby27-x64/lib/ruby/gems/2.7.0/gems/dxruby-1.4.7/lib/dxruby.rb:3:in `<top (required)>'
        2: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
        1: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
DXRuby::DXRubyError (failed create window - CreateWindow)

Ruby 2.7.3 p183 (2021-04-05) x64-mingw32 の場合。
> ruby -v
ruby 2.7.3p183 (2021-04-05 revision 6847ee089d) [x64-mingw32]

> gem install dxruby
Fetching dxruby-1.4.7.gem
Successfully installed dxruby-1.4.7
Parsing documentation for dxruby-1.4.7
Installing ri documentation for dxruby-1.4.7
Done installing documentation for dxruby after 0 seconds
1 gem installed

> irb
irb(main):001:0> require "dxruby"
Traceback (most recent call last):
       10: from c:/Ruby/Ruby27-x64/bin/irb.cmd:31:in `<main>'
        9: from c:/Ruby/Ruby27-x64/bin/irb.cmd:31:in `load'
        8: from C:/Ruby/Ruby27-x64/lib/ruby/gems/2.7.0/gems/irb-1.2.6/exe/irb:11:in `<top (required)>'
        7: from (irb):1
        6: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:147:in `require'
        5: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:158:in `rescue in require'
        4: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:158:in `require'
        3: from C:/Ruby/Ruby27-x64/lib/ruby/gems/2.7.0/gems/dxruby-1.4.7/lib/dxruby.rb:3:in `<top (required)>'
        2: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
        1: from C:/Ruby/Ruby27-x64/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
DXRuby::DXRubyError (failed create window - CreateWindow)

Ruby 3.0.0 p0 (2020-12-25) x64-mingw32 の場合。これは動きそう。
> ruby -v
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x64-mingw32]

> gem install dxruby
Fetching dxruby-1.4.7.gem
Successfully installed dxruby-1.4.7
Parsing documentation for dxruby-1.4.7
Installing ri documentation for dxruby-1.4.7
Done installing documentation for dxruby after 0 seconds
1 gem installed

> irb
irb(main):001:0> require "dxruby"
=> true

Ruby 2.7.2 p137 (2020-10-01) x64-mingw32 の場合。これも動きそう。
> ruby -v
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x64-mingw32]

> gem install dxruby
Fetching dxruby-1.4.7.gem
Successfully installed dxruby-1.4.7
Parsing documentation for dxruby-1.4.7
Installing ri documentation for dxruby-1.4.7
Done installing documentation for dxruby after 0 seconds
1 gem installed

> irb
irb(main):001:0> require "dxruby"
=> true

Ruby 3.0.2 p107 (2021-07-07) i386-mingw32 の場合。
> ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [i386-mingw32]

> gem list | grep dxruby
dxruby (1.4.7)

> irb
irb(main):001:0> require "dxruby"
=> true

Ruby 2.7.4 p191 (2021-07-07) i386-mingw32 の場合。
> ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [i386-mingw32]

> gem list | grep dxruby
dxruby (1.4.7)

> irb
irb(main):001:0> require "dxruby"
=> true

#3 [ruby] RUBYOPTの扱いでちょっと悩んでしまった

Windows10 x64 21H1上で Ruby 1.8.7、2.3.3、2.6.8、3.0.2 をインストールしてあるのだけど、Ruby 1.8.7 を動かしたときにエラーが出ることに気が付いた。システム側の環境変数に RUBYOPT=-Eutf-8 という環境変数があることでエラーが出ているようで。

とりあえず件の環境変数を削除してみたのだけど、すると今度は Ruby 2.0以降でエラーが…。例えば irb がエラーを出して動かなかったりする…。

仕方ないので、RUBYOPT=-Eutf-8 を復活させた。Ruby 1.8.7 を利用する時は…。set RUBYOPT= で環境変数を削除してから利用するぐらいしか思いつかないな…。

2021/08/14() [n年前の日記]

#1 [ruby][dxruby] Rubyのfiddleを勉強中

bassrb (Bass.rb) を fiddle を使って動くように修正しようとしているけれど、そもそも Ruby の fiddle の使い方だの、C言語のデータ型がよく分からないので、そのあたりを勉強しつつ作業中。

Ruby の fiddle は、.dll, .so 等のダイナミックリンクライブラリを扱うためのライブラリ、だそうで。

_library fiddle (Ruby 3.0.0 リファレンスマニュアル)

とりあえず分かってきたことをメモ。

boolとBOOLは違う。bool はC言語(?)のデータ型、boolean型で、BOOL は Visual C++ で使うデータ型だそうで。実際には BOOL は int で、false が 0、true が 1 になっているっぽい。bass.h の中で、戻り値が BOOL の関数? メソッド? がたくさんあるけれど、その場合戻り値は int として扱っていいらしいなと…。

DWORD は int か uint32_t で置き換えることができる。

QWORD というデータ型が bass.h に出てきたけど、uint64_t で置き換えればいいらしい。

fiddle/types を使えば、BOOL や DWORD をそのまま記述できるようになるっぽい。ただ、dlload をした後で include Fiddle::Win32Types を記述しないとダメらしい。
module M
  extend Fiddle::Importer
  dlload "bass.dll"
  include Fiddle::Win32Types
  ...

fiddle の dlload "bass.dll" で .dll をロードできるはずが、Ruby のバージョンによっては「そんなファイルは見当たらない」とエラーになってしまう。Ruby のバージョンによっては、.dll を探す場所が違うという話を見かけた。とりあえず、以下のような書き方をして、「スクリプトファイルのある場所に .dll もあるはず」という前提で絶対パスを渡して誤魔化してみたけど、これで合ってるのかどうか…。
  module Bass
    bassdllpath = format("%s/%s", File.expand_path("..", __FILE__), "bass.dll")

    extend Fiddle::Importer
    dlload bassdllpath
    ...

bass.h の中で float が出現するけれど、C言語の float と Ruby の float は違うようで…。 オリジナル版 Bass.rb では、ひとまず引数として int を受け取るという記述をしておいて、以下のような書き方をして引数を渡していたけれど。
    BASS_ChannelSetAttribute = Win32API.new("bass", "BASS_ChannelSetAttribute", "III", "I")

    ...

        ::Bass.err if BASS_ChannelSetAttribute.call(@ch, 2, [v].pack("f").unpack("I")[0]) == -1
fiddle の場合はどう記述するのが妥当なのだろう…。とりあえず、以下のような書き方をしてみたけど…。
    extern "int BASS_ChannelSetAttribute(int, int, float)"

    ....

        ::Bass.err if ::Bass.BASS_ChannelSetAttribute(@ch, 2, [v].pack("f").unpack("f")[0]) == 0

Bass.rb の中に出現する「::」が分からない…。何だコレ…。ググってみたら「トップレベル」云々という言葉が出てきたけど…。よく分からないけど、module Bass の中のメソッドを呼びたい時は、::Bass.hoge() と書けば呼べる、ということでいいのだろうか。

参考ページ。 :


2021/08/15() [n年前の日記]

#1 [dxruby] bassrbをfiddleを使って動くように修正してみた

_一昨日_昨日 に続けて作業。

DXRuby 利用時、ogg サウンドファイルの再生に利用できるライブラリ bassrb (Bass.rb) を、今時のRuby (3.0.x 等)でも動かせるように fiddle を使って処理するように修正してみた。ライセンスは、オリジナル版に倣って Public Domain ってことで。

_Bass.rb (fiddle使用版。動作には bass.dll が必要)

Ruby 1.8, 1.9 で動かす場合はオリジナル版の処理を通って、Ruby 2.0 以降で動かす場合は fiddle を使って処理するようにしてある。

最新版の bass.dll は、以下から入手できる。

_Un4seen Developments - 2MIDI / BASS / MID2XM / MO3 / XM-EXE / XMPlay

以下の環境で動かして、ogg が再生できることを確認できた。一応、最新版の bass.dll 2.4.16.3 (2021/07/21) をダウンロードして動作確認した。
DXRuby + Bass.rb を利用して ogg を Stream 再生する使用例は以下。ruby ogg_play_stream_bassrb.rb で実行できる。DXRuby のウインドウが開いて、キー入力に応じて再生テストができる。

_ogg_play_stream_bassrb.rb
_loop_bgm.ogg

DXRuby + Bass.rb を利用して ogg を Sample 再生する使用例は以下。ruby ogg_play_sample_bassrb.rb で実行できる。

_ogg_play_sample_bassrb.rb
_jingle.ogg

一応、関連ファイルを全部まとめて zip にして置いておきます。

_ogg_play_with_baserb_20210818.zip
_ogg_play_with_baserb_20210815.zip

ちなみに、bass.dll は、Vox.dll と違って、ogg のループ再生もちゃんと鳴らしてくれる。Vox.dll で再生するとループする時に変な聞こえ方になるけれど、bass.dll は滑らかに(?)ループする。

ただ、bass.dll の商用利用はライセンス料がかかるので注意…。無料で公開する何かしらに添付して使う分にはライセンス料はかからないけれど、おそらく同人ソフトを作って販売する、といった場合にはライセンス料を払うことになるのではないかなと…。たぶん。

2021/08/18追記。 :

Bass.rb の一部の記述でバグってたので修正。

#2 [ruby] Ruby の fiddle がDLLをロードしてくれない

Ruby の fiddle が DLL をロードしてくれない問題に遭遇して悩んでいたり。コレってバグなの? それとも仕様なの?

経緯。 :

Ruby でサウンドファイルを再生できるらしい、sfml-audio-fiddle という拡張ライブラリを見かけて、試用してみたいと思ったのですけど。

_sfml-audio-fiddleの紹介 - Qiita
_sfml-audio-fiddle | RubyGems.org | コミュニティのGemホスティングサービス
_bggd/sfml-audio-fiddle: fiddle(ruby's FFI) binding for SFML2 Audio functions.
_CSFML (SFML / Download / Bindings)

Windows10 x64 21H1 + Ruby 2.6.8 x86, 2.7.4 x86, 3.0.2 x86 上で動作確認。gem でインストール。
gem install sfml-audio-fiddle

しかし、require "sfml/audio" しただけでエラーが出てしまって。csfml-audio-2.dll 2.5.1 は、Rubyスクリプトと同じ場所に置いてある状態。

これが Ruby 2.3.3 x86 上なら、require "sfml/audio" してもエラーが出ない…。今時の Ruby (2.6.8, 2.7.4, 3.0.2) ではエラーが出る。

どうして今時の Ruby + fiddle は、カレントディレクトリに置いてある DLL がロードできないのだろうと…。セキュリティ関係の何かであえて読み込めない仕様にしてあるとか?

関連してるかもしれない情報をメモ。 :

色々試してみた。 :

Windows版の Ruby において、DLLを検索するパスは、環境変数PATHとは一致してないらしい…。一応、DLL検索パスを変更する手もあるらしいけど…。

方法その1。RubyInstaller::Runtime.add_dll_directory() を使うことで、DLLの検索パスを追加できるらしいので試してみた。

_01_require_sfml_audio.rb
puts "env RUBY_DLL_PATH = #{ENV["RUBY_DLL_PATH"]}"

my_dll_dir_path = File.expand_path("..", __FILE__)
puts "my_dll_dir_path = #{my_dll_dir_path}"
RubyInstaller::Runtime.add_dll_directory(my_dll_dir_path)

require "sfml/audio"

方法その2。Windows API の SetDllDirectory() を使ってDLLの検索パスを指定することもできるらしい。これも試してみた。

_02_require_sfml_audio2.rb
require 'fiddle/import'
require 'fiddle/types'
module WinAPI
  extend Fiddle::Importer
  dlload 'kernel32.dll'
  include Fiddle::Win32Types
  extern 'int SetDllDirectory(LPCSTR)'
end

my_dll_dir_path = File.expand_path("..", __FILE__)
WinAPI.SetDllDirectory(my_dll_dir_path)

require "sfml/audio"

方法その3。sfml-audio-fiddle の audio.rb をカレントディレクトリにコピーして、dlload のあたりで絶対パスを指定するように修正して試してみたりもした。

_03_require_sfml_audio3.rb
require_relative "sfmlaudio"

_sfmlaudio.rb

しかし、どの方法でもエラーが出る…。

CSFMLのバージョンも関係していたらしい。 :

Ruby 2.3.3 ではエラーが出なかったから、てっきり CSFML の .dll のバージョンは合っているのだろうと思い込んでいたけど、試しに色々変えてみたらバージョンによってエラーが出たり出なかったりすることに気づいた。
  • CSFML 2.0 32bit (csfml-audio-2.dll, libsndfile-1.dll, openal32.dll) : エラーが出ない。
  • CSFML 2.1 32bit (csfml-audio-2.dll, libsndfile-1.dll, openal32.dll) : エラーが出ない。
  • CSFML 2.2 32bit (csfml-audio-2.dll, libsndfile-1.dll, openal32.dll) : エラーが出る。
  • CSFML 2.5.1 32bit (csfml-audio-2.dll) : エラーが出る。

利用できるDLLのバージョンと、利用できないDLLのバージョンがあるっぽいな…。

ただ、前述の方法でDLL検索パスを変更しないと、どのみちエラーが出る…。

2021/08/16(月) [n年前の日記]

#1 [ruby] Ruby の sfml-audio-fiddle が動かない

Rubyでogg再生ができるらしい拡張ライブラリ、sfml-audio-fiddle が正常動作しなくて悩んでいるところ。

_sfml-audio-fiddleの紹介 - Qiita
_sfml-audio-fiddle | RubyGems.org | コミュニティのGemホスティングサービス
_bggd/sfml-audio-fiddle: fiddle(ruby's FFI) binding for SFML2 Audio functions.

環境は以下。

インストール方法。 :

念のためにインストール方法をメモしておく。

gem でインストールできる。
gem install sfml-audio-fiddle

動作には CSFML の DLL も必要。以下のサイトから入手する。32bit版と64bit版があるので、使ってる Ruby に合わせる。

_CSFML (SFML / Download / Bindings)
_SFML/CSFML: Official binding of SFML for C

zipをダウンロードして解凍。

bin/ の中に入っている .dll を、スクリプトと同じ場所に置くらしい。
  • csfml-audio-2.dll
  • openal32.dll
  • libsndfile-1.dll ... 解説ページには記載が無いが、ファイル名からして必要になりそうな…。

requireしただけでエラーを出す問題。 :

require "sfml/audio" をしてから使うライブラリだけど、require しただけでエラーを出してしまう。

> irb

irb(main):001:0> RUBY_VERSION
=> "2.6.8"

irb(main):002:0> require "sfml/audio"
Traceback (most recent call last):
        21: from C:/Ruby/Ruby26-x86/bin/irb:23:in `<main>'
        20: from C:/Ruby/Ruby26-x86/bin/irb:23:in `load'
        19: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/irb-1.3.6/exe/irb:11:in `<top (required)>'
         2: from (irb):2:in `<main>'
         1: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require'
C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:85:in `require': cannot load such file -- sfml/audio (LoadError)
        30: from C:/Ruby/Ruby26-x86/bin/irb:23:in `<main>'
        29: from C:/Ruby/Ruby26-x86/bin/irb:23:in `load'
        28: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/irb-1.3.6/exe/irb:11:in `<top (required)>'
        11: from (irb):2:in `<main>'
        10: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:149:in `require'
         9: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:160:in `rescue in require'
         8: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:160:in `require'
         7: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:4:in `<top (required)>'
         6: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:6:in `<module:SFMLImporter>'
         5: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:77:in `dlload'
         4: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:77:in `collect'
         3: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:87:in `block in dlload'
         2: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle.rb:47:in `dlopen'
         1: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle.rb:47:in `new'
C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle.rb:47:in `initialize': No such file or directory (Fiddle::DLError)
        28: from C:/Ruby/Ruby26-x86/bin/irb:23:in `<main>'
        27: from C:/Ruby/Ruby26-x86/bin/irb:23:in `load'
        26: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/irb-1.3.6/exe/irb:11:in `<top (required)>'
         9: from (irb):2:in `<main>'
         8: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:149:in `require'
         7: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:160:in `rescue in require'
         6: from C:/Ruby/Ruby26-x86/lib/ruby/site_ruby/2.6.0/rubygems/core_ext/kernel_require.rb:160:in `require'
         5: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:4:in `<top (required)>'
         4: from C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:6:in `<module:SFMLImporter>'
         3: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:77:in `dlload'
         2: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:77:in `collect'
         1: from C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:86:in `block in dlload'
C:/Ruby/Ruby26-x86/lib/ruby/2.6.0/fiddle/import.rb:89:in `rescue in block in dlload': can't load csfml-audio-2 (Fiddle::DLError)
irb(main):003:0>

問題点は2つありそう。

一つは、DLL検索パスの問題。どうやら今時の Ruby の fiddle は、スクリプトが置いてあるディレクトリ/カレントディレクトリに置いてある .dll を探してくれない感じで…。Ruby 2.3.3 ならエラーが出ないけど、Ruby 2.6 以降はエラーになる。

もう一つは、CSFML の .dll のバージョンによってエラーが出る問題。DLL検索パスの問題を解決した状況下で試すと、以下のような結果になった。
  • CSFML 2.0, 2.1 の .dll は、require した際にエラーを出さなかった。
  • CSFML 2.2, 2.3, 2.4, 2.5.1 の .dll はエラーを出した。
利用できる CSFML のバージョンが限定されている気配がする。

DLL検索パスの問題は、以下のような記述をすることで解決できそう。

一つは、RubyInstaller::Runtime.add_dll_directory() を使ってDLL検索パスを指定する方法。
my_dll_dir_path = File.expand_path("..", __FILE__)
RubyInstaller::Runtime.add_dll_directory(my_dll_dir_path)

require "sfml/audio"

一つは、kernel32.dll の SetDllDirectory() を使ってDLL検索パスを指定する方法。
require 'fiddle/import'
require 'fiddle/types'
module WinAPI
  extend Fiddle::Importer
  dlload 'kernel32.dll'
  include Fiddle::Win32Types
  extern 'int SetDllDirectory(LPCSTR)'
end

my_dll_dir_path = File.expand_path("..", __FILE__)
WinAPI.SetDllDirectory(my_dll_dir_path)

require "sfml/audio"

あるいは、そもそも、ruby.exe が置いてある場所(C:\Ruby\bin\ 等)に関連DLLをコピーすることでもエラーは出なくなる。

ただ、こういう対策をしても、CSFML 2.2 以降の .dll を使うとエラーが出るのだけど…。

サウンドファイルを再生するとクラッシュする問題。 :

前述のDLL検索パスの問題を対策して require が通るようになったとしても、サウンドファイルを再生すると、再生が終わったタイミングで Segmentation fault が出てしまう。

例えば、以下のようなスクリプトを実行してみると…。

_04_ogg_play_music.rb
begin
  
  require 'sfml/audio'
  
rescue => e
  
  require 'fiddle/import'
  require 'fiddle/types'
  module WinAPI
    extend Fiddle::Importer
    dlload 'kernel32.dll'
    include Fiddle::Win32Types
    extern 'int SetDllDirectory(LPCSTR)'
  end

  my_dll_dir_path = File.expand_path("..", __FILE__)
  WinAPI.SetDllDirectory(my_dll_dir_path)

  require 'sfml/audio'
  
end

music = SFML::Music.new("loop_bgm.ogg")
puts "Song length : #{music.get_duration} sec"
music.play
while music.get_status == :playing
  puts "playing"
  sleep 1
end

_loop_bgm.ogg

実行すると、再生が終わったあたりのタイミングで Segmentation fault になる。

C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:41: [BUG] Segmentation fault
ruby 2.6.8p205 (2021-07-07 revision 67951) [i386-mingw32]

-- Control frame information -----------------------------------------------
c:0004 p:---- s:0018 e:000017 CFUNC  :call
c:0003 p:0018 s:0013 e:000012 METHOD C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:41
c:0002 p:0013 s:0007 e:000006 BLOCK  C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:154 [FINISH]
c:0001 p:0000 s:0003 E:001d48 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:154:in `block in dtor'
C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:41:in `sfMusic_stop'
C:/Ruby/Ruby26-x86/lib/ruby/gems/2.6.0/gems/sfml-audio-fiddle-0.1.0/lib/sfml/audio.rb:41:in `call'

-- C level backtrace information -------------------------------------------
C:\Windows\SYSTEM32\ntdll.dll(NtWaitForSingleObject+0xc) [0x76ff29dc]
C:\Windows\System32\KERNELBASE.dll(WaitForSingleObject+0x12) [0x75031072]
C:\Ruby\Ruby26-x86\bin\msvcrt-ruby260.dll(rb_vm_bugreport+0x301) [0x665407a1]
C:\Windows\SYSTEM32\ntdll.dll(RtlCaptureStackContext+0x1bc43) [0x77024883]

-- Other runtime information -----------------------------------------------

* Loaded script: 04_ogg_play_music.rb
...
_stderr04.txt(全てのエラーメッセージ)

Music ではなく SoundBuffer を使ってみても…。

_05_ogg_play_soundbuffer.rb
begin
  
  require 'sfml/audio'
  
rescue => e
  
  require 'fiddle/import'
  require 'fiddle/types'
  module WinAPI
    extend Fiddle::Importer
    dlload 'kernel32.dll'
    include Fiddle::Win32Types
    extern 'int SetDllDirectory(LPCSTR)'
  end

  my_dll_dir_path = File.expand_path("..", __FILE__)
  WinAPI.SetDllDirectory(my_dll_dir_path)
  
  require 'sfml/audio'
  
end

buffer = SFML::SoundBuffer.new 'loop_bgm.ogg'
sound = SFML::Sound.new buffer
sound.play
sleep buffer.get_duration + 1

結果は同じ。再生が終わったタイミングで Segmentation fault になる。

_stderr05.txt

Ruby 2.3.3, 2.6.8, 2.7.4, 3.0.2、どのバージョンで試しても Segmentation fault になる…。

雑感。 :

Ruby の fiddle を使うことで、Ruby のバージョンが変わるたびにバイナリをビルドしなくても済むメリットがありそう、などと思ってたけど、そもそも正常動作してくれないのではなあ、みたいな…。

#2 [anime][neta] HDDレコーダの空き容量が厳しい

HDDレコーダの電源を入れたら「録画できる空き容量が無くなりました」とメッセージが。厳しい。

仕方ないので、未視聴のまま溜め込んでた「東京リベンジャーズ」アニメ版の数話分を、見ないまま削除。かつ、録画予約も削除。

余談と言うか独り言。

件の作品は、アニメ版も人気があるとか、実写映画版はヒットしてるとか聞いたので、フツーに考えたらここまで見といて視聴を打ち切るのはアレだろうけど…。実によくできてるアニメだと思うし…。ただ、そもそも個人的に、不良だの珍走団だのが主人公の漫画やアニメって大嫌いで…。自分、校内暴力が吹き荒れてた時期に中学時代を送る羽目になった世代なので、あの手の人種は目にするのも嫌で嫌で…。アイツラ、リアルに母校の校舎を全焼させたりしてたから…。

それでも、放送されてるアニメはできる限り見ておかねばという奇妙な義務感とか、あるいは、キャラ設定なんてどうでもよくなるぐらい途中から面白くなったら勿体無いとか、そんな理由でここまで見てきたけど、それでもやっぱり見るのが苦痛で苦痛で…。自然と視聴も後回しになって、結局数話溜まって、HDDレコの空き容量確保しなきゃいけないからここは我慢してとにかく流そう的にBGV扱い+早見再生で無理矢理どうにか消化してる感じだったので…。これじゃMだよ。これでも頑張ったよね、俺。もうゴールしてもいいよね。みたいな。そのくらい嫌いなんですよ…不良や珍走団が主人公の作品って…。いやまあ、ちゃんと作ってあるアニメだよなと感心しながらチラ見してたんですけど…。

大体にして、途中で1回上手くいった感じになったのにまだ続くあたり、さては原作の人気が出て連載を引き延ばすための展開を用意したのかなと邪推しちゃったりもして…。もうつきあってらんねーよ。DBやワンピースを目指してだらだらずるずるといつまでも続けてればいいさ、てな感じの妙にやさぐれた気分になってきたりもして…。

そんな感じで、ここまで見てきたのに最後まで見れなくて残念という気持ちと、あの手のキャラをもう見なくて済むからこれでせいせいしたわい的な気持ちが入り混じった、ちょっと複雑な気分…。まあ、録画するための空き容量が無いんだから仕方ない…。どうしようもない…。今時のアニメの放送本数が多過ぎるんや…。いや、全部見ようと頑張っちゃうからおかしなことになるんだけど。

それにしても、ああいう展開の話がウケるなら、例えば「夏への扉」も一般層にウケるのでは、と思ってたら、そういう実写映画が…。そっちは全然ウケてないようで不思議。一体何が明暗を分けたのか…。

2021/08/17(火) [n年前の日記]

#1 [dxruby][ruby] RubyからvAudio.dllを使えないか実験中

Ruby で oggその他を再生できるようになる(はずだった)拡張ライブラリ、sfml-audio-fiddle.rb について、Windows10 x64 21H1 + Ruby 2.3.3, 2.6.8, 2.7.4, 3.0.2 上で動作確認していたのだけど、どうにも正常動作しなくて…。これは諦めるしかなさそうだなと…。

他に、Vox.dll や bass.dll のような DLL は無いものかとググっていたら、vAudio.dll というDLLに遭遇。

_vAudioの詳細情報 : Vector ソフトを探す!

C/C++/HSP3から呼び出して使える DLL らしい。vAudio-3.0.2.zip をDLして中身を確認したら、フリーウェアとして公開されているようで、これはありがたい DLL だなと…。

そんなわけで、vAudio.dll を、Ruby の fiddle を使って利用できないか実験しているところ。

2021/08/18(水) [n年前の日記]

#1 [dxruby][ruby] DXRubyでogg再生するためにvAudio.dllのラッパーを書いてみた

Windows版 Ruby + DXRuby で ogg再生するために、vAudio.dll のラッパーを書いてみたので、アップロードしてみる。

ogg, mp3, wav等を再生できるDLL、vAudio.dll は、以下から入手できる。現時点では、vAudio-3.0.2.zip を入手可能。解凍すると、中に vAudio.dll が入ってるのでソレを使う。

_vAudioの詳細情報 : Vector ソフトを探す!

vAudio.dll を Ruby から使うためのラッパー、VAudio.rb は以下。

_VAudio.rb

一応、関連ファイルを全部zipにまとめて置いておきます。

_vaudiorb_20210818.zip

概要。 :

_readme.md から抜粋。

  • vAudio.dll を使うと、ogg, mp3, wav等を再生できます。
  • vAudio.dll + VAudio.rb を使うと、Windows版 Ruby で ogg や mp3 を再生できます。
  • Ruby の fiddle を使って、vAudio.dll の機能を呼び出しています。
  • DXRuby と組み合わせて使うことを前提にして作成しました。

vAuido.dll + VAudio.rb と、voxrb (Vox.dll)、bassrb (bass.dll)、Ayame/Ruby (Ayame.dll) を比較した場合のメリットは以下になります。
  • Vox.dll と違って、ちゃんとループ再生される。
  • bass.dll と違って、商用利用時もライセンス料がかからない。
  • Ayame/Ruby と違って、Rubyのバージョンが変わるたびにビルドし直さなくても動く。
  • ループポイントの指定ができるので、イントロ+ループ部分で構成されたサウンドデータをループ再生できる。

逆に、デメリットは以下になります。
  • 扱える波形サウンドデータは、44.1kHz, 16bit, 2ch(ステレオ) (CD音質) のみ。

動作確認環境。 :

  • Windows10 x64 21H1
  • Ruby 2.3.3 p222 [i386-mingw32] + DXRuby 1.4.6 x86
  • Ruby 2.6.8 p205 [i386-mingw32] + DXRuby 1.4.7 x86
  • Ruby 2.7.4 p191 [i386-mingw32] + DXRuby 1.4.7 x86
  • Ruby 3.0.2 p107 [i386-mingw32] + DXRuby 1.4.7 x86
  • vAudio.dll 3.0.2

使い方。 :

使い方は、vAudio.dll と VAudio.rb を、利用したいスクリプトと同じフォルダに置いて、以下のような感じで使う。

_01_play_stream.rb
require "dxruby"
require_relative "VAudio"

VAudio.init(Window.hWnd)  # init vAudio
s = VAudio.loadStream("loop_bgm.ogg")  # load ogg
s.setRepeat(true)  # loop enable
s.play

Window.loop do
  break if Input.keyPush?(K_ESCAPE)
end

s.free
VAudio.free

テストに使った ogg は以下。

_loop_bgm.ogg

もっと色々な機能(パン変更、音量変更、ループポイントの指定等)を使ったサンプルは以下。

_03_play_stream2.rb

03_play_stream2_ss01.png

ライセンスについて。 :

自分(mieki256)が書いた VAudio.rb については、Public Domain / CC0 ってことで。

vAudio.dll は、フリーウェアとの記述があった。以下、vAudioHelp.chm から引用。
使用制限など

vAudioはフリーウェアです。
vAudio.dll自体を商品として売るような行為や著作権を侵害するような行為は禁止とします。
その他は特に制限はありません。
趣味でも商用でも使ってください。

著作権表示など

vAudioの著作権はHolyWingsが保持しています。
vAudio自体に著作権の表示義務はありませんが、
vAudioを使用してOgg Vorbis、MP3、FLAC形式のファイルを再生する場合は
以下の著作権表示を配布するテキストファイル等に含めてください。

--------------------------------------------------------------------------------

vAudio.dll incudes the mpglib, libogg , libvorbis and libFlac.

mpglib Copyright(c) 2004 Michael Hipp.
libogg Copyright (c) 2002, Xiph.org Foundation.
libvorbis Copyright (c) 2002-2008 Xiph.org Foundation.
libFlac Copyright (c) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson

Thanks for creating the useful library!

雑感。 :

とりあえず、これで、今時の Ruby (2.6.x, 2.7.x, 3.0.x, 32bit版) + DXRuby でも、oggを再生可能になったかなと…。fiddle を使って機能を呼び出しているから、Ruby のバージョンが違ってもビルドし直さなくて済むだろうし、ラッパーはRubyスクリプトだから、不具合が出た場合も改造は容易のはず…。

vAudio.dll の作者様、ありがとう…。

余談。ポインタを使って戻り値を得るソレ。 :

C言語の関数は、複数の戻り値を得ることができないので、もし、複数の戻り値が欲しいなら、一般的には、ポインタを引数として渡して、そのポインタを使って値を入れて取得する、といったことをするわけだけど。

例えば、以下のような感じで…。
BOOL vAudioGetVolume( int AudioHandle , double* pVolume );
pVolume が double型のポインタで…。この関数を呼ぶと、処理の成功失敗を BOOL で返してきつつ、現在のボリューム値は pVolume に入れて戻ってくる。みたいな。

Ruby の fiddle を使って、そういう形の戻り値を得るにはどうしたらいいのか悩んでしまった。

ググってみたら、以下のページで解説されてた。ありがたや。

_参照先を更新する関数をPython/Rubyのffiで扱うには - ローファイ日記
i = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT)
p CLib.update_int(i)
p i[0, i.size].unpack("i!")

Fiddle::Pointer.malloc() を使ってデータ型に対応したサイズの領域を確保、かつ、ポインタを得て、それを引数として渡して、unpack() で目的のデータ型に変換して取得すればいいらしい。

ただ、配列として得られるので、実際は以下のような書き方になるのかなと。
v = i[0, i.size].unpack("i!")[0]

こんな感じの書き方で、一応それらしく動いてるように見えたので、これで合ってるっぽい。たぶん。

それにしても、Ruby の fiddle の使用例がググってみてもなかなか出てこない。Google の検索精度が悪化してるのか、それとも fiddle を使った事例が少ないのか…。

#2 [hsp] HSP 3.6を試用したけど妙な動作になる

プログラミング環境 HSP 3.6 が公開されたと知って、HSP 3.6 をインストールして試用してみたのだけど、なんだか妙な動作に…。

_プログラミング言語 HSP 公式 - HSPTV!
_HSPダウンロード
_プログラミング言語「HSP」が3年ぶりのメジャーリリース、「HSP 3.6」に - 窓の杜

環境は以下。
HSPアシスタントの、hgimg4 に並んでるサンプル群(例えば test1)を実行した際、hsp3gp.exe が終了時にクラッシュしてることに気が付いて。HSPのウインドウを閉じたタイミングで妙に待たされるからおかしいなと思ったら、Windows10 のイベントビューアー → Windows ログ → Application に、hsp3gp.exe のクラッシュログがずらずらと並んでた。

ところが、このクラッシュが必ず発生するわけでもなく…。 OSを再起動したらクラッシュしない状態になった、と思ったら、また何かの拍子にクラッシュ。何故。

何にせよ、HSPのウインドウの閉じるボタンをクリックしてから、ウインドウが閉じるまで妙に待たされる時はクラッシュしてることが多いっぽい。しかし、発生条件が分からない…。しばらく様子見だなと…。

HSPは人気があるのだな。 :

不具合情報を探して twitter で「hsp3.6」を検索したら、言及している方々がたくさん。HSPって人気あるんだなあ…。

#3 [web] twitterが不便になっていてなんだかもやもや

自分は携帯電話の契約をしていないので twitter のアカウントが取れないのだけど。 *1 twitter上でソフトウェアの不具合情報等について言及されてることが結構あったりするので、たまに、仕方なく、twitterで検索していたのだけど…。

今回、HSP 3.6の情報を検索しようとしたら、検索するたびに「ログインしろ。さもなくばアカウントを作れ」と前面にウインドウが表示される状態に…。しかも、そのウインドウを閉じると前の画面のままで、検索結果が見れない…。

あのさあ…。アカウント作りたくても作れないんだけど。しかも作れない仕様にしたのってお前達だよね? なのにこのメッセージ。お前等何なの。みたいな。

一応、某匿名掲示板で、毎回リロードボタンを押せば期待した画面が出てくる(が、例のウインドウを閉じないと見れない)と知って、かろうじて、どうにか見れたけど…。不便だ。というかこの仕様って単なる嫌がらせだよなあ…。

ここまで普及してしまったサービスで、こういうことをされるとなあ…。もっとも、それらサービスを特定の民間企業が握ってしまってる状況が根本的にマズいのだろうけど。しかもたまに意味不明なUI仕様変更を始めたり、妙な利用制限を付け加えたり…。

GAFAもそうだけど、こういうのって、そのうちかなりの大問題になるんじゃないか。この状況を改善する策は無いのだろうか…。
*1: 昔はメールアドレスがあればアカウント取得ができたし、自分もメールアドレスでアカウントを取ったけど。ある時期から携帯電話番号を持ってないと取得できない仕様になってしまって、それを知らないままアカウントを削除してしまって後の祭りという…。

#4 [nitijyou] 日記をアップロード

2021/07/31を最後にアップロードしてなかったのでアップロード。

2021/08/19(木) [n年前の日記]

#1 [cg_tools][povray] Wings 3D 2.2.6.1 をインストール

ふとなんとなく、3DCGモデリングソフト Wings 3D 2.2.6.1 x64 を、Windows10 x64 21H1上にインストール。SSDが吹っ飛んでから、ずっとインストールしてなかったわけで…。

_Wings 3D
_Downloads | Wings 3D

今現在は 2.2.6 が公開されてるらしい。ただ、Sourceforge上では 2.2.6.1 になってる。後から何か修正したんだろうか…?

_Wings 3D - Browse /wings at SourceForge.net

wings-x64-2.2.6.1.exe をDLして実行。今回は C:\Prog\wings3d_2.2.6.1_x64\ にインストールした。Wings3D.exe を実行すれば起動する。

以前は、何かというと erl.exe がクラッシュしてた記憶があるけれど、このバージョンは特にそういった挙動は見られなかった。

Edit → Preferences → User Interface → Language で、Japanese を選んで再起動すれば、日本語化される。ありがたや。

YafaRay をインストール。 :

Wings 3D だけではレンダリングができないので、外部レンダラーも一応インストールしておく。ひとまず、YafaRay 3.5.1 をインストール。

_Releases - YafaRay/Blender-Exporter

  1. YafaRay.v3.5.1.build.for.Blender.2.79.Windows.MinGW-GCC7.64bit.zip をDLして解凍。任意のフォルダに置く。今回は C:\Prog\YafaRay\ に置いてみた。
  2. Wings 3D の、Edit → プラグイン環境設定 (Plug-in Preferences) → YafaRay... を選択。
  3. Executable に、(YafaRayインストールフォルダ)\bin\yafaray-xml.exe を指定。
  4. Yafaray Plugins Path に、(YafaRayインストールフォルダ\bin\yafaray-plugins を指定。

使い方は、何かしらモデルを作ってから、File → レンダリング → YafaRay、を選択。設定ウインドウが開く。
  • General options → Output で、出力画像フォーマットを選択。
  • Camera → Width, Height で、レンダリング画像のサイズを指定。

POV-Ray をインストール。 :

外部レンダラーとして、POV-Ray 3.7 もインストールしておいた。

_POV-Ray: Download

  1. povwin-3.7-agpl3-setup.exe をDL。実行するとインストールできる。今回は、C:\Prog\POV-Ray\ にインストールした。
  2. インストール直後に povwin-3.7-editor.exe のDL・インストールをするかと尋ねてくるので従う。
  3. Wings 3D で、Edit → プラグイン環境設定 → POV-Ray (.pov)... を選択。
  4. Executable に、(POV-Rayインストールフォルダ\v3.7\bin\pvengine.exe を指定。

使い方は、何かしらモデルを作ってから、File → レンダリング → POV-Ray (.pov)... を選択。設定ウインドウが開くので、設定してOKを押せば、画像の保存場所を尋ねてくる。

その他のレンダラー。 :

他に、Kerkythea というレンダラーも利用できるのだけど…。

_mieki256's diary - Wings 3Dを試用中

以前試用した際、色々問題があったので、今回はインストールしないことにした。

雑感。 :

レンダリングまでやりたいなら、最初から blender を使ったほうがいいのではないかという気もする。blender なら、標準でレンダラーを内蔵してるだけあって、モデリング作業からレンダリング作業までシームレスに繋がってるし…。

例えば Wings 3D Windows版は、マテリアル編集ウインドウを開くだけでも数秒待たされたりするので、モデリング作業だけならともかく、レンダリング用の各種設定もするとなると、ちょっとイライラしてきたりもして。まあ、あくまでモデリングツールだろうから…。

POV-Rayのレンダリング結果がしっくりこない。 :

Wings 3D でモデルを作って POV-Ray でレンダリングすると、どうも妙な感じの結果になる…。

例えば、箱と球だけでモデルを作ってレンダリングするとこうなる。

ball_and_box.png

箱にまでスムージング(?)がかかっているような…。

一応、箱をカッチリ見せる方法は分った。箱の辺をハードエッジにすればいいらしい。やり方は、箱だけ選択 → 辺選択に切替 → 右クリック → エッジ属性の切替 → ハードエッジにする、を選択。ハードエッジになった辺は、黄色い表示になる。

hardedge_ss01.png

hardedge_ss02.png

ハードエッジを指定した状態で、POV-Ray でレンダリングするとこうなる。

ball_and_box_hardedge.png

ちゃんとカッチリした見た目になった。

ただ、球の表面に、四角いゴツゴツした影が…。ポリゴンをたくさん並べて球の形にしているけれど、各ポリゴンの形で影がついちゃってるのだな…。

ちなみに、YafaRay でレンダリングするとこんな感じ。特に何もしなくても箱はカッチリとした見た目になる。

ball_and_box_yafaray.png

おそらく、マテリアル設定を新規作成した際、YafaRay用のマテリアル設定はデフォルトで Auto-smooth が有効になっていて、箱のように各面が90度で繋がってる場合はスムージングがかからない状態になってるのではないかなと。

しかし、球の表面をよく見ると、POV-Ray と同様に、ポリゴン単位で影がついてて、四角いゴツゴツした影が…。

ball_and_box_yafaray_zoom.png

こういうのってどうすればいいんだろう。球に対してサブディビジョンサーフェスをガンガンかけて細かくするしかないのだろうか…? でもそんなことをしたら、後から修正が難しくなるよな…。レンダリング設定で Subdivisions を指定する手もあるけど…。

そもそも、POV-Ray の解説ページを色々眺めてみた感じでは、どうやら POV-Ray は形状を作る際にプリミティブ(球や箱等々)を設置して形を作っていくのが本来のスタイルのようで…。たしかに、大昔のレイトレーシングのサンプルプログラムってそういうアレだったなと…。

「球を表示したいの? じゃあ球を置けばいいじゃん」
「なんでわざわざポリゴンたくさん並べて球モドキ作って『球じゃねえ』とか言ってんの意味わかんない」

そういうことなのかもしれないなと。

2021/08/20(金) [n年前の日記]

#1 [cg_tools][povray] POV-Rayについて勉強中

Windows10 x64 21H1上に、3DCGモデリングツール Wings 3D 2.2.6.1 x64 をインストールした関係で、POV-Ray 3.7 というレイトレーシングのレンダラーもインストールしたのだけど。POV-Ray の使い方が全然分かってないので、この際少し勉強しようかなと…。

_POV-Ray - The Persistence of Vision Raytracer
_POV-Ray: Download

以下の解説サイトを眺めながら写経して勉強。ありがたや。

_POV-Ray 初心者向けチュートリアル & Tips

分かったアレコレをメモ。 _座標系 - a01 - …Inertia

一般的には、カメラ(camera)、ライト(light_source)、オブジェクト(object) について記述すればレンダリングができるっぽいなと…。

ただ…。たしかにテキストを記述するだけでレンダリングができるあたりとっつきやすいけど、それぞれを配置していく時に面倒臭いなと…。やはりモデリングツールが欲しくなる…。

ということで、POV-Ray用のモデリングツールも探して試用してみた。

Morayを試用。 :

昔は Moray というPOV-Ray用のモデリングツールがあったそうで。Windows 98/NT/2000/XP、POV-Ray 3.5 までの対応。元々はシェアウェアだったけど、ある時期に POV-Ray開発チームに譲渡されて無料で使えるようになったのだとか。

_The Moray Homepage - Welcome
_The Moray Homepage - Download Moray

ただ、POV-Ray開発陣のリソースが足りなくて、譲渡後、全く手つかずで放置されていて…。特定のユーザ名とキーを入力することで登録完了状態になるからソレで凌いでくれ、ということになってるっぽい。

さておき、Windows10 x64 21H1上で試用してみた。最終版は Moray 3.5 Build 9330。moraywin.exe をDL・実行してインストール。

念のために、インストール後の実行ファイル本体、MoraWin.exe のプロパティで、互換モードを Windows XP SP3 にして起動。

Help → Register で、以下のページに記載されたユーザ名とキーを入力して登録。

_The Moray Homepage - Registration

Render → Render Options (Alt + F9) で、.pov を出力するフォルダや、POV-Ray の実行ファイルの場所を指定。

作成したファイルは、独自ファイル形式 .mdl で保存される。

ある程度は動くのだけど…。レンダリングをしようとして、 Render → Raytrace (F9) を選ぶと、POV-Rayの実行ファイル pvengine.exe は起動するものの、「POV-Rayを開始できない」と言ってくる…。

POV-Ray 3.5 の時代に作られたツールなので、POV-Ray 3.7 は制御できないらしい。ちなみに、POV-Ray 3.5 もインストールしてみたけれど、Windows10上では Run をクリックした途端に固まってしまった。互換モードを色々変えてみたけど、何を選んでも固まる。Windows10上で POV-Ray 3.5 は使えないようだなと。

ただ、レンダリングをしようとしてエラーが出ても、Moray の .pov 出力フォルダに ―― 標準では Morayインストールフォルダ\POVScn\ に .pov が保存されている。それを手動で POV-Ray 3.7 に読み込ませて利用すれば一応レンダリングはできる。

あるいは、Render → Export (Ctrl + F9) でも、.pov をエクスポートできる。しかし、既に pvengine.exe が起動している状態では、エラーが出るようだなと…。pvengine.exe を終了させた状態ならエクスポートできた。

Bishop3Dを試用。 :

Bishop3D というPOV-Ray用のモデリングツールもあるらしい。最終版は 1.0.5.2。Windows XP/Vista/7、POV-Ray 3.6 に対応。これも元々は有償ソフトだったのかな…。たぶん。

公式サイトは消滅している。ただ、Web Archive から入手できた。

_Bishop3D - POV-Ray Modeler and Animation System (WebArchive)

Windows10 x64 21H1上で、bishop3d1052setup.exe をDL・実行してインストール。

このツールも、ある時期からGPLに移行しようとしていたらしくて…。Help → Register を選択して、ユーザ名とキーを入力すると登録ができるらしい。

作成したファイルは、独自ファイル形式 .bsp で保存される。

このツールも、POV-Ray 3.7 には対応してなくて、レンダリングをしようとするとエラーになるようで…。「Could not find pvengine.ini」とダイアログが表示されて、そこで終わってしまう。ただ、.bsp と同じ場所に、.pov は出力されている模様。その .pov を、手動で POV-Ray 3.7 を起動して読み込んでやれば、一応レンダリングはできる。

Breeze Designerを試用。 :

Breeze Designer というモデリングツールもあるらしい。これは公式サイトが残ってる。最終版は 2.0.10。

_Breeze Designer

ただ、ダウンロードリンクが ftp:// になっていて…。今時のWebブラウザは、軒並み、FTP関連機能を削除してしまったので、Webブラウザ経由ではダウンロードができない。一応、今回は IE11 を使ってダウンロードしてみたけれど、将来的にはIE11も削除されそうな流れになっているので…。そうなったら、どうやって入手したらいいのか…。

Windows10 x64 21H1上で、bd2010exe.zip をDLして解凍。SETUP.EXE を実行してインストールしてみた。ファイルの日付を確認したら、一番新しいファイルでも、1999/09/19 だった。念のために、インストールフォルダ\Program\Breeze20.exe のプロパティを開いて、互換モードで Windows XP SP3 あたりを選んでおいた。

作成したファイルは、独自ファイル形式 .cad で保存される。

File → Export で、.pov として保存できる。別途手動で POV-Ray を起動して読み込めば一応レンダリングはできる。

機能が少ないせいか、Moray や Bishop3D と違って比較的すんなり動いてくれたし、.pov をエクスポートするメニュー項目もあるのでイイ感じ。ただ、object の一覧ウインドウが無いようで、画面のどこかにこっそり object が存在していても把握しづらい。

使い方は、以下のページが参考になりそう。

_Welcome to Exsercise of Programing 'IA' Lecture Note Page

その他のツール。 :

以下のページを参考にして他にも無いか探しているところ。

_POV-Ray: Resources: Links: 3D Programs: POV-Ray Modelling Programs
_64bit版 POV-Ray 3.6と、それを取り巻くツール | KOKAのつぶやき
_ツール

ただ、ほとんどが 404 だなと…。

余談。 :

xyz座標や、RGB値を記述する際、<0.0, 0.0, 0.0> といった感じで、"<" ">" で囲むあたりもちょっと戸惑った。フツーそういうのって (0.0, 0.0, 0.0) みたいに、"(" ")" で囲む仕様にするものでは…。何か理由というか経緯があるんだろうけど…。その手の解説ページに掲載されてるソースコードのフォントサイズが小さくて、「こういうのは "(" ")" だろう」と思い込んだまま打ち込んで、動かなくて悩んでしまった…。

そういえば、POV-Ray 関係のページは、えてしてフォントサイズが妙に小さいのも気になった。なんでそんなに小さい文字ばかり使いたがるのだ。どういうコミュニティ文化なのやら。

もしかして、アレかな。古いページが多い = PCのディスプレイ解像度が少ない時期に作られたページが多くて、画面の中にたくさん情報を収めたくてフォントサイズを小さくする人が当時は多かった、みたいなことなのだろうか。

2021/08/21() [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、16:10-17:30の間、自宅サーバを止めてました。申し訳ないです。

雷観測情報サイトを確認したら、自宅の少し北のほうで、落雷マークがびっしり…。

#2 [cg_tools][xyzzy][povray] POV-Ray のエディタについて少し調べた

POV-Ray 3.7 のエディタがちょっと使い辛いなと…。Ctrl + Space でキーワード補完ができるあたり便利なのだけど…。

カーソル移動が妙。 :

カーソルが各行の行末を越えた場所まで移動できてしまうので、かなり戸惑う…。いわゆるフリーカーソル仕様と言うヤツだろうか…。どうしてわざわざこんな仕様に…。

POV-Ray editor の設定画面(Alt + Enter で開く)を眺めていたら、Misc → Confine caret text、という項目が気になった。チェックを入れたら、カーソルが行末以降には移動しないようになった。

だよなあ…。フツーはそういうオプションをつけるわな…。

xyzzy の pov-mode について。 :

何か違うエディタを使ったほうが快適だったりするのだろうかとググってみたら、xyzzy 用に pov-mode を書いていた方がいらっしゃるようで。

_POV-Ray Tips その3
_xyzzy研究室〜ライブラリ (WebArchive)

試しに使わせてもらおう…。ありがたや。

少し触ってみて気が付いた。pov-mode.l 内の、*pov-mode* の初期化行が、現状(Windows10 x64 21H1 + POV-Ray 3.7)では合ってない模様。

Windows のレジストリを読み取って、pvengine.exe のある場所を決めているけど、今時の POV-Ray は :local-machine じゃなくて :current-user のほうにインストールフォルダを記録しているようで。

また、pov-insert-list-init() や pov-insert() も正常動作しないことに気づいた。今時の POV-Ray は、プログラム本体と別に、ドキュメントフォルダの中に関連リソースファイルをインストールしていて、Insert Menu フォルダ等はドキュメントフォルダ側に入っている。pov-mode.l は、プログラム本体が入ってるフォルダの中にそれらリソースファイルも入ってることを前提にして書かれているので動作しないのだろう。

リソースファイルが入ってるフォルダを *pov-docpath* という変数に入れて、*pov-home* ではなく *pov-docpath* を使うようにしてみた。
--- pov-mode.l.orig Sat Jun 24 23:32:51 2000
+++ pov-mode.l  Sat Aug 21 05:41:24 2021
@@ -66,6 +66,7 @@
 (defvar *pov-hwnd* 0)
 (defvar *pov-mode-hook* nil)
 (defvar *pov-home* nil)
+(defvar *pov-docpath* nil)
 (defvar *pov-insert-list* nil)
 
 (defvar pov-indent-level 2)
@@ -250,7 +251,8 @@
   (interactive)
   (kill-all-local-variables)
   (setq mode-name "POV")
-  (setq *pov-home* (read-registry "SOFTWARE\\POV-Ray\\CurrentVersion\\Windows\\" "HOME" :local-machine))
+  (setq *pov-home* (read-registry "SOFTWARE\\POV-Ray\\v3.7\\Windows\\" "Home" :current-user))
+  (setq *pov-docpath* (read-registry "SOFTWARE\\POV-Ray\\v3.7\\Windows\\" "DocPath" :current-user))
   (pov-insert-list-init)
   (setq buffer-mode 'pov-mode)
   (use-syntax-table *pov-mode-syntax-table*)
@@ -321,10 +323,10 @@
     (winapi:SendMessage *pov-hwnd* WM_COMMAND CM_FILEEXIT 0)))
 
 (defun pov-insert-list-init()
-  (if (null *pov-home*)
+  (if (null *pov-docpath*)
       (return-from pov-insert-list-init nil))
   (setq *pov-insert-list* nil)
-  (let* ((topdir (concat *pov-home* "/Insert Menu"))
+  (let* ((topdir (concat *pov-docpath* "/Insert Menu"))
     (dirlist (directory topdir :directory-only t)))
     (dolist (dir dirlist)
       (let ((filelist (directory (concat topdir "/" dir) :file-only t :wild "*.txt")))
@@ -334,12 +336,12 @@
 
 (defun pov-insert ()
   (interactive)
-  (if (null *pov-home*)
+  (if (null *pov-docpath*)
       (error "POV-Rayがインストールされていません"))
   (let* ((category (completing-read "Category: "
                    (mapcar #'car *pov-insert-list*) :case-fold t :must-match t))
     (item (completing-read "Item: "
                (cdr (assoc category *pov-insert-list* :test #'string-equal))
                :case-fold t :must-match t)))
-    (insert-file-contents (concat *pov-home* "/Insert Menu/" category "/" item ".txt"))))
+    (insert-file-contents (concat *pov-docpath* "/Insert Menu/" category "/" item ".txt"))))
 

これで、C-c i を叩けば、POV-Ray のInsertメニュー相当が使えるようになった。例えば、Category で col と打ってTABキーを叩けば「D0 - Colors」が補完されて、Item で gr と打ってTABキーを叩けば、gr が含まれる色名が選べるようになる。どれかしらを選ぶとテンプレートっぽい記述が挿入される。

ただ、上記の修正は、POV-Ray 3.7 がインストールされていることを決め打ちしてレジストリを読み取っているので、手抜き過ぎてちょっと気になる…。まあ、使用している POV-Ray のバージョンが変わった時には、書き直してバイトコンパイルすれば済むのだけど…。自分ことだから、たぶんそのへん数日経ったら全部奇麗に忘れてそう…。

emacsにpov-modeを導入してみた。 :

emacs (NTEmacs 26.3) にも pov-mode があるらしいので導入してみた。

M-x package-list-packages と打つとネット経由でインストールできるパッケージの一覧が表示される。pov-mode を探して、iキーを叩いてインストール予定マークの「I」をつけてから、xキーで実行してインストール。

~/.emacs.d/init.el (~/.emacs) に以下を追記。
;; ----------------------------------------
;; pov-mode (POV-Ray)

;; (add-to-list 'load-path "~/.emacs.d/elpa/pov-mode-3.2/pov-mode.el")
(autoload 'pov-mode "pov-mode" "PoVray scene file mode" t)
(add-to-list 'auto-mode-alist '("\\.pov\\'" . pov-mode))
(add-to-list 'auto-mode-alist '("\\.inc\\'" . pov-mode))

emacs を再起動。

何かしらの .pov ファイルを開くと pov-mode になる。その状態で、M-x customize-group。Enter を叩いてから、pov と打って再度 Enter。pov-mode で設定できる変数の一覧が表示される。

pov-mode の README によると、以下の3つの変数を設定するといいらしい。
  • Pov Include Dir
  • Pov Documentation Directory
  • Pov Insertmenu Location
Pov Documentation Directory は htmlフォルダを指定するらしいけど、それはちょっとどこにあるのか分からない…。また、povray-command も指定しないといかんような気がする…。

とりあえず、以下を指定するような感じになった。
 '(pov-include-dir "D:/home/POV-Ray/v3.7/include")
 '(pov-insertmenu-location "D:/home/POV-Ray/v3.7/Insert Menu/")
 '(povray-command "C:/Prog/POV-Ray/v3.7/bin/pvengine.exe")

キー割り当てを眺めた感じでは、C-M-i を叩くとキーワード補完ができるようではあるなと…。それ以外の機能はまだ分かってない…。

Visual Studio Code用の拡張もあるらしい。 :

vsocde (Microsoft Visual Studio Code)に対応した POV-Ray の拡張もあるらしい。

_POV-Ray - Visual Studio Marketplace

Windows上で使う場合は pvengine.exe に PATH を通しておけ、と書いてあるな…。通しておくか…。

Windows10 x64 21H1 + vscode 1.59.1 上でインストールしてみた。

.pov を開くと色分けしてくれるし、キーワードも補完してくれる。また、Ctrl + Shift + B を叩いたら、POV-Ray を呼び出してレンダリングしてくれた。レンダリング後の画像も、vscode 内に表示してくれる。なんだか至れり尽くせりな印象。

ただ、ドキュメントの整形・フォーマット (formatter) は存在していないっぽい。

インテリセンスでキーワードをガンガン補完してくれる上に、ショートカットキーでレンダリングができるあたり、エディタでテキストをガシガシ打って POV-Ray を使うなら、一番快適かもしれない。後はフォーマッターさえあれば…だけど。

Linux上でも試してみた。 :

Linux上でも POV-Ray が使えるのかどうか気になったので、Ubuntu Linux 20.04 LTS 上でも動くかどうか試してみた。VMware Player 上の Ubuntu と、実機(サブPC)にインストールした Ubuntu の両方で動作確認。

POV-Ray 自体は、apt でインストールできる。
sudo apt install povray povray-doc povray-examples
POV-Ray 3.7 がインストールされた。

/usr/bin/ に povray というコマンドがインストールされたが、Windows版とは違って、実行しようとしてもエディタ画面のようなものは表示されなかった。

以下のページで Linux版について説明されてた。やはり、Linux版はコマンドラインツールしか提供されてないらしい。おそらく、.pov ファイルを渡したら計算して結果画像を出力する、といった機能しか持ってないのではないかなと…。

_POV-Ray: Download: Useful tools for POV-Ray for Unix

Ubuntu上に vscode がインストール済みだったので、更に POV-Ray用の拡張もインストール。vscode で .pov ファイルを記述して動作確認した。Ctrl + Shift + B を叩いたら、povray を呼び出して画像を出力した後、vscode のウインドウ内に結果画像を表示してくれた。

ちなみに…。
  • include は、/usr/share/povray-3.7/include/ に入ってる。
  • examples は、/usr/share/doc/povray/examples/ に入ってる。
  • doc は、/usr/share/doc/povray/html/ に入ってる。

_Debian -- パッケージのファイル一覧: povray-includes/buster/all
_Debian -- パッケージのファイル一覧: povray-examples/buster/all
_Debian -- パッケージのファイル一覧: povray-doc/buster/all

これらのファイル配置を目にしたことで、emacs の pov-mode が、完全に *NIX環境で使うことを前提にして書かれてることが分かった。emacs の pov-mode は、「docディレクトリを指定せよ」的仕様で作られてるけど…。*NIX なら html/ があるけど Windows には無いので…。

#3 [debian] Debian Linux 10 buster を 11 bullseye にアップグレードしてみた

少し前に、Debian Linux 11 bullseye が公開されたというニュースを目にした記憶があるので、 VMware 上でインストールして試用していた Debian Linux 10 buster 32bit版を、Debian Linux 11 bullseye にアップグレードしてみた。

環境は、Windows10 x64 21H1 + VMware Workstation 16 Player 16.1.0 build-17198959。

作業手順は以下のページが参考になった。ありがたや。

_Debian10を11(bullseye)にバージョンアップする
_debian 10 から11にアップグレードしてみた | ゆっくり遅報
_How To Upgrade To Debian 11 Bullseye From Debian 10 Buster - OSTechNix

一応手順をメモしておく。そのうち、自宅サーバに対しても、この作業をしないと…。

バージョンを確認。
cat /etc/debian_version
lsb_release -a

現在のバージョンを最新の状態にしておく。
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove
sudo apt autoclean
sudo reboot

現在のリポジトリ設定をバックアップしておく。
mkdir ~/apt
sudo cp /etc/apt/sources.list ~/apt
sudo cp -rv /etc/apt/sources.list.d/ ~/apt

リポジトリ設定を Debian 11 bullseye 用に変更。sed を使って、buster と書かれているところを、bullseye に置換する。
sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list
sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list.d/*

Debian 11 から、CODENAME/updates という記述は、CODENAME-security に変更されたらしい。/etc/apt/sources.list をエディタで開いて修正。
sudo vi /etc/apt/sources.list
deb http://security.debian.org/debian-security bullseye/updates main
deb-src http://security.debian.org/debian-security bullseye/updates main
↓
deb https://deb.debian.org/debian-security bullseye-security main contrib
deb-src https://deb.debian.org/debian-security bullseye-security main contrib

アップグレード開始。
sudo apt update
sudo apt full-upgrade
sudo reboot

バージョンを確認。
cat /etc/debian_version
lsb_release -a

SSD上にHDDイメージを置いてある仮想PCだったせいか、1時間ぐらいで処理が終わった気がする。HDD上で作業してたらもっと時間がかかるのだろうか…。

2021/08/22() [n年前の日記]

#1 [cg_tools][povray] POV-Rayについてまだ調べてる

せっかく POV-Ray を触ってみたので関連情報を色々調べているところ。

POV-Ray 関連ツールが盛んに開発されてたのは、どうやら1998年前後のようで…。その手のツールも、解説サイトも、今では軒並み 404なのが厳しい…。Web Archive でその手のサイトを確認しようとしても、ほとんど残ってない…。

モデリング関連ツールを試用。 :

全体的にモデリングするツールではなく、形状一つ分のみをスプライン曲線等で作成するツールも試用してみた。環境は Windows10 x64 21H1。
  • Epspline 0.0.4.5p1 (Epspline-0.0.4.5-msw64-install.exe を実行してインストール。)
  • hamaPatch 3.0 preview 1.03 (hamaPatch3PreviewVersion.zip を解凍。hamapatch.exe を実行して起動。)
  • sPatch 1.5 (spatch.zip を解凍。spinstall.exe を実行してインストール。)
  • SplineEditor 1.2 (spilinexe.zip を解凍。SpilinEditor.exe を実行して起動。)
  • ベジェちゃん 3.1.2 (bc31.lzh を解凍。BC3.exe を実行して起動。)

以下から入手可能。一部、WebArchive から入手することになるけど…。

_Epspline - Agalena
_oocities.org/hamakazu/
_spatch and hamapatch
_SpilinEditor (WebArchive)
_ベジェちゃん (WebArchive)

  • Epspline : スプライン曲線のみを編集。3Dでプレビューはできない。
  • hamaPatch : 曲面編集。
  • sPatch : 曲面編集。
  • SplineEditor : スプライン曲線を編集して回転体を作成。3Dでプレビューされる。
  • ベジェちゃん : ベジェ曲線んを編集して回転体を作成。3Dでプレビューされる。
Epspline 以外は、どれも古いアプリなので、Windows10上で互換モードを有効にして動かしてみた。互換モードは、Windows XP SP3 や Windows98 を選んだ。

古いソフトなせいか、曲線の制御点を修正するだけでもなかなかシンドイ。それでも、座標値を打ち込んで形状を作っていくよりは楽なのではないかと…。たぶん。

余談。POV-Rayは学校で教わるものらしい。 :

完全に余談。

ふとなんとなく、twitter で「povray lang:ja」で検索してみたら、「POV-Rayはクソ」みたいなつぶやきをやたらと目にして驚いた。結構マイナーなソフトと思ってたけど、どうしてこんなにメジャーな扱いなのだろう。言及する人が多過ぎる。なのに、めちゃくちゃdisられてもいる…。

なんでだろうなと思ったら、「学校でやらされた」「高校でやらされた」「大学に入ったらまたpovrayをやらされて地獄」みたいなつぶやきがたくさん出てきて。

そうか…。今時の学校は POV-Ray を教えてるのか…。そうなんだ…。

自分のようなおじさんの感覚からすると、なかなか凄い話だなあと軽くショック…。おじさんなんて工業高校で SHARP MZ-2000 使ってカセットテープからBASIC読み込んで…。あるいは紙のカード or 紙テープにガシャンガシャンと穴開けて冷蔵庫よりデカいオフコンに読み込ませて FORTRAN やらされたり…。学校で受けたコンピュータの授業なんてそんな感じだったので、レイトレーシングなんて夢また夢で…。当時のPCは8色しか出せなかったし。CPUも8bitでクロック周波数が2〜4MHzと非力だからレイトレーシング画像を一枚計算するのに数日かかるし。そんなの授業でやったら計算待ちだけで授業が終わっちゃう。いやはや、さすがに進歩したもんだなと…。

にしても、なんで今時 POV-Ray なんだろう…。3DCGの基礎を学ぶには向いているんだろうか…?
  • カメラとライトとオブジェクトが無いと画面に何も出てこないよ、と学べる。
  • xyz値を変えると3D空間でどう変化が起きるか、なんとなくイメージできる回路を脳内に作れる。体育会系ノリ。
そんなところだろうか。でも、そのあたりは blender でも教えられるよなあ…。

学校のPCスペックが関係してるのかな。blender は2つのレンダラーを持ってるけど、EEVEE を使うためには今時のGPUが必要だし、Cycles を使うには強力なCPU or GPUが必要だし。学校のPCって、数世代前かつ非力なCPU + 内蔵GPUだろうから、そんなスペックだと blender は満足に動かせない可能性が高そう。いや、わからんけど。

あるいは、blender のUIや使い方を覚えても応用が利かない、みたいな話かな…。特に blender は、2.7x から 2.8x になる時にUIがガラリと変わったし…。そもそも特定の3DCGソフトに慣れ過ぎてしまうと他のソフトに移行するのが難しいからよろしくない、と思われそうでもあるし。

そのあたりを考えると、どんなスペックのPCでも動かせて、更にテキストを打ち込むだけで3DCGが学べる POV-Ray は、余計なことまで覚えなくて済む分、基礎を学ぶための選択肢としては悪くないと判断されそうな気もする。

とは言え、「今時これはないだろ」と学生さんが思うソレも分かるというか…。「FORTRANを学べばプログラミング言語の基礎が学べるから」「紙テープに穴を開ければタイピングの基礎が学べるから」と言われても、そんなのやりたくないよ、みたいな感覚に近いだろうなと…。

どうせやるなら後々役に立つのが容易に想像できる何か、あるいは最新のワクワクしてくる何かを触ってみたいと思うわな…。しかし、だったら何が適しているのかと考えると、かなり悩む…。今人気のあるアレコレが10年後20年後も残ってるのかと考えると…。未来予測は難しい…。

2021/08/23(月) [n年前の日記]

#1 [nitijyou] 自宅サーバ止めてました

雷が鳴ったので、05:45-07:15まで、自宅サーバ止めてました。申し訳ないです。

朝方、結構な豪雨と雷に…。雨量が凄過ぎて、家の前の道路が川のような状態…。

#2 [blender][cg_tools][povray] LuxCoreRender 2.5を試用

POV-Ray について調べているうちに、違うレンダラー、LuxCoreRender が気になってきたわけで。試用してみようかなと。現行版は 2.5 らしい。

環境は、Windows10 x64 21H1 + AMD Ryzen 7 1700 (8コア,16スレッド) + GPU NVIDIA GeForce GTX 1060 6GB。

_LuxCoreRender - Open Source Physically Based Renderer
_Download - LuxCoreRender

LuxCoreRender は、無料で利用できる物理ベースのレイトレーシングレンダラー。LuxRender の後継。

動作には、以下の2つも必要と書いてあった。一応DLしてインストール。 ただ、前者は、自分の環境では「別バージョンがインストール済み」とエラーが表示されてインストールできなかった。

blenderで利用。 :

blender から LuxCoreRender を使える、BlendLuxCore というものが配布されているので、それをDLして blender から使ってみる。まあ、blender で物理ベースのレンダラーを使いたければ、Cycles を使えばいいのだけど…。

環境は、blender 2.83.17 x64 LTS。

BlendLuxCore-v2.5-win64.zip をDL。解凍はしなくていい。blender のアドオン設定で .zip を選択してインストールしてやれば使えるようになる。

ただ、試したところ、blender 2.83.17 x64 LTS 上ではインストールも有効化もできたけど、blender 2.93.2 x64 LTS 上では、有効化しようとしてチェックを入れてもエラーが出て有効化できなかった。

公式サイト・ダウンロードページをよく見たら、「blender 2.93以降は動かないよ!」としっかり書いてあった…。以下のページでも、blender 2.93 は、現在開発中の BlendLuxCore 2.6 で対応、と書いてある。blender 2.93 から Python のバージョンが変わったので、そのせいで動かなくなったのだとか。

_LuxCoreRender/BlendLuxCore: Blender Integration for LuxCore

さておき。アドオンを有効にすれば、EEVEE や Cycles と並んで、LuxCore という選択肢が増える。

念のために書いておくけど、じわじわと計算を続けて画像のノイズを消していく系のレンダラーなので、このくらいの画質で十分だなと思ったらESCキーを押して計算を止めること。あるいは、レンダリング設定の Halt Conditions で、時間、もしくはサンプル数の上限を指定して、その値に達したら計算を止めることもできる。

ただ…。自分の環境では、CPUで計算はできるけど、GPUで計算はできなかった…。GPU を選んでから、F12キーを叩いてレンダリングしようとしても、レンダリング結果を表示するウインドウが表示された後、固まってしまって、blender自体を強制終了する羽目になる。

もっとも、LuxCoreRender は、GPUで計算するよりCPUで計算するほうが反応が早い、という話もあるようで…。

_GPU mode is almost unusable - Issue #527 - LuxCoreRender/BlendLuxCore

CPUで計算する時は内部処理にポインタが使えるのですぐに計算を始められるけど、GPUでの計算はポインタが使えないから、ちょっと状態を変えただけでも、GPUで扱えるデータに毎回変換する処理が走って画面更新されるまでめっちゃ時間がかかる、とかなんとか書いてあるように見えた。であれば、CPUで計算させたほうがいいのかな…。

LuxMarkを試用。 :

GPUで計算できない件が気になってググってたら、「LuxMark を動かして認識されてるデバイスを確認せよ」という話を見かけた。

LuxMark は、LuxCoreRender を利用して動かすベンチマークソフト。レンダリング処理を通じて、そのハードウェアの性能を測定するらしい。

_LuxMark v3 - LuxCoreRender Wiki
_LuxMark v4 - LuxCoreRender Wiki

以下の2つを試用してみた。DLして解凍。任意のフォルダに置いて、luxmark.exe を実行すればベンチマークが取れる。
  • luxmark-windows64-v3.1.zip
  • luxmark-v4.0alpha0-win64.zip

動かしてみたところ、「Hardware Devices」に、OpenCL を利用できるデバイスとして「GeForce GTX 1060 6GB」が表示された。ということは、自分の環境でも GPU + OpenCL で計算できるはずだよなあ…。blender上でGPUを使って計算できないのは、おかしいなあ…。

ちなみに、ベンチマーク結果は…。
  • LuxMark 3.1 x64 + Scene LuxBall HDR + GeForce GTX 1060 6GB : 12531
  • LuxMark 3.1 x64 + Scene LuxBall HDR + Native C++ (CPU?) : 3492
  • LuxMark 4.0 alpha 0 x64 + Scene Food + GeForce GTX 1060 6GB : 837
  • LuxMark 4.0 alpha 0 x64 + Scene Food + Native C++ : 933
LuxMark 4.0 alpha 0 + Native C++ の場合、結果画面に GPU名が表示されていたあたりが気になる。結局は GPU を使って計算しているということだろうか? 値も近すぎるし…。

GPUについているチェックマークを外して、CPUs のほうを選択した状態で動かしてみた。結果画面に GPU名が出てこなくなった。ということは、この場合、CPUだけで計算できてるということなんだろうか。ベンチマーク結果は 893。…GPUを使って計算した時と似たような結果になった。

すると、GPUで計算しようが、CPUで計算しようが、自分が使ってるハードウェアスペックでは、さほど違いはないということになるのだろうか…? 本当にそうなのか、ちょっとよく分からないな…。

LuxCoreRender Standalone も導入。 :

単体で動作できる、スタンドアローン版も試用してみた。luxcorerender-v2.5-win64.zip をDLして解凍。任意のフォルダに置いて、luxcoreui.exe を実行。

解凍したフォルダの中に、scenes/cornell/cornell.cfg が入ってるので、開いてレンダリングをしてみれば動作確認ができる。

Engine の中に、xxxxCPUしか並んでない。GPUが選べないように見えるのだけど…。

#3 [cg_tools][povray] FreeCAD 0.1.9 を試用

POV-Ray関係の情報をググってるうちに、FreeCAD + POV-Ray という組み合わせをたまたま目にした。もしかして FreeCAD を POV-Ray のモデリングツール代わりに使えるのではないか。試してみよう…。

環境は、Windows10 x64 21H1。

_FreeCAD: あなたのための 3D パラメトリック・モデラー

FreeCAD は無料で利用できる3D-CAD。

FreeCAD-0.19.2.7b5e18a-WIN-x64-installer1.exe をDL。実行してインストール。

使い方は、以下のページが参考になりそう。

_実験記録 No.02 : FreeCAD - 初心者向けチュートリアル
_無償3D CAD「FreeCAD」を使ってみよう - MONOist

レンダリングしてみた。 :

FreeCAD は、POV-Ray、もしくは LuxRender (LuxCoreRender) を呼び出して、レンダリングをすることもできるらしい。

_FreeCADのレンダリング関連ワークベンチはまだまだ発展途上!?:無償3D CAD「FreeCAD」を使ってみよう(7)(1/5 ページ) - MONOist

POV-Ray 3.7 x64 をインストールしてある環境で、上記の記事に従って自分も試してみた。

ちょっとハマったのは、PovProject に各パーツを登録していくあたり。PovProject さえあれば全体が自動的にレンダリングされるのかと思い込んで作業して「変だな…レンダリングされないぞ…?」と悩んでた…。「このパーツをレンダリング対象にしろ」的に、登録していかないとダメなのだな…。

さておき。自分の環境も、たしかに POV-Ray 3.7 (pvengine.exe) が起動するものの、エラーメッセージが表示されてレンダリングが実行されなかった。

出力された .povファイルを、手動で起動した POV-Ray で開いて Run をしたら、一応レンダリングはされた。つまり、FreeCAD から直接 POV-Ray を呼び出して利用することはできないけれど、FreeCAD から .pov を出力してそれを利用することはできなくもない、という状態っぽい。

しかし…。穴を開けた部分や、角を丸めた部分が、何一つ反映されてなかった。これでは全然使い物にならない…。

また、形状データはことごとく mesh2 になっていた。

ダメじゃん。それでは意味が無いじゃん。

FreeCAD上では、矩形や円の押し出しで形状を作って、かつ、それら矩形や円の情報をいつまでも保持しているのだから、それらのデータの持ち方を比較的保持したまま POV-Ray に形状データを渡すことを期待してたわけで…。ポリゴンの羅列に変換されてしまうなら、あえてわざわざ FreeCAD を使う意味が無い。だったら最初から別のツールを ―― 例えば Wings 3D あたりでも使ったほうが快適に作業できるわけで…。

それはともかく。.povファイルを覗いてみたら、「#version 3.6;」という文字列が目に入った。ひょっとすると FreeCAD は POV-Ray 3.6 の仕様に合わせてこのあたりの機能を作ってあるような気がする…。

更におそらく POV-Ray は、3.6 から 3.7 になる際、他のプログラムから呼び出される時の仕様が色々変更されているのではないかなと邪推してみたりして。「POV-Rayを呼び出してレンダリングできます」と謳ってたこの手のソフトは、軒並み POV-Ray 3.7 に未対応・正常動作しないので…。POV-Ray 側が無頓着に仕様を変えてしまったのではないかなあ、と。

ただ、POV-Ray 3.7 は2013年に公開されているので、そこからずっと何年も、他のソフトが未対応のままというのも妙な話で…。

もっとも、つまりはそれだけ、POV-Ray は誰も使わないソフトになっているのかもしれず。POV-Ray を呼び出せるその手のソフトがそもそもえてしてマイナーだったりするし、加えて POV-Ray を呼び出そうとする人はほとんど居ない、ということかも…。

別フォーマットでエクスポートしてみた。 :

形状データがポリゴンに変換されてしまうあたりにちょっとガッカリしたけど、でもまあ、ポリゴンに変換してしまえば、他のソフトでも読み込めるようになるし…。と気を取り直して、Wavefront OBJ (.obj) でエクスポートして blender でインポートしてみたのだけど。

角の丸みがガタガタ…。曲面をポリゴンで置き換える際の分割数が少な過ぎる…。このあたり、オプションで変えられないのかな…。

.dae でエクスポートしてみた。このフォーマットなら、もう少し細かく分割される模様。

.stl でもエクスポートしてみた。これも .dae と同程度に分割されていた。

雑感。 :

FreeCAD を POV-Ray関係のモデリングツールとして使えないかと期待してたけど、全然ダメだった。直接呼び出せないし、ポリゴンに変換されちゃうし…。これは使えないなと…。ちょっと残念。もっとも、POV-Ray を使ってレンダリングする機能はオマケのようなものかもしれないので、期待するほうがおかしいのかもしれず。

この記事へのツッコミ

Re: FreeCAD 0.1.9 を試用 by 通りすがりさん    2021/10/08 09:55
povrayのエラーメッセージを見ると、freecadでエクスポート設定したフォルダに書き込みができなくてエラーになってると思います。windows版なら、optionメニューのところで書き込み禁止のデフォルト設定になっているので、他を選択して書き込めるようにするか、freecadからエクスポートのフォルダを書き込める場所に設定すればエラーなく直接レンダリングはできます。
形状の問題はメッシュに変換するfreecadの問題ですね。
レイトレースの品質は無数にあるパラメータの組み合わせで良くも悪くもなるので、cad使いの人でも、レイトレースの知識がないと使えないものだと思います。



2021/08/24(火) [n年前の日記]

#1 [blender][povray] blenderからPOV-Rayを呼んでレンダリングできるか試してみた

POV-Ray関係の情報を調べていたら、対応3DCGソフトとして blender の名前が挙がっている場面を何度か目にしたわけで。一体どれほど対応しているものなのか気になったので、そのあたりを少し調べてみた。

環境は、Windows10 x64 21H1 + blender 2.93.2 x64 LTS / 2.79b。POV-Ray 3.7。

blender 2.93.2 x64 LTS の場合。 :

blender 2.93.2 の場合は、標準で POV-Ray用のアドオンが含まれているらしい。まずはアドオンを有効にする。

アドオンの検索欄で「pers」と打ち込めば、「Render: Persistence of Vision」というアドオンがリストアップされる。「Persistence of Vision」って何? 略すると「POV」になる。POV-Ray は、「Persistence of Vision Raytracer」の略なのだな…。さておき、これが POV-Ray用のアドオンなので、チェックを入れて有効にする。

blender2932_povray_ss01.png

  • Binary Location に、POV-Ray の実行ファイルの場所を指定。Windowsの場合は、pvenegine64.exe や pvengine.exe になるのだと思う。
  • Includes Location に、POV-Ray の includes フォルダの場所を指定。Windowsの場合は、(ドキュメントフォルダ)\POV-Ray\v3.7\include\ になると思う。
  • レンダリング終了時やエラー時にサウンドファイルを鳴らしたいなら、各 .wav ファイルの場所も指定して、その下の「Use Sound」をクリックして有効にする。
念のために blender を再起動…しなくてもいいのかもしれないけど、まあ、念のために。

このアドオンが有効になっていれば、blender のレンダラー、Eevee や Cycles と並んで、Persistence Of Vision も選べるようになるので、切り替える。

blender2932_povray_ss02.png

そのままだと、POV-Ray でレンダリングした後、.povファイルは削除されてしまうし、どこに .pov を作られたのかも分からないままなので…。.pov は消さないように、更に、.pov は .blendファイルがある場所に作るように指定する。

blender2932_povray_ss03.png

  • Auto Start のアイコンをクリックしてOFFにすると、設定できる項目が増える。(グレーアウトが外れる)
  • Delete files のチェックを外して、レンダリングが終わっても .pov を削除しないようにする。
  • もし、起動した POV-Ray editor を表示したままにしたいなら、POV Editor にチェックを入れる。今回はチェックを入れなかった。
  • 名前には .pov ファイル名を指定するけれど、空欄にしておけば、.blend ファイルと同じ名前になる。(例: hoge.blend を開いているなら、hoge.pov で保存される。)
  • Path to files には、.povファイルを保存したいフォルダを指定。「//」を指定しておけば、.blend があるフォルダに .pov も保存される。

POV-Ray用アドオンが有効になっていて、かつ、レンダラーとして Persistence Of Vision が選ばれている状態なら、シーンに追加できるオブジェクト種類の中に、POV-Ray専用のプリミティブが追加された状態になる。

blender2932_povray_ss04.png

ここで選んで追加できるオブジェクトはPOV-Ray専用なので、例えば blenderの通常時の編集作業 ―― TABキーを叩いて編集モードに入って頂点位置を変更、といったことはできない。球(Sphere)は、あくまで球。

F12キーを叩けば、POV-Ray でレンダリングされて、レンダリング結果の画像が Blenderレンダーウインドウ内に表示される。

blender2932_povray_ss05.png

.blendファイルが置いてある場所に、.pov も残っているので、コピーして、テキストファイルとして開いて、編集して、各値を調整していくことができるはず。

blender 2.79b の場合。 :

blender 2.79b も、同様の流れで POV-Ray を利用できる。

違うのは、アドオン名が「Render: POVRAY-3.7」になっていることと、レンダラー名が「POV-Ray 3.7」になっていること。

blender279b_povray_ss01.png

blender279b_povray_ss02.png

blender279b_povray_ss03.png

blender279b_povray_ss04.png

blender279b_povray_ss05.png

マテリアル設定。 :

マテリアルの設定でかなり悩んだ。blender で通常利用するマテリアルの設定項目が何一つ反映されなくて…。

以下の動画を眺めたら、blender 2.78 + POV-Ray 3.7 の時点ではマテリアルを、というか POV-Ray で言うところの texture を指定できているようで…。しかし、手元の blender 2.79b + POV-Ray 3.7 で似たような作業をしても反映されない。これはおかしい。

_Blender 2.78 + POV-Ray 3.7 - YouTube

色々試しているうちに分かってきた。
  • blenderの標準的なオブジェクト(cube等)なら、通常のマテリアル指定(ディフューズ色の指定等)が POV-Ray にも反映される。
  • POV-Ray のプリミティブは、マテリアル指定が反映されない。Custom POV Code の指定すら反映されない。

画像を見れば分かるだろうか…。Cube は色が反映されてるけど、PovBox には色が反映されてない。

material_ss01.png

material_ss02.png

前述の動画内で利用してるオブジェクトも、おそらく、POV-Ray のプリミティブの PovBox ではなくて、blender の標準的なオブジェクトの Cube だったのだろう…。だから、色の指定がちゃんと反映されてたのだろうなと…。

更に、出力された .pov を眺めて、これまた首を捻ってしまった。POV-Ray の解説ページによると、例えば色を指定する際は、object { } の中で texture だの pigment だのを記述するわけだけど。出力された .pov の object { } 内には、それらしい記述が一切無い。ところが、それらの記述がないのに、レンダリング結果には、ちゃんと色がついている…。何故。どうして。

_povray_test2_blender_object_only.pov

これはもしかすると、.pov フォーマットにおける暗黙のルール、みたいなものを利用しているのでは…? 例えば、宣言名が「MAT_hoge」の場合は、暗黙で「hoge」のマテリアル指定として扱われる、とかそういうルールが実はあったりするのでは…? でも、ググってみてもそれらしいルールが見つからない…。

さておき。POV-Ray用のシーンを blender で作成する際、マテリアル設定だか texture設定については、テキストを直接書いて指定する方法があるようで。前述の動画でやっているのがソレだけど。

まず、テキストビューで POV-Ray用の texture指定を直接書いてしまって…。

blender279b_povray_material_ss01.png

blender 2.79b なら、プロパティ → POV-Ray → Source to render で「両方」を選択。これで、記述したテキストが、出力される .pov内にも含まれるようになる。

その上で、オブジェクトのマテリアル設定の Custom POV Code に、先ほどテキストで記述した際の設定名を追記する。

blender279b_povray_material_ss02.png

こういう指定方法なら、POV-Ray の持ってる機能を全て利用できるのだろうなと…。たぶん。

ただ、それでも、POV-Ray用プリミティブを blender上で追加した際のマテリアル設定の仕方が分からないわけで…。そして、.pov の中でそれらしい記述が無いのに色指定等が反映されるのが謎なわけで…。

雑感。 :

「blender が POV-Ray に対応していると言っても、どうせなんでもかんでもポリゴンに変換しちゃうんだろ? そんなの使えねー」と勝手に決めつけて最初から選択肢に入れてなかったのだけど。今回試用してみたら、POV-Ray利用時は専用のオブジェクト(プリミティブ)も利用できると知って、なんだかゴメンナサイと謝りたくなった…。

そういうモードに切り替わるのであれば、blender を使ってプリミティブを配置するのが一番楽なんじゃね? とすら思えてきた。

ただ、マテリアル指定の方法が…そこがどうにも分からない…。

余談。タグをつけることにした。 :

ずっと POV-Ray関係のメモをしているけど、こういうのはタグをつけたほうがいいよな…。ということで、数日前のメモにもタグをつけておいた。

#2 [zatta] テキストを書いて指定するソレとGUIで指定するソレ

思考メモ。

POV-Ray を触っているうちになんとなく、この感覚はアレに似ているなと思えてきた。

例えば、HTML や CSS は、テキストエディタで直接タグを打ちこんで作ることができる。でも、ホームページビルダーのように、GUI・WYSIWYGで作ることもできる。

例えば、2Dゲームは、テキストエディタでソースコードを書いて作ることができる。でも、Unity だの Godot Engine だのを利用して、画像の配置を見た目で調整しつつ作っていくこともできる。

プログラミングも同じかもしれない。一般的にはテキストエディタでソースコードを打ち込んで作業するものだけど。Scratch のように、GUIで部品を並べてプログラミングをすることもできる。

DTMも同様かも。昔は、音程や音の長さをテンキーから打ち込んでMIDIデータを作ってたけど。今はピアノロールで入力していく場合がほとんどだろう…。それに加えて、鍵盤をリアルタイムに叩いて入力する方法もあるけれど…。

つまり、コンピュータ上で何かしらを作ろうとした際に、大別して2つの方法があるのだろうなと。
POV-Ray は前者だし、blender は後者なのだろうと…。

ただ、それぞれのジャンルで、どちらが主流になるかは、ちょっと判断がつかないよなと…。

HTML や CSS は、テキストエディタで書くことが主流になってしまった気がする。ホームページビルダーっぽいものを使って制作する場面って、今はもう無いよな…。プログラミングも、エディタでソースコードを書くのが主流だろうし。

ゲーム制作は、ちょっとよく分からない。今から始める人は Unity とかそういうのを使うよな…。DTMだって、今から始める人なら、数値を打ち込んで曲を作ったりしないだろう…。いくらなんでも、ピアノロールを使うわな…。

つまり、可能性として…。
ということで。

「これ、テキスト入力で作ってるけど、GUIにしたら楽にならんか」とか。
「これ、GUIで作ってるけど、テキスト入力のほうが楽なのでは」とか。

時々、ふと、そんなことを考えながら作業内容を眺めてみたら、新しい市場を見つけることができたりしないかねえ…。てな妄想をしてしまったのでメモ。思考メモ。

2021/08/25(水) [n年前の日記]

#1 [povray] Bishop3DからPOV-Ray3.7を呼び出すことができた

Bishop3D は Windows上で利用できる POV-Ray用のモデリングツール。モデリングツールと言うか…プリミティブの配置をGUIで変更できるツールとでもいうべきか…。

Windows10 x64 21H1上で、POV-Ray 3.7、Bishop3D 1.0.5.2 をインストールして試用していたのだけど、Bishop3D から POV-Ray を呼び出そうとすると「pvengine.ini が見つからない (Could not find pvengine.ini)」とエラーが出て正常動作しなかった点が気になっていて、そのあたりを解消できないのかなと少し調べていたわけで。

色々試していたら、エラーを出さずに呼び出せるようになったので、設定手順をメモ。

ちなみに、Bishop3D は公式サイトが消滅しているけど、WebArchive から bishop3d1052setup.exe を入手できた。

_Bishop3D - POV-Ray Modeler and Animation System (WebArchive)

iniフォルダ等の場所を変える。 :

Bishop3D は POV-Ray 3.6 時代に作られたツールなので、POV-Ray 3.6時代のフォルダ構成で決め打ちしてファイルを読み込むように作られているっぽい。

そして、POV-Ray 3.7 は、"(ドキュメントフォルダ)\POV-Ray\v3.7\" 内に iniフォルダや includeフォルダが入っているけれど、POV-Ray 3.6 は、POV-Ray本体インストールフォルダ内にiniフォルダやincludeフォルダが入っていたらしい。

故に、Bishop3D から POV-Ray を呼び出そうとすると、pvengine.exe のある場所を起点にして、..\ini\pvengine.ini を探しに行って、しかし iniフォルダが無いから、「pvengine.ini が見つからない」と言ってくるのだろうなと…。たぶん。

なので、ドキュメントフォルダ\POV-Ray\v3.7\ 内のiniフォルダやincludeフォルダが、POV-Ray 3.7 の本体インストールフォルダ内にもあるように見せかければいい。具体的には Windows のシンボリックリンクを使う。

_Windowsでシンボリックリンクを作る | DevelopersIO

例えば、自分の環境は、C:\Prog\POV-Ray\v3.7\bin\ に pvengine.exe が入っているので…。管理者権限でコマンドプロンプト(cmd.exe)を開いていて…。
  • mklink /d C:\Prog\POV-Ray\v3.7\ini (ドキュメントフォルダ)\POV-Ray\v3.7\ini
  • mklink /d C:\Prog\POV-Ray\v3.7\include (ドキュメントフォルダ)\POV-Ray\v3.7\include
こんな感じでシンボリックリンクが作れる。

これで、iniフォルダやincludeフォルダの実体はドキュメントフォルダ内にあるけれど、POV-Ray本体をインストールしたフォルダ内にもそれらのフォルダが存在してるように見せかけることができる。

pvengine.iniを編集。 :

Bishop3D は、POV-Ray と通信する際に、Bishop3DPovComm.dll というDLLを使う。このDLLの場所を、事前に pvengine.ini に記述しておくことで、POV-Ray起動時に、POV-Ray が Bishop3DPovComm.dll を読み込むようにしてやらないといけない。

pvengine.ini を編集する。POV-Ray (pvengine.exe) を起動して、Tools → Edit PVENGINE.INI を選択する。POV-Rayエディタで、pvengine.ini が開かれる。

[GUIExtensions] という項目の下に、「ExtDLL16=(Bishop3Dインストールフォルダ)\Bishop3DPovComm.dll」を追記する。
[GUIExtensions]
UseExtensions=1
ExtDLL16=C:\Prog\Bishop3D\Bishop3DPovComm.dll
ExtDLL16 の 16 は、1〜30 ならどれでもいいらしい。数値が重なって無いことが重要らしい。

POV-Ray を終了して、再度 pvengine.exe を起動。

POV-Ray 起動時の Messages タブの最初のほうで、以下のように出力されていたら、Bishop3DPovComm.dll を読み込めている。
DISCLAIMER : The POV-Team takes no responsibility for the operation of third-party GUI Extensions.
             Please do not send us bug reports if they cause things to go haywire.

GUI Extension 'POV-Bishop3D Communication' loaded from 'Bishop3DPovComm.dll'
  Report any problems to Hugo Arnaut <hugo@bishop3d.com>

ちなみに、Bishop3DPovComm.dll は 32bit用のプログラムなので…。ファイル名からしておそらくは64bit版であろう pvengine64.exe を起動すると、以下のように「読み込めないよ (Could not load GUI Extension DLL 'Bishop3DPovComm.dll')」とメッセージが出力される。
DISCLAIMER : The POV-Team takes no responsibility for the operation of third-party GUI Extensions.
             Please do not send us bug reports if they cause things to go haywire.

Could not load GUI Extension DLL 'Bishop3DPovComm.dll'

Bishop3Dにpvengine.exeを登録。 :

Bishop3D を起動して、pvengine.exe の場所を設定する。
  1. Settings → Options を選択。
  2. Render options → POV-Ray integration
  3. POV-Ray executable に、pvengine.exe の置いてある場所を指定。(例: C:\Prog\POV-Ray\v3.7\bin\pvengine.exe)

注意点としては、Bishop3D は32bit版のプログラムなので、POV-Ray も 32bit版の pvengine.exe、もしくは pvengine32-sse2.exe を指定しないといけない。最初、64bit版の pvengine64.exe を指定してしまって、動かないなーと悩んでしまった…。

これで、シーンを編集後…。
  • F9キーを叩く。
  • または、Render → Render Current Frame を選ぶ。
  • あるいは、ツールバー上のアイコン(Render Current Frame(f9)) をクリックする。
bishop3d_povray_ss01.png

bishop3d_povray_ss02.png

これで、POV-Ray が起動してレンダリングが行われる…はず。手元の環境ではちゃんと動いてくれた。

bishop3d_povray_ss03.jpg


それにしても…何なんだろう…。このレンダリング結果の、「ザ・1990年代感」は…。

余談。アプリのインストール場所について。 :

Windowsにおいては、一般的にはアプリの類を C:\Program Files (x86)\ や C:\Program Files\ にインストールするけれど。Windows10 はそれらのフォルダを特殊なフォルダとして扱うようになっているので、例えばそこに .iniファイルが入ってたりすると、アプリ側から書き換えることができなくて、昔に作られたアプリなどは正常動作しなくなる可能性があるよなと…。

おそらくだけど、POV-Ray 3.7 が、本体インストールフォルダではなく、ドキュメントフォルダ内に iniフォルダを移動したのも、そういう理由ではないかと想像するわけで。

その手のトラブルに遭遇するのは面倒臭いし、ファイルパスやフォルダパスに空白文字が入ると、CUIで作業をする時にパス指定が面倒だったりするので…。自分の環境では C:\Prog\ というフォルダを作って、フリーソフトや、昔に作られたアプリは、そこにインストールして使っていたりする。故に、今回試用してる POV-Ray も、最初から C:\Prog\ の中にインストールしたわけで。

ただ、ソフトによっては、自身や関連ソフトが、必ず C:\Program Files\ にインストールされているはず! …と決め打ちして作られているものもあって。Windows95/98時代は、C:\Program Files\ にインストールするのが当たり前だったから…。そういうソフトに遭遇すると、これがまた面倒で…。

まあ、このへん、Windowsの歴史的な経緯が絡んでるから、仕方ないのだろうけど。

#2 [blender][povray] blender + POV-Rayを試しているけれどなかなか厳しい

Windows10 x64 21H1上で、blender 2.79b x64 + POV-Ray 3.7 を触っているけれど、なかなか厳しい。

POV-Rayのプリミティブを追加して、Material設定を変更できないものかとアレコレ試しているけれど、どこを弄っても反映されない…。blender標準のオブジェクトなら、透明度だの、ミラーだの、色々反映されるのだけどなあ…。

どこかにその手の説明文書がないものかとググっているけど、POV-Rayプリミティブに対しては、blender上から材質設定ができると明記されてないページばかりで。

もしかすると、「POV-Rayプリミティブを追加できるだけでもありがたいと思え」「材質設定? 知らんがな。材質設定までしたいなら blenderの標準オブジェクトを使え」ということなのかなと…。

そもそも、blender を使っているなら、EEVEE や Cycles を使えばレンダリングできちゃうもんな…。blenderのレンダラーが今一つだった時代に、POV-Ray使ってレイトレーシングできたらいいよね、POV-Rayのほうが強力だよね、という流れで作られたアドオンなのかなと思えてきたりもして。

しかも、例えば blender 2.93.x で POV-Rayアドオンを有効にすると、「メンテナー募集中」っぽいメッセージも出てくるし…。blenderの標準機能のほうがリッチになって、あまり使われなくなったアドオンなのかなと…。

2021/08/26(木) [n年前の日記]

#1 [povray] MorayからPOV-Rayを条件付きで呼び出せることがわかった

_昨日の作業 で、Windows10 + POV-Ray専用モデリングツール Bishop3D から、POV-Ray 3.7 を呼び出して利用できる状態になったのだけど。

似たような作業をすれば、別の POV-Ray専用モデリングツール Moray からも POV-Ray 3.7 を呼び出せるようにできるのではないか…? と思えてきたので試してみた。

環境は Windows10 x64 21H1 + Moray V3.5。

結論を先に書くと、Windows10上でも、POV-Ray 3.6.2 32bit版なら、Moray V3.5 から呼び出してレンダリングすることができる。ただし、多少面倒な操作を強制される。ちなみに、POV-Ray 3.5、3.6、3.7 はダメ。利用できるのは、POV-Ray 3.6.2 に限られる。

Moray の入手ページは以下。

_The Moray Homepage - Welcome

試行錯誤をメモ。 :

Bishop3D から POV-Ray を呼び出せるようにした際、POV-Ray 3.7 本体のインストールフォルダ内に、シンボリックリンクを使って、 iniフォルダとincludeフォルダを入れたのだけど。

そのことで Moray の動作に変化が出てきた。Moray 起動時に、「POV-Ray 関係の .ini に Moray用の設定をするかい?」みたいなダイアログが表示された。どうやら、Moray も ini/pvengine.ini を見つけることができたようだなと…。

pvengine.ini を覗いたら、以下の行が追加されていた。
[GUIExtensions]
UseExtensions=1
ExtDLL16=C:\Prog\Bishop3D\Bishop3DPovComm.dll
ExtDll15=C:\Prog\Moray For Windows\MorayCtrl.DLL
「ExtDll15=C:\Prog\Moray For Windows\MorayCtrl.DLL」が追加された行。どうやら Moray も、Bishop3D と似た感じで、特定のDLLを利用して POV-Ray と通信しながら処理をするようだなと…。

更に、手動で POV-Ray 3.7 (pvengine.exe) を起動してみたところ、Messages の冒頭で、Bishop3DPovComm.dll に加えて、MorayCtrl.DLL も読み込めていることを確認できた。

しかし、Moray 上で、Render → Raytrace を選択してレンダリングを試みたところ、POV-Ray側では以下のエラーメッセージが表示されて、レンダリング処理まで行かなかった。
Preset INI file is 'D:\HOME\POV-RAY\V3.7\INI\QUICKRES.INI', section is '[1024x768, AA 0.3]'.
Preset source file is 'D:\MorayProj\POVSCN\test03.INI'.

"D:\MorayProj\POVSCN\test03.INI" line 5: INI option 'Buffer_Output' is no longer used and will result in an error in future versions of POV-Ray.
"D:\MorayProj\POVSCN\test03.INI" line 6: INI option 'Buffer_Size' is no longer used and will result in an error in future versions of POV-Ray.
"D:\MorayProj\POVSCN\test03.INI" line 24: INI option 'Histogram_Name' is no longer used and will result in an error in future versions of POV-Ray.
"D:\MorayProj\POVSCN\test03.INI" line 25: INI option 'Histogram_Grid_Size' is no longer used and will result in an error in future versions of POV-Ray.
"D:\MorayProj\POVSCN\test03.INI" line 26: INI option 'Histogram_Type' is no longer used and will result in an error in future versions of POV-Ray.
"D:\MorayProj\POVSCN\test03.INI" line 63: Unknown key 'Radiosity' in INI file.
"D:\MorayProj\POVSCN\test03.INI" line 63: Cannot continue to process INI file
'D:\MorayProj\POVSCN\test03.INI' due to a parse error in line 63.

This is not a valid INI file. Check the file for syntax errors, correct them, and try again!

Valid options in INI files are explained in detail in the reference part of the documentation.

Failed to start render: Failed to parse INI file

Moray は POV-Ray 3.5時代のツールなので、Moray が出力する .iniファイルの記述が、POV-Ray 3.7 が利用する .ini の仕様と合っておらず、.ini の解析処理が止まってしまう模様。

エラーメッセージの内容を確認すると…。以下の指定は .ini 内で使用できなくなった、と言っているっぽい。
Buffer_Output
Buffer_Size
Histogram_Name
Histogram_Grid_Size
Histogram_Type

更に、「'Radiosity'なんてキーは知らないからこれ以上解析できない」とも言っている。

エラーメッセージでググったら以下のやり取りが見つかった。POV-Ray公式のニュースグループ(?)らしい。

_POV-Ray: Newsgroups: povray.general: Ignore .ini Errorrs in 3.7
_POV-Ray: Newsgroups: povray.general: Ignore .ini Errorrs in 3.7

.iniファイル内における「Radiosity」という指定は、POV-Ray 3.5 の時点で廃止されて、その指定内容は .pov 側で記述するように仕様が変更された模様。

ただ、POV-Ray 3.5 の時点では、廃止はされたものの、機能として削除されたわけではなかったので .ini の解析処理が通ったようだなと…。

しかし、POV-Ray 3.7 の時点で完全に削除扱いになったので、.ini内に「Radiosity」というキーワードがあると、解析処理がそこで止まるようになった、ということらしい。

ちなみに、Buffer_Output や Buufer_Size 等が何なのかについては、以下の非公式翻訳ページが参考になりそう。

_POV-Ray 3.0 の日本語版マニュアル暫定第5.2版について(.txt)

さておき。前述のニュースグループのやり取りの中で、「POV-Ray 3.8 で修正するかも」みたいな話が出ていたので、POV-Ray 3.8 beta 2 を導入して試してみた。POV-Ray 3.8 beta 2 は、github から入手できる。

_Releases - POV-Ray/povray

しかし、残念ながら、POV-Ray 3.8 beta 2 においても、Radiosity が書かれてる行で解析処理が止まってしまった。そのあたり、結局修正されてないらしい。

POV-Ray 3.6.2なら動く。 :

ニュースグループを検索しまくっていたら、「Windows7 + Moray + POV-Ray 3.6.2 なら動いたぞ」という報告を見かけた。POV-Ray 3.6 では動かなかったけど、3.6.2 なら動いたらしい。

Windows7上で、その組み合わせで動いたのであれば、Windows10上でも、その組み合わせで動きそうな気がする…。

試しに POV-Ray 3.6.2 をDL・インストールして動作確認してみた。POV-Ray 3.6 は以下のページから入手できる。

_POV-Ray: Download Legacy version 3.6

32bit版の povwin362-32bit.msi をDL・実行してインストール。POV-Ray 3.7 とは異なるフォルダにインストールすることで共存できる。今回は、C:\Prog\POV-Ray\v3.6\ にインストールしてみた。

3.6.2版の pvengine.exe を一旦起動してから終了。そして、pvengine.exe を再起動すると pvengine.ini の内容が充実(?)する。

その状態で、ExtDLLxx= 等の行を追記していく。POV-Rayのウインドウ上で、Tools → Edit PVENGINE.INI を選択すると、pvengine.ini がメモ帳が開かれる。以下のような感じになるように追記。
[GUIExtensions]
UseExtensions=1
ExtDll15=C:\Prog\Moray For Windows\MorayCtrl.DLL
ExtDLL16=C:\Prog\Bishop3D\Bishop3DPovComm.dll

更に、Moray の Render Options (Alt+F9) で、POV-Ray 3.6 版の pvengine.exe、もしくは pvengine-sse2.exe を指定。

この状態なら、Moray から POV-Ray を呼び出してレンダリングすることができた。以下が証拠画像…にはならないか…。まあ、自分の手元の環境では動いてくれたということで。

moray_and_povray_ss01.jpg

問題に遭遇。 :

Moray から POV-Ray を呼び出せることはできたものの、いくつかの問題に遭遇した。

問題その1。POV-Ray が起動してない状態で、Moray から POV-Ray を呼び出す分には動作してくれるのだけど、POV-Ray が起動している状態で Moray から POV-Ray を呼び出そうとすると POV-Ray が固まって無反応になってしまう。ウインドウの閉じるボタンすら反応しない。

タスクマネージャ等で POV-Ray を強制終了すると、その後は Moray が、無反応→少し反応→無反応、を繰り返す。おそらく、POV-Ray との通信を試みる → 失敗する → 通信を試みる、を繰り返してる気がする…。

なので、Moray から POV-Ray を呼び出してレンダリングができたら、POV-Ray はエディタ画面も含めて一旦終了して、次回のレンダリングに備える必要がある。これが地味に面倒臭い。

問題その2。Moray から POV-Ray を呼び出した際、POV-Ray は最小化された状態で起動するので、タスクバー上の POV-Ray のアイコンをクリックしてアクティブ化しないとレンダリングウインドウを拝めない。これもまた地味に面倒臭い。

問題その3。POV-Ray 3.6 のレンダリング速度は…めっちゃ遅かった…。まるで亀のような歩みで、じわじわとレンダリングがされていく。POV-Ray 3.7 でマルチコアに対応したらしいけど、そのおかげで、POV-Ray 3.7 なら一瞬でレンダリングが終わっていたのだろう…。

とは言え、一応、Windows10上でも、Moray V3.5 から POV-Ray を呼び出してレンダリングすることはできる、と分かった。そして、利用できる POV-Ray は 3.6.2 に限られることも分かった。
  • POV-Ray 3.5 は Windows10上では動かない。レンダリングしようとすると固まる。
  • POV-Ray 3.7以降を Moray から呼び出そうとすると .ini の解析ができなくて POV-Ray でレンダリングできない。

余談。Morayはオープンソース化が難しい模様。 :

余談だけど。関連情報を探していたら気になる話を見かけた。

_POV-Ray: Newsgroups: povray.off-topic: whither POV-Ray ??

Moray のソースコードは作者から与えられたのではなく、POV-Ray関係の開発者さんがお金を出して個人で購入したもの、だったそうで。更に、そのまま公開できる種類のソースコードでもないらしい。ツールバー一つとっても権利関係の問題で書き直さないとダメとか、クリーンルームで開発しないとオープンソースにできないかもしれない、とか言ってるように読めた。

そういう状況のソフトだったのね…。なかなか厳しい…。放置状態に見えてしまったけど、そこには理由があったのだな…。

余談。POV-Ray 3.6.2 のiniの場所。 :

POV-Ray 3.6.x は、iniフォルダやincludeフォルダが、POV-Ray本体のインストールフォルダ内にあるものと思い込んでいたけど。インストールしてみたら、たしかにiniフォルダやincludeフォルダはあったものの、中身はほとんど空。readme.txt が1つ置いてあるだけで。

実際のファイル群は、ドキュメントフォルダ\POV-Ray\v3.6\ 以下に存在していた。POV-Ray 3.7 と似たフォルダ構成だった。

ちなみに、readme.txt には、以下の文が書いてあった。
The INI files can now be found in your Documents directory under 'POV-Ray'.
やはり、ドキュメントフォルダ内のファイル群が実体らしい。

ラッパーを作ろうとしたけど失敗。 :

Moray の生成する .ini が、POV-Ray 3.7 の仕様と合っていないから動かないのであれば、Moray が .ini を生成した直後に何かしらで .ini を書き換えてしまって、その後 POV-Ray 3.7 を呼べば動いたりするのだろうかと疑問が湧いた。

例えば、pvengine.exe のラッパーのようなものを作成して、Moray はそのラッパーを呼び、ラッパーは Moray が生成した .ini を書き換えてから pvengine.exe を呼ぶ、みたいな。

試しに、ラッパー相当になるはずのbatファイルを書いてみた。引数、%1 - %9 を echo で表示してから pvengine.exe に引数を渡して呼ぶだけのbatファイル。そのbatファイルを、Moray の設定で、pvengine.exe の代わりに指定する。

残念ながら、その状態だと、POV-Ray (pvengine.exe) が固まってしまった。更に、Moray が pvengine.exe を起動する際、引数は何も渡されていないことも分かった。

Moray は POV-Ray に、どうやって .ini や .pov を渡しているんだろう…。やはり、DLLを介して通信して渡してるのかな…。しかし、だとしたら、POV-Ray が起動してる状態でレンダリングを指示すると POV-Ray が固まるあたりが分からん…。

何にせよ、コマンドラインで引数を渡してレンダリングせよと伝えてるわけではないっぽい。そういう簡単な(?)呼び出し方だったら、動作しない場合も改善策を出せそうなんだけど。

2021/08/27(金) [n年前の日記]

#1 [zatta] デジタル火打石ってどうだろう

BS12で放送されてる「有頂天家族2」を見ていたら旅立つ人を見送るシーンで火打石が出てきて。そういえば現代において火打石って見かけないよなあと。

そこでふとバカ妄想。デジタル火打石ってどうだろう。玄関で「行ってきます」と言ってる家族の背中に向けてカチカチ。でも実際に火花を飛ばしたら危ないからLEDでフラッシュします。

作ったら、少しは売れないかな…。売れるわけないか…。

ていうか「デジタル」って何…?

切火と言うらしい。 :

_切火 - Wikipedia
_火打石 - Wikipedia

時代劇で見かけるアレは、切火を切る、と呼ぶらしい。

#2 [povray] POV-Rayを使うならテキスト入力に限る。たぶん

POV-Rayに対する今現在の個人的な印象をメモ。

試しに POV-Ray を触り始めたものの、テキストを打って .pov を作るあたりにゲンナリして、モデリングツールの類は無いのかなと探して試してみたけれど。色々試してみた後の印象として、POV-Ray はテキストを打って使うのが一番いいのかもしれないな、と…。

と言うのも、POV-Ray関連ツールはどれもこれも古いので、Windows10 + POV-Ray 3.7 で動かそうとすると、それだけで結構苦労する…。動かせる状態に持っていくまでの試行錯誤の時間がもったいない…。そんな暇があるなら、さっさとテキストを打って、「へえ。POV-Rayにはこんな機能もあるのか」とかやってたほうが良いのかも。

今回、各種ツールの試用に費やした時間を、テキスト入力でPOV-Rayを試用する時間にまるっと割り当てていたら、今頃はちょっとしたCG作品を2つ3つ作れていたかもしれない。時間の使い方を間違えた感が拭えない。

もし、テキスト入力が辛いと言うなら、例えば vscode (Microsoft Visua Studio Code) + POV-Ray用アドオンの導入でも検討すればいい。vscode のインテリセンスでガシガシ補完できるから次々に入力していけるし、ショートカットキー一つでレンダリングができるから試行錯誤もやりやすいので、軽快(?)に作業できる。

もっとも、POV-Rayエディタも、Ctrl + Space で補完が効くし、Insert からテンプレートを選んで挿入できるし、Alt + G で即座にレンダリングできるから似たようなものなんだけど…。自動で候補ウインドウが表示されるインテリセンスは、見た目の印象が違うというか…。

テキスト入力だけなら実にシンプル。 :

学校で POV-Ray を教えているというのも、なんとなく分かる気もした。テキスト入力しか使わないと決めてしまえば、圧倒的に導入が簡単だし、教える内容も最低限で済むよなと。

blender のようにGUIで操作する3DCGソフトは、そのソフトの操作方法を教える/覚えるための時間が結構かかってしまうのだよな…。その点、「キーボードを叩いて、カメラやライトや球の位置程度を打ち込めば、即座にレンダリングできてしまう」という POV-Ray の簡便さは、教育目的なら実にありがたいはずで…。

でもツールがあったらそれはそれで。 :

とは言え、今時のOS、今現在の POV-Ray のバージョンに対応したその手のツールがちゃんと存在してたら、POV-Rayの印象や扱いもちょっと違ってきたりもするのかな、とも思えるわけで…。学校で教えてるなら、そこにフォーカスしたソフトを作って商売(?)を、というルートだってひょっとしたらあるのかもしれないし…。

例えば、基本はエディタで打ち込んでいくけれど、ツールバーのアイコンをクリックすればモードが変わって、GUIで多少はアレコレできるツール、とか…。

考えてみたら、HTML + CSS を書く時のアレコレが参考になりそうな気もする。css を書く時に、色選択ダイアログが表示できて、そこで選んだ色が css に挿入されるだけでも結構便利だったりするし。あるいは、そのエディタがライブプレビュー機能を持ってたら、これも結構便利だし。

全てをGUIでやろうとしないで、入力補助としてGUIを使う、てのも全然アリだよなと。

と言っても、どこらへんをGUIにすれば便利になりそうか、そこがちょっと分からないけど。

でもまあ、色々考えていくと、結局は「blender使えばいいじゃん」と思えてくるあたりがなんとも…。イケてるCG作品を作りたいだけならPOV-Rayにこだわる必要は全く無いわけで…。POV-Rayの立ち位置って今となってはなかなか難しいよな…。てな感じの話も公式のニュースグループで見かけた記憶が…。

#3 [povray] POV-Rayの形状について勉強中

せっかく POV-Ray 3.7 を触っているので、プリミティブの種類について、エディタ上で写経しながら勉強中。以下のページを参考にして確認しているところ。

_POV-Ray:11a

回転体。 :

回転体(sor, lathe)がイイ感じかもしれないなと…。

_POV-Ray:11b

ただ、スプライン曲線の座標値データを用意するのがシンドイ。仮で数値を打ち込んでレンダリングしてみて、見た目を確認してからまた数値を調整。この作業ループがなかなかツライ。こういうところはさすがに GUI でやりたいよな…。

height_field用の画像を作成したい。 :

height_field の動作確認をする段階で悩んだ。実験用画像を作成したいのだけど、渡せる画像フォーマットが、えてして 16bit の値を持つようで。

_POV-Ray:11c

16bit グレースケールの png を作るのがいいかなと思ったけど、そんなpng画像を作れる画像編集ツールってあるのかな…。

ググってみたら、GIMP 2.10.x で作れなくもないらしい…? 画像を新規作成する際に、色空間: グレースケール、精度: 16-bit integer を選べば、おそらく 16bitグレースケールになるんじゃないかと…。たぶん。そして、フィルター → 下塗り → 雲 → Plasma2 で、それっぽい画像になるはず…。

2021/08/28() [n年前の日記]

#1 [povray] POV-Rayで背景を透明にする方法が分からない

せっかくだから POV-Ray 3.7 を使って、STG(シューティングゲーム)の雑魚敵として使えそうな画像素材を作ってみようと思い立ったのだけど。

形状自体はそれっぽいモノができたけれど…。

ufo_sample_bgoff.png

見た目をそれらしくするために、ボディに背景の映り込みが欲しい。

試しに背景 (GALAXY.INC)を表示してみたけれど、ここで悩んでしまった。

ufo_sample_bgon.png

背景が映り込むと、それだけでも結構イイ感じになる。ただ、画像素材として利用するなら、背景部分が透明になっているほうが ―― アルファチャンネルを持っているレンダリング画像のほうがありがたい。

でも、POV-Ray で、オブジェクトの表面に対して背景の映り込みは許可しつつ、しかし背景は非表示にした状態でレンダリング、などという器用な設定はできるのだろうか?

ググってみても、それらしい情報に遭遇しない。どうやら機能として持ってない気がする…。仮にそうだとしても、それはまあ、当たり前なのかもしれない。

例えば動画相当を作成する場合などは、アレコレ部分的にレンダリングしておいて、最終的に別のツールで合成して仕上げたりできれば、レンダリングの計算時間を短縮することができたりして便利だったりするのだけど…。POV-Ray は、あくまで一枚の静止画としてのCG画像を得るために作られたレンダラーであろうから、「背景まで含めてレンダリングするのは当たり前じゃい」「POV-Rayというレンダラーで全てを完結させるのじゃよ」みたいな考えがあってもおかしくないよなと…。

対策を考える。 :

背景を透明にしてアルファチャンネル付き画像を得るためには、コマンドラインオプションで +UA をつければよい、という情報を見かけた。POV-Ray 3.7 エディタの場合、ツールバーの下のあたりに、レンダリング時のコマンドラインオプションを指定する入力欄があるので、そこに「+UA」と打ち込んでから「Run」すればいい。

commandlineoption_ss01.png

ufo_sample_alpha.png

たしかに背景が指定されてない場合は、背景が透明/アルファチャンネル付き画像としてレンダリングできた。

ただ、残念ながら、背景を指定してしまうと、背景は透明にならず、アルファチャンネル付き画像も得られない…。

でもまあ、背景を指定しなければアルファチャンネルが得られるなら…。その画像のアルファチャンネルを、別の画像編集ソフトを利用して、背景を表示した画像に適用してやることはできるよなと…。実際、GIMP 2.10.22 で試したら、フツーにできた。

ufo_sample_bgon_edit.png

しかし、静止画だけならそうやって凌ぐこともできるだろうけど、動画用に何十枚もレンダリングするとなると、これはちょっと面倒臭い。

背景付きの画像を何十枚もレンダリングして、更に加えて、アルファチャンネル付き画像を何十枚もレンダリング…。単純計算で、トータルの計算時間は2倍になるわな…。

そして、アルファチャンネルだけ抜き出して別画像に適用、なんてことを、何十枚もの画像に対して、画像編集ソフトを使って、手作業で一々やってられない。どう考えても自動化が必要。さて、どうしよう。

「お〜い!磯野〜! blender使おうぜ!」

誰だよ。…まあ、たしかにblenderなら、背景にHDRIを指定してGI? IBL? まで使った上で背景はレンダリングしない設定にしちゃえばすんなり目的が果たせるので、POV-Rayなんか窓から投げ捨てられそうだけど。blenderは動画作成まで念頭に置いて作られてる3DCG統合ソフトだから、さすがにそのあたり抜かりないというか…。

2021/08/29() [n年前の日記]

#1 [povray] POV-RayとImageMagickでアニメ画像を作成

_昨日の作業 で、POV-Ray でレンダリングした画像の背景だけを透明にする方法が分からなくて悩んでいたわけだけど。

背景有り画像(アルファチャンネル無し)と、背景無し画像(アルファチャンネル付き)の2枚をレンダリングして、後者のアルファチャンネルを前者に合成できれば、オブジェクトの表面には背景が映り込みつつ、しかし背景部分は透明になってる画像を作れそうだなと。

ただ、動画としてレンダリングする場合、何十枚もアルファチャンネルの移植(?)作業をしなきゃいけない。とてもじゃないけど手作業ではやってられない。どうにかして自動化したい。

というわけで、POV-Ray 3.7 と ImageMagick を使って、アルファチャンネル付きの連番画像・アニメ画像を作れるか ―― 連番画像に対してアルファチャンネルの取り出しと合成を自動化できるのか試してみた。

環境は、Windows10 x64 21H1。POV-Ray 3.7。

利用した ImageMagick は 7.1.0-5 Q16 x64。
> magick --version
Version: ImageMagick 7.1.0-5 Q16 x64 2021-08-22 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Visual C++: 192930133
Features: Cipher DPC HDRI Modules OpenCL OpenMP(2.0)
Delegates (built-in): bzlib cairo flif freetype gslib heic jng jp2 jpeg jxl lcms lqr lzma openexr pangocairo png ps raqm     raw rsvg tiff webp xml zip zlib

結果を先に見せておくと…こんな感じの画像が作れました。

ufo_anime.gif

POV-Rayでアニメーションを出力。 :

まずは POV-Ray でアニメーション画像/連番画像を出力しないと話にならない。

POV-Ray でアニメーションの出力を指定すると、.pov の中で、clock という変数が 0.0 - 1.0 まで変化するので、clock を使って計算した値を指定しておけばアニメーションを作ることができる。

例えば、以下の指定なら Z軸を回転軸として360度回転するアニメを作れる。
rotate <0, 0, 360 * clock>

POV-Rayでアニメーションを出力するには、POV-Rayに渡すコマンドラインオプションで +KFFxx を指定する。
  • +KFFxx : xxフレーム分をレンダリングするように指定。

例えば +KFF61 なら、clock を 0.0 - 1.0 まで変化させつつ、61フレーム分出力する。出力画像名は、hoge.pov を開いているなら hoge01.png - hoge61.png になる。

アルファチャンネルを含めた画像が欲しいなら、コマンドラインオプションで +UA を指定。

コマンドラインオプションは、POV-Ray 3.7 エディタの場合、ツールバーのすぐ下に、指定できる入力欄がある。

commandlineoption_ss02.png

余談。ループアニメを出力した場合、clock = 0.0 と clock = 1.0 のレンダリング結果は同じ見た目になるはずで…。例えば、10フレームのループアニメを出力したいなら、+KFF11 で 11フレーム分出力せよと指定して、出力された11枚の画像のうち、最後の1枚だけ削除してしまえばいい。

と書いた後で、+KC という、サイクリックアニメーションとやらを有効にするオプションがあることを知った。このオプションを指定すると、例えば総フレーム数が10フレームなら、clock の変化する範囲を 0.0 - 1.0 ではなくて 0.0 - 0.9 にしてくれるのだとか。ループアニメを作る時は +KC をつけて、かつ、総フレーム数を素直に指定したほうがヨサゲ。

以下、参考ページ。

_POV-Rayでのアニメーションの作り方 - Qiita
_POV-Ray
_POV-Ray: Documentation: 2.1.2.1 Animation Options
_POV-Ray:15

アルファチャンネルを取り出して別画像に合成。 :

アルファチャンネルの移植(?)作業は、以下のような流れになる。
  1. アルファチャンネル付き画像(RGBA)から、アルファチャンネルだけを取り出して、グレースケール画像として保存。
  2. アルファチャンネル無し画像(RGB)に、グレースケールのアルファチャンネル画像を合成して、RGBA画像として保存。

どちらも、ImageMagick 7.x.x で実現できる。

以下は、アルファチャンネルを含むpng画像からアルファチャンネルだけを取り出して、グレースケールpng画像として保存する指定。書き方は色々あるらしい。
magick rgba.png -channel A -separate alpha.png
magick rgba.png -alpha extract alpha.png
magick convert rgba.png -set colorspace RGB -alpha extract alpha.png

以下は、RGB画像に、グレースケール画像をアルファチャンネルとして合成して、RGBA画像を作る指定。
magick rgb.png alpha.png -compose CopyOpacity -composite result.png
magick convert rgb.png alpha.png -compose copy-opacity -composite PNG32:result.png

この2つの処理を、連番画像に対して1枚ずつ行っていけばいいはず。batファイルを書いてみた。

  • rgba/0000.png - xxxx.png にアルファチャンネル付き(= 背景無し) の連番画像を入れておく。
  • rgb/0000.png - xxxx.png に、アルファチャンネル無し(= 背景有り) の連番画像を入れておく。
  • batファイルを実行すると、ディレクトリ a/ にアルファチャンネル画像(グレースケール画像)が保存される。
  • ディレクトリ output/ に、背景有り画像+アルファチャンネルの出力画像が保存される。
  • もし、a/ や output/ が存在しなければ作成する。

_conv.bat
@echo off
set ALPHADIR=a
set OUTDIR=output

if exist "%ALPHADIR%\." goto CHECKOUTDIR
mkdir %ALPHADIR%
echo make directory [%ALPHADIR%]

:CHECKOUTDIR
if exist "%OUTDIR%\." goto EXECMAGICK
mkdir %OUTDIR%
echo make directory [%OUTDIR%]

:EXECMAGICK
for %%i in (rgba/*.png) do (
magick rgba/%%i -alpha extract a/%%i
magick convert rgb/%%i a/%%i -compose copy-opacity -composite PNG32:output/%%i
)

余談。連番画像からアルファチャンネルを取り出すだけなら、batファイルを書かなくても、ImageMagick への指定だけで処理ができるらしい。

以下は、連番画像 rgba/0000.png - 0059.png に対して処理をして、結果を a/xxxx.png として保存する指定例。
magick convert rgba/%04d.png[0-59] -alpha extract a/%04d.png
rgba/%04d.png[0-59] と指定することで、0000.png - 0059.png に対して処理ができる。

以下、参考ページ。

_Aggressive Engineer: ImageMagickのconvertコマンド > separateオプション, combineオプション
_ImageMagick でアルファ合成する | てらじろぐ
_Extract an Alpha channel - ImageMagick
_image processing - ImageMagick - alpha channel extract, different results (darker) on 6.7 vs 6.9 - Stack Overflow
_ImageMagick Cookbook
_ImageMagick で0オリジン以外の連番画像を扱う - かかしのアウトプット練習

連番画像を一括してリサイズ。 :

ImageMagick を使って、連番画像を一括してリサイズする。今回は 96x96ドットに縮小してみた。
magick mogrify -resize 96x *.png
magick mogrify -path ./resize -resize 96x *.png

  • magick mogrify : ImageMagick の mogrify コマンド相当の機能を使う。
  • 96x : 横幅を96ドットにする指定。縦幅を96ドットにする場合は x96 を指定する。
  • -path DIR : 結果画像を DIR に保存する。

_ImageMagick で画像サイズを一括変換する mogrify コマンドの使い方 | CodeNote

タイル状に並べる。 :

スプライトシートを作りたい。ImageMagick を使って、連番画像をタイル状に並べる。
magick montage -tile 8x8 -geometry 96x96+0+0 -background none resize_96x96\*.png spritesheet.png

  • magick montage : ImageMagick の montage コマンド相当の機能を使う。
  • -tile 8x8 : 横に8個、縦に8個並べるように指定。
  • -geometry 96x96+0+0 : 元画像のどこを取り出して並べるかを指定するらしい。今回の元画像は 96x96ドットの大きさ。この指定が無いと余計な隙間が入った状態で並べられてしまう。
  • -background none : 背景を透明にする。

_画像をタイル状に敷き詰めるコマンド - それマグで!

アニメgifを作成。 :

ImageMagick を使って、連番画像からアニメgifを作る。
magick convert -delay 2 -loop 0 +map -layers OptimizeFrame resize_96x96/*.png ufo_anime.gif

  • -delay 2 : wait数 (単位は 1/100sec)
  • -loop 0 : ループ回数。0なら無限にループ
  • +map : パレットをGlobalカラーテーブルにするらしい。
  • -layers OptimizeFrame : フレーム最適化。他に OptimizeTransparency や Optimize もあるが、元画像が透明部分を持っていると上手く最適化できないらしい。

_ImageMagick で GIF 処理 - Qiita
_連番画像から簡単にgifアニメを作る - Qiita
_アニメーションGIFの作り方 ImageMagick編

結果画像。 :

そんなこんなで出来上がったアニメ素材画像が以下になります。Piblic Domain / CC0 ってことで。

ufo_anime.gif

spritesheet.png

_spritesheet.png

最初は360度回転させていたけれど、よく見たら90度の回転分だけでループアニメにできることに気づいたので、枚数を減らしてみた。

元画像群(512x512ドット、20枚 x 4種類)も、zipにまとめて置いておきます。

_ufo_sample_large.zip

ちなみに元画像はこんな感じ。

0000.png

POV-Ray用ファイル(.pov) も置いときます。

_ufo_sample.pov

上記の .pov のレンダリングには、GALAXY.INC が必要。詳しくは以下を参照のこと。

_POV-Ray Include Files Page (WebArchive)
_GALAXY.INCを使って宇宙(星空)を作る
_POV-Rayでイロイロやってみよう!
_宇宙画像(壁紙)を簡単に作る方法 ≪POV-Ray≫

#2 [povray][zatta] POV-Rayでプログラミング的思考教育ってできないのかな

POV-Ray は、球だの箱だの、その手のプリミティブを組み合わせて複雑な形状を作っていくらしいのだけど。

そのあたりの作業をしてみて、なんとなく、これってプログラミング的思考を教える時に使えたりしないのかなと思えてきた。複雑なものを分解してシンプルなモノの組み合わせで捉えてみるソレだよなと…。

_テキシコー | NHK for School

もっとも、別に POV-Ray で無ければそのあたりを教えられないというわけでもないな…。

そもそも、絵を描くという行為を通じても、そういう考え方を教えることができるのかもしれない。例えば、アニメの背景美術で有名な小林七郎さんの書いた本にも、「木は一見すると複雑な形に思えるが、シンプルな図形の組み合わせと捉えることができる」「各部分がシンプルな図形に見えてくれば影の付け方もすんなり分かる」とかそういうことが書いてあった気もするし。観察対象を分解するソレって、絵描きさんならおそらく当たり前のようにやっていることじゃないのだろうか。

ということは、図画工作の授業を通じてプログラミング的思考の一部を教えてしまう、というやり方もあったりするのかな…。分からんけど。

2021/08/30(月) [n年前の日記]

#1 [povray] POV-Rayで任意のオブジェクトをレンダリング対象から外す

POV-Ray 3.7 でレンダリングする際、背景だけをレンダリング対象から外して、背景部分を透明にできないものかとググって調べていたのだけど。

オブジェクトに no_image という命令を付け加えるだけで、そのオブジェクトはレンダリングしないように指定することができる、と知った。

_POV-Ray: Documentation: 2.4.9.7 No_Image, No_Reflection
_11.4-5 物体のイメージスイッチ(no_image) - POV-Ray:11

例えば、以下のようなレンダリング結果が得られる .pov があったとして…。

_40_no_image.pov

40_no_image_not_no_image.png

床に相当する plane の最後に、no_image を指定してみる。
plane {
  <0, 1, 0>, 0 
  texture {
    pigment {
      checker color rgb 0.5, color rgb 0.2
    }
    // normal { bumps 0.75 scale 0.025}
    finish { phong 0.1 reflection 0.8 }
  }
  translate <0, -1, 0>
  no_image
}

すると、こうなる。

40_no_image_no_image.png

床相当の plane はレンダリングされず、その部分は透明になった。しかし、球の下半分には、床相当の plane がちゃんと映り込んでいる。

ということで、「このオブジェクトだけレンダリング対象から外したい」と思った時は、no_image が使えますよ、ということで。

しかし、「これで背景をレンダリング対象から外せるのでは?」と期待したものの、そう上手くはいかなくて。

.pov の中に自分で記述した object { - } 等には no_image を追加できるけど、例えば、星空を生成してくれる GALAXY.INC のようなソレに対して no_image を指定する方法が分からなくて。

また、背景球を指定できる sky_sphere に対して no_image を使おうとしたらエラーになった。どうやら、sky_sphere は特殊な扱いなので、no_image はサポートしてないっぽい。

大きな球に画像を貼り付けて背景代わりにする。 :

背景をレンダリング対象から外せないのかなとググっていたら、「シーンを包む巨大な球に背景画像を貼り付けて背景扱いにすることができるよ」という話を見かけた。

_POV-Ray: Newsgroups: povray.general: HDR Sky_sphere

言われてみれば、大昔に Shade を使って3DCGをやってた頃にも、雑誌でそういう作例を見かけた記憶があるな…。車をぐるりと取り囲む球面を作って、そこに背景っぽいテクスチャを貼ってたっけ…。POV-Ray でも、あのやり方は使えるのだな…。

となると、背景画像として使える画像をゲットしないといけない。今回は、星空を生成できる GALAXY.INC の結果画像のみをゲットする .pov を書いて、その出力画像を背景画像として使ってみよう。

_bg.pov
//#declare galaxy_seed = 541;
#declare galaxy_seed = 32;

#include "GALAXY.INC"

camera {
  // panoramic
  spherical
  location <0, 0, -5>
  look_at <0, 0, 0>
  // angle 360
  right x*image_width/image_height
}

camera に、spherical を指定しているあたりがポイント。この指定で、球に貼り付ける分には都合が良いテクスチャ画像が得られる。らしい。

こんな見た目の画像が得られた。

bg_4096x2048_thumb.jpg

実際の画像は以下。4096x2048ドットのpngなので、10MB近くあるので注意。プログラムと乱数で生成された画像だから、Public Domain 扱いでいいんじゃないかな…。

_bg_4096x2048.png (4096x2048, 24bit, 9.67MB)

camera に指定できる種類については、以下のページが参考になった。ありがたや。

_POV-Ray:5
_Types of Cameras in POV-Ray

最初は panoramic を指定してパノラマ画像を得ていたのだけど、その後、「球に貼り付けることが前提の画像が欲しいなら、そのものズバリ spherical のほうが良い」と知って、そちらに変更した次第。

余談。camera に、panoramic と angle 360 を指定した際は、左端と右端が全然繋がってない出力画像が得られた。angle に指定した値がおかしいのだろうか…? それとも、panoramic では左右が繋がった画像が原理的に得られないのだろうか…?

さておき。得られた画像を、大きな球に貼り付けて確認してみる。以下では、scale を使ってめっちゃ大きい球にしている。

_bg_sphere.pov
camera {
  location <0, 0, -2.6>
  look_at <0, 0, 0>
  angle 45
  right x*image_width/image_height
}

light_source { <100, 100, -100> color rgb 2.0 }

// background sphere
object {
  sphere {
    <0, 0, 0> 1
    texture {
      pigment {
        image_map {
          png "bg_4096x2048.png"
          map_type 1
        }
      }
      finish {
        phong 0
        reflection 0.0
      }
    }
    rotate <0, 0, 0>
    scale 1000
  }
}

bg_sphere.png

GALAXY.INC で生成・表示した背景と比べると、無駄に拡大表示されちゃった感じで見た目が荒くなってるけど、あくまで、オブジェクトに反射させるための背景として使うだけだから、これでもイケそうな気がするなと…。

UFOモドキの背景に使ってみる。 :

_昨日_一昨日 の作業に使った、UFOモドキの .pov の背景に使ってみる。

_ufo_sample2.pov

背景相当の巨大球をそのまま表示してみた場合は以下。

ufo_sample2_normal.png

結構それっぽい感じに見えている気がする。まあ、環境マッピングみたいなもんだから、それらしく見えるのは当たり前か…。

巨大球に no_image を追加して、レンダリング対象から外してみる。

ufo_sample2_no_image.png

背景部分が透明になった感じの結果画像が得られた。それでいて、オブジェクトにはちゃんと映り込みが反映されている。

一応、アニメGIFやスプライトシートも作ってみた。1フレーム80x80ドットの大きさ。20フレーム。

ufo_anime.gif

spritesheet.png

_spritesheet.png

ということで、POV-Ray でわざわざ時間をかけて2回レンダリングして、ImageMagick でアルファチャンネルの移植処理なんてしなくても、.pov の書き方を少し工夫するだけで背景部分が透明になった感じの画像を得ることができると分かった。

「お〜い!磯野〜! blender使おうぜ!」

だから誰だよ。まあ、たしかに、blender ならこんなことで悩まずに済むし、この手の頓智(?)も要らないだろうなあ…。

#2 [cg_tools] ImageMagick montage の覚書

ImageMagick 7.1.0-5 Q16 x64 を使ってスプライトシートを作ろうとしたけれど、montage に渡す -geometry の値がよく分からなくて少し調べた。

78x78ドットの画像群に対して、周囲に1ドットだけ隙間をつけて、80x80ドットの画像群が並んでる状態の画像を作りたい。この場合、以下のような指定になるのかな。たぶん。
magick montage -geometry +1+1 -background none resize_78x78/*.png spreetsheet.png

ということで、作業時の注意点としては…。 みたいな感じかなと…。

このあたり、以下のページで説明されてるけど、英語だからよく分からん…。

_Montage -- IM v6 Examples

以下も参考になりそう。

_画像リサイズ処理のうんちく - Qiita
_画像リサイズのうんちく (補間フィルタ) - Qiita
_ImageMagick リサイズ補間アルゴリズム - Qiita
_ImageMagick の geometry 仕様 - Qiita
_ImageMagickでリサイズする方法 - 箱の中の自由粒子

事前にリサイズしなくても良さそう。 :

もしかして、-geometry 78x78+1+1 と指定しておけば、事前にリサイズしなくても済むのではと気が付いた。例えば元画像が 512x512ドットのサイズでも、自動で78x78ドットに縮小して、かつ、上下左右に1ドット追加して、結果、80x80ドットの画像群を並べてくれるのでは…?

試してみたら、たしかにそんな感じになった。

ただ、-geometry でリサイズするのはやめてね、という話もあるっぽい。-resize を指定しておけば、状況に応じて mitchell か lanczoc のどちらかのアルゴリズムを使ってくれる、とのことで…。であれば、-resize を指定したほうがいいのかな。

アンシャープマスクを使ったほうが良さそう。 :

-unsharp をつけることでアンシャープマスクが使えるらしい。試してみたら縮小後の画像のクッキリ具合が上がった。

となると、以下のような指定がベストなのかな…。大きいドットサイズ(512x512)の画像群からいきなりスプライトシート(1つ80x80)を作る例。
magick montage -resize 78x78 -unsharp 10x5+0.7+0 -geometry +1+1 -background none rgba/*.png PNG32:spritesheet.png
  • rgba/*.png は 512x512ドットの画像群。
  • 出力画像ファイル名の前に PNG32: をつけて、RGBA各8bitの画像を出力させる。ImageMagick Q16 を使ったせいか、何もつけないとRGBA各16bitの画像が出力されてしまった。

フィルタも選べる。 :

-resize 指定時に -filter を指定することもできるらしい。試しに、-filter Lanczos をつけてみた。
magick montage -filter Lanczos -resize 78x78 -unsharp 10x5+0.7+0 -geometry +1+1 -background none rgba/*.png PNG32:spritesheet.png

-define filter:verbose=1 をつけると利用してる filter を表示してくれるそうで。
magick montage -define filter:verbose=1 -filter Lanczos -resize 78x78 -unsharp 10x5+0.7+0 -geometry +1+1 -background none rgba/*.png PNG32:spritesheet.png

確認してみたところ、-filter Lanczos をつけたら filter = SincFast になった。
# Resampling Filter (for graphing)
#
# filter = SincFast
# window = SincFast
# support = 3
# window-support = 3
# scale-blur = 1
# practical-support = 3

ちなみに、filter指定をしないと filter = Cubic になった。
# Resampling Filter (for graphing)
#
# filter = Cubic
# window = Box
# support = 2
# window-support = 2
# scale-blur = 1
# practical-support = 2
# B,C = 0.333333,0.333333

変換結果。 :

以下、変換結果。

アンシャープマスクをかけない版。

spritesheet_not_use_unsharp.png

アンシャープマスクをかけた版。-filter指定無し。(filter = Cubic)

spritesheet_cubic.png

アンシャープマスクをかけた版。-filte Lanczos (filter = SincFast) を指定。

spritesheet_sincfast(lanczos).png

アンシャープマスクを使うとクッキリ具合が全然違う…。また、Lanczos はギラギラ具合が僅かに増えてる気がする。

2021/08/31(火) [n年前の日記]

#1 [povray][ubuntu] kpovmodelerを試用

kpovmodeler という、POV-Ray専用モデリングツールがあるらしい。

_KpovModeler - KDE Store
_kpovmodeler - Home (WebArchive)

KDEのアプリケーション群の一つだそうで、*NIX上でしか動かない。更に、今時の KDE は 4.x とか 5.x になっているから kpovmodeler は含まれておらず、KDE 3.5 からフォークした TDE (Trinity) なら、まだかろうじて kpovmodeler が含まれている状態っぽい。

_Trinity (デスクトップ環境) - Wikipedia
_KDE - Wikipedia

気になったので試用してみた。

環境は、Windows10 x64 21H1 + VMware Workstation 16 Player 16.1.0 build-17198959 + Ubuntu Linux 20.04 LTS x64。

TDEのインストール。 :

TDE (Trinity) 上でしか動かないらしいので、まずは TDE をインストールしないといけない。以下のページを参考にしてインストール作業をした。

_Ubuntu 20.04.1 をインストールして、TDE (Trinity) デスクトップを追加〈H98〉 - Linux あれこれ
_Ubuntu Trinity Repository Installation Instructions - Trinity Desktop Project Wiki
_Trinity Desktop Environment

ちなみに、リポジトリ設定を変更して TDE をインストールするわけだけど、変更後に sudo apt update をすると以下のエラーメッセージが出続ける。
N: リポジトリ 'http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.0.x focal InRelease' がアーキテクチャ 'i386' をサポートしないため設定ファイル 'main/binary-i386/Packages' の取得をスキップ
N: リポジトリ 'http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-builddeps-r14.0.x focal InRelease' がアーキテクチャ 'i386' をサポートしないため設定ファイル 'main/binary-i386/Packages' の取得をスキップ
N: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.0.x focal InRelease' doesn't support architecture 'i386'
N: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-builddeps-r14.0.x focal InRelease' doesn't support architecture 'i386'

Ubuntu Linux は i386 をサポートしなくなったのだけど、そのことが関係してるのだろうか…?

ググってみたら、「deb の直後に [arch=amd64] を追加せよ」という解決策に遭遇。

_Ubuntuでリポジトリのダウンロード失敗対処 - Libra Studio エンジニアブログ

試してみたら、件のエラーメッセージが出なくなった。助かった。

sudo vi /etc/apt/sources.list
deb [arch=amd64] http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.0.x focal main
deb [arch=amd64] http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-builddeps-r14.0.x focal main
deb-src [arch=amd64] http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-r14.0.x focal main
deb-src [arch=amd64] http://mirror.ppa.trinitydesktop.org/trinity/deb/trinity-builddeps-r14.0.x focal main

kpovmodelerのインストール。 :

パッケージ名は、kpovmodeler-trinity らしい。
sudo apt install kpovmodeler-trinity

当然ながら POV-Ray も利用するのでインストールしておく。POV-Ray 3.7 がインストールされる。
sudo apt install povray povray-doc povray-examples

kpovmodelerを試用してみる。 :

kpovmodeler は KDE のアプリケーションなので、KDE (TDE) が立ち上がってる状態じゃないと利用できない。Ubuntu Linux 20.04 LTS x64 のログイン時にTDEを選んでログインする。

スタートメニュー → グラフィックス → kpovmodeler、を選択すれば起動する。

kpovmodeler_ss01.png

見た目はかなりイイ感じ。
  • ツールバー上のアイコンは、GIMP や blender のようなモノクロ1色の見分けにくいソレではなくて、それぞれにちゃんと色がついているので視認性が高い。
  • オブジェクトのプロパティはツリー表示されているので、どこに、何が、どんな順番で含まれているのかがとても分かりやすい。

ところが、POV-Ray でレンダリングしようとしたらエラー発生。

povray: cannot open the user configuration file /home/USERNAME/.povray/3.7/povray.conf: No such file or directory

Problem with option setting
povray +W800 +H600 +Q9 -QR +A +AM0 +A0.300 -J +R2 +UA +I/tmp/tde-mieki256/kpovmodelerSlz0Tc.pov +O- +FT +K0.0 +KFI1 +KFF1 +KI0.0 +KF0.0 +SF1 +EF1 -KC -D
Failed to parse command-line option

まず、~/.povray/3.7/povray.conf が見つからないと言っている…。

ググったら、解決策に遭遇。

_povray - Using POV-Ray installed via the APT - Ask Ubuntu

/etc/povray/ 以下に該当ファイルが存在するらしい。ln でリンクを作れば解決しそう。
ln -s /etc/povray ~/.povray

これで、~/.povray/3.7/povray.conf が無いというエラーは出なくなった。しかし、相変わらず以下のエラーが出る。

Problem with option setting
povray +W800 +H600 +Q9 -QR +A +AM0 +A0.300 -J +R2 +UA +I/tmp/tde-mieki256/kpovmodeler1hN41c.pov +O- +FT +K0.0 +KFI1 +KFF1 +KI0.0 +KF0.0 +SF1 +EF1 -KC -D
Failed to parse command-line option

POV-Ray のニュースグループでも質問されていた。

_POV-Ray: Newsgroups: povray.beta-test: QR command line option

上記のやり取りによると、POV-Ray に QR というコマンドラインオプションは存在しないのに、kpovmodeler が指定しちゃってるらしい。POV-Ray 3.5 の時点でも、そんなオプションは無いのだとか。また、kpovmodeler は POV-Ray 3.1時代のアプリではないか、という話も出ている…。たしかに、画面のあちこちに「3.1」という表記が見える…。POV-Ray 3.1 時代なら QR というオプションにも意味があったのだろうか…?

POV-Ray (povray) に渡しているオプションをどこかの設定項目で指定しているのではないかと探してみたけど、それらしい設定は見当たらなかった。もしかすると kpovmodeler のソースコード内でハードコーディングされちゃってるのかもしれない。

何にせよ、古過ぎるから現状の POV-Ray と仕様が合ってなくて不具合が出るモデリングツール、ではあるらしいなと。まあ、このツールを使いたい時は、必ず KDE (TDE) の利用を強制されるあたりも、なんだかアレだけど…。

ちなみに、ファイル → エクスポート、で .pov を出力することはできた。出力された .pov を使って、端末上で povray hoge.pov と打ってやったらレンダリング結果は得られた。kpovmodeler から直接 POV-Ray を呼び出すのは無理だけど、.pov をエクスポートして云々という流れなら使えるのかもしれない。

KDEを使わない版も一時期作られていたらしい。 :

関連情報をググっていたら、一時期、kpovmodeler からKDE関係の記述を削除して、Qt で置き換えてビルドできるようにしてみた方が居たと知った。

_POV-Ray: Newsgroups: povray.programming: povmodeler
_eticre/povmodeler: povray modeler

_POV-Ray: Newsgroups: povray.programming: povmodeler
_tribad/povmodeler: povray modeler

_POV-Ray: Newsgroups: povray.tools.general: building povmodeler?
_dickbalaska/qtpovmodeler: povray modeler

ビルドできるか試してみる。

mkdir pkg
cd pkg
mkdir povmodeler
cd povmodeler

git clone https://github.com/tribad/povmodeler.git
cd povmodeler
mkdir build
cd build
cmake ../
make

cmake ../ を走らせたらエラーが出た。CMakeCache.txt を削除しろと言ってるな…。
rm ../CMakeCache.txt
cmake ../
make

make をしたら「libxml/parser.h が見つからない」とエラーが出た。

_linux - Compiler can't find libxml/parser.h - Stack Overflow

libxml2-dev をインストールしないといかんらしい。
sudo apt install libxml2-dev libxml2-doc

make が先に進むようになったが、最後でエラー。
[100%] Linking CXX executable povmodeler
/usr/bin/ld: missing --end-group; added as last command line option
/usr/bin/ld: ../modelifc/libmodelifc.so: undefined reference to `xmlFree'
/usr/bin/ld: ../modelifc/libmodelifc.so: undefined reference to `xmlGetProp'
collect2: error: ld returned 1 exit status
make[2]: *** [src/modeller/CMakeFiles/povmodeler.dir/build.make:584: src/modeller/povmodeler] エラー 1
make[1]: *** [CMakeFiles/Makefile2:320: src/modeller/CMakeFiles/povmodeler.dir/all] エラー 2
make: *** [Makefile:152: all] エラー 2

「xmlFree xmlGetProp link error ubuntu」でググってみたけど、よく分からん…。

別の版をビルドしてみた。 :

qtpovmodeler にリネームした版もあるらしいので、ビルドできるか試してみた。

_POV-Ray: Newsgroups: povray.tools.general: building povmodeler?
_dickbalaska/qtpovmodeler: povray modeler

mkdir qtpovmodeler
cd qtpovmodeler
git clone https://github.com/dickbalaska/qtpovmodeler.git
cd qtpovmodeler
qmake
make

こちらはビルドできたっぽい。qtpovmodeler という実行ファイルが作成された。./qtpovmodeler で実行してみたところ、画面が表示された。

プリミティブもカメラもグレーアウトしていて、何も追加できない…。なかなか厳しい。

20201/09/01追記。 :

ビルド済みの qtpovmodeler をDLして試してみたけのだけど。
wget http://www.buckosoft.com/tmp/qtpovmodeler.bz2
bunzip2 qtpovmodeler.bz2
chmod +x qtpovmodeler
./qtpovmodeler

$ ./qtpovmodeler 
./qtpovmodeler: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.13' not found (required by ./qtpovmodeler)

Qt 5.13 を強要されるようで、Ubuntu Linux 20.04 LTS 上では動作しなかった。残念。

そもそも、Ubuntu 20.04 LTS でインストールされる Qt5 って、バージョンはいくつなんだろう…。

_Ubuntu18.04 LTSにQt5をインストールしよう! - IT徒然草
sudo apt install qtbase5-dev qttools5-dev-tools qt5-default

qtbase5-dev のバージョンを確認すればいいのかな。

$ sudo apt show qtbase5-dev
Package: qtbase5-dev
Version: 5.12.8+dfsg-0ubuntu1
...

5.12.8 らしい。

#2 [nitijyou] 電動自転車の後ろのタイヤのチューブその他を交換

ここ数日、電動自転車の後ろのタイヤの空気圧が怪しくて、とうとう昨日は、走って数分でパンクした感じになってしまった。これがまた、タイヤのあちこちはカッチカチだけど、別の部分はペコペコのふにゃふにゃという奇妙な感触で。今まで、一部だけ触ってみて、「よし、パンパンだな。空気が入ってるな」と安易に判断してたものだから…。それにしても、どうしてこんな、まだらっぽい硬さに…。

ということで、親父さんが近所の自転車屋さんに持っていって、チューブを交換してくれたらしい。チューブだけではなくチェーンも伸び切っていたとの話で、チェーンも交換。…チェーンって交換できるのか。知らなかった。

他にも、油を全然差してなかったから注油してもらったとか、オススメの油を買ってきたとかで。あれやこれやで合計9,800円ぐらいかかったそうで。

電動自転車じゃなければ、新しい自転車が1台買えてしまう…。でも、もはや電動アシスト無しでは、自分も親父さんも自転車に乗る気にはならないわけで…。

フツーの安い自転車に、後付けで電動アシストを追加できる何かを販売したら、ヒット商品にならないかな…。

以上、31 日分です。

過去ログ表示

Prev - 2021/08 - 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