Loading...
2019. 6. 15. 14:55

Clipmaps

원문 : Clipmaps원문을 보시길 적극 추천. 요약클립맵은 지형에 매우 높은 해상도의 텍스쳐를 매핑할수 있게 하는 SGI 워크스테이션에서 처음 구현된 기능이다.원본 SGI 구현은 매우 전문적인 맞춤형 하드웨어가 필요했다.NVIDIA GeForce 8800의 고급기능은 현재 소비자의 하드웨어를 사용하여 같은 알고리즘을 허용한다.비록 현재 API들과 GeForce 8800가 8192 크기의 텍스쳐를 직접적으로 지원할 지라도, 이 크기가 비행 시뮬레이션같은 넓은 경치를 말할때는 충분하지 않을지도 모른다.전체 경치에 하나의 텍스쳐를 사용하는 이 아이디어는 전체 경관 텍스쳐를 한번에 디자일 할 수 있을 뿐 아니라파라미터화 시키는 것도 간단하다.큰 텍스쳐는 몇개의 텍스쳐를 사용하여 블렌딩 하는 기존 방식에 비해..

shader에서 if 와 lerp의 성능은?

나의 궁금증은 아래와 같다. 1. shader 코드에서 동적분기로 return 시키는 것은 최적화에 도움이 되는가?- 정적분기라면 굳. 확실히 최적화에 도움이 될듯. 컴파일에서 부터 정해지니까.- 동적분기라면 비교값이 상수가 아닌 변수이므로 런타임에 정해진다.- 마소 문서를 보면 if문에도 [branch]와 [flatten] 가 있으며 branch의 경우 if문의 부울이 먼저 평가 되므로 맞는 부분만 실행되고, flatten은 if의 양쪽 다 계산하고 맞는 부분을 결과값으로 선택하는 방식이다. 다만 branch는 tex2d 와 같은 그라디언트 함수를 쓰면 작동하지 않는다. 이는 주변 프래그먼트에 종속적이므로 실행되어야 하며, 각 프래그먼트를 건너뛰지 않아야 하기 때문이다. 2. if문 자체가 주는 부하를..

early z

Early Z : - Z Test(Depth Test, 깊이 판정)를 미리 해서 비싼 Pixel연산을 피하자- 일종의 픽셀단위 Culling 기법. Z Test :- 깊이 판정은 픽셀의 깊이 값을 깊이 버퍼의 깊이 값과 비교해서 픽셀의 가시성을 판단한다.- 현재 픽셀이 다른 픽셀의 뒤에 있는지를 판단하여 뒤에 있다면 픽셀을 폐기하고, 앞에 있다면 그 픽셀을 다음 단계로 넘겨 값을 z버퍼에 기록한다. 그렇다면 기존 Z Test의 순서는?- 간단하게 말하자면 pixel shader(fragment shader) 다음. 자세하게 말하자면 파이프 라인 참고.- 왜 깊이판정을 ps 이후로 했을까?- ps 연산에 따라 depth가 변경될 수 있기 때문에 ps 앞에서 하지 않음. Early Z를 위해서는?- 기존 하..

2018. 7. 21. 13:06

shadertoy 시작하기.

shader 테스트를 위해 rendermonkey를 주로 쓰다가 shadertoy라는걸 알게되서 편한듯해서 살짝 테스트해볼겸.. 처음 시작하면 아래와 같은 화면이다. 오른쪽에 코딩하고 "alt + enter" 하면 갱신된다. 간단하고 참 좋네. uv좌표를 테스트 해 보자면 왼쪽 아래가 (0,0)이고 오른쪽 위가 (1,1)이다. dx는 반대로 왼쪽위가 0,0이고 오른쪽 아래가 1,1이다. 작업할때 꼭 확인해줘야 한다. 참고 : UV Texture Coordinates and Texture Mapping - OpenGL / DirectX 1 : 코드에서 사용하는 iResolution값 2 : 스크립트 추가 3 : 제공하는 전역변수 4 : 채널값 위와같이 length함수로도 간단히 테스트 해 볼수 있다. le..

2018. 7. 20. 11:59

hlod

원문 : http://www.cs.unc.edu/~walk/hlod/원문의 내용을 필요부분 번역하였습니다.원문을 보길 강력추천합니다. 그림 1. Double Eagle 대형선박. 이 모델은 126,630개 오브젝트, 그리고 82,361,612 삼각형으로 구성되어 있다. 전통적인 LOD 방식으로는 한번에 하나의 객체만 단순화 할 수 있다.그래서 여러 객체를 포함하는 화면이 주어지면 이 방식은 장면 전체가 아닌개별 객체에 대해서만 에러를 최소화 할 수 있다.HLOD(Hierarchical Level Detail, 계층적 lod)는 전통적인 방식의 LOD를 오브젝트의 계층적 집합체로 일반화 하는 것이다.장면의 개별 부분을 같이 단순화 하는 HLOD를 생성하여, 특히 적극적인 단순화를 위해좀 더 괜찮은 전역 근..

What is Texture

What is Texture란 글을 쓰게 된 이유는 요즘 게임을 개발하다 보니,Texture을 정말 다양한 용도로, 그리고 다양한 방법으로 쓰게되서Texture에 대해 여러가지로 정리하는 시작점을 가지고 싶었기 때문이다. Texture란 무었인가?이 질문에 나름 모범적인 대답은 아래와 같다.3d 그래픽에서 폴리곤에 다양한 색상이나 질감을 표현하기 위해 사용되어지는 2D 이미지게임에서 사용되는 텍스쳐는 내가 생각에는 데이터를 저장하는 storage 라고 생각한다.Texture에는 폴리곤에 색상이나 질감을 표현하기 위해 많이 사용하기도 하지만, 다른 용도로도 쓸 수 있기 때문이다.화면톤을 위해 사용할 수도 있고, 계산하기 복잡한 특정 수치값들을 미리 저장해서 쓸수도 있다. 그래서 텍스쳐란 무었인가? 와 무었..

texture format

texture에는 file format 이 있고 pixel format이 있다.파일 포멧이야 파일의 확장자를 보면 알수 있고 이 파일들 마다 독특한 성질을 가지고 있다.몇가지 예를 들어 보면 tga, bmp, jpeg, png, dds, psd, gif, etc... 가 있다.각각 데이터의 압축, 압축시 손실유무, 특정 픽셀포멧 지원여부 등의 기능을 따진다.픽셀포맷은 사용되는 형식에 따라 채널과 비트수, 부호, 부동소수점 등으로 사용된다.아래 링크에서 각 텍스쳐 포멧에 대한 추가적인 내용을 알 수 있다. Reference Link- Difference between floating point render target and normal render target- Floating point texture가..

shader에서 채널값이 모자를 때...

텍스쳐마다 채널이, R/ RG/ RGB/ RGBA 등이 있는데 가끔 채널 하나가 더 필요할 때가 있다.예를들어 R채널에는 Diffuse Mask, G채널에는 Rim Mask, B채널에는 Specular Mask, A채널에는 depth를 넣는데 추가로 offset값을 저장해 줘야 할 때가 있다. 그럴때 가끔 fmod를 사용해서 하나에 두개의 값을 넣게 하는 방법을 쓴 적이 있다.z값(B채널)이 0.0f ~ 1.0f 사이이고 offset 값이 1.0f에서 10.0f 사이라면 z값에 기존값 * 0.01f하고 offset 값을 *0.1f 해서 더한 후 다음 패스에서 이 값을 fmod로 z값을 구한 후기존값에서 빼면 z값만 구할수 있긴 하다. 다만 offset 값이 1.0f~10.0f 조건에 추가로단차가 0.1f..