clean project
This commit is contained in:
150
Assets/Oculus/LipSync/Scripts/OVRLipSyncContextTextureFlip.cs
Normal file
150
Assets/Oculus/LipSync/Scripts/OVRLipSyncContextTextureFlip.cs
Normal file
@@ -0,0 +1,150 @@
|
||||
/************************************************************************************
|
||||
Filename : OVRLipSyncContextTextureFlip.cs
|
||||
Content : This bridges the phoneme/viseme output to texture flip targets
|
||||
Created : August 7th, 2015
|
||||
Copyright : Copyright Facebook Technologies, LLC and its affiliates.
|
||||
All rights reserved.
|
||||
|
||||
Licensed under the Oculus Audio SDK License Version 3.3 (the "License");
|
||||
you may not use the Oculus Audio SDK except in compliance with the License,
|
||||
which is provided at the time of installation or download, or which
|
||||
otherwise accompanies this software in either electronic or hard copy form.
|
||||
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://developer.oculus.com/licenses/audio-3.3/
|
||||
|
||||
Unless required by applicable law or agreed to in writing, the Oculus Audio SDK
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
************************************************************************************/
|
||||
using UnityEngine;
|
||||
|
||||
public class OVRLipSyncContextTextureFlip : MonoBehaviour
|
||||
{
|
||||
// PUBLIC
|
||||
|
||||
// Manually assign the material
|
||||
public Material material = null;
|
||||
|
||||
// Set the textures for each viseme. We should follow the viseme order as specified
|
||||
// by the Phoneme list
|
||||
[Tooltip("The texture used for each viseme.")]
|
||||
[OVRNamedArray(new string[] { "sil", "PP", "FF", "TH", "DD", "kk", "CH",
|
||||
"SS", "nn", "RR", "aa", "E", "ih", "oh", "ou" })]
|
||||
public Texture[] Textures = new Texture[OVRLipSync.VisemeCount];
|
||||
|
||||
// smoothing amount
|
||||
[Range(1, 100)]
|
||||
[Tooltip("Smoothing of 1 will yield only the current predicted viseme," +
|
||||
"100 will yield an extremely smooth viseme response.")]
|
||||
public int smoothAmount = 70;
|
||||
|
||||
// PRIVATE
|
||||
|
||||
// Look for a Phoneme Context (should be set at the same level as this component)
|
||||
private OVRLipSyncContextBase lipsyncContext = null;
|
||||
|
||||
// Capture the old viseme frame (we will write back into this one)
|
||||
private OVRLipSync.Frame oldFrame = new OVRLipSync.Frame();
|
||||
|
||||
/// <summary>
|
||||
/// Start this instance.
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
// make sure there is a phoneme context assigned to this object
|
||||
lipsyncContext = GetComponent<OVRLipSyncContextBase>();
|
||||
if (lipsyncContext == null)
|
||||
{
|
||||
Debug.LogWarning("LipSyncContextTextureFlip.Start WARNING:" +
|
||||
" No lip sync context component set to object");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Send smoothing amount to context
|
||||
lipsyncContext.Smoothing = smoothAmount;
|
||||
}
|
||||
|
||||
if (material == null)
|
||||
{
|
||||
Debug.LogWarning("LipSyncContextTextureFlip.Start WARNING:" +
|
||||
" Lip sync context texture flip has no material target to control!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update this instance.
|
||||
/// </summary>
|
||||
void Update ()
|
||||
{
|
||||
if((lipsyncContext != null) && (material != null))
|
||||
{
|
||||
// trap inputs and send signals to phoneme engine for testing purposes
|
||||
|
||||
// get the current viseme frame
|
||||
OVRLipSync.Frame frame = lipsyncContext.GetCurrentPhonemeFrame();
|
||||
if (frame != null)
|
||||
{
|
||||
// Perform smoothing here if on original provider
|
||||
if (lipsyncContext.provider == OVRLipSync.ContextProviders.Original)
|
||||
{
|
||||
// Go through the current and old
|
||||
for (int i = 0; i < frame.Visemes.Length; i++)
|
||||
{
|
||||
// Convert 1-100 to old * (0.00 - 0.99)
|
||||
float smoothing = ((smoothAmount - 1) / 100.0f);
|
||||
oldFrame.Visemes[i] =
|
||||
oldFrame.Visemes[i] * smoothing +
|
||||
frame.Visemes[i] * (1.0f - smoothing);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
oldFrame.Visemes = frame.Visemes;
|
||||
}
|
||||
|
||||
SetVisemeToTexture();
|
||||
}
|
||||
}
|
||||
|
||||
// Update smoothing value in context
|
||||
if (smoothAmount != lipsyncContext.Smoothing)
|
||||
{
|
||||
lipsyncContext.Smoothing = smoothAmount;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the viseme to texture.
|
||||
/// </summary>
|
||||
void SetVisemeToTexture()
|
||||
{
|
||||
// This setting will run through all the Visemes, find the
|
||||
// one with the greatest amplitude and set it to max value.
|
||||
// all other visemes will be set to zero.
|
||||
int gV = -1;
|
||||
float gA = 0.0f;
|
||||
|
||||
for (int i = 0; i < oldFrame.Visemes.Length; i++)
|
||||
{
|
||||
if(oldFrame.Visemes[i] > gA)
|
||||
{
|
||||
gV = i;
|
||||
gA = oldFrame.Visemes[i];
|
||||
}
|
||||
}
|
||||
|
||||
if ((gV != -1) && (gV < Textures.Length))
|
||||
{
|
||||
Texture t = Textures[gV];
|
||||
|
||||
if(t != null)
|
||||
{
|
||||
material.SetTexture("_MainTex", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user