Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- URP로 변경
- VR
- Rim Light
- 작업 집합
- Cell Shader
- ColorGradingLutPass
- Virtual Byte
- Cell Look
- Specular
- Windows Build
- 가상 바이트
- AppSW
- 벡터
- 프로그래밍 기초
- Cartoon Rendering
- OculusMotionVectorPass
- working set
- Private Bytes
- URP
- 메모리 누수
- Toon Shader
- 게임 수학
- ASW(Application SpaceWarp)
- 개인 바이트
- C언어
- 3d
- Three(Two) Tone Shading
Archives
- Today
- Total
WinCNT
Matcap Texture 본문
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 |