전체 글 21

Texturing Seams 문제 - MSAA out of range by interpolation, Atlas Bleeding, Mipmap LOD

현재 상황Greedy Meshing을 적용 후 메모리 최적화를 위해 텍스쳐 좌표를 IA, VS단계에서 넣지 않고Pixel Shader에서 직접 텍스쳐 좌표를 계산함 이 때, VS -> RS -> PS 흐름에서 Interpolation된 World 좌표를 가져다가 쓰면 된다고 판단하여 frac 연산 후 텍스쳐 좌표를 설정하여 샘플링하기로 결정 또한 Texture Atlas를 이용하여 적절한 Texture Tile을 골라서 샘플링을 했는데, 이 때 LOD를 직접 계산하면 어색한 결과가 나타나므로 HLSL 내장 함수 Sample이 내부적으로 그라이언트 연산으로 LOD를 결정한다길래 거기에 맡겼음 일반적으로 대부분의 픽셀은 원하는 대로 렌더링되지만 가장자리 부분에서 문제가 발생했음   Texturing의 문제점..

biome 정리

동굴 만들기3D perlin noise 를 이용하여 동굴을 만들건데처음에 이해하기 힘들었던 부분은 2D perlin noise 의 값을 이용해 높이를 얻었는데3D perlin noise 의 값이 의미하는건 무엇이지?내가 내린 결론은 2D perlin noise 의 값도 임의로 높이 값으로 해석한거와 같이3D 도 특정 임계값을 초과하는 모든 값이 '비어 있는' 공간이다 라고 해석하면 그 비어있는 공간이 동굴이 되는것 void foo() { float x, y, z; float threshold; // 임계값 float thick = Get3DPerlinNoise(x, y, z) if (thick > threshold) block[x][y][z] = void}  온도와 고도에 따른 ..

Voxel Cloud 구현 및 투명도와 노이즈 & Sky Shader 수정

Sky Shader 대폭 수정이전까지는 그냥 태양의 방향 벡터를 수정하고, 일반적으로 고도에 따라서 적절히 interpolation 했음 - 하지만, 어떠한 기준이 없었고, 특히 어느 지점에서 어느 색이 가장 강해야 할 지 기준을 명확히 해야했음 - 어떻게 할지 결정하다가, Minecraft는 Daylight Cycle에 대한 시간의 기준이 분명이 존재했다는 것을 알게 됨 이러한 기준을 결정하는 이유는 Light나 다른 컨텐츠를 시간에 따라 구분하기 위함임 - 다양한 요소가 시간의 영향을 받고, 거기에 색이 달라지며, 그 색을 이용한 쉐이딩이 필수적이였음 - 즉, 데이터가 서로 긴밀하게 연결되어 있기 때문 0 ~ 24까지의 정수 시간대 - 0~12: Day time - 12~13: Sunset - 13~..

그리디 메싱 수정 - Block Type 고려

문제점1. 모든 블록 타입에 대해서 루프를 돌면 매우 느림2. 초기화 과정 마다 메모리를 할당하려고 하는 문제  해결1. 하나의 청크는 일반적으로 많은 Type을 가지지 않기에 구성된 Type 집합에 대해서 반복문을 돌기로 결정- 최악은 255개의 타입을 가져서 느리지만, 평균적으로 타입의 개수는 적음 2. 초기화 마다 메모리 할당이 싫어서 클래스 변수로 두고 사용- 비동기로 실행하는 멀티쓰레드에서는 공유메모리 문제가 존재- 그 결과, Main Thread에서 매 프레임 당 정해진 개수 만큼만 초기화하도록 결정  남은 고려 사항1. 물같이 불투명한 물체와 투명한 물체의 관계 - 뭔가 투명한 물체와 불투명한 물체를 따로 두고 그리디 메싱을 해야할 것 같음 (페이스 컬링) 2. 동기로직을 제외- Main 쓰..

Sky Shader - 움직이는 태양, 달의 고도에 따른 비등방성

참고)Cloud 구현 후 대폭 수정 : Voxel Cloud 구현 및 투명도와 노이즈 (tistory.com)       개요이전 일지 - Skybox 구현 (tistory.com) Skybox 구현DDS Cubemap Texture VS Shading 적절한 큐브맵 텍스쳐를 얻어올 것이라 가정하고 Cubemap Texture를 이용한 구현을 했지만 voxel world에 어울리는 큐브맵 텍스쳐를 찾기 쉽지 않았고, 이질감이 들어서 결국 직heryujseol.tistory.com 구름을 렌더링하기 위해 우선 태양과 달, 하늘을 쉐이딩하기로 함- 하는 방식은 매우 많음- 시간에 따라 색이 바뀌고 보는 방향에 따라서도 바뀌는 Sky shader를 작성하고 싶었음 일단 내 마음대로 Non-Physics Sky..

Terrain 기초 구성

HeightMap 생성PerlinNoise지형을 만들때 각각의 값은 랜덤이지만 연속적인, 매끄러워야 한다이를 프랙탈 합을 사용하여 자연스러운 결과를 나타낸 것이 펄린 노이즈-프랙탈 합(정밀도가 다른 노이즈 함수를 더해 노이즈를 만드는 방법) 원리1. 그리드 만들기  2차원 좌표평면상 주어진 점(x,y) 주변의 가까운 정수좌표로 이루어진 그리드 만들기 2. 그리드의 꼭지점에 RandomGradient 생성   - 여기서 포인트는 Gradient 의 값은 주어진 인자(x, y) 에 기반한 랜덤값    - 때문에 연속적인 인자가 들어왔을대 서로 연관성이 있기 때문에 부드럽게 이어지는 노이즈가 만들어진다 3. 그리드의 꼭지점에서 점(x, y)로 향하는 벡터 생성 4. 2와 3을 내적해 각 꼭지점에서의 영향력 구..