์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ๊ทธ๋ํฝ์ค
- ๊ทธ๋ํฝ์คAPI
- ๊ฒ์์์ง
- opengl
- ์ค๋ง์ผ๊ฒ์ดํธ์ฅํํ
- ๋ฒกํฐ
- ๋ธ๋๋
- ๊ฒ์
- ์ญํ
- ๋ํ์
- Shader
- zbrush
- CG
- ๋ฆฌ๊น
- Unity
- ๊ฒ์๊ฐ๋ฐ
- ์์
- 3d
- ๊ฒ์์ํ
- ์ปดํจํฐ๊ทธ๋ํฝ์ค
- ๋ชจ๋ธ๋ง
- opengles
- ์ค๋ง์ผ๊ฒ์ดํธ
- rendering
- ์ง๋ธ๋ฌ์ฌ
- smilegate
- ์ ๋ํฐ
- Blender
- game
- Modeling
- Today
- Total
๐ฅํธ์์์ GamLog
[Unity][Shader][URP] ์ ๋ํฐ ์์ด๋ : ์์ฐ๋ผ ๋ง๋ค๊ธฐ(ํ๋ก๊ทธ๋จ) ๋ณธ๋ฌธ
[Unity][Shader][URP] ์ ๋ํฐ ์์ด๋ : ์์ฐ๋ผ ๋ง๋ค๊ธฐ(ํ๋ก๊ทธ๋จ)
์ฅ์ฒ์งํฅ์ฌ 2023. 9. 20. 09:47

์ค๋์ ๋ฆผ๋ผ์ดํธ์ ์ํ๋ฅผ ์ด์ฉํด ์บ๋ฆญํฐ์ ์์ฐ๋ผ๋ฅผ ์ ํด์ฃผ๋ ์์
์ ํด๋ณด๋ ค๊ณ ํ๋ค.
์๋ ์์๊ณผ [์ ๋ํฐ ์์ด๋ ์คํํธ์
] ์ ์ฐธ๊ณ ํ๋ค.
๐ช ๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ


์์ฐ๋ผ ๊ตฌํ ์ด๋ก
: ๋ฆผ๋ผ์ดํธ๋?

๋ฆผ๋ผ์ดํธ(Rim Light)๋ ๋ฌด์์ธ๊ฐ?
: "Rim light"๋ ์ฌ์ง ์ดฌ์ ๋ฐ ๋น๋์ค ์ ์๊ณผ ๊ฐ์ ์๊ฐ์ ์์ ์์ ์ฌ์ฉ๋๋ ์กฐ๋ช
๊ธฐ์ ์ค ํ๋, Rim light๋ ๋์์ ์ฃผ๋ณ์ ๋๋ฌ์ผ ์ค๊ณฝ์ ๊ฐ์กฐํ๊ณ , ๋์์ ๋ฐฐ๊ฒฝ์์ ๋์ฑ ๋๋ณด์ด๊ฒ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ฒ์์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ฒ์์์ ๋ฐฐ๊ฒฝ๊ณผ ์บ๋ฆญํฐ๊ฐ ๋ถ๋ฆฌ๋๊ฑฐ๋ ๊ฐ์กฐ ๋์ด ๋ณด์ด๋๋ก ํ๊ธฐ ์ํด์ ๊ณผ์ฅ ๋๊ฒ ๋์์ฃผ๋ ํจ๊ณผ๋ก ์ฐ์ธ๋ค.

์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ standard Shader์ ๊ฐ์ ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ ์์ด๋๋ ์ด๋ฌํ ์ฌ์ง ํน์ฑ์ ๋ฐ๋ฅธ ๋ฐ์ฌ์จ์ด BRDF (Bidirectional Reflectance Distribute Function)์ผ๋ก ์ด์ฉํด ๊ตฌํ ๋์ด ์๋ค. ์ด๋ฌํ ๋ฐฉ์ฌ ๊ณต์์ Fresnel(ํ๋ ๋ฌ) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค
์ค๋ ๊ตฌํํ๊ณ ์ ํ๋ ์ด ์์ฐ๋ผ ์ดํํธ ๊ธฐ๋ฅ์ ํต์ฌ์ ๋ฆผ๋ผ์ดํธ(Rim Light)๋ฅผ ์ํ์ ์ง์ด๋ฃ์ด ๊ธฐ๋ณธํ์ ๋ง๋๋ ๊ฒ์ผ๋ก ์์ํ๋ค.
URP๋ฅผ ํ์ฉ
๐์ ์ฒด ํ์ดํ๋ผ์ธ ๋ชจ์ต

์ ํ์ดํ ๋ผ์ธ์ ์ชผ๊ฐ์ ์ค๋ช
ํด๋ณด์๋ฉด
์ด ์์ฐ๋ผ์ ๊ธฐ๋ฅ์ ์ด ๋๊ฐ์ง ํํธ๋ก ๋๋๋ค.
์ vertex์ position ๋ถ๋ถ์ ๋จผ์ ์ดํด๋ณด์

์ฐ๋ฆฌ๋ ๊ธฐ์กด์ ๋
ธ๋ง๋ฒกํฐ๋ฅผ ๊ตฌํด expand๋ณ์๋งํผ ๋
ธ๋ง๋ฒกํฐ๋ฅผ ํ์ฅ์ํฌ ๊ฒ์ด๋ค.
expand๋ณ์๋ ์ธ๋ถ์์ ์
๋ ฅ๋ฐ์ ์ ์๋๋ก ๋นผ๋ ๋ค ๋
ธ๋ง๋ฒกํฐ์ mulํด์ค๋ค.
๋ค์์ ๊ธฐ์กด position์ ์ถ๊ฐํด ๊ธฐ์กด ๋
ธ๋ง๊ณผ ํ์ฅ๋ ๋
ธ๋ง์ ๋๋ฒ ๊ทธ๋ฆด ์ ์๋๋ก ํด์ค๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ๋
ธ๋ง๋ฒกํฐ์ Space๋ฅผ ์ค๋ธ์ ํธ๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค.
์ด๋ถ๋ถ์ ๋ง์น๋ฉด ์ค๋ธ์ ํธ๋ ์๋์ ๊ฐ์ ๋ชจ์ต์ผ๋ก ๋ํ๋๋ค.
๋
ธ๋ง์ ํ์ฅ์์ผ ํ๋ฒ ๋ ๊ทธ๋ฆฐ ๋ชจ์ต์ด๋ค.

๋ค์์ ํ์ฅ๋ ๋
ธ๋ง์ ์ด๋ป๊ฒ ํ๋ฉด ์์ฐ๋ผ์ ๊ฐ์ ๋ชจ์ต์ผ๋ก ๋ํ๋ ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ค.

์์์๋งํ ํ๋ ๋ฌ ์ฐ์ฐ์ด ์ด ์์ฐ๋ผ์ ๋๋์ ๋ด์ค ์ ์๋๋ฐ, ๋ฆผ๋ผ์ดํธ์ ๋ฐ์ฌ๊ด๊ฐ์ ๋ถ๋ถ์ ์ด ์ฐ์ฐ์ ํตํด ๊ตฌํํ ์ ์๋ค.
ํ๋ ๋ฌ ์ฐ์ฐ์๋ฐ์ฌ๊ด์ power๋ฅผ ํตํด ์กฐ์ ํ ๋ค ์ํ๋ ์์ฐ๋ผ ์ปฌ๋ฌ์ mulํด์ค๋ค.
์ด ์ํ๋ก๋ ์ข์ง๋ง ์์ฐ๋ผ์ ๋์ ์ธ ๋๋์ ๋ํ๊ธฐ ์ํด UVํ
์ค์ณ๋ฅผ ๋ฐ์ Timeํจ์์ ๋ฐ๋ผ UV๊ฐ ์์ง์ด๋๋ก ํ๋ค.
์ด ํ
์ค์ณ๋ฅผ ๊ธฐ์กด์ ์ค์ ํ color์ mulํด์ฃผ๋ฉด ์์ฐ๋ผ ๋ชจ์ต์ด ์์ฑ๋๋ค.
์๋๋ ์ธ์คํํฐ์ฐฝ์ผ๋ก ๊บผ๋ด๋์ ์์ด๋ ์
๋ ฅ๊ฐ์ด๋ค.
์ฌ๊ธฐ์ expand ํ์ฅ์ ๋์ ์์์ ๊ณ ๋ฅด๋ฉด ์๋์ ๊ฐ์ ๋ชจ์ต์ด ๋ํ๋๋ค.



โ์๊ฐ์ ๋ฐ๋ผ ํ๋ฅด๋ UV๋งต์ ์ถ๊ฐํ ๊ฒฐ๊ณผ
HSLS๋ฅผ ํ์ฉ
๐๋จผ์ ๋ด๊ฐ ์ฌ์ฉํ ์ฝ๋๋ธ๋ญ์ ์ ์ฒด ์ฝ์
ํ๋ค. ์๋ ์ด ์ฝ๋๋ฅผ ํ๋์ฉ ๋ถ์ํด ๋ณด๊ฒ ๋ค.
Shader "Custom/Aura"
{
Properties
{
_TestColor("display name", Color) = (0,0,0,0)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue"="Transparent"}
//LOD 200
CGPROGRAM
#pragma surface surf Lambert noambient alpha:fade
//#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
float3 viewDir;
};
float4 _TestColor;
//UNITY_INSTANCING_BUFFER_START(Props)
//UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
//o.Albedo = c.rgb;
o.Emission = _TestColor;
float rim = saturate(dot(o.Normal, IN.viewDir));
//o.Emission = pow(1 - rim, 3);
rim = pow(1 - rim, 3);
o.Alpha = rim;
}
ENDCG
}
FallBack "Diffuse"
}
๋จผ์ ์ฐ๋ฆฌ๋ Properties๋ฅผ ํตํด ํ
์ค์ณ์ ์์ฐ๋ผ์ ์์์ผ๋ก ์ฌ์ฉํ ์
๋ ฅ๊ฐ์ ๋ฐ์์ฌ ์ ์๋๋ก ํ๋ค.

๋ฌผ๋ก ๋ฐ์์จ ์
๋ ฅ๊ฐ์ ๋ณ์๋ฅผ ํตํด ์ด๊ธฐํ ํ๋ค ์ฌ์ฉํด์ผํ๋ ๊ฒ๋ ์์ง ์๋๋ค.
โจ์ค์ํ ๋ถ๋ถ์ ์ฌ๊ธฐ์ ๋ถํฐ์ธ๋ฐ, ์
๋ ฅ๊ฐ์ผ๋ก ๋ฐ์ input์ ์ธ์๋ก ๋ฐ์ ๋ด ์
๋ง๋๋ก ๊ตฌํํ๋ ํํธ๋ค.

fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Emission = _TestColor;

๋จผ์ c๋ณ์ ์์ ๋ฐ์์จ ํ
์ค์ณ ์ด๋ฏธ์ง๋ฅผ ํ ๋นํด์ค ๋ค
์์ฐ๋ผ์ ์ฌ์ฉ๋ ๋
ธ๋ง์ ์์์ _TestColor๋ฅผ ํตํด ์ง์ ํด์ค๋ค. ์ด๋ถ๋ถ์ ํ๋กํผํฐ์์ ์ธ๊ธํ๋ฏ์ด ์ ๋ํฐ ์ธ์คํํฐ ์ฐฝ์ ํตํด ์ปฌ๋ฌํผ์ปค๋ก ์์์ ๋ณํ์ํฌ ์ ์๋ค.
float rim = saturate(dot(o.Normal, IN.viewDir));
๊ทธ ๋ค์ rim์ด ๋์ค๋๋ฐ ์ด๋ถ๋ถ์ด ์์ ๋งํ๋ ํ๋ ๋ฌ์ ์ด์ฉํด ๋ฆผ๋ผ์ดํธ๋ฅผ ๊ตฌํํ๋ ๋ถ๋ถ์ด๋ค.
์ฌ๊ธฐ์ viewDir ์ ์ญํ ์ด ๊ถ๊ธํ ํ
๋ฐ, viewDir์ ์กฐ๋ช
๋ฒกํฐ๋ฅผ ๋์ ํด ์ฌ์ฉ๋๋ค.
viewDir๊ณผ ์กฐ๋ช
๋ฒกํฐ, ์ด ๋์ floatํ ๋ฒกํฐ๋ผ๋ ์ ์์ ์์ ํ ๋์ผํ์ง๋ง, ์ปดํจํฐ์์๋ ๊ฒฐ๊ตญ ๋๊ฐ์ floatํ ๋ฒกํฐ๋ก ์ธ์๋๋ค.
์ด ์ ์ ์ด์ฉํด ์ฐ๋ฆฐ ์ฌ๊ธฐ์ N dot L ๋์ N dot V ๋ฅผ ๋ฃ๋๋ค. (์กฐ๋ช
๋ฒกํฐ ๋์ ๋ทฐ๋ฒกํฐ๋ก)
์ด๋ ๊ฒ ๋๋ฉด ์กฐ๋ช
๋ฒกํฐ ๋์ ์ ๋ทฐ ๋ฒกํฐ๊ฐ ๋ผ์ดํ
์ฒ๋ผ ์ฐ์ฐ์ด ๋๋๋ฐ, ์นด๋ฉ๋ผ๊ฐ ์กฐ๋ช
์ฒ๋ผ ์ธ์ ๋์ด์ ๋ด๊ฐ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด ๋ฐ์ ์ง๋ค๋ ๊ฒ์ด๋ค

๐์ด๋ถ๋ถ์ ์ดํดํ๊ธฐ ํ๋ค๋ค๋ฉด ์๋ ๊ฒ์๊ธ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ๊ฐ๋ค.
[Unity][Shader] ์ ๋ํฐ์์ด๋ ์คํํธ์ : ch10.๋์งํธ๋ผ์ดํธ ์ด๋ก
์ค๋์ [์ ๋ํฐ ์์ด๋ ์คํํธ์ ]์ ์ฝ๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ํน์ ๋ชฐ๋ผ ์ฐธ๊ณ ๊ต์ฌ ์๋์ ์ฒจ๋ถํด ๋๋๋ก ํจ ๐ [์ ๋ํฐ ์์ด๋ ์คํํธ์ ] ๐ช ๋ชฉ์ฐจ ๋์งํธ ๋ผ์ดํธ์ ๋ถ๋ฅ์ ์
heo-aim.tistory.com

์ด์ ๊ธ์ ์ฐธ๊ณ ํ์๋ [์กฐ๋ช
๋ฒกํฐ์ ๋
ธ๋ง๋ฒกํฐ๊ฐ ์๋ก ๋ง์ฃผ ๋ณด๋ ์๊ฐ์ ํํ์ด ๊ฐ์ฅ ๋ฐ๋ค]๊ณ ํ์๋ค.
์ฐ๋ฆฌ๋ ์ด ์กฐ๋ช
๋ฒกํฐ ๋์ ๋ทฐ๋ฒกํฐ๋ฅผ ๋์ ๋ฃ์ด ๋ทฐ๋ฒกํฐ๊ฐ ๋
ธ๋ง๋ฒกํฐ ์ ์๋ก ๋ง์ฃผ ๋ณด๋ ์๊ฐ์ ๋ ๋ ๊ฐ์ฅ ๋ฐ๊ณ ์๋ก 90ยฐ๊ฐ ๋๋ ์๊ฐ์ ์ ์ ์ด๋์ ์ง๋ ๊ฒ์ ํ์ธํ ์ ์๋ค
rim = pow(1 - rim, 3);
ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ํํ ํ๊ณ ์ ํ๋ ๊ฒ์ ๋
ธ๋ง๋ฒกํฐ์ ๋ทฐ๋ฒกํฐ์ ๊ฐ๋๊ฐ ๊ธฐ์ธ์ด์ง์๋ก ์ ์ ๋ฐ์ ์ง๊ณ ์๋ก ๋ง์ฃผ ๋ณผ ์๋ก ๋ฉด์ด ์ด๋์ ์ง๋ ๊ฒ์ ์ํ๋ค ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ ๋ฌธ์ฅ์ ์ฌ์ฉํ๋ค

o.Alpha = rim;
์ด์ ์ง๊ธ๊น์ง ๋ง๋ค์ด์ง ๋ผ์ดํธ ์ฐ์ฐ์ ์ํ ์ฑ๋์ ๋ฃ์ผ๋ฉด ๋๋ค
๋ฉด์ด ์ด๋์ ์ง๋ ๊ตฌ๊ฐ ์ผ์๋ก ๋
ธ๋ง์ ํฌ๋ช
๋๊ฐ ๋์์ง๋ค.

์ค๋ ๊ตฌํํ ๋ฆผ๋ผ์ดํธ๋ ์ฒ์์ URP๋ก ๊ตฌํํ๋ค๊ฐ ์๊พธ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ๊ธํ๊ฒ HLSL๋ก ๊ฐ์ํ ๊ตฌํ์ ํด๋ดค๋๋ฐโฆ
์ด์ฐธ์ URP๋ก ๋ค์ ๊ตฌํํด๋ณด๋ฉฐ HLSL์ ๋น๊ตํด๋ณด๋ ์๊ฐ์ ๊ฐ๋๊ฒ๋ ์ข์ ๊ธฐํ๊ฐ ๋ ์ ์๊ฒ ๋ค.
๋ฐํ๋ฅผ ํ๋ค๊ฐ ํ์ดํ๋ผ์ธ๊ด๋ จ์ด์๊ฐ ํด๊ฒฐ๋๋๋ฐ ์ด๋ถ๋ถ๋ ๋น ๋ฅธ ์์ผ๋ด๋ก ํฐ์คํฌ๋ฆฌ์ ์จ๋์ผ ๋ ํค๋งฌ ์ผ ์ด ์์๋ฏโฆ ์ด๋ ๊ฒ ์ ์ฉ ์ค๋ต๋
ธํธ๊ฐ ๋์ด๊ฐ๋ ๋์ผ. ํฐ์คํ ๋ฆฌโฆ..
