2014-09-12 2 views
5

내 이름은 Chris이고 첫 번째 Java 게임을 작업 중입니다. 지금까지 타일 기반의 2D 게임을 만들었지 만, 내 수준은 그런 방식으로 이루어 지므로 이미지와 그 모든 녹색을 만드는 경우 초록색이 잔디 타일을 나타냅니다. 파란색 픽셀을 넣으면 게임에서 물 타일로 지정합니다.랜덤 지형 생성을위한 Java 2D Perlin 노이즈

그러나 레벨을 디자인하는 방법에 따라 게임이 제한되므로 타일이 무한히 많습니다.

초보자이기 때문에 다른 방법을 찾아 보았습니다. 특히 신랄한 방법은 Perlin Noise라고하는 것입니다.

나는 그것을 들여다 보았지만 매우 복잡해 보였다.

누군가 간단하게 말하면 마음에 드십니까?

또한 '벙어리 (dumb)'하고 간단한 개요를 제공하는 자습서가 있으면 환상적입니다.

죄송합니다. 너무 구체적이지 않아 실제로 그렇게하지 않으려 고합니다.

+0

달성하고자하는 것이 무엇인지 확실하지 않지만 Perlin 소음은 올바른 도구가 아닙니다. – Henry

+0

의심의 여지없이 나에게 적합하지 않은 것 같습니다. 최악의 경우 시도해 볼 수 있습니다. –

답변

6

펄린 노이즈는 The Nature Of Code에 대하여 Daniel Shiffman에 의해 훌륭하게 커버된다. 어떤 중요한 개념을 보여주기 위해 멋진 Javascript/ProcessingJS 샘플 코드를 가지고있는 온라인 서적입니다 :

좋은 난수 생성기는 관계가없고 식별 할 수없는 패턴을 나타내는 숫자를 생성합니다. 우리가보기 시작하면서 유기적 인 생생한 행동을 프로그래밍 할 때 약간의 무작위성이 좋은 것일 수 있습니다. 그러나 단일 유도 원리로서의 무작위성은 반드시 자연스러운 것은 아닙니다. 발명자 Ken Perlin에 대해 명명 된 "Perlin noise"으로 알려진 알고리즘은이 개념을 고려합니다. Perlin은 원래 작업 할 때 잡음 기능을 개발했습니다 Tron 영화 1980 년대 초반; 그것은 컴퓨터 생성 효과를위한 절차 적 텍스처를 생성하도록 설계되었습니다. 1997 년 Perlin은이 작업을 위해 기술 업적으로 아카데미 상을 수상했습니다. Perlin 노이즈는 구름, 풍경 및 대리석과 같은 패턴이있는 텍스처와 같은 자연의 자질을 사용하여 다양한 효과를 생성하는 데 사용할 수 있습니다.

자연 상태로 정렬 된 ("부드러운") 의사 난수 시퀀스가 ​​생성되므로 Perlin 노이즈의 유기적 모양은입니다. 아래 왼쪽의 그래프는 시간에 따른 Perlin 노이즈를 보여 주며 x 축은 시간을 나타냅니다. 곡선의 부드러움을 주목하십시오. 오른쪽 그래프는 시간에 따른 순수한 난수를 보여줍니다.

enter image description here (이 그래프를 생성하기위한 코드가 첨부 된 책 다운로드 가능합니다.)

칸 아카데미 전체 에 의해 표시되는 물건의 일부를 해부하기 위해 자바 스크립트를 수업을 진행 전용 그의 책에서 Shiffman. 그들은 위대한 lessons on randomness을 가지고 있으며, 물론 Perlin noise을위한 것입니다.

+2

고맙습니다. 요약하고 그 배후의 이야기를 좋아합니다. 고맙습니다. –

0

즉시 Perlin 또는 Simplex 구현을 완전히 이해할 의무는 없습니다. 찾을 수있는 다양한 방법의 매개 변수로 놀면서 천천히 배울 수 있습니다.x, y, 아마도 z 또는 그 이상의 치수 인자를 그리드의 좌표와 함께 공급함으로써 그것을 사용하십시오. 간단하게하기 위해 기본적으로 보간 된 임의 이미지의 여러 레이어 (옥타브)를 서로 다른 비율로 섞거나 겹쳐 놓습니다.

실행 시간에 사용하면 처리 비용이 들기 때문에 오프라인으로 노이즈를 평가하고 저장할 수도 있습니다 (해상도/옥타브 및 처리 예산 또는 테스트 목적에 따라 다르지만 상당히 괜찮은 것을 얻을 수 있음). 실시간 프레임 속도도).

5

나는 펄린 노이즈를 생략하고 OpenSimplex Noise라는 뭔가 살펴 본다 을 건의 할 것입니다.

기본적으로 Perlin Noise와 같은 모든 것이 유용하지만 눈에 보이는 방향성 인공물은 훨씬 적습니다. 기본적으로 노이즈는 입력 좌표 (2D, 3D 또는 4D)를 취해 -1과 1 사이의 값을 반환합니다. 출력 값은 입력 좌표가 변경되면 계속 변합니다.

  • 첫번째는
  • 두번째는 어디 녹색 원료 잡음이다 : 여기

    잡음을 이용하여 생성 세가 256x256 이미지 (X/24.0, Y/24.0)이다 값이 0보다 크고 파란색 인 경우

  • 세 번째 값은 값이 -0.2보다 크고 0.2보다 작 으면 파란색이고 그렇지 않으면 녹색입니다.

펄린 노이즈에 비해 방향 아티팩트를 감소시켰다 단면 노이즈 (OpenSimplex 다른 알고리즘)도 거기에 있습니다,하지만, 3D 및 단면 소음의 높은 구현 (당신은 아무것도 변화하는 3D 노이즈를 사용하고자하는 일이면 2D에서 시간이 지남에 따라) 특허가 부여됩니다.

OpenSimplex OpenSimplex Noise는 실제로 내 자신의 게임을 위해 개발 한 알고리즘이므로, 뻔뻔한 플러그 알고 있습니다.하지만 사용할 수있는 것이 가장 좋습니다.

관련 문제