Cambiar una característica en distintos objetos y materiales

gonzapert - 17/09/2023 05:42
En mi escena, tengo numerosos objetos con diferentes materiales asignados. Quiero modificar en todos ellos una característica, digamos "especular", y, por ejemplo, sumar 0.25 al valor que ya tienen en el especular de todos esos materiales en todos esos objetos, sin tener que ir uno por uno para modificarlos.

¿Cómo se puede hacer? Gracias.
Soliman - 17/09/2023 08:25
Supongo que se podría hacer por medio de un script de Phyton, pero no sabría decirte como... :(

[video=youtube_share;eo7UjKFiagk]https://youtu.be/eo7UjKFiagk?list=PLFtLHTf5bnym_wk4DcYIMq1DkjqB7kDb-[/video]
Soliman - 17/09/2023 08:57
[video=youtube_share;bv57rAg79fc]https://youtu.be/bv57rAg79fc[/video]
Soliman - 17/09/2023 09:01
((off topic))

A ver si mejoran el chatGPT y con solo escribir lo que quieras te lo hace.

Yo probé hace tiempo crear unos scripts para añadir objetos a la escena y lo hace bien, aunque al principio le cuesta y se equivoca.
Parece ser que este es el futuro de la programación.. :) :)

[video=youtube_share;xtVkhfGvIaU]https://youtu.be/xtVkhfGvIaU[/video]
3dpoder - 17/09/2023 12:50
Para modificar el valor del especular de todos los materiales en todos los objetos de una escena de Blender, puedes seguir estos pasos:

[LIST=1]
  • En modo objeto, selecciona todos los objetos que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.
  • En el panel de propiedades, en la pestaña Materiales, haz clic en el botón Editar. Esto abrirá el editor de materiales.
  • En el editor de materiales, selecciona todos los materiales que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.
  • En el panel de propiedades, en la pestaña Especular, aumenta el valor del especular en 0.25.
  • Haz clic en el botón Aceptar para cerrar el editor de materiales.
    [/LIST]

    Todos los materiales seleccionados se modificarán para aumentar el valor del especular en 0.25.

    Aquí tienes los pasos detallados:

    Paso 1: Seleccionar los objetos

    En modo objeto, selecciona todos los objetos que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.

    Paso 2: Abrir el editor de materiales

    Para abrir el editor de materiales, haz clic en el botón Editar en el panel de propiedades, en la pestaña Materiales.

    Paso 3: Seleccionar los materiales

    En el editor de materiales, selecciona todos los materiales que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.

    Paso 4: Modificar el valor del especular

    En el panel de propiedades, en la pestaña Especular, aumenta el valor del especular en 0.25.

    Paso 5: Cerrar el editor de materiales

    Para cerrar el editor de materiales, haz clic en el botón Aceptar.

    También puedes utilizar un script para modificar el valor del especular de todos los materiales en todos los objetos de una escena de Blender. El siguiente script aumentará el valor del especular en 0.25 de todos los materiales en todos los objetos de la escena actual.

    Para ejecutar este script, abre la consola de Python de Blender y pega el script. A continuación, pulsa Enter para ejecutar el script.

    [CODE]import bpy

    def modify_specular(amount):
    for obj in bpy.context.scene.objects:
    for mat in obj.data.materials:
    mat.specular.alpha = mat.specular.alpha + amount

    modify_specular(0.25)
    [/CODE]

    A ver si esto te ayuda en algo, un saludo. :)
  • Soliman - 17/09/2023 15:49
    [QUOTE=3dpoder;1020865]Para modificar el valor del especular de todos los materiales en todos los objetos de una escena de Blender, puedes seguir estos pasos:

    [LIST=1]
  • En modo objeto, selecciona todos los objetos que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.
  • En el panel de propiedades, en la pestaña Materiales, haz clic en el botón Editar. Esto abrirá el editor de materiales.
  • En el editor de materiales, selecciona todos los materiales que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.
  • En el panel de propiedades, en la pestaña Especular, aumenta el valor del especular en 0.25.
  • Haz clic en el botón Aceptar para cerrar el editor de materiales.
    [/LIST]

    Todos los materiales seleccionados se modificarán para aumentar el valor del especular en 0.25.

    Aquí tienes los pasos detallados:

    Paso 1: Seleccionar los objetos

    En modo objeto, selecciona todos los objetos que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.

    Paso 2: Abrir el editor de materiales

    Para abrir el editor de materiales, haz clic en el botón Editar en el panel de propiedades, en la pestaña Materiales.

    Paso 3: Seleccionar los materiales

    En el editor de materiales, selecciona todos los materiales que quieras modificar. Puedes hacerlo haciendo clic en ellos mientras mantienes pulsada la tecla Ctrl.

    Paso 4: Modificar el valor del especular

    En el panel de propiedades, en la pestaña Especular, aumenta el valor del especular en 0.25.

    Paso 5: Cerrar el editor de materiales

    Para cerrar el editor de materiales, haz clic en el botón Aceptar.

    También puedes utilizar un script para modificar el valor del especular de todos los materiales en todos los objetos de una escena de Blender. El siguiente script aumentará el valor del especular en 0.25 de todos los materiales en todos los objetos de la escena actual.

    Para ejecutar este script, abre la consola de Python de Blender y pega el script. A continuación, pulsa Enter para ejecutar el script.

    [CODE]import bpy

    def modify_specular(amount):
    for obj in bpy.context.scene.objects:
    for mat in obj.data.materials:
    mat.specular.alpha = mat.specular.alpha + amount

    modify_specular(0.25)
    [/CODE]

    A ver si esto te ayuda en algo, un saludo. :)[/QUOTE]

    Eso tira un error.... :(

    Python: Traceback (most recent call last): File "\Text", line 8, in
    File "\Text", line 6, in modify_specular
    AttributeError: 'Material' object has no attribute 'specular'


  • 3dpoder - 23/09/2023 11:51
    [QUOTE=Soliman;1020867]Eso tira un error.... :([/QUOTE]

    El error que estás recibiendo indica que Blender no puede encontrar el atributo specular en la clase Material. Esto se debe a que el atributo specular solo está disponible en Blender Internal (BI), el antiguo motor de renderizado de Blender. Blender Cycles, el motor de renderizado actual, no tiene el atributo specular.

    Para solucionar este error, puedes usar el atributo diffuse en lugar del atributo specular. El atributo diffuse controla el color base del material, y también puede controlar su reflectividad. Para aumentar la reflectividad del material, puedes aumentar el valor del atributo diffuse.

    [CODE]import bpy

    def modify_diffuse(amount):
    for obj in bpy.context.scene.objects:
    for mat in obj.data.materials:
    mat.diffuse.alpha = mat.diffuse.alpha + amount

    modify_diffuse(0.25)
    [/CODE]

    Para usar este código, simplemente cópialo y pégalo en la consola de Python de Blender y presiona Enter. Todos los materiales en la escena tendrán su reflectividad aumentada en un 25%.

    También puedes usar este código para crear un script de Python que modifique la reflectividad de los materiales en tu escena. Para ello, crea un nuevo archivo de Python y pega el código anterior en él. Luego, guarda el archivo con un nombre como modify_reflectivity.py.

    Para ejecutar el script, abre la consola de Python de Blender y escribe el siguiente comando:

    [CODE]import modify_reflectivity

    modify_reflectivity.modify_diffuse(0.25)
    [/CODE]

    Esto modificará la reflectividad de todos los materiales en la escena en un 25%.

    Si lo pruebas ya me dirás si funciona o no, un saludo.
    Soliman - 23/09/2023 14:03
    Para cambiar el SPECULAR



    import bpy# Itera a través de todos los objetos de la escena
    for obj in bpy.context.scene.objects:
    # Verifica si el objeto es una malla (Mesh)
    if obj.type == 'MESH':
    # Verifica si el objeto tiene un material
    if obj.data.materials:
    # Itera a través de los materiales del objeto
    for material in obj.data.materials:
    # Verifica si el material tiene un nodo Principled BSDF
    if material.node_tree:
    principled_bsdf = material.node_tree.nodes.get("Principled BSDF")
    if principled_bsdf:
    # Modifica el valor de Specular (specular_intensity)
    principled_bsdf.inputs["Specular"].default_value = 0.5 # Cambia 0.5 al valor que desees


    # Actualiza la vista de la escena
    bpy.context.view_layer.update()





    [video=youtube_share;SJ-hL7nOnlE]https://youtu.be/SJ-hL7nOnlE[/video]

    -- IMÁGENES ADJUNTAS --

    🖼️

    Estamos trabajando para mostrar las imágenes del foro

    Adjunto #246558

    gonzapert - 23/09/2023 18:55
    No me resultó útil toda esta complicación, cuyo inflexible resultado impone un solo valor a la característica, lo cual no era lo que esperaba. La idea era tener acceso rápido desde un solo lugar a características de objetos y materiales con distintos valores de base.

    Por ejemplo para animarlos.

    Resulta que eso lo puedo hacer con custom Properties, que según lo que vi en este video, me resulta mucho más práctico, entendible y no tengo que andar haciendo trabajosas depuraciones.

    [URL]https://www.youtube.com/watch?v=yYCDGgsQnb0[/URL]


    Lo resolveré así hasta que todos nosotros y no sólo la IA, subamos unos peldaños en el entendimiento de programación.
    Soliman - 24/09/2023 09:23
    [QUOTE=gonzapert;1021016]No me resultó útil toda esta complicación, cuyo inflexible resultado impone un solo valor a la característica, lo cual no era lo que esperaba
    la idea era tener acceso rápido desde un solo lugar a características de objetos y materiales con distintos valores de base
    Por ejemplo para animarlos
    Resulta que eso lo puedo hacer con custom Properties, que según lo que vi en este video, me resulta mucho más práctico, entendible y no tengo que andar haciendo trabajosas depuraciones
    [URL]https://www.youtube.com/watch?v=yYCDGgsQnb0[/URL]

    Lo resolveré así hasta que todos nosotros y no sólo la ia, subamos unos peldaños en el entendimiento de programación[/QUOTE]

    [video=youtube_share;c350wuPIwQE]https://youtu.be/c350wuPIwQE[/video]
    gonzapert - 25/09/2023 06:03
    Solimán, si realmente tu intención es ayudar, te pido que escribas tu aporte en formato de texto e imágenes
    Soliman - 25/09/2023 07:56
    [QUOTE=gonzapert;1021062]Solimán, si realmente tu intención es ayudar, te pido que escribas tu aporte en formato de texto e imágenes[/QUOTE]

    Pues va a ser que no.... eso no se puede poner con texto e imágenes. Lo siento.
    gonzapert - 25/09/2023 15:56
    no voy a ver un video tuyo donde decís que no sabés el tema