전체 글 169

230516 Deferred Rendering - Light MRT

쉐이더 코드에서 inout을 사용한 이유 -> 입력한 값이 들어와서 추가적으로 무언갈 해주고, 반복문을 돌아서 여러번 누적처리를 할 것이기 때문이다. 이 픽셀에 적용되는 광원이 여러개가 겹쳐있을 수도 있다. out만 사용하면, 처음 입력될 때 어떤값을 채워놔도 초기화된 값으로 밀려서 들어간다. Light MRT 1. DiffuseTargetTex 난반사광 2. SpecularTargetTex 정반사광 깊이 텍스쳐 x 광원을 나중에 처리한다는 것은 어떤 의미일까 ? Directional Light(전역광원)을 사용한다면, 우리가 보고있는 화면에서 Directional Light을 받아야하는 부분은 화면 전체에 광원을 다 주면 된다.. 물체가 어디에 있을지 모르기 때문에! 그런데 그렇게 되면 아무 것도 없는..

DirectX 11 3d 2023.05.17

230512 MRT 출력 - Deferred MRT

테스트 MRT 랜더타겟 2장 사용. SwapChain MRT SwapChain 이 갖고 있는 랜더타겟, 뎁스스텐실 텍스쳐 SwapChain MRT가 OM에 출력으로 SwapChain 이 갖고 있는 랜더타겟이 지정되서 그림이 그려지고, 이걸 윈도우에 출력해서 보고 있고, 깊이는 뎁스스텐실 텍스쳐에 기록이 되고 있다~ Deferred MRT 랜더타겟을 SwapChain 이 갖고 있는 랜더타겟과 별개로 2장을 더 만들어서 MRT 설정. 깊이텍스쳐는 원래꺼(SwapChain MRT에 있는 깊이 텍스쳐) 공유해서 사용 여기에 그리는 애들은 쉐이더 도메인을 완전히 분리한다 => Deferred Domain 사용 Deferred Domain을 쓰는 물체들은 OM에 출력을 랜더타겟1에 지정해서 랜더타겟2에 그림을 그릴..

DirectX 11 3d 2023.05.15

230511 멀티랜더타겟(MRT)

랜더링파이프라인 단계 더보기 IA단계 VS 목적 => 로켈스페이스에서의 정점정보를 최종 NDC 좌표계까지 변환하는 작업을 진행 레스터라이저 PS 목적 => 호출된 픽셀들에 대해 랜더타겟에 출력하는 단계 OM state (output merge) 1. Depth stansil state 2. Blend state OM 단계에서의 최종 목적지 Render target =>최종색상 출력 Depth stancil texture=> 깊이 기존에는 랜더링 매번 실행할 때마다 랜더타겟 1장과 뎁스스텐실 텍스쳐 1장 셋팅 처음엔 매프레임마다 하지 않고 디바이스 초기화할 때 한 번만 하도록 셋팅 해두었는데, 랜더링 시작할 때마다 재지정하게 해둔 이유는 ? imgui 랜더링할 때, imgui 랜더타겟으로 바꿔놓는다. im..

DirectX 11 3d 2023.05.13

230510 노말맵핑

노멀매핑이란.. 노멀 매핑이란 많은 수의 정점을 가진 오브젝트(모델)의 법선 벡터들을 텍스쳐의 텍셀로 기록하여, 보다 낮은 수의 폴리곤 오브젝트(모델)에 매핑하여 조명 연산할 때 음영을 현재 모델보다 더 퀄리티(입체감) 있게 나타내기 위한 눈속임이라고 볼 수 있다. 노말값을 정점의 위를 향하게 해놨는데, 호출되는 픽셀쉐이더는 보간되는 노말값을 가져가니까 결국 어느 픽셀을 찍어도 같은 방향이다. 세기의 평균치가 똑같다. 그래서 빛이 들어오더라도 노말값의 평균이 같기 때문에 빛의 밝기가 똑같게 보인다. 즉, 평면 내에서는 디렉셔널라이트에 의한 빛의 차이가 없게 보인다. 그나마 반사광에 의한 차이가 있다. 반사광은 보는 사람이 어디있냐에 따라서 똑같이 튕겨도 밝게 보이는 지점과 밝게 보이지 않는 지점이 있기 ..

DirectX 11 3d 2023.05.11

230509 skybox 개선 (스피어->큐브)

1. skybox 개선 몰려있는 느낌이 드는걸 개선해야한다 => 스피어 매쉬일때 이런 현상이 일어남 요즘은 그래서 큐브 매쉬를 많이 사용한다! 텍스쳐 6장을 사용해서 큐브형태를 만든다 (다이렉트에서는 dds 포맷을 사용함) void CSkyBox::SetType(SKYBOX_TYPE _Type) { m_Type = _Type; if (SKYBOX_TYPE::SPHERE == _Type) { SetMesh(CResMgr::GetInst()->FindRes(L"SphereMesh")); } else if (SKYBOX_TYPE::CUBE == m_Type) { SetMesh(CResMgr::GetInst()->FindRes(L"CubeMesh")); } SetMaterial(CResMgr::GetInst()..

DirectX 11 3d 2023.05.11

230508

1. 스카이박스 (랜더컴포넌트 상속) 랜더컴포넌트 상속 받았기 때문에 랜더링 관련 기능이다. 그리고, 매쉬랜더와 같이 기본적인 함수들은 다 있다 (랜더컴포넌트 부모쪽에 있는 함수!) 랜더컴포넌트에 구현되어있는것 1. 매쉬 지정 2. 재질 지정 3. 랜더링 호출 4. 버텍스버퍼, 인덱스버퍼 셋팅 물체 랜더링하는게 순수한 목적이면 skybox를 만들 필요가 없다.. why 만들.. ? 스카이박스의 역할 1. 게임 월드를 크게 영역을 잡아서 커다란 돔 형태로 주변을 감싼다. (엄청 크게 매쉬를 키워서 월드를 두른다.) 2. 직사각형 텍스쳐가 좌우끝이 만난다. 3. 도달한다고 가정해서 만든게 아니고, 엄청나게 멀리 도달할 수 없는 하늘, 우주 별 같은 것 4. 얼마나 크게해야 멀리 있는 느낌이 날까 ? => 메..

DirectX 11 3d 2023.05.11

220504

1. 광원 역할을 하는 component , Light3D 2. 반사광 (무조건 함으로 변경) Light3D의 finaltick 의 랜더매니저에 광원구조체 정보를 넣어준다. CRenderMgr::GetInst()->RegisterLight3D(m_LightInfo); 등록시켜서 이 레벨내에 존재하고 있는 광원 정보를 랜더매니저가 모아놨다가 랜더링 시작하기전에 구조화버퍼에 담아서 보낸다. ==> 예전 Light2D 랑 비슷함. 광원 연산은 PS(픽셀)에서만 한다.

DirectX 11 3d 2023.05.10

220503

1. 구 2. 반사광 반지름 r을 설정해서 정점을 배치해서 한바퀴 돌리고, 그 위로 조금 올려서 한바퀴.. 해서 겹겹이 쌓이게 해서 구를 만든다 fRadius = 0.5f; 로컬스페이스라고 하면, 꼭짓점 좌표는 (0, 0.5, 0) 즉, v.vPos = Vec3(0.f, fRadius, 0.f); v.vUV = Vec2(0.5f, 0.f); v.vColor = Vec4(1.f, 1.f, 1.f, 1.f); v.vNormal = v.vPos; 구 위에 있는 어느점이라도 표면에서 수직으로 나가는 normal 방향은 구에서 본인의 위치가 된다. 즉, 본인의 위치가 곧 normal 방향이 된다. 단위벡터는 아니다 -> 단위벡터는 길이가 1이기 때문.. v.vNormal.Normalize(); -> 반지름이 0...

DirectX 11 3d 2023.05.09

220502

오늘 배운 것 1. 3d물체 전용 쉐이더 만들기, 3d전용 재질 만들기 std3d.fx / std3dMtrl 2.1 하려다가 그래픽 파이프라인.. 다시 복기 3. lighting 명암(광원) 작업 (2교시) draw 하면 그래픽스 파이프라인 시작! draw 함수는 누가 가지고 있을까 ? Mesh 랜더링을 담담하는건 랜더컴포넌트! VS_OUT output.vPosition = mul(float4(_in.vPos, 1.f), g_matWVP); 1.f 로 마지막에 넣은 이유? 이동값이 들어있기 때문에 그걸 이용하기 위해서. (명암작업) 구조화버퍼 -> 수식 넘기기 static float3 g_LightDir = (1.f, -1.f, 0.f); static float4 g_LightColor = 방향을 월드 ..

DirectX 11 3d 2023.05.09