Jump to content

Hi There

Welcome to Klub Exile. If you happened to make your way to the site either from Lovers Lab or a Search on Google, we are glad you found us.  To unlock the entire site you will need to have a account registered.  Don't worry it is free but in the mean time you can read up on why we made the site and other little tidbits.  Feel free to join or Discord Server also if you have any more questions.  Thanks for stopping by and See You on the other side.

admin admin
Creating a Blog? Don't Forget the Feature Photo!! ×

Driver's Research Hut Returns


Driver

390 views

I noticed that the sliders responsible for closing eyes don't have the effect till the end of their limit, so I did a research to solve this issue.

11.jpg

Although the sliders lose their effect in the middle of the way, I know that it is working up to 100% of its output, because I tested it on a shape I made myself. However I want to fix this because not being able to use the full width of the slider can be an obstacle in creating poses, and above all, it doesn't feel good.

If you look into GUI scripts of the face (uiPoseEditFace.bs) you'll find lines related to closing eyes.

01.png

 .SliderMin :faceSliderMin;
 .SliderMax :faceSliderMax;

Both of lines determines range of the slider, in this case both are under the default settings of PE face sliders. The default values appear in the very first line of the same file.

04.png

var :faceSliderMin F32(-1);
var :faceSliderMax F32(2);

This means, minimum value of this slider is -100% of the shape, and the maximum is 200% of the shape. The default (neutral) slider position is 0%. But in this case the eye closing sliders seem to be limited to a possible maximum of 100% for some reason (that's why the slider stops at 100% even though it has a range up to 200%. Don't know why), and that's why they can't use the full width. So all I can do is to change the value of .SliderMax from "faceSliderMax" to "F32(1)".

Here the outcome.

02.png

12.jpg13.jpg

The range changed to -100% to 100%, the center became the neutral position. The sliders are available with the full width. But is there anything to look in this world that we should spread our eyelids so wide that they dig into our foreheads? Maybe it's enough to be -50% at minimum so that neutral position won't change as before, like below.

03.png

14.jpg15.jpg


Here I share the both -100/+100 and -50/+100 version. Be noticed that they can change the movement of lids in a pose.

EyeClose50-100.zipEyeClose100-100.zip

When you want to get rid of this, replace this "uiPoseEditFace.bs" with the one from 10.1.01p (KE) update, that is located in
(Game folder)\VX-Mod\Scripts\Shared\GUI
or backup your file before install.


Application

There's PE Mod, that uses the same logic as the PE face sliders but with more complicated and functional way. I'll look the items one by one.

CombineMatrixArray - This is the output power, we use only the first entry for PE mod, 1 is 100%, 0.5 is 50%, 0.25 is 25%.
OutputMin/OutputMax - The limit of output power at maximum/minimum. In my opinion you can set the same value as SliderMin/Max in most cases.
SliderMin/SliderMax - Works same as PEFace above, they are located in \VX-Mod\Scripts\Shared\GUI and each of PEmod, namely Body, Head, Hairs, Toy... has dedicated values.

In the case of Head PEMod, the SliderMin/SliderMax are set as

 .SliderMin F32(-1);
 .SliderMax F32(3);
 
So that neutral position (0) is always in a quarter, and if the output power is 100%, then also if OutputMin/OutputMax is the same value as SliderMin/SliderMax, the minimum power is -100% and the maximum is +300%. +300% means a morph has the features that are enhanced 3 times more. If you make a morph to close the lids at 100% of output power, they will be crossed and penetrated by each other at 300%.

To prevent from being such, you can reduce the power of output (CombineMatrixArray). If you need 100% of output when maximize the slider, then set 0.33 in CombineMatrixArray because 300% of 0.33 is 0.99, nealy 1 (100%). In that case minimum output will be -0.33 (-100% of 0.33, that is -33%). If you need a bit more effect, 0.5 would be not bad choice, in that case the range of the slider will become -50% to +150%.

05.png

 

Thank you for reading.

  • Like 5
  • Thanks 4
  • Thumbs Up 6

2 Comments


Recommended Comments

The eyes morphs computations are a bit more complicated.

There is also: AcAnimFaceLook.bs which has a block like:

AppScript . {
        .Script "        :face_poseBlend_eyes_closed_mul.Weight 1.2;
        :face_poseBlend_eyes_closed_min.Weight 0.2;
      ";
    };

How those morphs are driven are explained in AnimFace (PoseBlend :local_19)

However, if you want to investigate more you can debug the values at various slider levels and make some kind of mapping correspondence which is probably actually linear. (you can add the right version also).

The following code should go in the FGCalc.bs file (to run it, I usually change something like the hair mesh cap) You need to have your log window activated (not send to the file).

 

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "Body:body_blends_body_eye_L_morph" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:body_blends_body_eye_L_morph" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "Anim:Model01:body_blends_body_eye_L_morph" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

Don't remember much, but you can try and look into more things like, maybe not a good track to follow:

Spoiler

 

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_L_moveUp" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_R_moveUp" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_L_moveDown" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_R_moveDown" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";



var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_R_closed_min" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_L_closed_min" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";



var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_st_closedeyes" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";



var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_L_closed" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

var :obj_morph FindObj ( "Person" + :FGCalc_PersonID + "AnimFace:face_poseBlend_eye_R_closed" );
print ( :obj_morph .Name ? );
print " = ";
print ( :obj_morph .Weight ? );
pl "";

 

 

Link to comment

@hfg2

I have almost forgotten about those weight control of eyelids (I saw them often when I used emfs tool), and those codes are mind blowing, you must be playing the klub with two screens. 😄

Link to comment
×
×
  • Create New...

Important Information

WARNING! Adult Only Content You must be 18 years of age or older to enter. By accepting you agree to Klub Exile's Terms of Use and Guidelines upon creating an account.