라이브 2D 캐릭터의 눈동자에 자태가 비쳐요.
그중.'동공의 반사'와 LT에 대한 전시가 진행되고 있습니다.
'뒷공간의 빛이 동공 깊숙이 비친다'는 부분에서.
이 부분이 실시간으로 바뀌면 표현이 더 넓지 않나요?그러므로
모형의 준비
모형 먼저 준비.
무늬가 전체적으로 변질될 수 있기 때문에 상영된 영상의 무늬는 반드시 전용이어야 한다
율판리베씨
그림은 2의 배수가 아니기 때문에 주의해야 한다
그리고 사진을 찍을 때 위치 관계도 중요하기 때문에 카메라 이미지에서 성형한 사진을 사용하는 것이 가장 좋다
특별한 변형 계획이 없다면 두 개의 삼각형도 상관없지만 눈의 변형에 맞춰 대체적으로 제거해야 한다
눈동자에 들어갈 때는 눈동자나 흰자로 줄이고 가산한다.그리고 약 50% 정도 투과를 해요.
취향에 맞게 꼼꼼하게 연동 처리가 가능합니다.
웹 카메라 가져오기
Unity 관련 프로젝트입니다.
동작으로 WebCamTexture를 시작하고 Update에서
매번 SetPixle32와 GetPixle32를 맡길게요.
대응하는 무늬의 크기가 일치하지 않기 때문에 웹캠에서 생성된 무늬
setTexture로 바꾸기
hitomi.csusing 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();
}
}
결과 샘플
Reference
이 문제에 관하여(라이브 2D 캐릭터의 눈동자에 자태가 비쳐요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ganeesya/items/b7ad387cd45406b82cf8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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();
}
}
결과 샘플
Reference
이 문제에 관하여(라이브 2D 캐릭터의 눈동자에 자태가 비쳐요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ganeesya/items/b7ad387cd45406b82cf8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(라이브 2D 캐릭터의 눈동자에 자태가 비쳐요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ganeesya/items/b7ad387cd45406b82cf8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)