hlsl 3

[Visual studio] HLSL Tool문제로 인해, hlsl코드 인식 안될 때

hlsli로는 float4같은 코드가 인식이 되는데, hlsl로 만들엇을때 아무리 설정을 잘 해줬어도 c++로 코드를 인식해버리는 경우가 있다. 이건 visual studio과 hlsl tools for visual studio가 잘 호환이 되지 않을 때 발생하는 문제이다. 해결방법은 extension-> manage extensions-> installed에서 Tim Jones라는 사람이 만든 HLSL Tools for Visual studio를 제거하고 새로운 버전을 다시 다운로드 해주면 된다. 새로운 버전을 먼저다운하면 여기서 HLSL Tools for Visual studio가 두개가 나타날 수 있는데 반드시 하나여야만 제대로 작동한다. 비쥬얼스튜디오 마켓플레이스에서 HLSL Tools치고 들어..

[Dx11] hlsl을 헤더파일로 컴파일 하는법

DX11에서는 런타임시 hlsl파일을 컴파일 하는 방식이 존재한다. D3DCompileFromFile과 같은 함수를 사용하는 것이다. 하지만 코드 길이가 길어지고, 배포시에는 보안상 사용될 수 없다. 이외의 방식에는 .cso로해서 빌드 시 객체 파일로 컴파일 하는 방식이 있고, 빌드 시 헤더 파일로 컴파일 하는 방식이 있다. 여기서는 빌드 시 헤더파일로 컴파일 하는 방식에 대해 알아 볼 것이다. visual studio내부에서 hlsl을 바이트 배열로 변환하고 그 값들을 헤더파일에 저장한다. 그리고 사용하면 된다. D3DCompileFromFile에서는 코드가 다음과 같은데,HRESULT hr = S_OK; // 컴파일된 셰이더 코드가 들어갈 blobID3DBlob* pPSBlob = nullptr..

[GPU병렬 처리] 쉐이더코드에서 if-else문을 안 쓰는 이유

평소 CPU코딩에만 익숙해져있다면, 다음과 같은 코드를 보고 굉장히 비효율적이라고 생각할 수 있습니다.[unroll] // warning X3557: loop only executes for 1 iteration(s), forcing loop to unrollfor (i = 0; i  hlsl 픽셀세이더에서는 GPU병렬처리를 이용하기 때문에 if-else문을 사용한다고 해서 조건에 참인 값만 계산되는 것이 아닙니다. 비트 마스킹을 이용하기 때문이죠.예를들어 이 코드는float4 color = // some color;if (someValue > 0.5) color = ExpensiveCalculation(); // 비싼 계산 실제로 이 코드로 실행이 됩니다.float4 color = // some ..