์ ๋ํฐ ์์ด๋ ์คํํธ์ http://vielbooks.com/235
example : https://drive.google.com/uc?id=0B10G1-ySdDd1VVZiQzQyRll4RlE&export=download password : utshader576
Free MatCap Shaders
Albedo : ๋ฌผ์ฒด ๊ณ ์ ์๊น. Diffuse : ๋น์ ์ํ ์์. normal์ํฅ์ ๋ฐ๋. Specular : ๋น์ ์ํด ํ์ด๋ผ์ดํธ. Emission : ์์ฒด๋ฐ๊ด์, ๋น์ ๊ฐ์ญ ์์ด ์์ํ ์์ ์ฐ์ฐ ๋ณผ ๋.
noambient : ambient color๋ฅผ ๋๋ค. Window/Lighting/Settings [Scene] Environment
- Environment Reflections
- Source :
Custom
- Source :
#pragma surface surf Standard fullforwardshadows noambient
texture 2๊ฐ lerp
texture uv, ์๊ฐ์ ๋ฐ๋ฅธ ๋ณํ
float4 _Time; (x, y, z, w) = (t/20, t, t * 2, t * 3) float4 _SinTime; (x, y, z, w) = (t/8, t/4, t/2, t) float4 _CosTime; (x, y, z, w) = (t/8, t/4, t/2, t) float4 unity_DeltaTime; (x, y, z, w) = (dt, 1/dt, smoothDt, 1/smoothDt)
Tags { "RenderType"="Transparent" "Queue" = "Transparent" }
Queue ํ๊ทธ Transparent - ์ด ๋ ๋ ํ๋ _Geometry_์ AlphaTest ํ์ ๋ค๋ถํฐ ์์๋๋ก(back-to-front) ๋ ๋๋ง๋ฉ๋๋ค. ์ํ ๋ธ๋ ๋ฉํ๋ ๊ฒ (์ฆ, ๊น์ด ๋ฒํผ์ ๊ธฐ๋กํ์ง ์๋ ์์ด๋)์ ๋ชจ๋ ์ฌ๊ธฐ์ ์์ด์ผ ํฉ๋๋ค(์ ๋ฆฌ, ํํฐํด ํจ๊ณผ).
#pragma surface surf Standard alpha:fade
alpha or alpha:auto - Will pick fade-transparency (same as alpha:fade) for simple lighting functions, and premultiplied transparency (same as alpha:premul) for physically based lighting functions. alpha:fade - Enable traditional fade-transparency. alpha:premul - Enable premultiplied alpha transparency.
Scene ์ฐฝ์ ์ฐ๊ทธ๋ฆผ Animated Material ํ์ฑํ
vertex color
metallic chart https://docs.unity3d.com/Manual/StandardShaderMaterialCharts.html
Shader Calibration Scene https://www.assetstore.unity3d.com/en/#!/content/25422
_BumpMap ๋ณ์ ์ด๋ฆ์, ๋ค๋ฅธ ๋ด์ฅ ์์ด๋์์ ์ฐ๊ณ ์๊ธฐ์, ํธํ์ฑ์ ์ํด ๋ง์ถฐ์ฃผ์
DXT5nm - NormalMap ํ์ง์ ์ ํ๋ฅผ ๋ง๊ธฐ ์ํด ๋ง๋ AGํ์ผ ํฌ๋ฉง. R๊ณผG์ ํ๋ฆฌํฐ๋ฅผ ์ต๋ํ ๋ณด์ , A, G์ ๋ฃ์ด ์ ์ฅ. NormalMap์ X,Y๋ก ๊ณ์ฐ๋๋ฉฐ, Z๋ ์ผ๊ฐํจ์๋ฅผ ์ด์ฉํ์ฌ ์ํ์ ์ผ๋ก ์ถ์ถ. fixed3 n = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
Occlusion : ๊ตฌ์์ง ๋ถ๋ถ ์ถ๊ฐ ์์์ฒ๋ฆฌ. ํ๊ฒฝ๊ด(Ambient Color)๊ฐ ๋ฟ์ง ์๋ ๋ถ๋ถ์ Ambient Occlusion์ด๋ผ ๋ถ๋ฆ.
Occlusion ๊ธฐ๋ฅ์ ๋ฃ๊ธฐ ์ํด, ํ ์ค์ณ๋ฅผ ํ์ฅ ๋ ์ฌ์ฉํ๋๊ฒ์ ์ฉ๋ ๋ญ๋น๊ฐ ์์ผ๋ฏ๋ก, ๋ค๋ฅธ ๊ณณ์ ์ฐก๊ฒจ๋ฃ๋ ๊ฒ๋ ์๊ฐํด๋ณด์(๋ฉ์ธํ ์ค์ณ ์ํ๋ผ๋๊ฐ).
struct SurfaceOutputStandard {
fixed3 Albedo;
fixed3 Normal;
fixed3 Emission;
half Metallic;
half Smoothness;
half Occlusion;
half Alpha;
}
struct SurfaceOutput {
fixed3 Albedo;
fixed3 Normal;
fixed3 Emission;
half Specular; // specular range.
half Gloss; // specular power.
half Alpha;
}
BlinnPhong ์์ด๋์๋ _SpecColor ๋ณ์๊ฐ ํ์ํ๋ค.
float4 LightingTest(SurfaceOutput s, float3 lightDir, float atten)
lightDir - (๋ค์งํ)์กฐ๋ช ๋ฒกํฐ atten : attenuation - ๊ฐ์
BRDF(Bidirectional Reflectance Distribute Function)
๊ฐ์ ๊ด์์ผ์ง๋ผ๋ ๊ฐ๋๊ฐ ์์ผ๋ฉด ์คํํ๋ฌ๊ฐ ํจ์ฌ ๋ฐ๊ฒ ๋ณด์ด๋ ํ์. Fresnel
- ๋น์ด ์๋ก ๋ค๋ฅธ ๊ตด์ ๋ฅ ์ ๊ฐ๋ ๋งค์ง์ ๊ฒฝ๊ณ๋ฉด์ ํต๊ณผํ ๋์ ๋ฐ์ฌ
http://www.gamedevforever.com/35 http://hwan0123.tistory.com/entry/ํ๋ ๋ฌ-๋ฐฉ์ ์
float3 viewDir; ๋ทฐ์ ๋ฐฉํฅ
float4 color:Color; ๋ณด๊ฐ๋ ๋ฒํ
์ค ์นผ๋ผ
float4 screenPos; ์คํฌ๋ฆฐ ๊ณต๊ฐ์์ ์์น
float3 worldPos; ์๋ ๊ณต๊ฐ์์ ์์น
float3 worldRefl; o.Normal์ด ์๋๊ฒฝ์ฐ, ์๋ ๋ฐ์ฌ ๋ฒกํฐ(diffuse์์ด๋ ์ฐธ์กฐ)
float3 worldNormal; o.Normal์ด ์๋๊ฒฝ์ฐ, ์๋ ๋
ธ๋ฉ๋ฒกํฐ
float3 worldRefl; INTERNAL_DATA o.Normal์ด ์๋ ๊ฒฝ์ฐ, ์๋ ๋ฐ์ฌ๋ฒกํฐ ํฌํจ.
ํฝ์
๋น ๋
ธ๋ฉ๋งต์ ๊ธฐ์ดํ์ฌ, ๋ฐ์ฌ ๋ฒกํฐ๋ฅผ ์ป์ผ๋ ค๋ฉด WorldReflectionVector(IN, o.Normal).(Reflect-Bumped์์ด๋ ์ฐธ์กฐ)
float3 worldNormal; INTERNAL_DATA o.Normal์ด ์๋ ๊ฒฝ์ฐ, ์๋ ๋
ธ๋ง๋ฒกํฐ ํฌํจ.
ํฝ์
๋น ๋
ธ๋ฉ๋งต์ ๊ธฐ์ดํ์ฌ, ๋
ธ๋ง ๋ฒกํฐ๋ฅผ ์ป์ผ๋ ค๋ฉด WorldNormalVector(IN, o.Normal).
_SpecColor๋ ์ด๋ฏธ ์ ๋ํฐ์์ ์ฐ๊ณ ์๋ค.
์ด์ฐจํผ rim์์ ๊ฐ์ ธ๋ค ์ฐ๋๊ฑฐ๊ณ ํด์, rim์ ๊ฐ์ง ์คํ์ฟจ๋ฌ๋ก ํ์ฉํ๋ฉด ๊ฐ์ง๋ก ์กฐ๋ช ํ๋ ์ป๋ ๊ธฐ๋ถ์ ๋๋ ์ ์๋ค.
PR(Photo Realistic) NPR(Non-Photo Realistic)
https://en.wikipedia.org/wiki/Cel_shading
- ๋ ธ๋ง๊ฐ์ ํค์ ํ๋ฒ ๋ ๊ทธ๋ ค์ค๋ค.
- 2๋ฒ ๊ทธ๋ฆฌ๋ ๋ฌด๊ฒ๋ค.
- Plane์ผ๋ก ๋๋ ์ค๋ธ์ ํธ์๋ ์ธ๊ณฝ์ ์์๊น
- ๋งค์ฌ๋ผ๋ฆฌ ์นจ๋ฒํ๊ฑฐ๋ ์ฐ๊บผ๊ธฐ ๋ณด์ผ ์ ์๋ค.
- ์ ์ ์๊ฒํ๋ค.
- ๋ฒํ ์ค ์นผ๋ผ ๋ง์คํน ๋ฑ์ ํตํด ์ธ๊ณฝ์ ์ด ๋์ถ ๋์ง ์๋๋ก.
- Hard Edge์๋ ์ ์ด ๋๊น
- ๋ชจ๋ธ๋ง ํด์์ smooth ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ฃผ๊ฑฐ๋ ํด์ผํจ
- rim์ ๋ค์ง๊ฑฐ๋, ์ธ๊ณฝ๋ผ์ธ ๊ฒ์ถ
- ํฝ์ ๊ณผ ๋ ธ๋ง๊ณผ ์์ ๋ฐฉํฅ์ ์ฐจ์ด์ ๋ฐ๋ผ ๊ณ์ฐ๋จ์ผ๋ก, ํ๋ฉด์ ๊ฐ์ง ์ค๋ธ์ ํธ์๋ ์ด์ํ๊ฒ ๋ณด์.
UnityCG.cginc appdata_base: position, normal and one texture coordinate. appdata_tan: position, tangent, normal and one texture coordinate. appdata_full: position, tangent, normal, four texture coordinates and color.
http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf
Warped diffuse
cubemap o.Albedo ? o.Emission? ๋ฐ์ฌ๋ ๋ฐ๊ฑฐ๋ ์ด๋์ด ์ฃผ๋ณ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ฌํ๋ ๊ฒ์ด๋ฏ๋ก, o.Emission์ ๋ฃ์ด์ผํ๋ค.
float2 sPos = float2(IN.screenPos.x, IN.screenPos.y) / IN.screenPos.w; float4 Depth = tex2D(_CameraDepthTexture, sPos);
Deferred rendering. - ์นด๋ฉ๋ผ ๊น์ด๋ฒํผ ์ฌ์ฉ(ํฌ์๋ ๋ ๋๋ง ์ญ์ ๊น์ด๋ฒํผ๋ฅผ ๋ง๋ค ์ ์์ง๋ง...)
deferred rendering์์๋ ๋ฐํฌ๋ช ์ ๋ค๋ฃจ๊ธฐ ํ๋ค๋ค.
๊ทธ๋ฆผ์ ์์ด๋์ ์ฐ๊ด๋์ด ์๋ค.
FallBack "Legacy Shaders/Transparent/VertexLit"
ํ ๊ฐ์ ์์ฐ๋ฌผ์ ์ฃผ๋ก AlphaTest(Cutout)์์ด๋๋ฅผ ์ฌ์ฉ.
Opaque ์ค๋ธ์ ํธ๋ ๋จผ์ ๊ทธ๋ฆฐ๋ค. Transparent ์ค๋ธ์ ํธ๋ ๋์ค์ ๊ทธ๋ฆฐ๋ค. ๋ฉ๋ฆฌ ์๋ ๊ฒ๋ถํฐ ๊ฐ๊น์ด ๊ฒ๊น์ง ์ฐจ๋ก๋๋ก - alpha shorting ์ํ์ํ ์ ์จ๋ดค์, ์๋ค ํ์ ์ ์ ๋๋ก ํ ์ ์์ผ๋, ๋ฌธ์ ๋ ์ผ์ด๋ ์ ๋ฐ์ ์๋ค. ์ํ๋ธ๋ ๋ฉ์ ์ฌ์ฉํ์์ ๋๋ zwrite๋ฅผ ํ์ง ์๋๋ค. ์ด ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ข ๋ฐฉ๋ฒ์ด ์ฐ๊ตฌ๋๊ณ ์๋ค.
๊ทธ๋ฆผ์๊ฐ ๋์ค๊ฒ ํ ๋ ค๋ฉด
FallBack "Legacy Shaders/Transparent/Cutout/VertexLit"
https://docs.unity3d.com/Manual/SL-SurfaceShaders.html - Optional parameters
https://docs.unity3d.com/Manual/SL-Pass.html
ColorMask
-
2pass ์ํ๋ธ๋๋ฉ
- (Pass ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ) Vertex/Fragment Shader๋ Multi-Pass๋ก ํฉ์น ์ ์๋ค.
- (Pass ํค์๋๋ ์์ด) Surface Shader์ Surface Shader์ Multi-Pass๋ ๊ฐ๋ฅํ๋ค.
-
ํ์ด๋ฐ ๋ฐ์ง์
-
ํ๋ค์ด๊ฐ๋ ๊ธฐ๋ฅ - dissolve
-
ํ๋ค๋ฆฌ๋ ํ - vertex
-
matcap Mateiral
- Material Capture
- ViewDir๊ธฐ๋ฐ ์นด๋ฉ๋ผ๋ฅผ ํ์ ํ์ง ์๋ ์ํฉ์์ ์ข์ ํจ๊ณผ
-
๊ตด์ - Refraction.
GrabPass { }
sampler2D _GrabTexture;
-
๋ฌผ
- Snell's law : ์ง๊ฐ์ผ๋ก ๋ด๋ ค๋ค๋ณด๋ ๊ฐ๋์ ๊ฐ๊น์์ง๋ฉด ๋ฐ์ฌ๋ณด๋ค๋ ํฌ๋ช ํจ์ด ๋ ๋ง์ด ๋ณด์. ์์ ๊ณผ ํํํด์ง๋ฉด, ํฌ๊ณผ๋ณด๋ค๋ ๋ฐ์ฌ๊ฐ ๋ง์ด ์ผ์ด๋จ
-
๋ฌผ ํ๋ค๋ฆฌ๋
-
๋ฌผ ๊ตด์
-
triplanar ํธ๋ผ์ด ํ๋๋
LOD VertexLit = 100 Deval, Refective VertexLit = 150 Diffuse = 200 Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250 Bumped, Specular = 300 Bumped Specular = 400 Parallax = 500 Parallax Specular = 600
"Queue" Background - 1000 Geometry - 2000 AlphaTest - 2500 Transparent - 3000 Overlay - 4000
[NoScaleOffset] [Normal] [Enum] [PowerSlider] [KeywordEnum] [Gamma]
interpolateview halfasview nofowardadd noambient novertexlights noshadow nolightmap