Recent Posts

BlenderのNodeとNodeTreeについて

目標

Blenderにおけるノード(Node)とノードツリー(NodeTree)という単語を説明する。※この記事は、各ノードの役割や使い方に関する解説は含みません。

ノードとは

ノードは、0個以上の入力ソケットと出力ソケット、および内部処理を持つ図のようなデータ処理メカニズムです。

ノードは相互に接続することでデータの受け渡しを行うことができます。

Blenderのノードは、タイトル(Title)、ソケット(Socket)、プロパティ(Properties)を持っています。詳しくは Blender document を参照して下さい。

ノードツリーとは

ノードツリーは、接続されたノードで構成される構造全体です。

Blenderのノードタイプ

BleBlenderには、Shader Nodes(Shader Editor)、Composite Nodes(Compositor)、Texture Nodes(Texture Node Editor)という3種類のノードツリー(及びノードエディター)のタイプがあります。(詳しくは、Blender 2.80 Manual “Introduction”をご覧ください)。

Shader Nodes

Materials, lights and backgrounds are all defined using a network of shading nodes. These nodes output values, vectors, colors and shaders.

Blender Document: Shader Nodes (https://docs.blender.org/manual/en/dev/render/shader_nodes/introduction.html )

マテリアル、ライト、背景は全てShading Nodeのネットワークを使って定義されます。これらのノードは、値、ベクトル、色、シェーダーを出力します。

Compositing Nodes

Compositing Nodes allow you to assemble and enhance an image (or movie). Using composition nodes, you can glue two pieces of footage together and colorize the whole sequence all at once.You can enhance the colors of a single image or an entire movie clip in a static manner or in a dynamic way that changes over time (as the clip progresses).

Blender Document: Compositing Nodes
( https://docs.blender.org/manual/en/dev/compositing/introduction.html )

Compositing Nodeを使用すると、静止画(または動画)を合成、拡張できます。Compositing Nodeを使って、シーケンスの色付けや色の強調などを行うことができます。

Texture Nodes

Blender includes a node-based texture generation system, which enables textures creation by combining colors, patterns and other textures in the same way as shader writing with material nodes.

Blender Document: Texture Nodes
( https://docs.blender.org/manual/en/dev/editors/texture_node/introduction.html )

Blenderには、マテリアルノードと同様に色やパターンやテクスチャを組み合わせて新しいテクスチャを作成するノードベースのテクスチャ生成システムが含まれています。

ノードの操作方法

ノードを操作し、異なるタイプのノードエディタでノードネットワークを作成できます。 ノードエディタの基本的な操作方法はこちらです。

PythonAPIにおけるノードツリー

ノードツリー(NodeTree)という単語はBlender PythonAPI(https://docs.blender.org/api/current/bpy.types.NodeTree.html)でも使用されています。nodes属性とlinkes属性を持つbpy.types.NodeTree(ID)クラスはIDで指定されたノードツリーを取得できます。nodesは、ノードツリーを構成するノードのbpy_prop_collectionです。 linksは、ノードを接続するためのリンクのbpy_prop_collectionです。

Pythonのgetattr()とは

目標

Pythonのgetattr()関数について理解する。

getattr(Object, name [, default])

Return the value of the named attribute of objectname must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

Python document > library > functions
  • この関数は、オブジェクトの指定した名前(name)の属性の値を返します。
    • このnameは文字列でなければなりません。
  • 例えば、getattr(x, ‘foobar’)はx.foobarと同じ値を返します。
  • 指定された属性が存在しない場合は、defaultが用意されていればその値を、それ以外の場合はAttributeErrorが返されます。

実行例

サンプルコードです。Dogクラスは、name, ageというインスタンス変数を持ち、sit(), bark()というインスタンスメソッドを持ちます。

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sit(self):
        self.tired = False
        print("sit down")
    def bark(self, count):
        self.tired = True
        for i in range(count):
            print("bow wow")

dog1 = Dog("Poppy", 3)
val1 = getattr(dog1, "name")
val2 = getattr(dog1, "age")
val3 = getattr(dog1, "tired", "unknown")
val4 = getattr(dog1, "sit")()
val5 = getattr(dog1, "bark")(2)
val6 = getattr(dog1, "sit")
val7 = getattr(dog1, "bark")
val8 = getattr(dog1, "tired", "unknown")

属性の取得

インスタンス名と属性名を引数に与えることで インスタンス変数の値を取得できます。

# val1 = getattr(dog1, "name")
print(val1)
>> Poppy
# val2 = getattr(dog1, "age")
print(val2)
>> 3

Get default value

存在しないメソッドや変数を取得し用とした場合は、第三引数(default)に指定した値を返す。

# val3 = getattr(dog1, "tired", "unknown")
print(val3)
>> unknown

インスタンスメソッドの実行

インスタンスメソッドの実行、

# val4 = getattr(dog1, "sit")()
print(val4)
>> None
# val5 = getattr(dog1, "bark")(2)
print(val5)
>> None

インスタンスメソッドの取得

インスタンスメソッドを取得し、()を付けることで、メソッドを実行することができます。

# val6 = getattr(dog1, "sit")
print(val6)
>> <bound method Dog.sit of <__main__.Dog object at 0x7f192a93f1d0>>
val6()
>> sit down

取得したメソッドに引数を渡すこともできます。

# val7 = getattr(dog1, "bark")
print(val7)
>> <bound method Dog.bark of <__main__.Dog object at 0x7fb2169ae1d0>>
val7(3)
>> bow wow
>> bow wow
>> bow wow

メソッドを実行した後の変化

# val8 = getattr(dog1, "tired", "unknown")
print(val8)
>> True

先ほどはunknownだったインスタンス変数tiredの値が、getattr(dog1, bark)(2) によってTrueに変化しました。



GOAL

To understand getattr() function in python.

getattr(Object, name [, default])

Return the value of the named attribute of objectname must be a string. If the string is the name of one of the object’s attributes, the result is the value of that attribute. For example, getattr(x, 'foobar') is equivalent to x.foobar. If the named attribute does not exist, default is returned if provided, otherwise AttributeError is raised.

Python document > library > functions

What will happen

class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def sit(self):
        self.tired = False
        print("sit down")
    def bark(self, count):
        self.tired = True
        for i in range(count):
            print("bow wow")

dog1 = Dog("Poppy", 3)
val1 = getattr(dog1, "name")
val2 = getattr(dog1, "age")
val3 = getattr(dog1, "tired", "unknown")
val4 = getattr(dog1, "sit")()
val5 = getattr(dog1, "bark")(2)
val6 = getattr(dog1, "sit")
val7 = getattr(dog1, "bark")
val8 = getattr(dog1, "tired", "unknown")

Get attribute

# val1 = getattr(dog1, "name")
print(val1)
>> Poppy
# val2 = getattr(dog1, "age")
print(val2)
>> 3

Get default value

# val3 = getattr(dog1, "tired", "unknown")
print(val3)
>> unknown

Execute function

# val4 = getattr(dog1, "sit")()
print(val4)
>> None
# val5 = getattr(dog1, "bark")(2)
print(val5)
>> None

Get function

# val6 = getattr(dog1, "sit")
print(val6)
>> <bound method Dog.sit of <__main__.Dog object at 0x7f192a93f1d0>>
val6()
>> sit down
# val7 = getattr(dog1, "bark")
print(val7)
>> <bound method Dog.bark of <__main__.Dog object at 0x7fb2169ae1d0>>
val7(3)
>> bow wow
>> bow wow
>> bow wow

After Executing function

# val8 = getattr(dog1, "tired", "unknown")
print(val8)
>> True

getattr(dog1, sit)() and getattr(dog1, bark)(2) changed internal variable “tired”.

カラーマネージャーとは

目標

色空間(color space)とカラーマネージャー(color manager)について理解する.

カラーマネージャーとは

カラーマネージャー(「カラーマネジメントシステム」または「マネージメントソリューション」とも呼ばれます)は、画像や動画の色空間を変更するためのアプリケーションです。

VFXの制作では、デジタルシネマカメラ、レンダリングCG、写真、マットペイントといったツールに応じて、さまざまな色空間が使用されます。ツール間で、色空間を統一または変換する必要があります。 色空間の変換は、VFX制作における重要なプロセスです。

色空間とは

色空間は、色が座標として表される空間です。

カラーモデル

235/5000カラーモデルは、いくつかのチャネル(RGBやCMYKなど)で色を記述する抽象的な数学モデルです。カラーモデルは色空間と同じではありませんが、Adobe RGBやsRGBなどの一部の表色系(Color System)では、色空間はカラーモデルに基づいて色を設定しています。

色空間の例

Adobe Photoshop Color Picker
Comparison of some RGB and CMYK colour gamut on a CIE 1931 xy chromaticity diagram, based on http://commons.wikimedia.org/wiki/File:CIE1931xy_blank.svg and data from Blatner and Fraser’s “Real World Photoshop CS”, p179: http://canopuscomputing.com.au/gallery2/d/8631-1/Gamuts_comparison-B_F.jpg . ( CC BY-SA 3.0 )

sRGB

sRGB(標準の赤(Red)、緑(Green)、青(Blue))は、主にモニター、プリンター、インターネットで使用するRGB色空間です。 この色空間で表現できる色域は、赤、緑、青の3つの原色で定義された図の三角形の内部の領域です。(図の広い領域は原色を表す範囲で、原色を二次元で表したこの図をxy色度図と言う)

CIE 1931 xy chromaticity diagram showing the gamut of the sRGB color space and location of the primaries.( CC BY-SA 3.0)
* This image is colored in sRGB space, so the colors outside of the triangle are interpolated.

Adobe RGB

Adobe RGB はアドビシステムズによって提案された色空間です。sRGBより広範囲を(特に緑を幅広く)再現でき、CMYKプリンターでプリント可能な色のほとんどをカバーすることができます。この色の範囲は、上記の原色の約50%を含んでいることになります。

The CIE 1931 xy chromaticity diagram showing the primaries of the Adobe RGB (1998) color space. The CIE Standard Illuminant D65 white point is shown in the center.( CC BY-SA 3.0)

NTSC (BT.601)

NTSC色空間は、テレビ向けに設計されたもので、sRGBよりはるかに広い範囲の色をカバーします。NTSCは最新のディスプレイでは使用されていませんが、一般に色域の比較や指定などをする際の基準として使用されます。

Rec.2020

Rec.2020(BT.2020 またはITU-R Reccomendation BT.2020)は、スタンダードダイナミックレンジ(SDR)と広色域(WCG)を持つ超高精細テレビ(4Kや8Kに対応したテレビ)に関する色域規格です。この規格は、画像解像度、プログレッシブスキャンでのフレームレート、ビット震度、原色、RGB、YUV(輝度と、2つの色差による色空間)、クロマサブサンプリング、光-電気伝達関数(opto-electronic transfer function)などを定義しています。ただし、フルHD、及びハイダイナミックレンジ(HDR)はサポートされていません。

Rec.2100

Rec.2100はRec.2020の上位互換です。Rec.2100(BT.2100ITU またはITU-R Recommendation BT.2100)は、フルHD(2K)、4Kおよび8K解像度を処理するデバイスの仕様を定めた国際標準規格です。これは、国際電気通信連合の無線通信部門(ITU-R)によって設定されました。

CMYK(or just CMY)

CMYKは、印刷プロセスで使用される減法混色を使用します。
CMYKは、シアン(Cyan)、マゼンタ(Magenta)、イエロー(Yellow)、ブラック(Black)のインクカラーに対応しています。

HSV 

HSV(Hue, Saturation, Value) はコンピュータ上でのペイントやカラーサンプルに使用される色空間です。色相(Hue)、彩度(Saturation)、明度(Value)で色を指定する方法で、加法混色(RGB)または減法混色(CMY)よりも直感的であるため、ペイントアーティストが好んで使用することがあります。表現できる色範囲はRGBと同じであり、HSVはRGB色空間の変換です。HSVは、HSB(Hue, Saturation, Brightness)と表されることもあります。

HSL

HSLは、HSV(HSB)に非常によく似ており、明度(Valur / Brightness)が輝度(lightness / luminance)に置き換わったものです。明度と輝度の違いは値の計算方法です。HSVは、純色の輝度が白の輝度と等しい六角形のピラミッドモデルを使用し、HSLは、純色の輝度が白の輝度の50%である双六角ピラミッドモデルを使用します(参考)。したがって、明度を最大値にした時の色は純色ですが、輝度を最大にした時の色は純色ではありません。
HSLはHSI(Hue, Saturation, Intensity)とも呼ばれます。

LMS

LMS色空間は、通常の視力を持つ人間の視覚の3種類の錐体細胞に基づいた色空間です。この錐体細胞には、異なる波長の光を感知するS錐体(Short)、M錐体(Middle)、L錐体(Long)の3つの種類があり、短波長(Short Lightwave)、中波長(Middle Lightwave)、長波長(Long Lightwave)に感度のピークを持つようになっています。
3種類の錐体細胞(L,M,S)の刺激に対する反応に対応する3つのパラメータLMSは、人間の視覚を再現しています。したがって、LMS色空間にはすべての可視光を含めることができます。
しかし、LとMとSのパラメーターは人と環境によって異なるため、LMSは色の客観的な表現ではありません。

CIE 1931 color spaces

CIE (Commission internationale de l’éclairage, the International Commission on Illumination,国際照明委員会)とは、光と色に関する国際標準を作成する組織です。CIE 1931色空間とは、可視光の電磁スペクトルにおける波長の分布と、生理学的に近くされる色の関係を最初に定義した色空間です。

CIE XYZは、X、Y、Zという3つのチャンネルによる色空間です。これらX、Y、Zの原色は、人間には見えない色となっています。このような可視光外の範囲に3つのチャンネルを設定している理由は、R(700nm)、G(546.1nm)、B(435.8nm)の3つの波長を原色とした場合に、混ぜ合わせるだけでは、可視光の一部を再現できないためです(青色周辺の色を定義するのに、負の値を設定する必要がでてきます)。そのため、混ぜ合わせてすべての可視光を表現できるよう、理論上の値であるXYZが酔用意されています。そのため、CIE XYZにはすべての可視色を正の象限に含めることができます。
また、CIE XYZ色空間は、Y成分が輝度に対応するように設計されています。

なぜカラーマネジメントが必要か?

©2020 Nako

エクスポートしたビデオを別のメディアに転送する際に、ディスプレイや使用する色空間の違いによって見える色が変わってしまします。そのため、個別に色域をリマッピングしたり、ガンマ補正や白色の色度(白色点)の設定などが必要となり、これらを行うのがカラーマネージメントです。

ACESとは

ACES(Academy Color Encoding System エーセス)は、映画芸術科学アカデミーの後援の下で作成された、カラー画像符号化システムです。
このシステムは、CIE xyY(上記の図のCIE xyに輝度Yを追加したもの)で定義されている可視スペクトル軌跡を含む独自の原色をもっています。

Adobe AfterEffects、Maya、Nukeなどの動画編集ソフトでACESを使用する場合は、カラーマネージャーが必要です。カラーマネージャーは通常、プラグイン、または組み込み関数として提供されています。

カラーマネージャーの例

OpenColorIO

“OpenColorIO (OCIO) is a complete color management solution geared towards motion picture production with an emphasis on visual effects and computer animation. “

“OpenColorIO(OCIO)は、視覚効果とコンピューターアニメーションに重点を置いた動画制作向けの完全なカラー管理ソリューションです。”(Google 翻訳)

OpenColorIO official web site( https://opencolorio.org/ )
Google Translation

OCIOはACESと互換性があり、LUT( LookUp Table)に依存せず、多くの一般的な形式をサポートしています。

SynColor

SynColorはAutodesk Color Managementコンポーネントです。

参照:AUTODESK KNOWLEDGE NETWORK SynColor 設定ファイル

Adobe Color Management Module(CMM)

CMMは、PhotoshopなどのAdobeソフトウェアのためのカラーマネージャーです。

Categories

AfterEffects Algorithm Artificial Intelligence Blender C++ Computer Graphics Computer Science Daily Life DataAnalytics Event Game ImageProcessing JavaScript Kotlin mathematics Maya PHP Python SoftwareEngineering Tips Today's paper Tools TroubleShooting Unity Visual Sudio Web Windows WordPress 未分類