터틀

터틀 탭의 파라미터는 프로그래밍 경험이 있는 고급 유저들을 위한 것입니다. (이 탭들은 전체 L-System을 포함합니다). 프로그래밍 경험이 적은 유저라고하더라도 걱정할 필요 없습니다. 아래에 다양한 여러가지 예제들을 제공합니다.

우선 모드터틀로 설정합니다.

L-Systems 간단한 소개

아래 페이지에서, L(indenmayer)-System에 대해 간단히 설명합니다. 부가적인 책이나 온라인 리소스에서 이 시스템에 대해 더 자세히 소개하고 있습니다. (Przemyslaw Prusinkiewicz와 Astrid Lindenmayer가 저술한 pdf 문서 "The Algorithmic Beauty of Plants" 는 CINEMA 4D를 사용해서 작성되었고 여기에서 다운 받을 수 있습니다http://algorithmicbotany.org/papers#abop).

L-System은 보통 식물의 성장과 유사한 효과를 시뮬레이션하기 위해서 사용됩니다. 시스템을 모그라프와 함께 사용해서, 모스플라인 오브젝트를 스윕 오브젝트에 넣어서 눈부신 성장 시뮬레이션을 만들 수 있습니다. 이런 다음 렌더링 가능한 오브젝트(스플라인은 스케치 앤 툰 또는 헤어를 사용해서 직접 렌더링이 가능)를 만들 수 있습니다.

간단히 설명하면, L-System은 새로운 가지가 어디에서 어떻게 길어질지를 정의하는 것으로 일련의 명령을 실행하는 것입니다. 기존의 가지를 새로운 것으로 교체할수도 있는 자가 생산 시스템입니다.

이 시스템의 기본 원리는 아주 간단하고 "거북이 시스템"이라 불리는 시스템을 기반으로 합니다. 간단한 명령으로 (가상의) 터틀이 보내집니다. 이 경로는 스플라인으로 표시됩니다.

가장 중요한 명령 3가지는 다음과 같습니다:

전제 필드에 F++F++F라고 연속적으로 입력하면 다음과 같이 해석됩니다: " 한 스텝 F전진; 2번 오른쪽으로 회전; 한번 더 앞으로 한 스텝 F전진; 오른쪽으로 2번; 한번 더 앞으로 F전진."

한 스텝이 얼마나 큰지, 그리고 한번의 회전의 각도가 얼마만큼 큰지를 정의 내리는 곳은 탭에서 디폴트 이동디폴트 각도 값에서 각각 정의할 수 있습니다. 또는 아래에서 설명하는대로 괄호안에 넣어서 정의할 수 있습니다. 디폴트 각도60°로 설정되어 있는 경우, 다음 예제와 같이 정삼각형이 생성됩니다:

두 개의 서로 다른 명령 코드들: 왼쪽 F++F++F; 오른쪽: F-F++F-F (각각 디폴트 각도60°입니다.

이는 가지처럼 형태가 만들어집니다. L-System 기능중에 아주 재밌는 기능은 개별 가지들을 다른 가지로 바꿀 수 있는 통합 대체 시스템입니다. 이것은 반복적으로 수행할 수도 있고, 간단한 명령 코드로 매우 복잡한 효과를 만들 수 있습니다. 이해하기 어려운 경우, 어떤 작업이 수행되는지 아래 예제에서 힌트를 발견할 수 있습니다;

지금까지 여러분은 한번밖에 실행되지 않는 단 한 줄의 명령 코드만 입력하였습니다. 이제 다음 명령 코드를 각각의 필드안에 입력해 보세요:

전제 필드: F++F++F

규칙 필드: F = F-F++F-F

보시다시피 규칙 코드 (앞으로는 그저 규칙이라고 표기될)는 전제 코드라인 내부적으로 삽입될 여러가지 기호가 할당된 "F"를 포함한 할당을 가지고 있습니다. 만약 이 전부를 표기한다면 명령 라인 코드는 다음과 같이 읽히게 됩니다. 만약 이 전부를 표기한다면 명령 라인 코드는 다음과 같이 읽힙니다. (규칙 라인 코드안에 "F"를 따르는 코드와 전제 라인 코드안에 있는 F를 모두 대체하면);

F-F++F-F++F-F++F-F++F-F++F-F

이것은 아래 그림의 왼쪽에서 2번째 모양을 나타냅니다. 가정의 코드의 각 F가 규칙으로 대체되기 때문에 각 나선은 복잡한 선으로 대체됩니다.

F가 "F-F++F-F" 코드에 의해 형태가 변합니다.

또한 이 프로세스는 무한정 반복할 수 있습니다 (사실, 꼭 그렇지만은 않은데, 스플라인의 복잡성이 기하급수적으로 늘어난다면, 당신의 컴퓨터는 계산하기를 포기해버릴 것입니다..) 이 대체 프로세스가 얼마나 반복되는지는 성장 값을 통해 정의 되며, 이 값은 각 F를 규칙 코드로 바꿔줍니다. 덧붙여서 프랙탈도 마찬가지로 작동합니다.

물론, 반드시 각 F를 사용하지 않더라도, 자리표시자를 사용하는 것은 가능합니다. 하지만, 이것은 비현실적인 성장의 형성입니다. 길이 성장은 항상 가지의 끝에서만 이뤄지는 것은 아닙니다.

A, B, C, D(단 "F"는 "1단위 전진한다"는 기본 명령이기 때문에 사용할 수 없습니다) 등과 같은 자리표시자(터틀 명령어로는 사용되지 않는 문자)를 사용할 수 있습니다.

각 필드에 아래와 같이 입력합니다:

전제: FA

규칙: A=+F-FA

규칙은 A에서 끝나기 때문에, 증가하는 성장 값에 따라 결과는 무한히 계속 성장하게 됩니다. (디폴트 각도90°로 설정).

Tip:이 간단하게 보이는 대체 규칙에서 몇 세대에 걸친 아주 복잡한 형상을 만들 수 있습니다. (아래 참조) 기호가 잘못 사용되는 경우에는 컴퓨터가 충돌하는 경우도 있습니다. 따라서 주의해서 실험해야 하고 자주 저장을 해야 합니다. (간단한 텍스트 편집기에서 작업할 경우에도 합니다) 이것은 또한 표시 모드라인으로 설정하면 매우 도움이 됩니다.

우리가 지금까지 사용해온 코드는 모두 간단하고, 방해받지 않은 한 줄의 코드입니다. 하지만 L-System은 실제 가지들이 생성될 때 비로소 흥미로워집니다. 예를 들어, 기존에 있는 가지에서 새로운 라인들이 만들어질 때입니다. 또한 이것은 대괄호를 사용해서 ([ ])수행할 수 있습니다. 대괄호안에 있는 일련의 명령어들은 따로 떨어진 가지로 인식됩니다. (그리고 새로운 터틀을 생성합니다) 새로운 가지가 만들어진 후 터틀은 대괄호 이전의 시작점으로 다시 돌아가고, 계속해서 그 다음의 대괄호의 명령을 진행합니다. 전제 필드안에 다음을 입력합니다:

F[+F][-F[-F]F]F[+F][-F]

이것은 디폴트 각도30° 상태로 위의 명령 코드의 결과입니다.

이제 전제 필드에 F를 넣고 위의 코드 (F=F[+F][-F[-F]F]F[+F][-F] )를 규칙 필드안에 넣는다면, 각각의 F는 왼쪽 그림의 가지로 대체합니다. 성장 값을 증가시키면 가지가 지속적으로 자랄 수 있도록 해주게 됩니다. 왜냐하면 각각의 직선은 새로운 가지에 의해 영구히 대체될 것이기 때문입니다. 가까이서 본다면 왼쪽 가지의 패턴이 나무의 오른쪽에 반복되고 있음을 확인할 수 있을 것입니다. (녹색으로 강조되는 부분)

이상이 식물과 같은 복잡한 가지를 생성하는 가장 쉬운 방법입니다:

일련의 명령어 기호들. 자리 표시자로 모든 문자(예:”A”)를 사용할 수 있습니다. 오른쪽 하단에 기본 회전이 90°로 설정되어 있음을 확인할 수 있습니다.

지금까지 평평한 평면에서 모두 생성하였습니다. 가지 생성은 평면에서만 일어나는 것이 아니라, 모든 방향에서 일어나기 때문에 이것을 가능하게 하는 명령 기호가 존재합니다.

아래와 같습니다. (정도의 값은 명령 기호 뒤에 괄호에 넣어 추가할 수 있습니다.)::

& 또는 ^: 터틀의 가로축 중심으로 회전

\ 또는 / : 터틀의 수직축을 중심으로 회전

전제 필드에 다음과 같이 입력합니다: F&F\ (90)^F+F:

작은 사양은 디폴트 각도 값이 적용되기 때문에 "/" 뒤의 90°는 사실 필요하지 않습니다.

결과는 위에서 나열된 스플라인입니다. 터틀은 전진(F), 그 옆에 축 주위를 직각으로 회전(&, 디폴트 각도90°로 설정), 다시 전진(F), 그 세로축 주위를 90° 회전(\ (90)), 그런 다음 축 주위를 90° 회전 (^), 또한 다시 전진(F), 오른쪽으로 회전(+) 마지막으로 다시 전진(F)합니다.

이 방법으로 공간적으로 가지치는 형태를 만들면, 실제 가지와 나무를 만들 수 있습니다.

User Data

기호의 시퀀스로 User Data를 변수로 사용할 수 있습니다. 위 그림에서 각도 파라미터가 User Data를 이용해서 추가되어져 전제 필드안의 ^ (가로축 주위로 터틀이 회전하는 것)를 위해 괄호 안에 치환되었습니다)

변수명에는 특수문자와 공백은 사용할 수 없습니다. 밑줄은 대문자로서 인식됩니다 (예. "second_length")

Formulas

정의된 변수를 포함한 수식(예. F(_growth*2)을 일반 숫자 대신에 사용할 수 있습니다. 아래의 수식을 수식을 사용할 수 있습니다:

_total 현재 문자열에서 전체 명령 숫자(아래 참조)
_index 현재 문자열에서의 명령 인덱스(아래 참조)
_growth 현재 성장 레벨
_level 현재 명령 레벨(적용한 경우, 아래 참조)
_x, _y, _z 공간에서 현재 터틀 위치.
_arg1, _arg2, _arg3, _arg4 첫번째, 두번째, 세번째와 네번째 인수 값(예. F(1,2,3,4)에서)
_age 0.0으로 시작되는 현재 t 명령의 age (_growth - _level을 나타냄)
_length 터틀과 MoSpline 원점 사이의 현재 arc 길이.
_move 현재 기본 스케일 길이.
_tropism 현재 전제.
_scale 현재 기본 스케일.
_rotate 현재 기본 각도.
_rnd, random -1.0과 +1.0 사이의 임의의 숫자

예제 "Total/Index"

2개의 명령으로 구성된 F(_index)F(_index)라는 문자열이 있다고 가정해봅시다. 이 문자열은 F(1)F(2) (1단위 전진후 2단위 전진)와 동일한 기능을 수행합니다. 예를 들어, "_total"는 명령수의 합계이고, 나선은 다음 명령으로 만들 수 있습니다:

전제: FA

규칙: A=+(20*_index/_total)FA

예제 "_RND"

다음 명령:

Startstring: A

Regel: A=+(_rnd*90)FA

‘_rnd*90’ 명령은 각 성장되어 나올 때 -90과 90 사이에서 랜덤한 각도를 만듭니다. 즉, "불안정한” 라인이 랜덤하게 회전하게 나타납니다.

예제 "_level"

다음 명령어를 가지고 있다고 합시다:

전제: A

규칙: A=FA

다음 레벨 값은 다음과 같은 결과를 나타내게 됩니다 (여기에서는 보여주기 위해서 괄호로 표시하였습니다 - 실제로는 이렇게 보여지지는 않습니다):

Growth = 0 : A(0)

Growth = 1 : F(1)A(1)

Growth = 2 : F(1)F(2)A(2)

Growth = 3 : F(1)F(2)F(3)A(3)

이제 여러분은 "_index" 넘버링이 어떻게 되는지 알고 있기에, 다음 명령어를 살펴보세요:

전제: FA

규칙: A=+F(_level*10)A

...이 명령어는 디폴트 각도90°로 설정된 나선형을 만듭니다:

예제 "_arg"

터틀 명령 (이 예제에서는 F) 매개 변수를 설정하기 위해서, F(a,b,c)=F(a*2,b*2,c*2)라고 정의할 수 있도록 "_arg" 명령을 사용할 수 있습니다. 이들은 처음에 값을 구할 필요는 없습니다. F=F (_arg1*2,_arg2*2,_arg3*2) 위의 명령과 같은 기능을 수행합니다.

Advanced syntax variations

다음 구문도 가능합니다:

전제: F(2)F(1,2)F(2,3)

규칙 : F(a,b) = F(a*2,b*2)

모든 F들은 대체되고, 또한 규칙에 "a"나 "b"가 표시되는 위치는 기존 F 인수는 다음과 같이 처리됩니다:

F(2*2,1*2)F(1*2,2*2)F(2*2,3*2) 는 논리적으로 F(4,2)F(2,4)F(4,6)와 같습니다.

규칙은 다음과 같이 구성되는 것도 가능합니다:

F(a,b):(a>10)=F(a,b)+F(a/2)

예를 들어 이 규칙은 첫번째 인수값이 10보다 클 경우에만 적용될 수 있습니다.

다음 예제에서는 위의 두 개의 다른 구문이 결합해서 흥미로운 결과를 만드는 것을 보여줍니다:

예제 "fruits"

위의 예제에서는 다수의 가지가 동시다발적으로 자라납니다. 한개의 가지가 자라기가 끝나면 구가 가지의 끝에 위치합니다. (명령어J가 필요합니다. 클로너 오브젝트 예를 살펴보세요)

"B(6)"가 첫번째 규칙에서 정의내려진 것을 명심하고, "B(h-1)"가 규칙2에서 인수를 "h=0"이 될 때까지 1씩 줄여주고, 규칙 3의 구를 최종적으로 설정해주는 것을 참고하세요.

전체 문자열을 확인하기 위해서 콘솔을 보기 바랍니다 (콘솔에 결과 문자열 버튼을 클릭합니다).

공식에 관해 자세한 내용은 첨부에서 확인할 수 있습니다.

전제

전제를 여기에 입력합니다. 대개는 한 문자로 이루어진 명령(규칙 참조) 또는 규칙 필드에 콘텐츠가 추가된 대체표시자입니다. 다음 페이지에서는 어떤 문자열이 되는지 수많은 예제가 나옵니다.

상황 무시

여기에서는 콘텍스트 규칙에 의해 무시되는 일련의 기호들의 종류들을 정의할 수 있습니다. 예를 들어, 여러분은 다음의 배열을 가지고 있습니다:

전제: A+B+C+D+E+F

규칙: A<B=C

규칙

F(a,b,c) 터틀을 앞으로 이동시키고 선택 사항으로 길이 (a), 크기 (b), 분할 (c)에 따라 선을 그립니다.
f(a) 터틀이 앞으로 이동하고 NO 라인이 그려집니다(즉, 스플라인 세그먼트가 끝날것입니다). "a”는 선택적인 길이 값입니다.
H(a,b,c) 터틀은 앞으로 이동시키고 길이 (a), 스케일 (b), 분할 (c)로 절반의 라인을 그립니다
h(a) 터틀이 앞으로 이동하고 NO 선이 그려집니다(즉, 스플라인 세그먼트가 끝납니다). "a”는 선택적인 절반 길이 값입니다.
M(x,y,z) 라인을 이동하고 그립니다. 터틀은 로컬 좌표(x, y, z) 내에서 움직이지만 자체는 회전하지 않습니다.
m(x,y,z) 터틀은 앞으로 나가지만, 선은 그리지 않습니다. 터틀은 로컬 좌표 (x,y,z)내에서 움직이지만 회전하지는 않습니다.
G(a) 터틀이 앞으로 이동하지만 선을 그리지 않고 스플라인 세그먼트를 끝내지 않습니다. "a”는 선택적 길이 값입니다.
R 터틀을 세그먼트 시작점으로 다시 설정하고 회전을 재설정하고 선을 그립니다(MoSpline터틀에서는 세그먼트가 항상 [ ]에 포함됩니다).
r 터틀을 세그먼트 시작점으로 다시 설정하고 회전을 재설정하며 선을 그리지 않습니다 (MoSpline 터틀에서는 세그먼트가 항상 [ ]에 포함되어 있습니다).
P(x,y,z) 터틀을 이 좌표에 배치하고 선을 그립니다.
p(x,y,z) 터틀을 이 좌표에 배치하고 선을 그리지 않습니다.
-(a) 터틀을 수직축을 중심으로 반시계 방향으로 회전시킵니다. "a”는 선택적인 각도 값입니다.
+(a) 터틀을 수직축을 중심으로 시계 방향으로 회전시킵니다. "a”는 선택적 각도 값입니다.
&(a) 터틀을 횡단 축을 중심으로 앞으로 돌립니다. "a”는 선택적인 각도 값입니다.
^(a) 터틀을 횡단 축을 중심으로 뒤쪽으로 회전시킵니다. "a”는 선택적인 각도 값입니다.
/(a) 터틀을 중심 축을 중심으로 시계 방향으로 회전합니다. "a”는 선택적인 각도 값입니다.
\(a) 거북을 중심 축을 중심으로 시계 반대 방향으로 회전시킵니다. "a”는 선택적인 각도 값입니다.
[ 새 분기 = 새 터틀
] 분기 종료
{ 폴리곤을 시작합니다 (아래 예제 참조: "폴리곤 만들기”)
} 폴리곤 종료
. (점 – 완전 정지) 폴리곤에 중괄호 안에 폴리곤 포인트를 추가합니다: 예. = { . -f . +f . +f . +f }
| 터틀 180'를 수직축 주위로 회전시킵니다.
* 터틀 180'를 중심 축을 중심으로 회전시킵니다.
% 이 지점에서 분기를 잘라내면 모든 것이 닫는 대괄호의 끝까지 무시됩니다: ] "Prune branch" 예제를 참조하세요.
"(a) 길이를 각 세대마다 선택적 "a” 값으로 곱합니다(아래 예제: Multiply/divide 참조).
!(a) 각 세대에 대한 선택적 "a”값으로 축척을 곱합니다(스윕 오브젝트와 함께 사용할 경우 MoSpline 지름).
;(a) 각도를 각 세대에 대한 선택적 "a”로 곱합니다.
_(a) 길이를 각 세대마다 선택적 값 "a”로 나눕니다.
?(a) 배율을 각 세대의 선택적 값 "a”로 나눕니다(스윕 오브젝트와 함께 사용할 경우 MoSpline 지름).
@(a) 각도를 각 세대마다 선택적 값 "a”로 나눕니다.
T(a) 전제 (예. FTFTF)를 추가합니다, 이는 각 스플라인 세그먼트가 전역 Y 축 방향으로 약간 휘어진다는 것을 의미합니다. 존재하는 모든 힘 오브젝트가 평가됩니다.
$(x,y,z) 상향 벡터의 끝을 표시하고 이에 따라 터틀의 방향을 지정합니다. 터틀이 향해야 하는 방향으로 벡터를 정의하세요.
I(a,r,g,b) (첫번쨰 문자열은 대문자 "i”로 시작합니다)
J(a,r,g,b) &nbsp;
K(a,r,g,b) &nbsp;
L(a,r,g,b) 위의 "I, J, K, 및 L"의 경우, 클로너 오브젝트에 의해 생성된 클론을 터틀 스플라인을 따라 배열할 수 있습니다. "r,g,b”는 복제본의 색상을 나타내며 "a”는 색인(즉, 오브젝트가 클로너 아래에 정렬되는 순서를 나타내는 숫자입니다. 아래 "색인”참조하세요). I, J, K, L은 클로너 오브젝트의 모드 파라미터인 "Group 1", "Group 2", "Group 3", "Group 4"의 각 그룹을 나타냅니다. 예제는 "Example: Cloner object"입니다.

예제 "폴리곤 만들기"

규칙 필드의 두 번째 줄을 보시기 바랍니다:

L=[{.-f.+f.+f.++++f.+f.+f.+f}]

폴리곤을 정의하는 중괄호(이것들은 폴리곤을 의미합니다)들 사이에 명확한 폴리곤 정점들이 정의내려져 있습니다. (각각 "."로 시작됩니다) 중괄호들이 대괄호안에 있기 때문에 터틀은 각각의 잎들이 만들어지고 나서 잎을 만들기 이전의 단계로 리셋됩니다. 모든 잎은 "L"에 할당되고, 그 줄위에 있는 규칙은 "L"이 존재하는 모든 곳에 완벽한 잎을 만들 것입니다.

모스플라인은 스플라인 또는 폴리곤을 만들 수 있음을 참고하세요. 만약 여러분이 두 개를 동시에 만들고 싶다면 목표 스플라인을 사용하세요.

예제 "multiply/divide”

여러분이 규칙 필드안에 직접 대체하는 기호의 시퀀스를 사용하는 경우 (예. A=F+BA), 승수 또는 제수 (", !, ;, _, ?, @)를 사용하여 각 생성기의 값을 증가 또는 감소시킬 수 있습니다.

예제 "cutting a branch”

이 규칙을 보면 A, B, C 와 D라는 자리표시자가 전제에 더해졌음을 발견할 수 있습니다. 다양한 성장 값을 위해, 규칙들은 % 값으로 이제 각각의 자리 표시자의 대체를 정의합니다. 이것은 뒤따르는 기호들이 각각의 가지의 그 포인트 (또는 퍼센트)에서 잘려질 것을 의미합니다.

예제 "Cloner object”

성장 값이 애니메이션되면, 이 구조는 풍성하게 성장할 수 있습니다 (클론 성장을 포함해서).

JK는 클로너 오브젝트의 클론을 참조하는 규칙(이것들은 각각 (1,1,1,1)과 (1,1,1,1)로 대체되어질 수 있으며, 괄호 인수들이 생략되면 각각은 기본값을 사용합니다)에서 사용됨을 참고하기 바랍니다. 모드는 두 클로너 오브젝트에 따라서 설정되어야 합니다:

I(1,1,1,1)는 Group 1를 반영합니다.

J(1,1,1,1) 는 Group 2를 반영합니다.

K(1,1,1,1) 는 Group 3를 반영합니다.

L(1,1,1,1) 는 Group 4를 반영합니다.

한 개의 규칙을 참조하세요.

전제: FA

규칙: A=FX

X=J(1,1,1,1)

가 기능할 수 있지만 클론들은 단계별로 성장하지 않고, 갑자기 나타나게 됩니다.

예제 "index”

클로너 오브젝트의 자식 오브젝트들은 연속 번호가 지정됩니다. ("0"부터 시작). 예를 들어, A=FJ(2,1,1,1)A (RGB 값은 생략 가능합니다)라고 정의내린다면, 클로너 오브젝트는 (구의 왼쪽인) 인덱스 "2"의 오브젝트만을 사용합니다. 오른쪽 A=J(rnd(2))A를 사용하는 경우, 복제는 무작위로 선정된 "0"에서 "2"사이의 숫자에 따라 무작위로 배치됩니다.

예제 "random growth”

다른 제한이 다른 형태를 생성합니다.

이 규칙과 사용자 데이타 Limit1Limit2 (이 두값의 합은 100%가 됩니다)가 결합하여 다르지만 비슷한 "식물들"을 만들어 낼 수 있습니다. (이것을 Stochastic L-System라고 합니다. (rnd(1)<) or (rnd(1)>) 라는 조건은 3개의 규칙중에 무엇이 선택될 것인지를 무작위로 결정합니다. (각각의 새로운 생성자 즉, 더 큰 성장 파라미터를 위해 무작위로 선택이 새롭게 진행됩니다).

예제 "context rules”

규칙들은 다음 형태로도 써질 수 있습니다:

전제: ABC

규칙: A<B=C

결과 (if Growth > 1): ACC

그럼 어떤 일이 일어날까요? 이것은 결과 문자열의 순서에 따릅니다."A<B=C"라는 규칙은 "B"가 바로 "A" 다음에 오는 문자열의 인스턴스를 검색하고 "B를 "C"로 대체합니다.

한편, "A>B=C"를 하는 경우, "B"의 왼쪽에 있는 "A"는 "C"로 대체됩니다 (결과는"CBC"가 됩니다).

"AB=C"라는 규칙은 이 규칙은 어떤 기호가 "C"로 대체할 지 결정할 수 없습니다. 이 경우 모두 'C"로 대체됩니다. (결과는 "CCC"가 됩니다).

결과

구문 오류를 보여줍니다.

콘솔에 결과 문자열

이 버튼을 클릭하면 모든 규칙과 성장 파라미터가 고려되고, 콘솔에 현재 효과에 있는 기호 시퀀스가 표시됩니다. 그런 시퀀스는 예를 들면 다음과 같습니다. (이것은 성장4로 설정된 과일 예제에서의 기호 시쿼스입니다):