Skip to content
Snippets Groups Projects
Commit b338f5c4 authored by Denys Kuznietsov's avatar Denys Kuznietsov
Browse files

improved blinking animations: much smoother now

parent f3ad56b1
No related branches found
No related tags found
No related merge requests found
......@@ -45,7 +45,8 @@ void UVHSaccades::TickComponent(float DeltaTime, ELevelTick TickType, FActorComp
lastBlink++;
float FPS = 1.0/DeltaTime;
float sampling_ratio = FPS/30*0.05;
float timeLastBlink = lastBlink/FPS;
// float timeLastBlink = lastBlink/FPS;
timeLastBlink += DeltaTime;
float prob_change = StateNoChangeProb(timeInState*sampling_ratio,IsGazeAway);
float rand_prob = FMath::RandRange(0,100);
......@@ -64,43 +65,47 @@ void UVHSaccades::TickComponent(float DeltaTime, ELevelTick TickType, FActorComp
{
if(nextBlink==0)
{
std::normal_distribution<float> gBlink(intervalBlink, intervalBlinkStD);
UE_LOG(LogTemp, Display, TEXT("[Blinking]: Generate 1st blink timestamp"));
std::normal_distribution<float> gBlink(1.5, 0.4);
nextBlink = gBlink(gen);
}
// UE_LOG(LogTemp, Display, TEXT("[Blinking]: last blink: %f next blink: %f"), timeLastBlink,nextBlink);
if(timeLastBlink>nextBlink)
{
// do blinking;
BlinkAnimationTimer++;
UE_LOG(LogTemp, Display, TEXT("[Blinking]: Start blinking"));
UE_LOG(LogTemp, Display, TEXT("[Blinking]: Current blendshape value %f"), cur_value);
UE_LOG(LogTemp, Display, TEXT("[Blinking]: BlinkAnimationTimerValue %i"), BlinkAnimationTimer);
// UE_LOG(LogTemp, Display, TEXT("[Blinking]: Start blinking"));
// UE_LOG(LogTemp, Display, TEXT("[Blinking]: Current blendshape value %f"), cur_value);
// UE_LOG(LogTemp, Display, TEXT("[Blinking]: BlinkAnimationTimerValue %i"), BlinkAnimationTimer);
if(cur_value<=1.0 && !bEyesClosed)
{
UE_LOG(LogTemp, Display, TEXT("[Blinking]: closing"));
cur_value = FMath::FInterpConstantTo(cur_value, 1.0, DeltaTime, 10);
if(owner->GetBodyType()==BodyType::CC3) AnimInstance->SetMorphTarget(FName("Eye_Blink"), cur_value);
else AnimInstance->EyeBlink = cur_value;
cur_value = FMath::FInterpConstantTo(cur_value, 1.0, DeltaTime, 8);
// if(owner->GetBodyType()==BodyType::CC3) AnimInstance->SetMorphTarget(FName("Eye_Blink"), cur_value);
// else AnimInstance->EyeBlink = cur_value;
if(cur_value==1.0) bEyesClosed = true;
}
else
{
UE_LOG(LogTemp, Display, TEXT("[Blinking]: opening"));
cur_value = FMath::FInterpConstantTo(cur_value, 0.0, DeltaTime, 10);
if(owner->GetBodyType()==BodyType::CC3) AnimInstance->SetMorphTarget(FName("Eye_Blink"), cur_value);
else AnimInstance->EyeBlink = cur_value;
cur_value = FMath::FInterpConstantTo(cur_value, 0.0, DeltaTime, 8);
// if(owner->GetBodyType()==BodyType::CC3) AnimInstance->SetMorphTarget(FName("Eye_Blink"), cur_value);
// else AnimInstance->EyeBlink = cur_value;
if(cur_value==0)
{
UE_LOG(LogTemp, Display, TEXT("[Blinking]: done"));
std::normal_distribution<float> gBlink(intervalBlink, intervalBlinkStD);
nextBlink = gBlink(gen);
lastBlink = 0;
timeLastBlink = 0;
BlinkAnimationTimer = 0;
bEyesClosed = false;
}
}
}
if(owner->GetBodyType()==BodyType::CC3) AnimInstance->SetMorphTarget(FName("Eye_Blink"), cur_value);
else AnimInstance->EyeBlink = cur_value;
}
if(timeInState%15==0)
......
......@@ -40,7 +40,7 @@ private:
float GenerateDirection();
int timeInState;
int lastBlink; //in frames
const int blinkDuration = 20;
float timeLastBlink; //in ms
int BlinkAnimationTimer;
const float intervalBlink = 3.4; //in ms
const float intervalBlinkStD = 0.8; //in ms
......@@ -50,5 +50,4 @@ private:
FRotator EyeOrientation;
AVirtualHuman* owner = nullptr;
UVHAnimInstance* AnimInstance = nullptr;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment