본문 바로가기

전체 글13

Compute Shader을 사용한 Blur 효과 (DirectX11,Opengl) 이전시간에 컴퓨트 셰이더를 사용하여 버퍼의 내용을 읽고 계산후 그결과를 다시 쓰는 작업을 보여드렸습니다. 이번에는 이미지의 내용을 읽고 다시 기록함으로서 가우시안 블러효과를 구현해보도록 하겠습니다. 이전에 컴퓨트 셰이더에서 버퍼의 읽기/쓰기를 수행하려면 어떤것이 필요했을까요? DirectX11 에서는 StrucutredBuffer 즉 읽기만 수행하는경우 BufferStrutured 플래그가 지정된 버퍼가 필요하며 읽기/쓰기 둘다 진행하려면 따로 바인드 플래그에 D3D11_BIND_UNORDERED_ACCESS 를 지정한 버퍼가 필요했습니다. OpenGL 에서는 SSBO(Shader Storage Buffer Object) 가 필요했습니다. 조사해보니 StructredBuffer의 특징이 SSBO 안에 포.. 2021. 9. 14.
DirectX11,Opengl 에서 Compute Shader 사용하기. 이전 포스팅에서 Assimp를 이용하여 Skeletal Animation을 구현했습니다. 애니메이션을 구현하기위해 하드웨어 스키닝을 정점쉐이더에서 진행했는데요. 이러면 한가지 문제점이 생기게됩니다. 기존의 애니메이션을 사용하지않는 정적인 메쉬에대한 쉐이더코드가 다르고 애니메이션 메쉬를 위한 쉐이더코드가 따로 있어야합니다. 예를들어 그림자매핑을 위해 깊이값을 기록하는 쉐이더 코드가 있다고하면 정적메쉬를 따로모아서 쉐이더코드를 바인딩한다음 그려야하고 다그렸으면 다시 애니메이션 메쉬들을 모아서 애니메이션을 위한 쉐이더를 바인딩하여 그려야합니다. 이럴경우 애니메이션에 필요한 계산된 Bone 행렬이 정점쉐이더에 전달된후 정점쉐이더에서 계산을할 것입니다. 그다음 그림자맵을 만들었으면 이제 쉐이딩 단계에서 또다시 그.. 2021. 9. 2.
Asssimp 를 이용한 SkinningMesh and Skeletal Animation 사실 이번에 넣을 기능은 인터넷에서 쉽게 검색할 수 있는 스켈레탈 애니메이션과 다르지 않습니다. 다만 튜토리얼을 보고 마주친 한계점에 대해서 그리고 의문점에 대해 적어 보겠습니다. 구현하면서 뭔가 구조적으로 마음에안들고 성능도 안나와서.. 많이 고쳐야할 코드인것같아요 일단 기본적으로 참고한 튜토리얼은 아래 링크입니다. 아래 내용을 숙지했다는 가정하에 제가 구현하고 느낀점을 서술하도록하겠습니다. https://learnopengl.com/Guest-Articles/2020/Skeletal-Animation LearnOpenGL - Skeletal Animation Skeletal Animation Guest-Articles/2020/Skeletal-Animation 3D Animations can brin.. 2021. 8. 21.
스텐실 버퍼를 사용한 외곽선효과 및 삼각형으로 풀스크린 그리기 3D 피킹을 구현하고 선택한 오브젝트가 메쉬가있을경우 시각적으로 선택되었다는 효과를 주고싶었습니다. 그래서 오브젝트에 외곽선효과를 주는 방법에 대해서 생각해보았는데요. 마침 LearnOpengl 에 스텐실버퍼를 사용하여 외곽선 효과를 만드는 강좌가 있었습니다. LearnOpengl에서 설명하는 스텐실 버퍼 외곽선의 원리는 간단합니다. 처음에 스텐실상태를 모든값을 기록하도록 바꾼후 1의 값을 기록하도록 지정합니다. 외곽선을 줄 오브젝트를 그립니다. 이럴경우 스텐실버퍼의 해당 오브젝트 위치에는 1의값이 그려지게됩니다. 예를들어 사각형을 그린다면 현재 보이는 화면버퍼가 0의 값으로 초기화되었다면 1로이루어진 사각형이 보이겠죠? 그후 외곽선을 그릴때 색깔만 그리는 쉐이더를 바인딩하고 기존의 오브젝트보다 살짝큰 .. 2021. 8. 16.
ID값을 기록한 텍스쳐를 사용하여 3D오브젝트 피킹하기 모델로딩에서 Sponza Scene을 불러왔었습니다. 노드와 노드아래있는 분할된 메시까지 엔티티로 만드느라 수백개의 오브젝트가 생성되고 하이라키뷰에서는 해당 오브젝트들을 띄워주었는데요. 이럴경우 하이라키뷰에서 직접클릭하면 어떤 오브젝트인지도 모르고 지금 당장 눈앞에보이는 오브젝트에 대한 정보를 얻고 싶어도 얻을수 없었습니다. 그래서 이제 피킹기능을 추가해볼것인데요. 사실 이전에 피킹기능은 있었습니다. https://www.youtube.com/watch?v=wYVaIOUhz6s&t=2s OpenGL을 사용하시는분은 위 동영상 튜토리얼을 그대로 따라하시면 바로 구현할 수 있습니다. 해당 튜토리얼을 간략하게 요약하자면 멀티렌더타겟을 이용하여 오브젝트 ID를 기록하는 텍스쳐를 따로 준비하고 화면을 마우스로 클.. 2021. 8. 13.
Billboard 렌더링 , 평행하지않은 사각형의 텍스쳐 보간법 이전 포스팅에서 에디터에 피킹기능을 추가하기전에 해야할 작업이 있었습니다. 바로 빛 오브젝트의 위치에 빌보드를 띄우는것인데요. 빌보드는 한마디로 카메라를 바라보는 평면기하구조에 텍스쳐를 입힌것이라고 생각하면되겠습니다. 실제로 파티클 효과에 빌보드가 많이사용됩니다. 그냥 흰색 원구를 빛위치에 띄우는것보다 빌보드를 통해 빛오브젝트를 표현하는게 좀 더 예쁠것같아요 빌보드 튜토리얼 링크는 아래있습니다. http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/billboards/ Billboards Billboards are 2D elements incrusted in a 3D world. Not a 2D menu on top of e.. 2021. 8. 11.
Assimp 를 이용하여 모델불러오기 https://github.com/assimp/assimp GitHub - assimp/assimp: The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clea The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clean data structure. - GitHub - assimp/assimp: The official Open-Asset-Importer-Library Reposit... github.com Assimp를 사용하여 모델을 불러오도록 하겠.. 2021. 8. 10.
다중광원과 그림자 구현하기 (Multiple Light and Shadow) - 스폿라이트 https://learnopengl.com/Lighting/Light-casters LearnOpenGL - Light casters Light casters Lighting/Light-casters All the lighting we've used so far came from a single source that is a single point in space. It gives good results, but in the real world we have several types of light that each act different. A light source that cast learnopengl.com 위 튜토리얼을 참고한 글입니다. 처음부분은 스폿라이트에 대해 튜토리얼 내용그대로 설명하겠습.. 2021. 8. 6.
다중광원과 그림자 구현하기 (Multiple Light and Shadow) - 포인트라이트 이전 포스팅에서 방향성 광원에대한 빛계산및 그림자처리를했습니다. 이번에는 포인트 라이트와 스폿라이트에 대한 광원 및 그림자 구현과 이 3가지의 광원들의 그림자와 빛계산을 합치는 법을 올려보도록 하겠습니다. 기본적으로 참고했던 튜토리얼은 DirectX11 튜토리얼글중 http://www.rastertek.com/dx11tut30.html Tutorial 30: Multiple Point Lights Tutorial 30: Multiple Point Lights This tutorial will cover how to implement multiple point lights in DirectX 11 using HLSL and C++. Most of the tutorials I have used directi.. 2021. 8. 5.
Cascade Shadow Map Pratical Split Scheme 이전 포스팅에서는 임의로 절두체 간격값을 정해줬습니다 (Z값) 그런데 이렇게 임의로 지정하는것외에도 Z값을 절두체 분할갯수만큼 적절하게 나눠주는 방법이있습니다. https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-10-parallel-split-shadow-maps-programmable-gpus Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs Chapter 10. Parallel-Split Shadow Maps on Programmable GPUs Fan Zhang The Chinese University of Hong Kong Hanqiu Sun The.. 2021. 7. 30.