レイトレ合宿6 参加レポート
レイトレ合宿6に参加してきました。
レイトレ合宿とは、自作のレンダラを持ち寄って画像の美しさを競うイベントで、自分は今回が初参加でした。
C++でパストレレンダラを書いて、こんな感じの画像を出力しました。
※サンプル数を多めに取ってるので、実際の競技結果よりも少し綺麗です
結果は 19人中14位 と、C++自体もほぼ未経験だったためビリも覚悟していたのですが、そこそこ奮闘できたようです。
#レイトレ合宿 初参加してきました!結果は19人中15位でした!皆さん本当にレベルが高くて、技術的な話についていくのは精一杯でした。色々ある書きたいことはブログに書くことにしますが、とにかく楽しかったです!!!! pic.twitter.com/1Rgcs1A30w
— Shuto (@shuto_fms) 2018年9月2日
↑後日、順位に誤りがあって14位タイになりました
どうやら10位以内だと入賞扱いになるようなので、来年は入賞目指して頑張っていきたいと思います。
また、合宿には Arnold Renderer 、 Radeon ProRender 、グランツーリスモの内製レンダラなどといった本職でもレンダラを開発されている方々や、CG技術書を執筆されている方、CGを専攻している学生さんなど、非常にレベルの高い方が多く参加されており、大変刺激的な時間を過ごすことができました。
今年は会話についていくのが精一杯だったので、来年はディスカッションできるように知識を増やしておこうと思います。
続きを読むOctane Material基礎
Octaneのマニュアル を読んで理解した事をまとめた。
ここではOctane専用マテリアルについて噛み砕いて説明します。Octaneレンダラの基本的な操作等については説明しません。
はじめての人はとりあえず全容をざっくり掴んだほうが良いので、公式の ビデオチュートリアル を見ましょう。
Octane Rendererとりあえずこれ知っとけリスト
Octane Rendererでレンダリングしようとすると、使えなくなるC4D標準機能がいくつかある。
例えば標準カメラの被写界深度の設定やオブジェクトの可視・不可視の設定(Compositingタグ)、Skyオブジェクトなど。それらと同等の機能はたいていOctane専用のタグを使用することで使えることが多かったりするが、最初のうちは「そんなん知るか」って感じだし、学習効率の障壁にもなる。
そのため、以下の項目については最低限その存在と機能を知っておきたい。
エクスプレッション中の文字列を置換するExtededScript書いた
AfterEffectsでエクスプレッション中の記述を置換するExtendedScriptを書いたので備忘録的に残しておきたいと思います。
実行前の前提として、置換したいエクスプレッションのプロパティを複数選択した状態であることとします。
冒頭は forEach()
を使えるようにするためのおまじない。
// ExtendedScriptでforEach()を使えるようにする // Production steps of ECMA-262, Edition 5, 15.4.4.18 // Reference: http://es5.github.com/#x15.4.4.18 if ( !Array.prototype.forEach ) { Array.prototype.forEach = function( callback, thisArg ) { var T, k; if ( this == null ) { throw new TypeError( " this is null or not defined" ); } // 1. Let O be the result of calling ToObject passing the |this| value as the argument. var O = Object(this); // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". // 3. Let len be ToUint32(lenValue). var len = O.length >>> 0; // Hack to convert O.length to a UInt32 // 4. If IsCallable(callback) is false, throw a TypeError exception. // See: http://es5.github.com/#x9.11 if ( {}.toString.call(callback) != "[object Function]" ) { throw new TypeError( callback + " is not a function" ); } // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. if ( thisArg ) { T = thisArg; } // 6. Let k be 0 k = 0; // 7. Repeat, while k < len while( k < len ) { var kValue; // a. Let Pk be ToString(k). // This is implicit for LHS operands of the in operator // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. // This step can be combined with c // c. If kPresent is true, then if ( k in O ) { // i. Let kValue be the result of calling the Get internal method of O with argument Pk. kValue = O[ k ]; // ii. Call the Call internal method of callback with T as the this value and // argument list containing kValue, k, and O. callback.call( T, kValue, k, O ); } // d. Increase k by 1. k++; } // 8. return undefined }; } // =================== ここからメイン ====================== // function main() { // 選択中のレイヤーを取得 var layers = app.project.activeItem.selectedLayers; layers.forEach(function(l){ // 選択中のプロパティを取得 var properties = l.selectedProperties; properties.forEach(function(p){ // 選択中のプロパティがエクスプレッションを記述できないタイプならスキップ if (p.canSetExpression != true) continue; $.writeln("置換前: " + p.expression); // ================== 使用時にここを変える ===================== // // TODO: Window()とかstatictext使ってGUIから入力できるようにする // 置換後文字列 var s = p.expression.replace (/" "/g, '"Particular"'); // ============================================================= // // 置換後の文字列をエクスプレッションに適用 p.expression = s; $.writeln("置換後" + s); $.writeln(""); }); }); } main();
C4D 新バージョンへの環境移行メモ
はじめに
このエントリーはCinema 4Dの新しいバージョンを導入する際、自分がやったことのメモです。
次のことをやりました。
一般設定フォルダの確認
まず、ユーザーごとに異なる「一般設定フォルダ」の場所と名前を確認しておきます。
ユーザレイアウトの引き継ぎ
C:\User\ユーザ名\AppData\Roaming\MAXON\CINEMA 4D R** Studio_XXXXXXXX\library\layout
にある.l4dファイルと.prfファイルを新バージョンの同じ場所へ移動
初期レイアウトの引き継ぎ
C:\User\ユーザ名\AppData\Roaming\MAXON\CINEMA 4D R** Studio_XXXXXXXX\prefs\template.l4d
を新バージョンの同じ場所へ移動
手動インストールしたプラグインの引き継ぎ
C:\Program Files\MAXON\CINEMA 4D R** Studio\plugins
にあるcinema4dsdk
以外を新バージョンの同じ場所へ移動
カスタムコマンドの引き継ぎ
ここで言うカスタムコマンドとは、自分好みにカスタマイズしたショートカットキーのことです。例えばデフォルトではRedoは「Ctrl+Y」になっていますが、僕はこれを「Ctrl+Shift+Z」にしています。
C:\User\ユーザ名\AppData\Roaming\MAXON\CINEMA 4D R** Studio_XXXXXXXX\prefs\shortcuttable.res
を新バージョンの同じ場所へ移動
また、同フォルダにあるCINEMA 4D.prf
は環境設定(メモリやGPUの設定など、一般的なC4Dの設定)ファイル、c4d_language.prf
は言語設定のファイルだった。
UIカラーの引き継ぎには自分の場合dark.col
ファイルの移動も必要だった。
他の.prfファイルは何の設定のものなのか分からないものも多く、不便を感じるまで移動は様子を見ることにした。
コンテンツブラウザ関係のファイルのHDDへの移動
StudioやBroadbandなどについてくるプリセットなどのデータが重いのでHDDに移した上でシンボリックリンクを飛ばした。
ただ注意があって、プリセットファイル(.lib4d)の入っている「browser」というフォルダをHDDに移動し、そのbrowserフォルダに対してシンボリックリンクを飛ばしたところC4D側で認識されなかったため、フォルダ内部の.lib4dファイルに対してそれぞれ個別にシンボリックリンクを飛ばしてやる必要があった。
具体的な手順としては
- C4Dアップデータでコンテンツをダウンロードする
- ダウンロードしたコンテンツのフォルダ(
C:\Program Files\MAXON\CINEMA 4D R** Studio\library\browser
)をHDDの任意の場所へ移す - .lib4dファイルがあった場所(
C:\Program Files\MAXON\CINEMA 4D R** Studio\library\browser\
)に移したファイルへのシンボリックリンクを作成する
シンボリックリンク作成はコマンドプロンプトを管理者権限で実行して各.lib4dファイルに対して
mklink /D "C:\Program Files\MAXON\CINEMA 4D R** Studio\library\browser\*********.lib4d" E:\C4D\symboliclink\R18\browser\*********.lib4d
した。
他には
日本語ドキュメント、インストーラを用いたプラグインのインストールなどは正規の手法(C4Dアップデータ経由、専用インストーラ使用)で再度導入した。
難読化された .jsxbin ファイルを読んでみる
はじめに
この記事はAfterEffects Advent Calendar 2016の11日目の記事です。
本エントリーでは、ExtendScriptの難読化ファイルである .jsxbin
ファイルの解析方法及びその結果を扱った英語の記事を解説しつつ翻訳・紹介していきたいと思います。(99%元記事の二番煎じですが、自分もハンズオン的な感じで手を動かして試してみました)
想定している読者層は、プログラムを書ける人です。特定のフレームワークや特定の言語、に精通している必要はありませんが、AE上で何かしら自分で関数を作り、自動化処理などさせたことがある(ExtendScriptを少し書いたことがある)くらいだとより理解しやすいかもしれません。ただし、途中から思考実験のような内容になっていきます。プログラミング力というよりも、推測力が求められるかもしれません。。。 (結局11時間くらいぶっ続けで書いたのでくだらない誤字・誤りなどあるかと思います。意味わからないところなどあればTwitterかコメントなどでお知らせ・ご質問ください。)
元記事の紹介
まずはじめに元記事のリンクを紹介します。
元記事は、ExtendScriptの難読化された .jsxbin
ファイルの解析方法と、その結果を紹介しています。
通常、AEのスクリプトは .jsx
という拡張子で記述し、保存します。普通に自分で書いて使ったり、そのまま人に配って共有する場合は全く問題ないのですが、極秘の技術やアルゴリズムを用いて作成したスクリプトを配る場合や、商品として販売する場合はこれだとソースコードが丸見えで困ります。(同じ方法を真似されてしまったり、改変してあたかも自分で書いたかのように販売されてしまうかもしれません。)
その為、Adobe公式のエディターであるExtendScript Toolkitには人間には読めないけど実行は可能な形式( .jsxbin
)に変換する機能が備わっています。元記事では、その「 .jsxbin
ファイルを無理矢理読解してやろう」という記事です。
結果としては、完全には復元は出来ないのですが、一部が復元出来てしまいます。本エントリーでは、その内容を日本語で紹介してみたいと思います。当然のことながら、実際に販売・配布されているjsxbinファイルを解析し、その内容を公表したりしてはいけません。飽くまで自分で作成したスクリプトにだけ使うようにしてください。
それでは、元記事の流れを踏襲しつつ、日本語で紹介していきたいと思います。(jsxbinだったりJSXBINだったり表記が揺れることがありますが、主に僕の言葉で書いているのはjsxbinという小文字表記です。JSXBINという大文字表記は元記事に合わせた書き方で、元記事を翻訳した箇所などで使っています。)
Tensorflow Playgroundを翻訳してみた
はじめに
本記事はNCC Advent Calendar 2016の7日目の記事で、Tensorflow Playgroundの日本語訳と補足になります。 playground.tensorflow.org
↑Tensorflow Playgroundはニューラルネットの学習の様子を可視化して見れるサイトで、初学者の理解の助けになります。
ちなみに、TensorflowとはGoogleが開発したオープンソースの機械学習ライブラリです。C、C++、Pythonなどで書けるそうです。
注意事項
私は機械学習を専攻しているわけではなく、研究で扱う必要があって勉強している一学生です。 最後に「個人的メモ」として自分の解釈(補足)を載せています。翻訳に関しては大きな問題はないかと思いますが、もし誤りなどあればコメントなどでご指摘お願いします。
また、機械学習?なにそれ美味しいの?と言う人は以前学内の勉強会で作成したこちらのスライドを読むと雰囲気が伝わるかもしれません。
www.slideshare.net 続きを読む
「CO5M1C R4ILR0AD」BGAメイキングブログ
はじめに
本エントリーは、下記映像作品のメイキングブログとなります。制作過程や工夫したこと、こだわりなどを記していきます。ソフトの使い方や細かい設定項目などについては割愛しています。
CGについて専門外の人にもなるべく分かりやすいように書くつもりなので、くどい表現があるかもしれません。また、飽くまで趣味範囲で個人的な内容なため、本エントリーの内容がベストとは限りませんし、考え方が一般的には不適切な可能性もありますことをご承知おきください。
ニコニコ動画: 【BOFU2016】 CO5M1C R4ILR0AD / kanone 【BGA】 by Shuto 音楽/動画 - ニコニコ動画
Vimeo: 【BOFU2016】 CO5M1C R4ILR0AD / kanone 【BGA】 on Vimeo
BOFU2016作品ページ: 【BOFU2016 - Legendary Again - 詳細情報】 No.220 "CO5M1C R4ILR0AD / kanone " - TEAM : Futurist Voices
続きを読む