Shader NodeのAttribute Nodeで取れるものリスト
https://gyazo.com/62b4c9a4f6d959c2cb2e2aab64f6616f
おそらくbpy.context.view_layerとbpy.context.sceneで取れるものが取れる
取りたい値を右クリしてCopy full data pathとって先頭のいらなそうなやつを消したら大体行ける
Type: ViewLayer
frame_current
現在のフレーム番号
が、.blendファイルをLinkしたものだとCyclesでレンダリング時にうまく値を取得できていなかったのでそのときは避けたほうがいいかも
おそらく以下が関係している
frame_start
アニメーション時の一番最初のフレーム番号
なんか適切に情報がアップデートされないので、一度Solid ViewにしてRendered Viewに戻すみたいな作業が必要
frame_end
アニメーション時の一番最後のフレーム番号
↑と同様の不具合がある
render.fps
Sceneのfps
camera.data.angle
objects["オブジェクト名"].location
Viewlayer上にある特定のオブジェクトの位置情報を取得する
.以降は↓のType: Objectと同じものを入力すれば他の情報も同様に取得できる
objects["オブジェクト名"].pose.bones["ボーン名"].location
Armatureの特定のboneから位置情報を取得する
一個上と同文
cursor.location
3d cursorの位置情報
二個上と同文
world.color
WorldのViewport DisplayのColor、もしくはUse NodesをオフったときのColor
ちなみに、どうやってもUse Nodesのカラーを取得することはできません
world.node_tree.nodes["Background"].inputs[0].default_value[0]でも取れない
Python ConsoleでC.scene.world.node_tree.nodes["Background"].inputs[0].default_value[0]では取得できる
Type: Object
location
rotation_euler
rotation_quaternion
4つの値を持っているのでVectorソケットからだけでは全部とれない
ZはAlphaの部分から取れる
scale
dimensions
XYZのBounding Boxサイズ
materials[0].diffuse_color
Viewport Displayの色
modifiers["GeometryNodes"].show_render
constraints["Limit Rotation"].enabled
parent.location
親の位置情報
rotationなども同様
Type: Geometry
大体ここにあるものがとれる
https://gyazo.com/ea92f3f89e1cf9d3768138587f99cb6c
あとはGeometry NodesでStore Named Attributeでやったものとか、Output Attributesとか
ただし、EdgeとかFaceとかはあんまり上手く渡してくれない
Vertexに補完されたような状態で取得される
density
密度 たいていVolumeで使われている
Type: Instancer
Store Named AttributeでInstanceに保存してあるAttributeが取れる
たとえば、Distribute on Points Node→Intances on Points Nodeをやっていると、そのPointを出した面のUVを取れる
https://gyazo.com/2a3156a3aeb7abffe6fbc5454379c321
あとは標準搭載のParticleとかで飛ばしたInstanceもなんか取れそうだけどあんま知らない
おまけ
This actually works
https://gyazo.com/edbc7a4c3d9a98c2fb24e1ce47fecf5f
オブジェクトの、親の親の親の親の親のScale?
でもペアレントしてるなら結局子にも同じような値がそもそも.locationだけで取れるくない?とも思うけど、まあ、あまり使うことはなさそう
type: View Layerで特定のObjectのrotation_eulerとかを取っていると、オブジェクト名が変わった瞬間にあらゆる場所のAttribute Nodeのobjects["オブジェクト名"]のオブジェクト名の部分を変えなければいけなくなる
対処法としては2種類ある
1. Attribute Node単体をNode Groupの中に入れて、その中をいじるだけで全てのShaderに一発で置換されるようにしておく
楽
2. View LayerもしくはSceneのCustom Propertiesにtype: Data-Blockを使用してobjects["オブジェクト名"]が自動的に取得されるようにしておく
https://gyazo.com/1b5d5c095840f68582dff7b8f01fcbc4
これで["a1"].locationとかで行けるようになる
この場合は[""]でちゃんと囲わないといけないので注意
現状objects["オブジェクト名"].pose.bones["ボーン名"]まではここでは指定できない?
↓こんな感じにかくなら行ける けどここまでするならもうNode Groupを使う手法の方が取り回しが良い
https://gyazo.com/1f30b3bf7aa743a3d3a9fbcfe80daff6