Changeset View
Changeset View
Standalone View
Standalone View
release/scripts/modules/bpy_extras/node_shader_utils.py
| Show First 20 Lines • Show All 490 Lines • ▼ Show 20 Lines | class PrincipledBSDFWrapper(ShaderWrapper): | ||||
| def normalmap_texture_get(self): | def normalmap_texture_get(self): | ||||
| if not self.use_nodes or self.node_normalmap is None: | if not self.use_nodes or self.node_normalmap is None: | ||||
| return None | return None | ||||
| return ShaderImageTextureWrapper( | return ShaderImageTextureWrapper( | ||||
| self, self.node_normalmap, | self, self.node_normalmap, | ||||
| self.node_normalmap.inputs["Color"], | self.node_normalmap.inputs["Color"], | ||||
| grid_row_diff=-2, | grid_row_diff=-2, | ||||
| colorspace_override='Non-Color', | |||||
| ) | ) | ||||
| normalmap_texture = property(normalmap_texture_get) | normalmap_texture = property(normalmap_texture_get) | ||||
| class ShaderImageTextureWrapper(): | class ShaderImageTextureWrapper(): | ||||
| """ | """ | ||||
| Generic 'image texture'-like wrapper, handling image node, some mapping (texture coordinates transformations), | Generic 'image texture'-like wrapper, handling image node, some mapping (texture coordinates transformations), | ||||
| and texture coordinates source. | and texture coordinates source. | ||||
| Show All 9 Lines | NODES_LIST = ( | ||||
| "_node_mapping", | "_node_mapping", | ||||
| ) | ) | ||||
| __slots__ = ( | __slots__ = ( | ||||
| "owner_shader", | "owner_shader", | ||||
| "is_readonly", | "is_readonly", | ||||
| "grid_row_diff", | "grid_row_diff", | ||||
| "use_alpha", | "use_alpha", | ||||
| "colorspace_override", | |||||
| *NODES_LIST, | *NODES_LIST, | ||||
| ) | ) | ||||
| def __new__(cls, owner_shader: ShaderWrapper, node_dst, socket_dst, *_args, **_kwargs): | def __new__(cls, owner_shader: ShaderWrapper, node_dst, socket_dst, *_args, **_kwargs): | ||||
| instance = owner_shader._textures.get((node_dst, socket_dst), None) | instance = owner_shader._textures.get((node_dst, socket_dst), None) | ||||
| if instance is not None: | if instance is not None: | ||||
| return instance | return instance | ||||
| instance = super(ShaderImageTextureWrapper, cls).__new__(cls) | instance = super(ShaderImageTextureWrapper, cls).__new__(cls) | ||||
| owner_shader._textures[(node_dst, socket_dst)] = instance | owner_shader._textures[(node_dst, socket_dst)] = instance | ||||
| return instance | return instance | ||||
| def __init__(self, owner_shader: ShaderWrapper, node_dst, socket_dst, grid_row_diff=0, use_alpha=False): | def __init__(self, owner_shader: ShaderWrapper, node_dst, socket_dst, grid_row_diff=0, | ||||
| use_alpha=False, colorspace_override=''): | |||||
mont29: Would rather use ellipsis (`colorspace_is_data=...`), then, it's better suited for that kind of… | |||||
| self.owner_shader = owner_shader | self.owner_shader = owner_shader | ||||
| self.is_readonly = owner_shader.is_readonly | self.is_readonly = owner_shader.is_readonly | ||||
| self.node_dst = node_dst | self.node_dst = node_dst | ||||
| self.socket_dst = socket_dst | self.socket_dst = socket_dst | ||||
| self.grid_row_diff = grid_row_diff | self.grid_row_diff = grid_row_diff | ||||
| self.use_alpha = use_alpha | self.use_alpha = use_alpha | ||||
| self.colorspace_override = colorspace_override | |||||
| self._node_image = ... | self._node_image = ... | ||||
| self._node_mapping = ... | self._node_mapping = ... | ||||
| # tree = node_dst.id_data | # tree = node_dst.id_data | ||||
| # nodes = tree.nodes | # nodes = tree.nodes | ||||
| # links = tree.links | # links = tree.links | ||||
| ▲ Show 20 Lines • Show All 84 Lines • ▼ Show 20 Lines | class ShaderImageTextureWrapper(): | ||||
| node_image = property(node_image_get) | node_image = property(node_image_get) | ||||
| def image_get(self): | def image_get(self): | ||||
| return self.node_image.image if self.node_image is not None else None | return self.node_image.image if self.node_image is not None else None | ||||
| @_set_check | @_set_check | ||||
| def image_set(self, image): | def image_set(self, image): | ||||
| if self.colorspace_override != '': | |||||
Not Done Inline Actions… and then ellipsis here too, instead of None, of course :) mont29: … and then ellipsis here too, instead of None, of course :) | |||||
| image.colorspace_settings.name = self.colorspace_override | |||||
| self.node_image.image = image | self.node_image.image = image | ||||
| image = property(image_get, image_set) | image = property(image_get, image_set) | ||||
| def projection_get(self): | def projection_get(self): | ||||
| return self.node_image.projection if self.node_image is not None else 'FLAT' | return self.node_image.projection if self.node_image is not None else 'FLAT' | ||||
| ▲ Show 20 Lines • Show All 148 Lines • Show Last 20 Lines | |||||
Would rather use ellipsis (colorspace_is_data=...), then, it's better suited for that kind of usages than None.