2012-05-07 6 views
4

또는 이에 상응하는 항목이 있습니까? 저렴한 난수를 생성하려면 어떻게해야합니까?GLSL OpenGL ES 2.0 (iOS)에 잡음 기능이 있습니까?

+0

데스크톱 GLSL에 대해 질문하는 동안이 질문에 대한 답변에는 다음과 같은 몇 가지 좋은 옵션이 있습니다. [GLSL의 임의/노이즈 기능] (http://stackoverflow.com/questions/4200224/random-noise-functions-for- glsl) –

답변

1

"저렴한"을 정의하십시오.

난수가 컴퓨터에서 작동하는 방식은 실제로 무작위가 아닙니다. 당신은 숫자 (시드)로 시작하고, 각 난수에 대해 원하는 숫자를 계산하기를 원하는 임의의 숫자에 대해 무작위로 다른 숫자를 얻으려면 그 숫자를 난수와 다음 무작위의 시드로 사용하십시오 번호. 자세한 내용은 here을 참조하십시오.

문제는 그 절차가 본질적으로 순차적이므로 쉐이더에는 좋지 않습니다.

이론적으로 프래그먼트 셰이더에 함수를 작성하여 프래그먼트 위치와 잠재적으로 프레임마다 증가하는 균일 한 int의 해시를 만들어 낼 수는 있지만 프래그먼트 셰이더에는 많은 양의 작업이 필요합니다. 소음처럼 보이는 것을 만들어내는 것뿐입니다.

OpenGL에서 노이즈 효과를 생성하는 일반적인 기술은 노이즈가 많은 텍스처를 만들고 다양한 방법으로 셰이더를 사용하는 것입니다. 단순히 텍스처를 표준 텍스처로 표면에 적용하거나 스트레칭하거나 색상 값을 클램핑 할 수 있습니다. 시간에 따라 변하는 효과를 얻으려면 3D 텍스처를 사용하거나 2D 텍스처를 더 많이 사용하고 유니폼을 통해 각 프레임의 프래그먼트 셰이더 스테이지에 임의의 텍스처 좌표 오프셋을 전달할 수 있습니다.

perlin noise도 본질적으로 위에서 설명한 효과의 변형을 사용합니다.

4

GLSL ES에는 잡음 기능이 없으며 데스크톱 GLSL 잡음 기능은 거의 으로 구현되지 않았습니다.

그러나 일부는 freeware noise functions available입니다. 그들은 꽤보기 흉하고 빠른 것으로되어 있습니다. 나는 그 (것)들을 결코 사용하지 않으며, 그러나 일해야한다. MIT가 허가 한 코드입니다. 걱정된다면 요.

+1

관심이 있으시면 해당 코드 작성자 중 한 명이 모바일 장치의 성능에 대한 의견을 비롯하여 이에 대한 배경 지식이있는 http://stackoverflow.com/a/9823712/19679에 대한 답을 제공합니다. . –

+2

iOS에 대한 과소 평가는'noise *'함수가 시뮬레이터에서 구현되었지만 디바이스에서는 구현되지 않는다는 것입니다. – bobobobo