noocrypte.net
http://noozone.free.fr/noocrypte/

Unity3D-Faire Un Cubemap
http://noozone.free.fr/noocrypte/viewtopic.php?f=47&t=7236
Page 1 sur 1

Auteur:  yann.minh [ Mer Mar 11, 2015 5:43 pm ]
Sujet du message:  Unity3D-Faire Un Cubemap

http://docs.unity3d.com/ScriptReference ... bemap.html

Créer un script (java) avec ce code :
Code:
// Render scene from a given point into a static cube map.
   // Place this script in Editor folder of your project.
   // Then use the cubemap with one of Reflective shaders!
   class RenderCubemapWizard extends ScriptableWizard {
      var renderFromPosition : Transform;
      var cubemap : Cubemap;
      
      function OnWizardUpdate () {
         helpString = "Select transform to render from and cubemap to render into";
         isValid = (renderFromPosition != null) && (cubemap != null);
      }
      
      function OnWizardCreate () {
         // create temporary camera for rendering
         var go = new GameObject("CubemapCamera", Camera);
         // place it on the object
         go.transform.position = renderFromPosition.position;
         go.transform.rotation = Quaternion.identity;

         // render into cubemap      
         go.GetComponent.<Camera>().RenderToCubemap(cubemap);
         
         // destroy temporary camera
         DestroyImmediate(go);
      }
      
      @MenuItem("GameObject/Render into Cubemap")
      static function RenderCubemap () {
         ScriptableWizard.DisplayWizard.<RenderCubemapWizard>(
            "Render cubemap", "Render!");
      }
   }


Nommer le script "RenderCubemapWizard" et Mettre ce script dans le dossier Editor du dossier asset, s'il n'y a pas de dossier Editor en créer un.

A partir de ce moment, dans le bas du menu "game object" devrait apparaitre la fonction "Render in to Cubemap".

Créer dans le dossier asset une cubemap : menu contextuel > create > cubemap

Et créer un nouveau matériaux, et ajuster son Shader dans le type Reflective/Diffuse

Sélectionner Render in to cubemap dans le menu game object

une fenêtre apparait avec trois cases a informer :
1) Script

2) Render from position

3) Cubemap

la case script n'est pas obligatoire

créer un objet (cube) dans le monde qui servira de position pour le point de vue des reflets de la cubemap, et poser cet objet dans la fenêtre 2 : Render from position

sélectionner la Cubemap précédemment créée dans le dossier asset, et la mettre dans la case 3 : Cubemap.


Cliquer sur Render en bas à droite de la fenêtre.

Normalement si tout se passe bien, l'objet Cubemap créé dans le dossier Asset devrait avoir ses six faces. Pour augmenter la qualité de la réflexion, augmenter la valeur face size dans les attributs du cubemap (fenêtre Inspector) 64 à 128, 256, 1024 ou 2048...


Affecter le matériaux précédemment créé aux objets devant avoir une réflexion dans le monde.
-----------


mettre ce script dans un objet qui doit réfléter son environnement .

Code:
// Attach this script to an object that uses a Reflective shader.
   // Realtime reflective cubemaps!

   @script ExecuteInEditMode

   var cubemapSize = 128;
   var oneFacePerFrame = false;
   private var cam : Camera;
   private var rtex : RenderTexture;

   function Start () {
      // render all six faces at startup
      UpdateCubemap( 63 );
   }

   function LateUpdate () {
      if (oneFacePerFrame) {
         var faceToRender = Time.frameCount % 6;
         var faceMask = 1 << faceToRender;
         UpdateCubemap (faceMask);
      } else {
         UpdateCubemap (63); // all six faces
      }
   }

   function UpdateCubemap (faceMask : int) {
      if (!cam) {
         var go = new GameObject ("CubemapCamera", Camera);
         go.hideFlags = HideFlags.HideAndDontSave;
         go.transform.position = transform.position;
         go.transform.rotation = Quaternion.identity;
         cam = go.GetComponent.<Camera>();;
         cam.farClipPlane = 100; // don't render very far into cubemap
         cam.enabled = false;
      }
      
      if (!rtex) {   
         rtex = new RenderTexture (cubemapSize, cubemapSize, 16);
         rtex.isCubemap = true;
         rtex.hideFlags = HideFlags.HideAndDontSave;
         GetComponent.<Renderer>().sharedMaterial.SetTexture ("_Cube", rtex);
      }
      
      cam.transform.position = transform.position;
      cam.RenderToCubemap (rtex, faceMask);
   }

   function OnDisable () {
      DestroyImmediate (cam);
      DestroyImmediate (rtex);
   }

Page 1 sur 1 Heures au format UTC [ Heure d’été ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/