라이브 2D 캐릭터의 눈동자에 자태가 비쳐요.

10790 단어 Live2DUnity
며칠 전 2016/7/2 라이브 2D 미팅, Alive 2016
그중.'동공의 반사'와 LT에 대한 전시가 진행되고 있습니다.
'뒷공간의 빛이 동공 깊숙이 비친다'는 부분에서.
이 부분이 실시간으로 바뀌면 표현이 더 넓지 않나요?그러므로

모형의 준비


모형 먼저 준비.
무늬가 전체적으로 변질될 수 있기 때문에 상영된 영상의 무늬는 반드시 전용이어야 한다
율판리베씨
그림은 2의 배수가 아니기 때문에 주의해야 한다
그리고 사진을 찍을 때 위치 관계도 중요하기 때문에 카메라 이미지에서 성형한 사진을 사용하는 것이 가장 좋다
특별한 변형 계획이 없다면 두 개의 삼각형도 상관없지만 눈의 변형에 맞춰 대체적으로 제거해야 한다

눈동자에 들어갈 때는 눈동자나 흰자로 줄이고 가산한다.그리고 약 50% 정도 투과를 해요.

취향에 맞게 꼼꼼하게 연동 처리가 가능합니다.

웹 카메라 가져오기


Unity 관련 프로젝트입니다.
동작으로 WebCamTexture를 시작하고 Update에서
매번 SetPixle32와 GetPixle32를 맡길게요.
대응하는 무늬의 크기가 일치하지 않기 때문에 웹캠에서 생성된 무늬
setTexture로 바꾸기
hitomi.cs
using UnityEngine;
using System;
using System.Collections;
using live2d;
using System.Text.RegularExpressions;

[ExecuteInEditMode]
public class SimpleModel : MonoBehaviour 
{
    public TextAsset mocFile ;
    public Texture2D[] textureFiles ;

    // Webカメラ取り込み
    public WebCamTexture camTex;
    // とり込み結果反映用
    private Texture2D camTex2D;

    private Live2DModelUnity live2DModel;
    private Matrix4x4 live2DCanvasPos;

    private EyeBlinkMotion ebm;

    void Start ()
    {
        if (live2DModel != null) return;
        Live2D.init();
        ebm = new EyeBlinkMotion();
        ebm.setEyeMotion(100, 50, 100);
        ebm.setInterval(5000);

        // Webカメラ処理 今回はFaceRig探してる
        WebCamDevice[] devices = WebCamTexture.devices;

        foreach ( var ele in devices)
        {
            if(Regex.IsMatch(ele.name,"Face"))
            {
                camTex = new WebCamTexture(ele.name);
                camTex.Play();
                camTex2D = new Texture2D(camTex.width, camTex.height);
            }
        }

        live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);
        for (int i = 0; i < textureFiles.Length; i++)
        {
            live2DModel.setTexture(i, textureFiles[i]);
            textureFiles[i].hideFlags = HideFlags.None;

        }

        //Webカメラの処理結果に最終テクスチャを差し替え
        live2DModel.setTexture(3, camTex2D);

        float modelWidth = live2DModel.getCanvasWidth();
        live2DCanvasPos = Matrix4x4.Ortho(0, modelWidth, modelWidth, 0, -50.0f, 50.0f);
    }

    void Update()
    {
        if (live2DModel == null) return;
        live2DModel.setMatrix(transform.localToWorldMatrix * live2DCanvasPos);

        if (!Application.isPlaying)
        {
            live2DModel.update();
            return;
        }

        //Webカメラから反映用のテクスチャに移す処理
        camTex2D.SetPixels32(camTex.GetPixels32());
        camTex2D.Apply(); //コレを呼ばないと処理が完了しないとかなんとか

        ebm.setParam(live2DModel);

        live2DModel.update();
    }

    void OnRenderObject()
    {
        if (live2DModel == null) return;
        live2DModel.draw();
    }

    void OnApplicationQuit()
    {
        camTex.Stop();
    }
}

결과 샘플

좋은 웹페이지 즐겨찾기