Boutique Cinema 4D
Affichage des résultats 1 à 8 sur 8

Discussion: ShaderData et BaseObject Python

  1. #1
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964

    ShaderData et BaseObject Python

    Salut encore et toujours moi

    Je voulais savoir y'a moyen de récupérer un BaseObject attaché à un ShaderData en python?
    J'ai vu qu'en C++ y'avais une fonction draw qui retournais justement un baseObject. Je sais que cette fonction est appelé uniquement dans le viewport mais je suppose qu'il s'agit de la même instance du coup si on définit une variable dans notre class contenant le baseObject on peux ainsi récupéré le baseObject sur le quel notre shader est en cours lors de notre rendu. Mais en python je sèche...

    Merci d'avance
    Dernière modification par gr4ph0s ; 04/05/2016 à 02h11.
    SDK Specialist
    MAXON Computer GmbH

  2. #2
    Pilier Avatar de xs_yann
    Date d'inscription
    février 2005
    C4D version
    R19 Studio
    OS
    Mac OS X 10.13
    Messages
    1 990
    Salut gr4ph0s,

    A priori en C++, tu utilises le ChannelData passé en paramètre de la méthode Output. Dans ce ChannelData tu as un attribut vd de type VolumeData, dans le vd tu as un attribut op de type RayObject qui lui-même possède un attribut link qui est le BaseObject.
    Genre cd->vd->op->link (en faisant attention parceque vd, op et link peuvent ne pas être définis).

    En python le VolumeData n'a pas d'attribut op, je ne pense pas que tu puisses avoir accès au BaseObject.
    Par contre tu peux récupérer le matériau en faisant sh->GetMain().

  3. #3
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Merci oui javais vu cette technique aussi cependant je récupère le materiaux pas le basetag et impossible ditentifier quelle instance du materiaux est rendu :/

    Mon but étais de faire un color random pour chaque objet. Mais finalement ce n'est pas possible en python dommage :/


    Merci en tout cas

    EDIT:
    j'étais parti sur un truc avec le tag et tout mais si on ne peux pas avoir ni le tag de texture, ni l'objet ça va être difficile ^^'
    Dernière modification par gr4ph0s ; 04/05/2016 à 16h36.
    SDK Specialist
    MAXON Computer GmbH

  4. #4
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Du coup, il serait possible de dire à un ShaderData d'utiliser une propriété UVW autre que celle définie par la propriété Texture, en C++ ?
    Dernière modification par César Vonc ; 21/05/2016 à 16h05.

  5. #5
    Pilier Avatar de gr4ph0s
    Date d'inscription
    mai 2013
    C4D version
    R16 Studio
    OS
    win 7 X64
    Messages
    964
    Je dirais oui vu que les info UV sont passé dans un channelData qui est de base initialisé lorsque tu fais un BaseShader.Sample(cd).
    Mais rien ne t'empeche de te créer un autre channelData avec les données du basevolume que tu veux (dedans tu as les info d'uvw) puis après d'assigner ton ChannedData initialisé de base(via BaseShader.Sample(cd)) avec les uvw de l'autre vu que ces valeurs ne sont pas en read-only.

    Après je n'ai pas testé mais comme ça en parcourant le sdk ça me semble possible ^^'
    Dernière modification par gr4ph0s ; 21/05/2016 à 16h45.
    SDK Specialist
    MAXON Computer GmbH

  6. #6
    Gourou Avatar de clemz
    Date d'inscription
    février 2009
    C4D version
    R15 Studio
    OS
    windaube x64
    Messages
    2 165
    offtopic / (bon je vais m'inscrire à la Mjm de Nantes ! apparemment on passe un doctorat en programmation en bonus quand on choisit la formation 3D c'est cool ! ^^ ) / offtopic

  7. #7
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Sur le papier ça a l'air simple, oui.

    D'après mes essais, le VolumeData contient la liste de tous les objets, chacun contenant un ou plusieurs TexData.

    Dans ce TexData, on trouve un entier uvwind, qui semble correspondre à l'index de la propriété UVW de l'objet, et le TexData serait donc la propriété Texture.


    Quand je modifie le uvwind, pour rendre avec une autre propriété UVW, ça le change pour toute la propriété Texture, et non pour le ChannelData, du coup ça revient à modifier l'ordre des propriétés UVW, ce qui n'est pas très utile. : p


    De plus, les propriétés UVW doivent être utilisées dans le rendu, sans quoi elles ne sont pas incluse dans la liste des UV du TexData accessible avec uvwind.


    Enfin, y a sûrement un moyen, je continue de chercher.
    Dernière modification par César Vonc ; 21/05/2016 à 18h17.

  8. #8
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Alors après pas mal d'essais, la seule solution que j'ai trouvé est de calculer les UV non pas en précisant une autre propriété UV mais à partir d'une autre propriété Texture, avec VolumeData->ProjectPoint, puis de passer le résultat dans le ChannelData->p.


    Remarque, c'est pas mal, car on a toutes les options de la propriété Texture pour affiner nos UV !


    Code PHP:
    Vector BitmapData::Output(BaseShaderchnChannelDatacd)
    {
        if (!
    shader)
            return 
    Vector(1.0);

        
    Vector uv cd->p;

        if (
    cd->vd) {
            
    TexDatatd cd->vd->GetTexData(cd->vd->GetObj(0), 0); // Une des propriétés Texture du premier objet de la scène
            
    if (td) {
                
    Vector uv2;
                if (
    cd->vd->ProjectPoint(tdcd->vd->lhitcd->vd->pcd->vd->n, &uv2)) {
                    
    cd->p.uv2.x;
                    
    cd->p.uv2.y;
                }
            }
        }

        
    Vector res shader->Sample(cd);
        
    cd->uv;

        return 
    res;

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Image1.jpg 
Affichages :	9 
Taille :		473,1 Ko 
ID : 			17977
    Dernière modification par César Vonc ; 21/05/2016 à 19h45.

Discussions similaires

  1. Optimisation en Python
    Par César Vonc dans le forum Programmation
    Réponses: 7
    Dernier message: 23/01/2014, 14h00
  2. Python r14
    Par oli_d dans le forum Programmation
    Réponses: 0
    Dernier message: 09/09/2012, 08h43
  3. [Problème] Pb python ?
    Par Math1712 dans le forum Nouveaux membres
    Réponses: 1
    Dernier message: 16/07/2012, 23h06
  4. je me suis mis au python
    Par paspas dans le forum Programmation
    Réponses: 2
    Dernier message: 15/11/2011, 17h38
  5. Python et la R13
    Par oli_d dans le forum Programmation
    Réponses: 10
    Dernier message: 05/10/2011, 20h11

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet