Connexion | M’enregistrer




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Unity 3D - Chromakey Video Alpha
UNREAD_POSTPosté: Ven Déc 16, 2011 7:33 am 
NooFondateur
Avatar de l’utilisateur
Inscription: Mar Jan 09, 2007 3:21 am
Messages: 1158
Double image with Alpha for Chroma Key in Unity 3D, by Yann Minh (Yannminh.org)

Make a movie with both, the foreground and the alpha key image on the same picture.
Import this movie in Unity3D

create a shader with the script written by LouLou from the french forum http://www.unity3d-france.com
http://www.unity3d-france.com/unity/phpBB3/viewtopic.php?f=8&t=901

Apply this shader to a material, and adjust the Tile and offset of the texture of this material to hide the white alpha image.



FRANÇAIS

Unity ne reconnait pas les movies ayant un alpha, et la suppression par script du vert n'a pas un rendu terrible, il y a des pixels et des liserés vert autour de la découpe.

pour contourner le problème, il suffit d'intégrer l'alpha en fabriquant un fichier vidéo comportant l'image de foreground, et sa découpe dans la même image. comme ceci
Image

Ensuite, il faut fabriquer un shader de type alpha, qu'on ajuste avec l'offset et tiling.

Loulou sur le forum http://www.unity3d-france.com propose un script de shader qui fonctionne très bien

Code:
Shader "Custom/VideoAlpha" {
   Properties {
      _MainTex ("Base (RGB)", 2D) = "white" {}
      _AlphaOffsetX ("alpha offset x", float) = 0.5
      _AlphaOffsetY ("alpha offset y", float) = 0
      _Cutoff ("Cutoff", Range (0,1)) = .5
   }
   SubShader {
   AlphaTest Less [_Cutoff]
         CGPROGRAM
         #pragma surface surf Lambert
   
         sampler2D _MainTex;
         float _AlphaOffsetX;
         float _AlphaOffsetY;
   
         struct Input {
            float2 uv_MainTex;
         };
   
         void surf (Input IN, inout SurfaceOutput o) {
            half4 c = tex2D (_MainTex, IN.uv_MainTex);
            IN.uv_MainTex.x += _AlphaOffsetX;
            IN.uv_MainTex.y += _AlphaOffsetY;
            half4 d = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = (d.r*-1)+1;
         }
         ENDCG
     
   }
   FallBack "Diffuse"
}


ça marche nickel,
c'est beaucoup plus beau que d'utiliser la suppression du vert,
qui laisse un liseré...
et avec une séquence de 600 pixels en hauteur la qualité est très supportable.

Ci joint un lien vers deux séquences que je viens de faire, pour tester,
pour ceux qui voudraient expérimenter le truc...

http://www.noomuseum.net/mov/YannSteadyDoubleAlpha_674.mov
(le fichier .ogv pour Unity http://www.noomuseum.net/mov/YannSteadyDoubleAlpha_674.ogv
Image

Modele Soizic Hess http://soizic-hess.com/
http://www.noomuseum.net/mov/SoizicDoubleAlpha-674.mov
(le fichier .ogv pour Unity http://www.noomuseum.net/mov/SoizicRotatekey-2-800ogv.ogv
Image


1) Comment rendre la texture lumineuse, de type Unlit... ?

????

2) comment faire pour que ça marche avec une texture en .ogv
téléchargée depuis le net... ?

La j'ai la réponse, il suffit de mettre un script de lecture de vidéo dans l'objet qui sert d'écran, et de mettre une image fixe similaire, dans la fenetre du matériaux.

Par exemple :
Code:
private var url = "http://www.noomuseum.net/mov/YannSteadyDoubleAlpha_674.ogv";  // Lien de la video
public var object:GameObject; // Objet sur lequel doit être afficher la video

function Start () {

var www = new WWW(url);

var movieTexture = www.movie;
while (!movieTexture.isReadyToPlay)
yield;

object.renderer.material.mainTexture = movieTexture;


audio.clip = movieTexture.audioClip;

movieTexture.Play();
movieTexture.Loop = true;
audio.Play();
}

@script RequireComponent (AudioSource)


Si vous préférez, plutôt que d'héberger le fichier vidéo .ogv, non pas sur le web, mais sur votre Mac ou Pc pour des versions stand alone, il faut enregistrer le fichier .ogv dans votre dossier "Users", et dans le script Unity, utiliser une adresse de ce type : file:///Users/YannSteadyDoubleAlpha_674.ogv
l'url de type http étant remplacée par "file:///


Si vous voulez voir ce que ça donne, j'ai mis en ligne une version du noobunker de cyberesthésie http://www.cyberesthesie.com avec deux videos incrustées à l'intérieur en démo. (les vidéos sont des .ogv hébergés sur le web.)
http://www.cyberesthesie.com/cyberesthesia-3d/Cyberesthesia.html
Image


C'est une version multiplayer, faire "Heberger" puis "entrez dans les Noobunkers"

C'est un niveau un peu lourd de 132 mega, car c'est la version du NooBunker qui est utilisée pendant les performances de cyberesthesie, en particulier celle de la demeure du Chaos qui est ici
http://noozone.free.fr/noocrypte/viewtopic.php?f=16&t=1011

ou celle de Souterrain porte VI qui est ici
http://noozone.free.fr/noocrypte/viewtopic.php?f=16&t=1797

Dans cette version du Noobunker sous Unity, les collisions avec les sphères envoient des datas vers OSC pour déclencher des E-Stims, et Teledildo.



Yann, NooIncrusté...


 Hors ligne
 

Afficher les messages postés depuis:  Trier par  

Poster un nouveau sujet Répondre au sujet  [ 1 message ] 


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Panel

Haut Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Rechercher:
Aller à:  
 cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduction par: phpBB-fr.com
Dizayn Ercan Koc