WinCNT

Matcap Texture 본문

게임 프로그래밍(학습 내용 정리)/게임 수학

Matcap Texture

WinCNT_SSS 2022. 4. 5. 15:27

왼쪽의 텍스처를 Matcpa으로 적용한 예시

Material capture ("MatCap") shaders are popular effects used in most 3D modeling tools:

A material is captured by rendering a sphere into a texture.

Models can be shaded by making a simple lookup into the reference texture.

 

텍스처 하나로 룩을 완전히 바꿀 수 있다

다시 말해, 카툰 렌더링이나 골드의 질감 같은 복잡한 연산도

저렴한 연산으로 상당한 질감을 나타낼 수 있다

 

특히 골드 같은 오브젝트의 질감을 전통적인 방법으로

표현하려고 하면 상당한 연산이 필요하다

n이 2일 때는 정반사, n이 낮을수록 굴절하게 되고 0이면 완전히 투과

위의 연산으로 거울, 유리 등등을 다 구현할 수 있다

 

위의 연산을 texCUBE(즉 6면체) 말고 2D인 MatCap으로 할 수도 있다는 것

 

기본적인 매트캡에는 라이팅 연산이 없다

즉, 추가해도 소용 없다

(물론 최근에는 라이팅 연산을 추가할 수 있음)

 

매트캡 자체는 G-Brush 등의 툴로 만들 수 있고

아니면 검색해서 나온 것을 사용하면 된다

// MatCap Shader, (c) 2015-2019 Jean Moreno

Shader "MatCap/Vertex/Plain"
{
	Properties
	{
		_Color ("Main Color", Color) = (0.5,0.5,0.5,1)
		_MatCap ("MatCap (RGB)", 2D) = "white" {}
	}
	
	Subshader
	{
		Tags { "RenderType"="Opaque" }
		
		Pass
		{
			CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				#pragma fragmentoption ARB_precision_hint_fastest
				#pragma multi_compile_fog
				#include "UnityCG.cginc"
				
				struct v2f
				{
					float4 pos	: SV_POSITION;
					float2 cap	: TEXCOORD0;
					UNITY_FOG_COORDS(1)
				};
				
				v2f vert (appdata_base v)
				{
					v2f o;
					o.pos = UnityObjectToClipPos(v.vertex);
					
					float3 worldNorm = normalize(unity_WorldToObject[0].xyz * v.normal.x + unity_WorldToObject[1].xyz * v.normal.y + unity_WorldToObject[2].xyz * v.normal.z);
					worldNorm = mul((float3x3)UNITY_MATRIX_V, worldNorm);
					o.cap.xy = worldNorm.xy * 0.5 + 0.5;
					
					UNITY_TRANSFER_FOG(o, o.pos);

					return o;
				}
				
				uniform float4 _Color;
				uniform sampler2D _MatCap;

				float4 frag (v2f i) : COLOR
				{
					float4 mc = tex2D(_MatCap, i.cap);
					mc = _Color * mc * unity_ColorSpaceDouble;
					UNITY_APPLY_FOG(i.fogCoord, mc);
					return mc;
				}
			ENDCG
		}
	}
	
	Fallback "VertexLit"
}

 

SSS

'게임 프로그래밍(학습 내용 정리) > 게임 수학' 카테고리의 다른 글

Tonemaping  (0) 2022.05.10
Gamma Correction  (0) 2022.05.10
법선 매핑(Normal Mapping)  (0) 2022.03.22
셰이더  (0) 2022.03.08
Direct2D - 흑백 쉐이더 만들기  (0) 2022.01.19