Users can define new variation filters to edit the variation json table defined in their scenes or completely define a new variation definition based on some user defined criteria.
Variation filters are called when the scenes are being translated to render engine (i.e. Arnold, Renderman, etc).
A variation filter is a class with a "filter" method, the arguments are the following:
...
ユーザーは、新しいVariationフィルタを定義して、自分のシーンで定義されている、Variation JSONテーブルを編集することや、ユーザー定義の基準に基づいて新しいバリエーション定義を完全に定義することができます。
Variationフィルタは、任意のシーンがレンダリングエンジンに変換される際に、呼び出されます(つまり、Arnold、Rendermanなど)。
Variationフィルタは「filter」メソッドを保有するクラスです。引数は、次のとおりです。
- variation:現在のVariationオブジェクト。現在のバリエーションオブジェクトであり、この段階では、他のVariationフィルタによって、既に編集されている可能性があります。
- atomsNode:ユーザーのシーンからのatomsNodeの名前です。
- origin_data:オリジナルのVariation string Atoms.loadVariationFromString関数を使用して、この文字列からVariationオブジェクトを取得することができます。
...
Example 1
コード ブロック | ||
---|---|---|
| ||
import Atoms import Atoms.ui.constants from Atoms.singletons import get_atoms_variation_filters_singleton import random class VariationFilter: def filter(self, variations, atomsNode, origin_data): atv = variations.getAgentTypeVariation("atomsRobot") if atv: for mat in atv.getMaterialNames(): material = atv.getMaterial(mat) if material: material.setDiffuseColorBlue(random.randint(0,255)) material.setDiffuseColorGreen(random.randint(0,255)) material.setDiffuseColorRed(random.randint(0,255)) #print variations.toString(True) print "My variation filter" return variations filters = get_atoms_variation_filters_singleton() filters.append(VariationFilter()) |
...
Example 2
コード ブロック | ||
---|---|---|
| ||
import Atoms import Atoms.ui.constants from Atoms.singletons import get_atoms_variation_filters_singleton class NewVariationFilter: def filter(self, variations, atomsNode, origin_data): variations = Atoms.Variations() atv = Atoms.AgentTypeVariation() varGeo1 = Atoms.VariationGeometry() varGeo1.setGeometryFile("${ATOMS_DATA}/variations/geometries/atomsRobot/robot1_body.geos") atv.setGeometry("body",varGeo1) varGeo2 = Atoms.VariationGeometry() varGeo2.setGeometryFile("${ATOMS_DATA}/variations/geometries/atomsRobot/robot1_head.geos") atv.setGeometry("head",varGeo2) material1 = Atoms.VariationMaterial() material1.setMaterialFile("") atv.setMaterial("robot1_material",material1) geoGroup = Atoms.VariationGroup(atv) geoGroup.addCombination("body","robot1_material") geoGroup.addCombination("head","robot1_material") atv.setGroup("Robot1", geoGroup) atv.setLookFile("${ATOMS_DATA}/variations/materials/atomsRobot/lookFile.ass") variations.setAgentTypeVariation("atomsRobot", atv) print variations.toString(True) #to write the variation table a json st]irng use variations.toString(False) #to load a variation object from a stirng use Atoms.loadVariationFromString(json_string) or Atoms.loadVariationFromFile(json_file_path) return variations def load(): filters = get_atoms_variation_filters_singleton() filters.append(NewVariationFilter()) |
...