โจ๐ฌ ๐๐๐ฌ ๐๐ค๐ค๐ก ๐๐ฃ๐ฉ๐ง๐ค: "๐๐๐๐๐๐ง๐พ๐ก๐๐๐ฃ๐๐ง๐๐ง๐ค" ๐จ๐งน
Hello VFX & Animation Professionals! ๐
I'm thrilled to introduce an indispensable addition to your Maya toolkitโShaderCleanerPro! ๐
Managing shaders efficiently is vital for maintaining optimized and high-quality rendering in your 3D projects. ShaderCleanerPro streamlines this process by providing advanced shader management features, allowing you to clean up unused shaders, optimize shader networks, and ensure seamless material application across your models.
๐๐๐๐ฉ ๐๐๐๐๐๐ง๐พ๐ก๐๐๐ฃ๐๐ง๐๐ง๐ค ๐จ๐งน ๐๐๐๐๐ง๐จ:
Unused Shader Removal:ย Automatically detects and removes shaders that are not assigned to any objects, reducing scene complexity.
Shader Network Optimization:ย Optimizes shader connections for better performance and easier management.
Batch Shader Management:ย Clean and optimize multiple shaders simultaneously, saving valuable time on repetitive tasks.
User-Friendly Interface:ย Intuitive UI designed to simplify shader management, making it accessible for artists of all levels.
๐ ๏ธ ๐๐๐๐๐๐ง๐พ๐ก๐๐๐ฃ๐๐ง๐๐ง๐ค ๐จ๐งน (๐ข๐๐ฎ๐.๐๐ข๐๐จ ๐๐๐ง๐จ๐๐ค๐ฃ):
def shader_cleaner_pro(objects, remove_unused=True, optimize_network=True):
ย ย ย ย """
ย ย ย ย Cleans shaders by removing unused shaders and optimizing shader networks.
ย ย ย ย :param objects: <list> List of objects to clean shaders from.
ย ย ย ย :param remove_unused: <bool> Whether to remove unused shaders.
ย ย ย ย :param optimize_network: <bool> Whether to optimize shader networks.
ย ย ย ย """
ย ย ย ย if not objects:
ย ย ย ย ย ย ย ย cmds.warning("No objects provided for shader cleaning.")
ย ย ย ย ย ย ย ย return
ย ย ย ย # List of default shaders to exclude
ย ย ย ย default_shaders = {'lambert1', 'particleCloud1', 'standardSurface1'}
ย ย ย ย # Collect all shaders used by the selected objects
ย ย ย ย shaders_in_use = set()
ย ย ย ย for obj in objects:
ย ย ย ย ย ย ย ย # Get all shapes under the transform (if any)
ย ย ย ย ย ย ย ย shapes = cmds.listRelatives(obj, shapes=True, fullPath=True) or []
ย ย ย ย ย ย ย ย for shape in shapes:
ย ย ย ย ย ย ย ย ย ย ย ย # Get the shading groups connected to the shape
ย ย ย ย ย ย ย ย ย ย ย ย shading_grps = cmds.listConnections(shape, type='shadingEngine') or []
ย ย ย ย ย ย ย ย ย ย ย ย for sg in shading_grps:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย # Get the surface shaders connected to the shading group
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย surface_shaders = cmds.listConnections(sg + '.surfaceShader') or []
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย shaders_in_use.update(surface_shaders)
ย ย ย ย # Find all shaders in the scene
ย ย ย ย all_shaders = set(cmds.ls(materials=True))
ย ย ย ย # Identify unused shaders
ย ย ย ย unused_shaders = all_shaders - shaders_in_use - default_shaders
ย ย ย ย if remove_unused and unused_shaders:
ย ย ย ย ย ย ย ย for shader in unused_shaders:
ย ย ย ย ย ย ย ย ย ย ย ย try:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย # Corrected lock check
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย is_locked = cmds.lockNode(shader, query=True)[0]
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย if not is_locked:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย cmds.delete(shader)
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย print("Removed unused shader: {}".format(shader))
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย else:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย print("Cannot delete locked shader: {}".format(shader))
ย ย ย ย ย ย ย ย ย ย ย ย except Exception as e:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย print("Error removing shader '{}': {}".format(shader, str(e)))
ย ย ย ย elif remove_unused:
ย ย ย ย ย ย ย ย print("No unused shaders found.")
ย ย ย ย if optimize_network:
ย ย ย ย ย ย ย ย # Example optimization: Remove redundant connections
ย ย ย ย ย ย ย ย for shader in shaders_in_use:
ย ย ย ย ย ย ย ย ย ย ย ย try:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย connections = cmds.listConnections(shader, plugs=True, connections=True) or []
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย if connections:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย for i in range(0, len(connections), 2):
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย source = connections[i]
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย dest = connections[i + 1]
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย # Example: Remove duplicate connections
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย if cmds.connectionInfo(source, destinationFromSource=True) == cmds.connectionInfo(dest, destinationFromSource=True):
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย cmds.disconnectAttr(source, dest)
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย print("Disconnected redundant connection from '{}' to '{}'".format(source, dest))
ย ย ย ย ย ย ย ย ย ย ย ย except Exception as e:
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย print("Error optimizing shader network for '{}': {}".format(shader, str(e)))
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย
# Usage example:
# Select objects and run:
shader_cleaner_pro(objects=['testSphere', 'testCube'], remove_unused=True, optimize_network=True) |
๐ ๏ธ ๐๐๐๐๐๐ง๐พ๐ก๐๐๐ฃ๐๐ง๐๐ง๐ค ๐จ๐งน (๐๐ฎ๐๐๐๐2 ๐๐๐ง๐จ๐๐ค๐ฃ):
[Todayโs Challenge is to take this simple code to next level.. I am sharing images of these advanced codes...] |
๐ ๐๐๐๐ฉ ๐๐๐๐๐๐ง๐พ๐ก๐๐๐ฃ๐๐ง๐๐ง๐ค ๐จ๐งน ๐๐๐๐๐ง๐จ:
Unused Shader Removal:ย Automatically detects and removes shaders that are not assigned to any objects, reducing scene complexity.
Shader Network Optimization:ย Optimizes shader connections for better performance and easier management.
Batch Shader Management:ย Clean and optimize multiple shaders simultaneously, saving valuable time on repetitive tasks.
User-Friendly Interface:ย Intuitive UI designed to simplify shader management, making it accessible for artists of all levels.
๐ง ๐๐๐ฎ ๐ฝ๐๐ฃ๐๐๐๐ฉ๐จ:
โข ๐ Boost Productivity:ย Save time on managing shaders manually by automating the cleaning and optimization process.
โข ๐ ๏ธ Enhance Workflow:ย Ideal for complex scenes with numerous shaders, ensuring consistency and efficiency across your projects.
โข ๐ Improve Consistency:ย Ensures all selected objects have optimized and consistently applied shaders, enhancing rendering quality.
โข ๐ก User-Friendly Interface:ย Intuitive UI suitable for artists of all levels, making shader management seamless and efficient.
โจ Ready to Optimize Your Shader Workflow?
Try out ShaderCleanerProย today and enhance your Maya workflow! Feel free to reach out or comment below to see it in action. Let's continue to elevate our Maya scripting together! ๐ช๐
๐๐ช๐๐๐ช'๐จ ๐๐๐ฃ๐ ๐จ :
โข YouTube Channel: https://www.youtube.com/@118subbuโข Vimeo:ย https://vimeo.com/subbu118โข Creature Rigging:ย https://www.creaturerigging.comโข Python Scripting:ย https://www.pythonscripting.comโข Hyper Rig:ย https://www.hyper-rig.com
#HappyScripting #MayaUI #ShaderCleanerPro #PipelineOptimization #Maya #PythonScripting #MayaTools #VFX #3DAnimation #ShaderManagement #Automation #WorkflowEnhancement #TechnicalArt #ScriptingTools
๐ ๏ธ๐ผ๐๐๐๐ฉ๐๐ค๐ฃ๐๐ก ๐๐๐ฅ๐จ:
Shader Network Visualization:ย For more advanced functionality, consider adding visualization tools to display shader networks graphically before and after optimization.
Error Handling:ย The scripts include checks for object selection and handle cases with no shaders gracefully.
Customization:ย Extend the tool to include options like specifying different optimization levels, handling specific shader types, or integrating with other material management tools.
Integration:ย Add this tool to your Maya shelf or integrate it into existing scripts for quick and easy access during your workflow.
Comments