IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

Rendu d'une cubemap en temps réel pour un post-effect


Sujet :

Unity

  1. #1
    Membre actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    Par défaut Rendu d'une cubemap en temps réel pour un post-effect
    Bonjour à tous,

    J'essai de rendre en temps réel ma scène dans une cube map afin de l'envoyer dans un image effect. Le "post effect" fonctionne très bien avec une cube map statique.

    Le résultat est le suivant :
    Une cube map vide et avec le bogue suivant :
    RenderTexture error: failed to retrieve color surface [invalid call] Erro in file: C:/BuildAgent/work/d9c031b1c154f5ae/Runtime/GfxDevice/d3d/RenderTextureD3D.cpp at line: 278

    Peut être que c'est le même problème que dans ce sujet : http://answers.unity3d.com/questions...n-cubemap.html

    Voici mon script qui est censé rendre ma cube map en temps réel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
    enum TextureCubeMapSize
    {
        Low = 512,
        Normal = 1024,
        Best = 2048,
        //VeryHigh = 4096,
    }
     
    public var m_TextureCubeMapSize : TextureCubeMapSize = TextureCubeMapSize.Normal ;
    public var m_RenderTexture : RenderTexture = null ;
    public var m_OneFacePerFrame = false ;
    //private var m_DummyCam : Camera = null ;
     
    function OnDisable()
    {
        if( m_RenderTexture )
        {
            DestroyImmediate( m_RenderTexture ) ;
            m_RenderTexture = null ;
        }
     
    //  if( m_DummyCam )
    //  {
    //   DestroyImmediate( m_DummyCam ) ;
    //   m_DummyCam = null ;
    //  }
    }
     
    function Start () 
    {
        // render all six faces at startup
        UpdateCubemap( 63 ) ;
    }
     
    function LateUpdate() 
    {   
        //yield WaitForEndOfFrame() ;
           UpdateCubemap() ;
        //yield ;
    }
    /*
    function OnPostRender()
    {}
     
    function OnPreCull()
    {}
     
    function OnPreRender()
    {}
     
    function OnRenderImage( inSource : RenderTexture, inDestination : RenderTexture ) 
    {}
     
    function OnRenderObject()
    {}
    */
     
    function OnWillRenderObject()
    {     
        //UpdateCubemap() ;
    }
     
    function OnWillRender() 
    {     
        //UpdateCubemap() ;
    }
     
    function UpdateCubemap( inFaceMask : int ) 
    {
    //  if( !m_DummyCam )
    //  {
    //   var aDummyCamObject = new GameObject ("CubemapCamera", Camera ) ;
    //        aDummyCamObject.hideFlags = HideFlags.HideAndDontSave;
    //        aDummyCamObject.transform.position = transform.position ;
    //        aDummyCamObject.transform.rotation = transform.rotation ;
    //        m_DummyCam = aDummyCamObject.camera;
    //        m_DummyCam.enabled = false ;
    //  }
     
        if( !m_RenderTexture ) 
        {    
            m_RenderTexture = new RenderTexture( m_TextureCubeMapSize, m_TextureCubeMapSize, 16, RenderTextureFormat.RGB565, RenderTextureReadWrite.Default ) ;
            m_RenderTexture.isCubemap = true ;
            //m_RenderTexture.hideFlags = HideFlags.HideAndDontSave ;    
            //camera.targetTexture = m_RenderTexture ;      
        }
     
    //  m_DummyCam.transform.position = transform.position ;
    //  m_DummyCam.transform.rotation = transform.rotation ;
        camera.RenderToCubemap( m_RenderTexture, inFaceMask ) ;
     
    }
     
    function UpdateCubemap()
    {
        if( m_OneFacePerFrame )
        {
            var aFaceToRender = Time.frameCount % 6 ;
            var aFaceMask = 1 << aFaceToRender ;
            UpdateCubemap( aFaceMask ) ;            
        } 
        else 
        {
            UpdateCubemap( 63 ) ; // all six faces
        }   
    }
    Merci d'avance

    [Unity 3.5.5f3 pro : Windows seven 64bits : Geforce 650M 1Gb ( optimus utilise la geforce pour unity ) : i5 : 8go RAM ]
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

  2. #2
    Membre actif Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 245
    Points
    245
    Par défaut
    Ça fonctionne maintenant :

    Il faut utiliser la m_DummyCam pour rendre dans la cube map et surtout pas la même caméra que le post-effect.

    Dans le post-effect dans la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OnRenderImage( inSource : RenderTexture, inDestination : RenderTexture )
    j'avais mis ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if( m_ScriptRenderScene && !m_ScriptRenderScene.m_RenderTexture )
    	m_Material.SetTexture( "inCube", m_ScriptRenderScene.m_RenderTexture ) ;
    J'ai supprimer le point d'exclamation et ça a fonctionné ( ce dernier est vraiment.... stupide.... )

    Ce qui donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    enum TextureCubeMapSize
    {
    	Low = 512,
    	Normal = 1024,
    	Best = 2048,
    	VeryHigh = 4096,
    }
     
    public var m_TextureCubeMapSize : TextureCubeMapSize = TextureCubeMapSize.Normal ;
    public var m_RenderTexture : RenderTexture = null ;
    public var m_OneFacePerFrame = false ;
    private var m_DummyCam : Camera = null ;
     
    function OnDisable()
    {
    	if( m_RenderTexture )
    	{
    	    DestroyImmediate( m_RenderTexture ) ;
    	    m_RenderTexture = null ;
    	}
     
    	if( m_DummyCam )
    	{
    		DestroyImmediate( m_DummyCam ) ;
    		m_DummyCam = null ;
    	}
    }
     
    function Start () 
    {
        // render all six faces at startup
        UpdateCubemap( 63 ) ;
    }
     
    function LateUpdate() 
    {	
    	UpdateCubemap() ;
    }
     
    function UpdateCubemap( inFaceMask : int ) 
    {
    	if( !m_DummyCam )
    	{
    		var aDummyCamObject = new GameObject ("CubemapCamera", Camera ) ;
            aDummyCamObject.hideFlags = HideFlags.HideAndDontSave;
            aDummyCamObject.transform.position = transform.position ;
            aDummyCamObject.transform.rotation = transform.rotation ;
            m_DummyCam = aDummyCamObject.camera;
            m_DummyCam.enabled = false ;
    	}
     
        if( !m_RenderTexture ) 
        {    
            m_RenderTexture = new RenderTexture( m_TextureCubeMapSize, m_TextureCubeMapSize, 24 ) ;
            m_RenderTexture.isCubemap = true ; 
            m_RenderTexture.useMipMap = false ;
    		m_RenderTexture.Create() ;       
     
        }
     
    	m_DummyCam.transform.position = transform.position ;
    	m_DummyCam.transform.rotation = transform.rotation ;
        m_DummyCam.RenderToCubemap( m_RenderTexture, inFaceMask ) ;    
    }
     
    function UpdateCubemap()
    {
    	if( m_OneFacePerFrame )
        {
            var aFaceToRender = Time.frameCount % 6 ;
            var aFaceMask = 1 << aFaceToRender ;
            UpdateCubemap( aFaceMask ) ;	        
        } 
        else 
        {
            UpdateCubemap( 63 ) ; // all six faces
        }	
    }
    Les grands problèmes sont souvent la conséquences d'erreurs infiniment simple et stupides.
    "Quand le monde est dangereux, l'humilité est un facteur de longévité." ( Baxter "Evolution" )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/11/2014, 20h08
  2. Quel outil pour une appli graphique "temps réel"
    Par Colargole dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 03/04/2009, 14h08
  3. Quelle solution pour une application web "temps réel"?
    Par izguit dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 27/03/2008, 11h04
  4. Créer un serveur pour visualiser une webcam en temps réel
    Par Crepuscule3 dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 13/12/2007, 22h57
  5. Réponses: 1
    Dernier message: 31/10/2006, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo