先日は、
にて算数とグラフィックについて書きました。グラフィックには
■ ラスターグラフィック
■ ベクターグラフィック
が存在しているのですが、
■ 動画
■ 写真
で使用されているのがラスターグラフィックになります。当然、表示についても同じ仕様になっていますが、この形式は、 【 バイナリファイル 】 なので、コンピューターがわかる形で一つのファイルになっています。その為、データはテキストエディタで開いたとしても内容が解らない状態になっていますが、機械に解りやすい二進数の形になっているので、バイナリエディタで開くと十六進数の形になっています。
これに対し、ベクターグラフィックは、座標の指定と座標間の補間によって状態を作る仕様になっていますから、ラスターグラフィックとは異なる仕様になっています。このようにコンピューターでは処理の異なるグラフィックを使用できるようになっていますが、ベクターグラフィックは、テキストファイルで記述を行うことになりますが、そのままでは表示できないためレンダリングを行うことになります。
このときの処理がレンダリングになりますが、2DのSVGファイルや3DCGのファイルもベクターグラフィックなのでレンダリングを行うことになります。
レンダリングを粉うとベクターグラフィックをラスターグラフィックの状態で出属することが出来ますが、3DCGの場合、
■ セット
■ カメラ
■ ライト
を用意しなければならないのですが、これを用意した後にカメラで見えている状態をラスターグラフィックで出力することになります。
この時に
■ 隠線、隠面処理
■ シェーディング
を行うことで、状態と質感や光と影の状態を再現することが出来ます。
出力する際に解像度の指定をすることになりますが、これがラスターグラフィックの縦横のピクセル数になりますが、この解像度に応じてディテールの表現が変わります。
このようにベクターグラフィックはラスターフラフィックに変換して使用することが出来ますが、この2つは相互変換を行うこともできます。
また、大は小を兼ねるので、次元数の大きな3DCGツールでは2Dの処理も出来ます。3DCGツールでは、無償で利用できるBlenderがありますが、モデルを作る際には
■ モデリング
■ テクスチャペイント
を行うので、ベクターグラフィックとラスターグラフィックの双方を使用することになります。
テクスチャペイントについては、
の中で実際居行っていますが、UV展開後に
のように質感のない状態に対して、テクスチャを適応して塗っていくことになりますが、Workbenchの場合だと、
のように光と影の状態は発生しません。ここに色を追加することで
のような形になりますが、更に描いて
のようにします。このよに古いレイトレーシングっぽい質感になりますが、これをWorkbenchでレンダリングすると
のような状態になります。
また、グリースペンシルもあるので、手書きで画像を描くKと尾が出来舞う。公式でアップされている動画では、アニメーションが制作されていますが、
のようなことも出来るようです。グリースペンシルについては、
のなKでも触れていますが、かなり前のバージョンから対応しており、現在の4.0では更に多機能になっています。
グリースペンシルはオブジェクト扱いなのでコレクションでまとめたり、個別に表示・非表示も行えるようになっていますが、オブジェクトを選択後に手書きでストロークを追加していくことが出来るようになっています。
また、筆圧を使用できるので、
のような線を使用することも出来ます。グリースペンシルは、ベクターグラフィックなので、グラフィックツールのベクターレイヤーと同じようなストロークの処理が行えるのですが、描いた絵をそのまま使用することが出来るようになっています。
また、Sculptモデリングのように頂点数が多い場合には、頂点ペイントも使用できます・これは、
の中で触れていますが、
のようなオブジェクトに対して
のように色を載せて
のような状態にすることも出来ます。
グラフィックと数学
グラフィックを調整する際にはデータの集まりを使うことになりますが、ラスターグラフィックは、ピクセルの集まりなので、個数で位置を示したものになります。その為、データの総数を個数で示す仕様になっているので、考え方としては 【 集合 】 になります。
ラスターグラフィックは平面なので、二次元配列で状態を作りますが、その中の解像度が 【 集合の要素の個数 】 と同じ物になります。
高校の数学で登場する集合では、集合には、
■ 全体集合
■ 部分集合
が存在し、集合として用意されているものの対象が全体集合で、その中から条件として存在しているものが部分集合になります。集合は要素の集まりなので、最初に要素の数のカウントの方法について学習しますが、この要素の個数がデータの総数になります。集合では数値が並んでいますが、ラスターグラフィックでは、この要素に色彩のデータが付与されているので、集合で登場するような定数の値ではなく、多変数の構造物が格納されています。
その為、写真のように 【 透過の概念がないもの 】 だとアルファチャンネルが存在しないので光の三原色のRGBの各色の階調のデータが格納さえていますが、マスク処理でアルファチャンネルが使用されている画像だと色彩のデータに透過を示すアルファチャンネルの情報を持たせたRGBAの状態でデータを格納することになります。
グラフィックを使うときにはグラフィックツールを使用しますが、ソフトウェアもプログラミング言語を使用しないと生成できませんから、内部処理をGUIで操作できるようなコードによって生成されています。
プログラミング言語
プログラミング言語は、コンピューターを制御するものになりますが、現在のコンピューターは8BITパソコンの時代のようにメモリーにアプリケーショを常駐させる仕組みではなく、OSでコンピューターを管理を行い、OS上でソフトウェアを実行する仕組みになっています。
プログラミング言語も同様にソフトウェアなのでアプリケーション層で動作していますが、このプログラムで指定した処理を実行することで記述した内容の挙動を再現することが出来るようになっています。
基本的にソフトウェアもプログラミング言語で記述されているので、処理の方法もコードで正誤できるのですが、殆どのツールにはコードによる拡張を行える機能が実装されているので、ソレを用いることで標準実装機能以外の自動処理をユーザーが自作して実行できるようになっています。
オフィースソフトのマクロ機能がこれに該当しますが、グラフィックツールでも
■ スクリプト
■ プラグイン
を用いることで機能の拡張が出来ますが、こうした処理はユーアーが作成する事も出来ます。商用ソフトの場合だと、プラグインの開発にライセンスが生じるものもあるので、スクリプトのように無償で作れないものもありますが、ossのツールだと上記の2つを自作することが出来るものもあります。
現在だと、Pythonに対応しているものが多いので、ソフトウェアの制御用の記述に適応した形で処理を実装することでスクリプトの実行が出来るようになっています。AudacityやGIMPでもPython対応になっていますが、Blenderもbpyをimportして使用するとBlender内の制御が行えるようになっています。また、Blenderでは、
■ スクリプト
■ プラグイン
をPythonで作成できるので、Pytyonの基本的な処理が理解できている場合、そのままbpyの知識の拡張をするだけでスクリプトやプラグインの開発を行うことが出来ます。
プログラミング言語を使用する際には、
■ 材料の準備
■ 処理の実装
を行いますが、この辺りは代数学において数式を構築する際に 【 項 】 と 【 演算記号 】 がなければ式が成立しないのと同じです。その為、処理で使用する材料を事前に用意しておくことになります。
コードを書く際には
■ 使用する値
を用意するので、変数の初期化を最初に行うことになりますが、これと同時に手続き型の記述でも、コード内で使用する
■ 関数
を読み込んでおく必要があります。外部ファイルだとimportを行うことになりますが、コード内に記述刷る場合には、仕様前に宣言しておく必要があります。例外としてmain関数を使用するとサブルーチンのように実行するメインループの後に関数を記述することが出来ます。
その為、main関数を使用した場合のような例外はありますが、基本的な考え方としては、
■ モジュールの読み込み
■ 変数の初期化
■ 関数やクラスの記述
■ 処理
という流れでコードを書くことになります。
Pythonでは、importの指定が必要になりますが外部ライブラリも同様の方法で読み込むことになります。Python対応のソフトウェアの場合だと、Pythonの処理の方法が使用できるのですが、Tkinterでウィジェットを使うようなイメージで対処の処理を実装することになります。こうした記述はゲームエンジンでオブジェクトに対して処理を実装するのと同じ考え方になりますが、基本的に外部来意ぶらりを使用して実装されているモジュールを使用する流れになっています。
このモジュール弟子予定できる内容を通常のバックエンド側の処理でどのよに実装する丘を可が得ていくことになりますが、この時にコンソールで動くものを作る処理の方法をそのまま用いていくことになります。
基本となるのは 【 工程 】 になるので、どういった手順で行うのかになりますが、この際にその工程を反復する場合にはループが入りますし、特定の条件でループを停止したり、別の処理に変更する際には条件分岐を実装することになります。
また、ユーザー関数のように処理をまとめることが出来るので、実装した処理を塊として管理することが出来るのですが、こうした管理方法を用いた場合にはメインループ内の処理を簡素化することが出来ます。
Blenderのbpyについては、
の中でも触れていますが、
のようなコードを書くと
のように形状をランダムに変形させて配置することが出来ます。
処理を行う際には、
■ 値
■ 処理
を用意する必要があるので、変数を使ってデータを用意することになりますが、通常の変数は、
変数名 = 値
のように1対1で名称と値を管理することになりますが、プログラミング言語では、一つの変数名に対して複数の値を格納できる 【 配列 】 と言う機能があります。その為、
A = [0,1,2,3,4,5,6,7,8,9]
のような記述を行うことで10個の要素を変数内に格納できるようになっています。これは、高校の数学の集合と同じ考え方なので、
A={0,1,2,3,4,5,6,7,8,9}
のような全体集合と同じ構造物になります。
集合のカリキュラムでは、このデータを部分集合や要素で考えてその要素の数を導き出したり、フィルターを使って条件の抽出を行う方法を学習しますが、これが検索エンジンでの処理なります。
この際に多次元化すると難しいので一次元のデータの集まりで判定の方法を学習していくことになりますが、これと同じような処理の方法は、義務教育の算数や数学の中で登場する図形の面積や体積のカリキュラムで行っています。
集合については、
の中で触れていますが、図形の面積を出す場合には、面積の加減算を行いますが、合成をする際には共通部分を除去することになります。
これが積集合と同じ処理になりますが、面積は二次元のデータなので、 【 図形の形状をしたデータの集まり 】 になります。これを条件を用意して組み合わせた際の結果を算出する方法が
■ 面積
■ 体積
の算出になります。高校の数学では、こうしたデータの塊を使うのではなく 【 複数のデータ 】 を一つの集まりとして扱うことになりますが、この処理はプログラミング言語の配列で対応することが出来るようになっています。
グラフィックも座ヒョの集まりなので多次元化したデータを使用するので、多変数のデータを用意してその変数の値の変化で形を作るような構造になっています。
このときの処理がラスターグラフィックの場合だと整数の座標制御になりますが、ベクターグラフィックは座標官の保管になるので、制御の方法が違ってきます。ラスターグラフィックについては、
の中で触れていますが、3DCGだとテクスチャで使用する画像ファイルの構造が此の形になるので、二次元配列を指定したデータでも同じような処理が出来ます。その為、3DCGツールには、 【 プロシージャルテクスチャ 】 が用意されているので、種類の選択とパラメーターの数値の変化でテクスチャーを作成することが出来ます。この機能については、
の中で触れていますが、ディスプレイスメントマップと組み合わせると、
のようなことも出来ます。質感はマテリアルで指定することになりますが。Blenderでは、BSDFの指定で質感の指定を刷る仕様になています。この時にカラーかあテクスチャで質感の指定を刷ることになります。これについては、
の中で触れていますが、マテリアルの指定によって
のような表現が出来るようになっています。また、現在では、ノードでモデリングも行えるようになっているので、ノードベースで状態を作る方法もありますが、Blenderでは、ジオメトリノードを使用することで形状の状態を指定することが出来るようになっています。これについては、
の中で触れていますが、此の機能についても現在も拡充されているので出来ることが増えています。
また、現在のバージョンではコードで制御する部分をノードで制御できるようになっているので、ノードベースで色々なことが出来るようになています。
ノードでの形状の指定ですが、関数の合成と同じ考え方になっているので、どうすればその形になるのかを数式で考えることになります。
その為、関数で形を作る方法をコードではなく、部品を使って状態を作り変化の状態を追加しながら形を作ることになります。