Material (머티리얼)이란 메시에 적용하여 씬의 시각적인 모양을 조절할 수 있는 애셋입니다. 넓게 보면, 머티리얼이란 오브젝트에 적용할 수 있는 "페인트"라 보면 됩니다. 하지만 그것도 약간 오해의 소지가 있는데, 머티리얼이란 말 그대로 오브젝트가 어떤 재질로 만들어졌는지를 정의하는 것이기 때문입니다. 그 색이나 광택, 투과성 등을 정의할 수 있습니다.
보다 기술적인 용어로 풀자면, 씬에서의 빛이 표면에 닿으면, 머티리얼을 사용하여 그 빛과 표면의 상호작용을 계산합니다. 이러한 계산은 여러가지 이미지(텍스처)에서 온 데이터를 수학 표현식과 아울러 머티리얼 자체에 상속된 여러가지 프로퍼티 세팅을 통해 이루어집니다.
#pragma once
#include "yaResource.h"
#include "yaTexture.h"
#include "yaShader.h"
namespace ya
{
class Material : public Resource
{
public:
struct Data
{
std::wstring albedo; //difuuse
};
Material();
virtual ~Material();
virtual HRESULT Save(const std::wstring& path) override;
virtual HRESULT Load(const std::wstring& path) override;
void Bind();
void SetShader(graphics::Shader* shader) { mShader = shader; }
private:
graphics::eRenderingMode mMode;
Material::Data mData;
//Texture* mTexture;
graphics::Shader* mShader;
};
}
입력 어셈블러 스테이지(Input Assembler 이하 IA) 는 렌더링 파이프라인의 젤 처음 스테이지이자
어플리케이션으로부터 넘겨받은 버텍스 버퍼나 인덱스 버퍼의 데이터를 읽어들여 [점],[선],[삼각형]등의 프리미티브를
조합하여 파이프라인의 다음 스테이지로 데이터를 흘려보내는 역할을 한다
그 밖에 셰이더에서의 처리에 필요한 [ 시스템 생성값]을 추가할수도 있다
[ 시스템 생성값 ]은 다른 입출력 Element와 마찬가지로 [ 시멘틱스]를 붙여 식별하며
입력어셈블러가 생성하는 시스템 생성값에는 [ 버텍스 ID ] [ 프리미티브ID ] [ 인스턴스 ID] 등이 있다.
아래는 입력 어셈블러 스테이지에서의 데이터들의 관계도를 나타낸 그림이다
입력 레이아웃 오브젝트
DirectX의 버텍스 버퍼에는 어플리케이션측에서 임의의 정보를 기록할 수 있다
그때문에 [ 어떤 버텍스버퍼의 어느 데이터가 포함되어 있고, 셰이더에 어떤 식으로 넘길것인가 ] 를 IA에 알려줄 필요가 있다
이때문에 필요한것이 [ Input Layout ] 이다