Skip to content

인공지능(AI)으로 콘텐츠를 생성하는 프로시저럴 기술(Procedural) (6)

[칼럼 핵심 요약]
식물의 절차에 대한 연구는 의외로 오래되었고 1960 년대 후기부터 시작되었습니다. 이 연구 분야에서 예로부터 분야에서 활용되어 발전하고 있는 기술이 'L-SYSTEM'이다. L-SYSTEM의 "L"은 고안자의 Aristid Lindenmayer 씨의 이름에서 얻은 것으로 식물의 형상을 기호 언어의 형태로 표현한다는 독특한 것이다.

🌐 원문 링크: 人工知性でコンテンツを生成するプロシージャル技術(6) (Mynavi News)
📅 원문 발행일: 2010-01-15 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)

NOTE

💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)

  • Houdini & 노드 기반 PCG 파이프라인: 2000년대 후반 프로시저럴 알고리즘(L-System, 노이즈 기반 지형)은 현재 Houdini 엔진 및 언리얼 엔진 5의 PCG(Procedural Content Generation) 프레임워크로 체계화되었습니다.
  • 신경망 생성형 AI(Neural Rendering / Generative AI): 규칙 기반 프로시저럴 알고리즘에 더해, 신경망(NeRF, 3D Gaussian Splatting, Diffusion 기반 3D 생성)을 결합하여 복잡한 환경과 3D 에셋을 실시간 생성/복원하는 시대가 열렸습니다.

📖 본문 해설

[원문 리드문] > 식물의 절차에 관한 연구는 의외로 오래되었고, 1960년대 후기부터 시작되고 있다. 이 연구 분야에서 예로부터 분야에서 활용되어 발전하고 있는 기술이 'L-SYSTEM'이다. L-SYSTEM의 "L"은 고안자의 Aristid Lindenmayer 씨의 이름에서 얻은 것으로 식물의 형상을 기호 언어의 형태로 표현한다는 독특한 것이다.

프로시저럴 기술(Procedural)에 의한 식물 생성 (1) ~ 식물과 프랙탈 이론의 관계

식물의 절차에 대한 연구는 의외로 오래되었고 1960 년대 후기부터 시작되었습니다.

이 연구 분야에서 예로부터 분야에서 활용되어 발전하고 있는 기술이 'L-SYSTEM'이다.

L-SYSTEM의 "L"은 고안자의 Aristid Lindenmayer 씨의 이름에서 얻은 것으로 식물의 형상을 기호 언어의 형태로 표현한다는 독특한 것이다. Aristid Lindenmayer 씨는 생물학자이며 자연계의 다양한 식물의 형상이 자기 유사성이 있다는 것을 깨닫고 그 성장 메커니즘을 기호 변환 법칙으로 표현하자는 연구에 평생을 바친 인물이다.

이 L-SYSTEM의 구체적인 메카니즘에 대한 간단한 예를 들어 설명하자.

기본적으로는 문자열의 치환을, 어느 적당하게 결정한 법칙으로 실시해 가는 것이며, 그 공정은 전출의 재귀 분할법이나 반복 카피법의 프랙탈 이론과 매우 비슷하다.

L-SYSTEM의 간단한 예제L-SYSTEM의 간단한 예제

L-SYSTEM의 간단한 예제L-SYSTEM의 간단한 예제

변환 규칙으로

``A를 xB로 변환 B를 yA로 변환''

와 정해, 초기치 AB에 대해 이 룰을 반복적으로 행해 준다. 변환 첫 번째는

``AB → xByA ''

된다. 이 xByA에 동일한 규칙을 적용하면 두 번째 변환에서는

``xByA → xyAyxB ''

된다.

이렇게 함으로써, 원래 2문자였던 것이 불과 2번째의 변환으로 6문자가 되고, 게다가 그 문자열은 복잡성을 늘린다. 이것을 식물, 생물의 성장과 비추어 생각해 가는 것이 L-SYSTEM의 기본적인 사고방식이다.

이 법칙을 더욱 복잡하게 해보자.

이 간단한 반복 변환에 "컨텍스트 (컨텍스트) 이해"라는 동적 조건 규칙을 설정해 보겠습니다. 구체적으로는 문자를 치환할 때에, 그 치환 대상의 문자의 좌우의 문자의 관계성에 의해 치환하는 문자를 변화시켜 가는 룰이다.

변환 대상 문자의 전후(좌우)에 의존한 규칙으로 문자를 변환하는 알고리즘으로 하면 더욱 복잡성을 늘린 변환을 실시할 수 있다변환 대상 문자의 전후(좌우)에 의존한 규칙으로 문자를 변환하는 알고리즘으로 하면 더욱 복잡성을 늘린 변환을 실시할 수 있다

변환 대상 문자의 전후(좌우)에 의존한 규칙으로 문자를 변환하는 알고리즘으로 하면 더욱 복잡성을 늘린 변환을 실시할 수 있다변환 대상 문자의 전후(좌우)에 의존한 규칙으로 문자를 변환하는 알고리즘으로 하면 더욱 복잡성을 늘린 변환을 실시할 수 있다

예를 들어,

``A의 오른쪽에 y가있을 때 Bx B는 A로 바뀝니다. A의 왼쪽에 x가있을 때 By

로서 초기값의 문자 xA를 주어 변환해 가는 경우를 상정해 본다. 초기값 xA는 6회째의 변환으로 xByxy가 되어, 원래의 상태로부터는 상당히 바뀐 것이 된다. 변환 룰은 바로 생물에 있어서의 유전자라고 하는 풍정이다.

그런데, 문자열 그대로는 본 목적에 재미가 없고, 「식물의 성장의 표현이 되고 있다」라고 해도 이미지가 솟지 않는다. 그래서 이러한 문자열의 시각화를 실시해 도형으로서 보여주는 것을 생각한다.

이 방법에는 여러 가지가 있지만, 전형적인 예로서 유명한 것은 터틀 그래픽스의 구조이다.

라디콘과 같은 그림 붓을 문자열 명령으로 움직인다는 이미지가 거북이 그래픽. 그건 그렇고, 이것은 8 비트 PC 시대의 구조입니다.라디콘과 같은 그림 붓을 문자열 명령으로 움직인다는 이미지가 거북이 그래픽. 그건 그렇고, 이것은 8 비트 PC 시대의 구조입니다.

이것은 가상적인 그림 붓(터틀=거북이)을 라디콘처럼 '돌리기', '굴곡', '전진', '돌아가기'라는 명령을 실행하면서 궤적을 그려가는 구조다. 「F」는 그리면서 전진, 「+」는 시계 방향으로 회전, 「-」는 반시계 방향으로 회전, 「f」는 그리지 않고 전진 등을 나타낸다. 회전에 대해 회전 각도도 주어진다.

이러한 터틀 그래픽스의 커멘드 캐릭터 라인을, 전출과 같은 변환 룰로 변환해 가면 복잡한 궤적이 그릴 것 같은 생각이 들지 않는가. 그런 착상이다.

또한, 재귀 분할법이나 반복 카피법에서 나타낸 프랙탈 도형도, ​​이 터틀 그래픽스로 표현이 가능하다.

2개의 도형은, 기재되어 있는 초기치와 변환 법칙에 따라 캐릭터 라인을 치환해, 그 캐릭터 라인 결과에 따른 묘화를 행한 예. 다만, 이대로는 분기할 수 없기 때문에 한 필기만 그릴 수 있다2개의 도형은, 기재되어 있는 초기치와 변환 법칙에 따라 캐릭터 라인을 치환해, 그 캐릭터 라인 결과에 따른 묘화를 행한 예. 다만, 이대로는 분기할 수 없기 때문에 한 필기만 그릴 수 있다

다만, 이대로라면 한 필기 밖에 그릴 수 없기 때문에, 식물의 특징인 「분지」의 표현을 할 수 있는 구조로 할 필요가 있다. 그래서 "["와 "]"의 한 쌍의 괄호로 표현되는 원래의 위치로 돌아갈 수 있는 구조(PUSH, POP)를 도입하고 있다. [~]로 둘러싸인 부분은 나뭇가지(≒자 가지)가 되고, "]"의 부분에서 나뭇가지의 묘화가 끝나, "!["로 분기한 곳까지 그림 붓(터틀)을 되돌린다……라는 의미가 된다.

L이 왼쪽으로 나뉘어져 진행한다, R이 오른쪽으로 가지 나뉘어 진행된다… 커맨드는 LR^4(LR)^∞와 RL^4(RL)^∞의 2개로 동일 스타트 지점에서 실행L이 왼쪽으로 나뉘어져 진행한다, R이 오른쪽으로 가지 나뉘어 진행된다… 커맨드는 LR^4(LR)^∞와 RL^4(RL)^∞의 2개로 동일 스타트 지점에서 실행

" 대괄호 표기를 통한 나뭇가지 분기(Branching) 메커니즘. 현재 좌표와 각도를 스택에 저장하여 자유로운 가지 생성이 가능하다](/assets/graphics-082/008l.jpg) L-System에서 "[~]" 대괄호 표기를 통한 나뭇가지 분기 메커니즘

L-System 문자 변환 규칙을 적용하여 생성된 다양한 식물 모델L-System 문자 변환 규칙을 적용하여 생성된 다양한 식물 모델

+[+F-F-F], 회전각 22도 적용 시 1세대 렌더링 결과](/assets/graphics-082/010l.jpg) 초기값 F, 치환 규칙 적용 시 1세대 렌더링 결과

L-System 세대가 반복될수록 복잡하고 사실적인 수목 형태로 성장하는 과정L-System 세대가 반복될수록 복잡하고 사실적인 수목 형태로 성장하는 과정

"로 나타내는 분기( 가지)의 구조를 표현한다. 이 [~]의 구조에 의해, 줄기에 대하여 자유로운 나뭇가지를 생기는 것이 가능해진다](/assets/graphics-082/008l.jpg) "[~]"로 나타내는 분기( 가지)의 구조를 표현한다. 이 [~]의 구조에 의해, 줄기에 대하여 자유로운 나뭇가지를 생기는 것이 가능해진다

안을 그려 끝나면 나뭇가지의 분기점까지 돌아와 같은 룰 적용에 반복이다](/assets/graphics-082/009l.jpg) 그림 오른쪽의 식물처럼 보이는 것은 모두 L-SYSTEM에 의한 문자 변환 규칙을 적용하여 생성한 명령으로 그린 ​​것. [~]안을 그려 끝나면 나뭇가지의 분기점까지 돌아와 같은 룰 적용에 반복이다

+[+F-F-F]」로, 회전각을 22°로 했을 때의 묘화 결과가 된다. 문자 변환의 세대를 많을수록 모양도 복잡해져 초목 같은 느낌이 된다](/assets/graphics-082/010l.jpg) 그림은 초기치 F로, 치환 룰은 「F→FF-[-F+F+F]+[+F-F-F]」로, 회전각을 22°로 했을 때의 묘화 결과가 된다. 문자 변환의 세대를 많을수록 모양도 복잡해져 초목 같은 느낌이 된다

(그림은 초기치 F로, 치환 룰은 「F→FF-[-F+F+F]+[+F-F-F]」로, 회전각을 22°로 했을 때의 묘화 결과가 된다. 문자 변환의 세대를 많을수록 모양도 복잡해져 초목 같은 느낌이 된다 - 원본 이미지 404 소실)

+[+F-F-F]」로, 회전각을 22°로 했을 때의 묘화 결과가 된다. 문자 변환의 세대를 많을수록 모양도 복잡해져 초목 같은 느낌이 된다](/assets/graphics-082/012l.jpg) 그림은 초기치 F로, 치환 룰은 「F→FF-[-F+F+F]+[+F-F-F]」로, 회전각을 22°로 했을 때의 묘화 결과가 된다. 문자 변환의 세대를 많을수록 모양도 복잡해져 초목 같은 느낌이 된다

이대로라면 결과가 반드시 같아져 버린다. 즉 식물로 말하면 클론과 같이 되어 버려 개체차이가 나타나지 않는다. 동식물을 표현하는 경우에는 규칙성이 노출되어는 부자연스럽고, 동일종으로서의 유사성은 있어도, 다양성을 원한다.

따라서 문자 변환 알고리즘에 난수 요소를 추가 동적 요소로 추가합니다. 이것이 STOCHASTIC L-SYSTEM(확률론적 L-SYSTEM)이다.

분기 확률을 설정하거나 분기 방법 자체를 확률로 전환하여이 고유성을 표현할 수 있습니다.

다양성을 제공하기 위해 난수 요소 추가다양성을 제공하기 위해 난수 요소 추가

이 STOCHASTIC L-SYSTEM의 개념을 도입함으로써 한 종에서 같은 것을 할 수 있는 것이 아니라 한 종에서 성장과 함께 개체차가 나온다는 것을 표현할 수 있게 됩니다.

여기까지 나타낸 그림은 2D 평면의 것이므로, 3D 그래픽으로 이용하기 위해서는 이것을 한층 더 3D로 차원을 하나 늘릴 필요가 있다.

라디콘의 요령으로 진행하는 그림 붓의 방향을 평면에서 입체의 3차원으로 확장하고, 또한 생성되는 가지의 직경의 개념도 등장한다. 또한, 생성하는 것은 가지뿐만 아니라 잎도 필요합니다. 덧붙여서, 잎에 대해서는 잎의 형상을 같은 L-SYSTEM으로 기술해, 이것을 폴리곤화해 사용하는 것이 많은 것 같다.

그리기 궤적 관리를 3D로 확장그리기 궤적 관리를 3D로 확장

구체적인 예(아래 그림)를 하나 보여준다고 하자.

L-SYSTEM을 3차원으로 확장하여 입체적인 식물 모델로 한다L-SYSTEM을 3차원으로 확장하여 입체적인 식물 모델로 한다

이 그림의 p1은 3개의 나뭇가지로 분기하는 것을 나타내며, 잎 L이 나오고, 새로운 성장점 A가 탄생한다. F는 말단. 「&」나 「^」, 「/」는 그림 붓을 3D적으로 어느 방향으로 제어하는지의 기호가 된다. 「!」는 가지의 지름을 감산하는 의미가 되어 있고, 「'」는 색에 변화를 주는 연산자가 되고 있다.

전체적으로 보면 3개의 나뭇가지로 나뉘어, 각 가지에는 잎, 직경을 닳은 새로운 성장점, 한층 더 손 가지와 잎을 붙인다……라고 하는 법칙으로 성장을 계속하는 모델이 되고 있다. (계속)

(트라이Z 니시카와 젠지)


🔗 연관 지식 베이스 (Wiki)

Based on Zenji Nishikawa's 3D Graphics Maniax series. Translated & Knowledge-Based for Korean Game Developers.