Skip to content

Commit

Permalink
Translation
Browse files Browse the repository at this point in the history
Finally got everything done! Please update quickly for review. Thanks!
  • Loading branch information
Willycho committed Sep 24, 2024
1 parent ac2357e commit a99c15a
Show file tree
Hide file tree
Showing 32 changed files with 3,497 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
sidebar_position: 100
---

# 수학 표현식

## 지원되는 함수

```
deg => x * Mathf.Rad2Deg
rad => x * Mathf.Deg2Rad
sin => Mathf.Sin
cos => Mathf.Cos
tan => Mathf.Tan
asin => Mathf.Asin
acos => Mathf.Acos
atan => Mathf.Atan
atan2 => Mathf.Atan2
noise => Mathf.PerlinNoise
sqrt => Mathf.Sqrt
abs => Mathf.Abs(float)
min => Mathf.Min(float, float)
max => Mathf.Max(float, float)
pow => Mathf.Pow(float, float)
exp => Mathf.Exp
log => Mathf.Log(float, float)
ln => Mathf.Log(float)
log10 => Mathf.Log10
ceil => Mathf.Ceil
floor => Mathf.Floor
round => Mathf.Round
sign => Mathf.Sign
clamp => Mathf.Clamp(float, float, float)
clamp01 => Mathf.Clamp01
lerp => Mathf.Lerp(float, float, float)
ulerp => Mathf.LerpUnclamped(float, float, float)
alerp => Mathf.LerpAngle(float, float, float)
smoothstep => Mathf.SmoothStep(float, float, float)
repeat => Mathf.Repeat(float, float)
pingpong => Mathf.PingPong(float, float)
ilerp => Mathf.InverseLerp(float, float, float)
rand => Random.Range(float, float)
randint => Random.Range(int, int)
```

## 세부 테이블

### 단항 함수

| 함수 | 유니티 코드 | 설명 |
|:---------- |:---------------- |:-------------------------------------------------------- |
| `sqrt(x)` | `Mathf.Sqrt(x)` | x의 제곱근을 계산해 줍니다. |
| `abs(x)` | `Mathf.Abs(x)` | x의 절대값을 계산해 줍니다. |
| `ceil(x)` | `Mathf.Ceil(x)` | x보다 크거나 같은 가장 가까운 정수를 찾아 줍니다. |
| `floor(x)` | `Mathf.Floor(x)` | x보다 작거나 같은 가장 가까운 정수를 찾아 줍니다. |
| `round(x)` | `Mathf.Round(x)` | x를 가장 가까운 정수로 반올림해 줍니다. |
| `sign(x)` | `Mathf.Sign(x)` | x가 양수면 1, 음수면 -1을 알려 줍니다. |

### 삼각 함수

| 함수 | 유니티 코드 | 설명 |
|:------------- |:------------------- |:----------------------------------------------------------- |
| `deg(x)` | `x * Mathf.Rad2Deg` | 라디안 단위의 각도를 도(degree) 단위로 바꿔줍니다. |
| `rad(x)` | `x * Mathf.Deg2Rad` | 도(degree) 단위의 각도를 라디안 단위로 바꿔줍니다. |
| `sin(x)` | `Mathf.Sin(x)` | 각도 x(라디안 단위)의 사인(sine) 값을 계산해 줍니다. |
| `cos(x)` | `Mathf.Cos(x)` | 각도 x(라디안 단위)의 코사인(cosine) 값을 계산해 줍니다. |
| `tan(x)` | `Mathf.Tan(x)` | 각도 x(라디안 단위)의 탄젠트(tangent) 값을 계산해 줍니다. |
| `asin(x)` | `Mathf.Asin(x)` | x의 역사인(arc sine) 값을 라디안 단위로 계산해 줍니다. |
| `acos(x)` | `Mathf.Acos(x)` | x의 역코사인(arc cosine) 값을 라디안 단위로 계산해 줍니다. |
| `atan(x)` | `Mathf.Atan(x)` | x의 역탄젠트(arc tangent) 값을 라디안 단위로 계산해 줍니다. |
| `atan2(x, y)` | `Mathf.Atan2(x, y)` | v1=(0,1)과 v2=(x,y) 두 벡터 사이의 각도를 라디안 단위로 계산해 줍니다. |

### 지수 및 로그 함수

| 함수 | 유니티 코드 | 설명 |
|:----------- |:----------------- |:-------------------------------------------- |
| `pow(x, y)` | `Mathf.Pow(x, y)` | x를 y 제곱한 값을 계산해 줍니다. |
| `exp(x)` | `Mathf.Exp(x)` | e(자연 상수)를 x 제곱한 값을 계산해 줍니다. |
| `log(x, y)` | `Mathf.Log(x, y)` | x의 y를 밑(base)으로 하는 로그 값을 계산해 줍니다. |
| `ln(x)` | `Mathf.Log(x)` | x의 자연 로그(밑이 e인 로그) 값을 계산해 줍니다. |
| `log10(x)` | `Mathf.Log10(x)` | x의 밑이 10인 로그 값을 계산해 줍니다. |

### 보간 함수

| 함수 | 유니티 코드 | 설명 |
|:--------------------- |:------------------------------ |:---------------------------------------------------------------------------- |
| `lerp(x, y, t)` | `Mathf.Lerp(x, y, t)` | t에 따라 x와 y 사이를 선형으로 보간(중간 값을 계산)해 줍니다. |
| `ulerp(x, y, t)` | `Mathf.LerpUnclamped(x, y, t)` | t에 따라 x와 y 사이를 제한 없이 선형으로 보간해 줍니다. |
| `alerp(x, y, t)` | `Mathf.LerpAngle(x, y, t)` | 각도 x와 y 사이를 t에 따라 보간해 줍니다. |
| `smoothstep(x, y, t)` | `Mathf.SmoothStep(x, y, t)` | t에 따라 x와 y 사이를 부드럽게 보간해 줍니다. |


### 그 외 함수

| 함수 | 유니티 코드 | 설명 |
|:--------------------- |:-------------------------------- |:---------------------------------------------------------------------------------------------------- |
| `min(x, y)` | `Mathf.Min(x, y)` | 두 값 중에서 더 작은 값을 골라 줍니다. |
| `max(x, y)` | `Mathf.Max(x, y)` | 두 값 중에서 더 큰 값을 골라 줍니다. |
| `noise(x, y)` | `Mathf.PerlinNoise(x, y)` | 주어진 좌표 x와 y에서 페를린 노이즈라는 값을 만들어 줍니다. |
| `clamp(x, min, max)` | `Mathf.Clamp(x, min, max)` | x가 min보다 작지 않고 max보다 크지 않게 범위 안에 맞춰 줍니다. |
| `clamp01(x)` | `Mathf.Clamp01(x)` | x가 0보다 작지 않고 1보다 크지 않게 맞춰 줍니다. |
| `repeat(t, length)` | `Mathf.Repeat(t, length)` | t가 0에서 length 사이에서 계속 반복되도록 해줍니다. |
| `pingpong(t, length)` | `Mathf.PingPong(t, length)` | t가 0과 length 사이에서 왔다 갔다 반복되도록 해줍니다. |
| `ilerp(from, to, t)` | `Mathf.InverseLerp(from, to, t)` | from과 to 사이에서 t가 어느 위치에 있는지 계산해 줍니다. |
| `rand(min, max)` | `Random.Range(min, max)` | min과 max 사이의 무작위 숫자를 골라 줍니다. (실수) |
| `randint(min, max)` | `Random.Range(min, max)` | min과 max 사이의 무작위 숫자를 골라 줍니다. (정수, max는 포함하지 않음) |

<AuthorBar authors={{
creators: [
{name: 'hanekit', github: 'hanekit'},
],
translators: [
{name: 'Willycho', github: 'Willycho'},
],
}} />
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
sidebar_position: 11
---

# 캐릭터 애니메이션 모드

Warudo에서 사용하고 싶은 [애니메이션 클립](https://docs.unity3d.com/kr/current/Manual/AnimationClips.html)이 있나요? 그렇다면 캐릭터 애니메이션 모드가 필요해요!

:::caution
만약 비뼈대 변환이나 재질 속성을 애니메이션화하는 애니메이션이 있다면, 다른 방법으로 캐릭터에 이 애니메이션을 추가하는 것이 좋습니다. [캐릭터 모드](character-mod#animations) 자세한 내용은 캐릭터 모드 섹션을 참조하세요.
:::

## 설정

### 1단계: 애니메이션 클립 준비

이미 프로젝트에 **애니메이션 클립**(청록색 삼각형 아이콘으로 표시)이 있다면, 잘됐어요! 이 단계를 건너뛰어도 됩니다

애니메이션이 FBX 파일인 경우, 먼저 리그 임포트 설정에서 **Animation Type**을 Humanoid로 설정하세요:

![](/doc-img/en-mod-14.png)

그런 다음, FBX 파일을 확장하고 내부의 **애니메이션 클립**(청록색 삼각형 아이콘으로 표시)을 선택한 후 Ctrl+D를 눌러 FBX 파일 밖에 복사본을 만드세요.

![](/doc-img/en-character-animation-mod-1.webp)

### 2단계: 애니메이션 클립 이름 변경

애니메이션 클립의 이름을 **"Animation"**으로 변경하고 모드 폴더(모든 하위 폴더에 넣을 수 있음)에 배치했는지 확인하세요.

### 2단계: 모드 내보내기

**Warudo → Build Mod**를 선택하고, 생성된 `.warudo` 파일이 `CharacterAnimations` 데이터 폴더에 저장되었는지 확인하세요.

<AuthorBar authors={{
creators: [
{name: 'HakuyaTira', github: 'TigerHix'},
],
translators: [
{name: 'Willycho', github: 'Willycho'},
],
}} />
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
---
sidebar_position: 10
---

# 캐릭터 모드

Unity로 가져올 수 있는 캐릭터 모델이라면 Warudo에 임포트할 수 있어요! 여기에는 FBX 모델이나 [VRChat 아바타](https://booth.pm/en/search/avatar?tags%5B%5D=3D+Character)도 포함되죠. VRM 모델을 사용하더라도, 캐릭터 모드를 만들면 커스텀 셰이더를 추가하거나 [Dynamic Bone](https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743)[Magica Cloth](https://assetstore.unity.com/packages/tools/physics/magica-cloth-160144) 같은 더 나은 물리 컴포넌트를 적용하는 등의 이점이 있어요.

## 설정

### 1단계: 모델 준비

먼저 캐릭터 모델을 모딩 프로젝트에 임포트하세요. 모델은 [Animator](https://docs.unity3d.com/ScriptReference/Animator.html) 컴포넌트가 있는 휴머노이드 모델이어야 해요. 만약 모델에 Animator 컴포넌트가 없다면, 모델 임포트 설정에서 **Animation Type**을 Humanoid로 설정한 후 **Apply**를 클릭하세요.

![](/doc-img/en-character-mod-1.webp)

만약 FBX 모델을 사용 중이라면, 모델 임포트 설정에서 **R/W Enabled**가 체크되어 있는지 확인하세요.

![](/doc-img/en-character-mod-2.webp)

### 2단계: 캐릭터 설정

씬에 캐릭터를 배치하고 선택하세요. 메뉴 바에서 **Warudo → Setup Character...** 를 선택하세요. Setup Character 창에서 **Setup selected GameObject as character mod**를 선택하세요:

![](/doc-img/en-character-mod-3.webp)

**Character**라는 이름의 프리팹이 모드 폴더에 생성된 것을 확인할 수 있을 거예요:

![](/doc-img/en-character-mod-4.webp)

:::tip
캐릭터의 뼈대가 꼬이거나 비틀어진 것을 발견했다면 [뼈대 정상화](#normalize-bones) 섹션을 참고하세요.
:::

### 3단계: 모드 내보내기

**Warudo → Build Mod**를 선택하고, 생성된 `.warudo` 파일이 `Characters` 데이터 폴더에 들어갔는지 확인하세요.

## 스케일링

Warudo에서는 **Character → Transform → Scale** 속성을 사용해 캐릭터의 크기를 조정할 수 있어요. 하지만 이렇게 하면 래그돌, IK, 또는 몇몇 모션 캡처 시스템 (예: [Leap Motion](../mocap/leap-motion))과의 호환성이 깨질 수 있어요. 캐릭터의 크기를 조정해야 할 경우, Unity나 Warudo에 모델을 임포트하기 전에 3D 모델링 소프트웨어에서 미리 조정하는 것을 권장해요.

## 서드파티 컴포넌트

Warudo에는 캐릭터 모드에서 사용할 수 있는 몇 가지 서드파티 컴포넌트가 포함되어 있어요. 자주 사용하는 컴포넌트는 다음과 같아요:

* [VRM](https://vrm.dev/en/univrm/) VRM Spring Bones, VRM Spring Bone Colliders와 같은 컴포넌트
* [Animation Rigging](https://docs.unity3d.com/Packages/com.unity.animation.rigging@latest) Rotation Constraint 같은 컴포넌트
* [Dynamic Bone](https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743) 1.3.2
* [VRC PhysBones](https://docs.vrchat.com/docs/physbones) (런타임에 자동으로 Dynamic Bone으로 변환됨)
* [Magica Cloth](https://assetstore.unity.com/packages/tools/physics/magica-cloth-160144) 1.12.11
* [Magica Cloth 2](https://assetstore.unity.com/packages/tools/physics/magica-cloth-2-242307) 2.6.0

Dynamic Bone과 Magica Cloth는 Warudo SDK에 포함되어 있지 않으므로 해당 Unity 패키지를 직접 임포트해야 해요.

Warudo는 모드에 C# 스크립트를 포함할 수 있기 때문에, 다른 서드파티 Unity 컴포넌트도 사용할 수 있어요! 하지만 [커스텀 C# 스크립트](mod-sdk#custom-scripts) 섹션에서 설명한 제한 사항을 참고해야 해요.

## 애니메이션

캐릭터에 머리 색깔 변경이나 날개 퍼덕임과 같은 커스텀 애니메이션을 추가하고 싶을 수 있어요. 애니메이션의 성격에 따라 다음 방법 중 하나를 사용할 수 있어요:

* **애니메이션이 인체 뼈대만 제어하는 경우:** [캐릭터 애니메이션 모드](character-animation-mod)를 생성하고 Warudo의 캐릭터 애니메이션 노드나 Character → Overlaying Animations를 사용해 재생하세요.
* **애니메이션이 재질 속성을 제어하는 경우:** Warudo의 캐릭터 표현 시스템 (Character → Expressions)을 사용하세요.
* **애니메이션 뼈대가 아닌 변형을 제어하는 경우:** Animator 컴포넌트에 [애니메이터 컨트롤러](https://docs.unity3d.com/kr/current/Manual/class-AnimatorController.html)를 추가하고, [Feline's Animator Parameter Setter Nodes](https://steamcommunity.com/sharedfiles/filedetails/?id=3005732826&searchtext=animator+)를 사용해 애니메이터 컨트롤러에 접근하세요.

:::info
VRChat 모델을 재사용하는 경우, 모델과 함께 제공되는 Animator Controller를 그대로 사용할 수도 있어요. 하지만 처음 두 가지 방법이 Warudo의 모션 캡처 및 애니메이션 시스템과 더 잘 통합되기 때문에 이 방법들을 권장해요.
:::

## 뼈대 정상화 {#normalize-bones}

뼈대 정상화는 모델의 뼈대가 T-포즈에서 회전 값이 0이 되도록 보장하는 과정이에요. 모델을 Unity로 가져와서 1. 모델이 T-포즈 상태인지, 2. 모든 뼈대 변환의 회전 값이 (0, 0, 0)인지 확인한 후 Warudo SDK를 사용해 캐릭터를 설정할 수 있어요. **Setup Character** 창에서도 뼈대가 정상화되지 않은 경우 경고가 표시돼요:

![](/doc-img/en-mod-11.png)

캐릭터 설정 후 뼈대가 비틀린다면 모델의 뼈대가 정상화되지 않고 Warudo SDK가 모델을 손상시키지 않고 자동으로 뼈대를 정상화하는데 실패했을 가능성이 높아요. 이런 경우 FBX 모델을 Unity로 임포트 하기 전에 수동으로 뼈대를 정상화해야 해요.

Blender나 Maya 같은 모델링 도구에서 뼈대를 정상화하는 여러 방법이 있지만, 가장 검증된 방법은 FBX 모델에서 [VRM](https://vrm.dev/en/univrm/) 모델을 생성한 후, VRM 모델을 Unity로 가져오는 거예요. VRM 모델은 뼈대가 정상화된 상태임이 보장되기 때문에 Warudo SDK로 캐릭터 설정을 한 후에도 뼈대가 비틀리지 않을 거예요.

Blender 사용자인 경우, [Cats](https://github.com/absolute-quantum/cats-blender-plugin)**Set Rest Pose**옵션을 사용해 수동으로 뼈대를 정상화할 수 있어요. FBX를 내보낼 때는 다음 설정을 사용해야 해요:

![](/doc-img/en-mod-15.png)
<p class="img-desc">Credit: [@Kana_Fuyuko](https://twitter.com/Kana_Fuyuko)</p>

Blender에 내장된 FBX 내보내기 기능은 올바른 뼈대 회전 값을 내보내지 못하는 문제가 알려져 있어요. 만약 이 방법이 잘 작동하지 않는다면 [Better FBX Importer & Exporter](https://blendermarket.com/products/better-fbx-importer--exporter)[Cats](https://github.com/absolute-quantum/cats-blender-plugin)와 같은 서드파티 애드온을 사용해 FBX 모델을 내보내는 것을 시도해 볼 수 있어요.

<AuthorBar authors={{
creators: [
{name: 'HakuyaTira', github: 'TigerHix'},
],
translators: [
{name: 'Willycho', github: 'Willycho'},
],
}} />
Loading

0 comments on commit a99c15a

Please sign in to comment.