머티리얼과 셰이더의 차이점


27

게임에서 재료는 종종 물체의 시각적 모양에만 영향을줍니다. 시각적 모양은 쉐이더에 의해 영향을받습니다. 용어와 관련하여 머티리얼과 쉐이더 사이에 차이가 있습니까? 하나의 재질에 하나의 쉐이더를 작성해야합니까?


1
머티리얼이 셰이더 + 디퓨즈 텍스처 + 범프 맵 인 몇 가지 엔진을 보았지만 간결한 정의가 있다고 생각하지 않습니다.
Roy T.

3
@RoyT. 이러한 엔진은 용어를 잘못 사용하고있을 것입니다. 재료 (A)에 일치하지 않는 쉐이더 - 셰이더가 인 프로그램 하는 재료는 데이터 값의 무리이다. 2 개의 다른 셰이더 프로그램 이 동일한 재질을 렌더링하고 다른 결과를 얻을 수 있습니다.
bobobobo

@bobobobo 또는 더 일반적으로 단일 텍스처는 다른 질감, 매개 변수 값 등을 연결하여 많은 재질을 렌더링하는 데 사용됩니다.
Nathan Reed

답변:


29

재료는 주어진 재료의 표면이 어떻게 보이는지 설명하는 속성의 조합입니다.

일부 엔진은 재질마다 다른 셰이더를 사용하는데,이 경우 재질 정의는 다음과 같습니다.

[Material]
Shader=NormalMappedSpecular.glsl
Texture1=Rock.png
Texture2=RockNormal.png
Texture3=RockSpecular.png

다른 엔진은 모든 오브젝트에 하나의 쉐이더를 사용합니다 (또는 엔진은 매개 변수, GPU의 기능 및 거리와 같은 기타 요소에 따라 사용할 쉐이더를 결정합니다).

[Material]
Ambient=0.5
Specularity=0.7
DiffuseMap=Rock.png
NormalMap=RockNormal.png
SpecularMap=RockSpecular.png

2
머티리얼의 정의를 게임 엔진이 지원하는 모든 감각으로 확장 할 수 없었습니까? 예를 들어, 타격, 밟기 등의 마찰 매개 변수 또는 마찰 매개 변수가 발생합니까?
didierc

10

재료를 지정하는 목적은 빛에 반응하는 방식.

몇 가지 공통 매개 변수가 있습니다.

  • Kd : 빛에 대한 확산 반응
  • Ks : 빛에 대한 반사 반응
  • Ns : "빛나기"
  • map_Kd : 텍스처

이제 렌더링 삼각형이 있다고 가정 으로 자료를 M. MKd = (1,0,0) (빨간색 확산 반응), Ks = (1,1,1) (흰색 반사 반응), Ns = 25 (정반 강조 표시가 선명하고 퍼지되지 않음) 및 map_Kd ( 질감 없음).

셰이더 의 작업은 수학을 사용하여 삼각형 의 정점 위치 , 조명의 위치, 재질 색상 값 을 가져와 삼각형이 표시되어야하는 색상을 알아내는 것입니다. 꼭짓점 셰이더는 각 꼭짓점에서이 "음영 계산"을 한 번 수행하고 삼각형을 따라 색상을 보간합니다.

버텍스에서 확산 반응을 계산하는 셰이더의 일반적인 작업은 다음과 같습니다.

// hlsl
float3 vertexToLight = normalize( lightPos.xyz - vertexPos.xyz ) ;

float3 diffuseColor = max( dot( vertexToLight, vertexNormal ), 0.0 ) * kd * lightColor ;

3

재질은 색상과 패턴을주기 위해 형상에 적용하는 것입니다. 텍스처는 머티리얼의 구성 요소입니다.

셰이더는 런타임에이 머티리얼을 렌더링 할 수있는 작은 프로그램입니다. 셰이더의 좋은 점은 단순히 머티리얼 렌더링에서부터 스페 큘러 하이라이트 및 리플렉션과 같은 역동적 인 효과 추가, 총알이 부딪힌 벽을 통해 가짜 구멍 렌더링과 같은 매우 영리한 것들까지 모든 것을 할 수 있다는 것입니다.

그래서 당신의 질문에 대한 대답으로-그렇습니다. 차이가 있습니다. 다른 사람과는 할 수 없었습니다.

머티리얼 당 하나의 셰이더가 필요하지 않습니다. 머티리얼에 셰이더를 렌더링해야하지만 원하는 경우 머티리얼에 모두 사용할 수 있습니다. 예를 들어 모든 것이 반짝이기를 원한다면 하나만 작성하면됩니다.

쉐이더의 좋은 예는 기어 오브 워입니다. 장면에 대한 재질 세트가 하나 있지만 버튼을 눌러 전술보기로 전환하면 이러한 재질을 렌더링하는 셰이더가 변경되어 윤곽이 잡히고 일반적으로 다르게 보입니다. 배트맨에서도 같은 일이 발생합니다 : arkham의 '탐지 모드'.


1
기술적으로 텍스쳐는 실제로 머티리얼 이 아니며 보통 머티리얼의 일부 입니다.
bobobobo

1

늦었지만 이해하는 데 도움이되는 "속임수"가 있습니다.

머티리얼은 해당 드로우 콜을 위해 특정 쉐이더에 부착 된 모든 것입니다.

예를 들어, 위의 답변에는 다음 재질이 있습니다. [Material] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png

노멀 맵과 스페 큘러 계산을하는 쉐이더로 렌더링하고 그 쉐이더 안에 3 개의 텍스처를 사용하도록 번역했습니다.

나중에 다른 세 가지 텍스처 (car, carNormal 및 carSpecular와 같은)로 동일한 쉐이더를 재사용 할 수 있습니다. 쉐이더 매개 변수를 변경했기 때문에 다른 재질로 다른 드로우 콜을 수행합니다.

대체로 머티리얼은 동일한 파라미터 (텍스처, 유니폼, 속성)를 가진 동일한 셰이더를 사용하여 드로우 콜을 독특하게 만드는 모든 것입니다.

이것이 더 잘 시각화하는 데 도움이되기를 바랍니다.


쉐이더는 클래스이지만 머티리얼은 인스턴스입니까?
Bengalaa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.