절차 적 생성은 어떻게 시작합니까?


147

최근에 절차 적 생성 이 Spore, MMO 등에 의해 주목을 받아 왔으며, 흥미롭고 강력한 프로그래밍 기법처럼 보입니다.

내 질문은 다음과 같습니다.

  • 절차 생성 기술을 활용하는 중간 규모의 프로젝트를 알고 있습니까?
  • 절차 생성에 가장 적합한 언어 / 클래스 언어는 무엇입니까?
  • "심각한"코드에 절차 생성을 사용할 수 있습니까? (즉, 게임이 아님)

1
X-Team의이 기사가 도움이 될지 궁금하십니까? x-team.com/blog/…
Adam Gerard

답변:


117

중간 점 변위 알고리즘 과 같은 작은 이론과 간단한 예제로 시작해야 합니다 . 그래픽 생성에 관심이 있다면 Perlin Noise 에 대해서도 약간 배워야 합니다. 나는 이것을 절차 적 생성에 관한 마지막 해 프로젝트를 시작하기 위해 사용했습니다.

프랙탈 은 절차 생성과 밀접한 관련이 있습니다.

TerragenSpeedTree 는 절차 적 생성의 놀라운 가능성을 보여줄 것입니다.

절차 생성은 모든 언어에서 사용할 수있는 기술입니다 (Java와 같은 OO 언어 및 Prolog와 같은 논리 언어에서 사용될 수 있으므로 C와 같은 절차 언어로 제한되지는 않음). 모든 언어에서 재귀를 잘 이해하면 절차 생성에 대한 이해가 강화됩니다.

'심각한'또는 게임이 아닌 코드의 경우 절차 생성 기술을 사용하여 다음을 수행했습니다.

  • 교통 관리 계획을 세우기 위해 도시의 성장 시뮬레이션
  • 혈관의 성장을 시뮬레이션
  • SpeedTree는 영화 및 건축 프리젠 테이션에 사용됩니다

이 Perlin Noise는 Photoshop의 "구름"필터와 매우 유사합니다.
doubleOrt

첫 번째 링크가 끊어짐
Jean Carlo Machado

일부 Electro 음악은 절차 적 생성을 사용하여 생성됩니다
Poyda


12

절차 적 콘텐츠 생성이 이제 GPU 용으로 작성되었으므로 셰이더 언어를 알아야합니다. 그것은 GLSL 또는 HLSL을 의미합니다. 이들은 각각 OpenGL 및 DirectX에 연결된 언어입니다.

속도, 쉬운 학습 곡선 및 Frank D Luna 로 인해 Dx11 / HLSL을 선호하지만 OpenGL은 더 많은 플랫폼에서 지원됩니다.

OpenGL / DirectX 게임 엔진을 설정하는 데 걸리는 시간을 (상당한) 시간을 소비하지 않고 셰이더 작성에 바로 들어가려면 WebGL도 확인해야합니다.

절차 적 내용은 소음으로 시작합니다.

따라서 Perlin 노이즈 (및 그 후속 Simplex 노이즈 ) 에 대해 알아야합니다 .

Shadertoy 는 셰이더 프로그래밍에 대한 훌륭한 참고 자료입니다. 수학적으로 짜릿한 코드는 없지만 절차 적 내용이 수행되는 방식이므로 셰이더 코딩을 직접 수행 한 후에이 코드를 사용하는 것이 좋습니다.

Shadertoy는 픽사에서 일하는 데모 장면의 제품인 절차 적 천재 인 Inigo Quilez에 의해 만들어졌습니다 . 그는 라이브 코딩 세션에 대한 youtube 비디오 ( 훌륭한 예 )를 가지고 있으며이를 추천 할 수도 있습니다.


17
"절차 컨텐츠 생성이 이제 GPU 용으로 작성되었습니다"는 무슨 뜻입니까? 풀잎 같은 것에 대해 이야기하고 있습니까? 예를 들어 게임용지도 나 도시를 생성한다는 의미는 아닙니다.
Dronz

2
네, 여기에있는 "모든"의견은 지나치게 일반화되었다고 생각하지만, 조경 생성 (가장 일반적인 종류라고 생각합니다) 영역에서 이것은 유용한 답변입니다. 비디오에서 누군가가 유형 코드를보고 싶어하는지 상상할 수는 없지만.
Nate CK

1
셰이더와 같이 복잡한 코드를 작성하는 방법을 배우거나 디자인에 복잡한 패턴을 사용하는 방법을 배우려는 사람. 그리고 그것은 단지 표면을 긁는 것입니다.
Ultroman the Tacoman

"절차 적 콘텐츠 생성이 이제 GPU 용으로 작성되었으므로 셰이더 언어를 알아야합니다." 단순히 진실이 아니며 100 % 오해의 소지가 있습니다. (저는 간단한 절차 생성 프로젝트를 만들고 있습니다. 제 삶에 0 줄의 셰이더 코드를 작성했습니다.)
활동 감소


8

나는 이것에 대한 전문가는 아니지만 몇 가지 답변을 시도하고 기여할 수 있습니다.

  1. NetHack과 그 형제는 공개 소스이며 절차 적 레벨 생성 (맵)에 크게 의존합니다. 링크 그것의 다운로드에. 랜드 스케이프 / 텍스처 / 클라우드 생성에 더 관심이 있다면, GamasutraGameDev 에서 그 주제에 관한 기사가 꽤 많이있는 것이 좋습니다 .

  2. AFAIK 언어마다 큰 차이가 없다고 생각합니다. 당신이 보는 대부분의 코드는 여전히 게임 개발자의 공식 언어이기 때문에 C / CPP에있을 것이지만, 원하는 것을 사용할 수 있습니다 ...

  3. 그러한 기술로부터 이익을 얻을 수있는 프로젝트가 있는지에 따라 다릅니다. 나는 군대를 위해 시뮬레이터에서 절차 적 세대가 사용되는 것을 보았습니다 (게임은 매우 유능하지는 않지만 게임으로 간주 될 수 있습니다).

그리고 작은 메모-절차 적 생성이 소량의 규칙 또는 패턴과 많은 임의성에서 많은 데이터를 생성하는 것이면 결과는 달라질 수 있습니다.)


8

이 주제에 대한 훌륭한 책이 있습니다.

http://www.amazon.com/Texturing-Modeling-Third-Procedural-Approach/dp/1558608486

그것은 비 실시간 시각 효과와 애니메이션 생성에 편향되어 있지만 이론과 아이디어는이 분야 밖에서 사용할 수 있다고 생각합니다.

SideFX의 Houdini라는 완전한 절차 적 워크 플로우를 구현하는 전문 소프트웨어 패키지가 있다는 것도 언급 할 가치가 있습니다. 이를 사용하여 문제에 대한 절차 적 솔루션을 발명하고 프로토 타이핑하여 나중에 코드로 변환 할 수 있습니다.

패키지는 다소 비싸지 만 무료 평가판 라이센스가있어 매우 훌륭한 교육 및 / 또는 엔지니어링 도구로 사용할 수 있습니다.


7

작은 장면에서 복잡한 그래픽을 생성하기 위해 데모 장면에서 절차 적 생성이 많이 사용됩니다. Will Wright는 Spore를 만드는 동안 데모 장면에서 영감을 받았다고 말했습니다. 시작하기 가장 좋은 곳일 수 있습니다.

http://en.wikipedia.org/wiki/Demoscene


3

가장 중요한 것은 도로, 도시, 블록 및 건물의 구조를 분석하는 것입니다. 모든 건물의 공통점을 찾으십시오. 사진,지도, 계획 및 현실을보십시오. 그렇게하면 도시 건설을 단순한 컴퓨터 기술 문제로 생각하는 사람들보다 한 발 앞서 나갈 것입니다.

다음으로 작고 뚜렷한 단계로 해당 형상을 작성하는 방법에 대한 솔루션을 개발해야합니다. 믿을 수있는 도시를 구성하는 규칙을 정의해야합니다. 3D 모델링을하는 경우 컴퓨터가 어떤 상황에서든 지시를 따를 수 있도록 배운 것을 많이 생각해야합니다.

느슨하게 추적하지 않으려면 전체 프로세스의 작은 부분만을 담당하는 많은 연산자를 설정해야합니다. 이를 통해 시스템 디버깅, 확장 및 개선이 훨씬 쉬워집니다. 다음 단계에서는 해당 연산자를 연결하고 매개 변수를 변경하여 결과를 확인해야합니다.

나는 주로 창 텍스처가있는 임의의 모양의 상자로 구성된 너무 많은 "도시 생성기"를 보았습니다.


3

(10 년 이상 ...)

절차 적 생성은 데이터를 직접 작성하는 대신 코드를 사용하여 데이터를 생성하는 것만 의미합니다. 예를 들어 다양한 트리가있는 포리스트를 생성하려는 경우 각 트리 를 직접 디자인 하지 않으므로 변형을 생성하는 데 코딩이 더 효율적입니다. 그것은 트리 그래픽, 크기, 구조, 배치의 생성 일 수 있습니다 ...

일반적으로 몇 가지 규칙 과 의 상호 작용 이 있으며 , 자신의 임의성과 논리를 추가하고 이러한 모든 기술을 결합 할 수 있습니다 ... 다소 혼란 스럽지만 너무 혼란스럽지 않은 것은 흥미로운 결과를 얻을 수 있습니다.

다음은 몇 가지 주목할만한 기술입니다.

절차 적 세대로 유명한 몇 가지 게임 :

절차 적 육상 질량 생성 에 관한 비디오 튜토리얼 .

게임에 대한 절차 적 콘텐츠 생성에 대한 회의, 주제에 대한 동영상을 많이 가지고 : everythingprocedural

즐기세요

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.