본문 바로가기

Unity3D

디지털 라이트의 분류 실제 세상의 빛을 그대로 컴퓨터 그래픽으로 표현하는 것은 많은 무리가 따름. 실시간으로 연산해야 하는 게임에서 빛을 가볍게 처리하면서도 상대적으로 품질이 떨어지지 않을 것이냐는 매우 중요한 문제. 또한, 게임은 상당히 많은 종류의 하드웨어에서 구동되기 때문에 쉐이더를 작성하는 사람들은 하드웨어 기기의 특성까지 파악해두어야 함. 그래서 쉐이더는 공부하면 공부할수록 어렵게 느낀다고 함. 대부분의 3D 프로그램이나 엔진은 다음 3가지 종류의 라이트를 기본적으로 지원함.-디렉셔널 라이트(Directional Light)-포인트 라이트(Poing Light)-스팟 라이트(Spot Light) 디렉셔널 라이트(Directional light)디렉셔널 라이트는 직진성을 가진 조명입니다. 이 라이트가 가지고 있는 정보.. 더보기
Blinn-Phong(블린-퐁) 라이팅 만들기 1975년 유타 대학의 부이 통 퐁의 박사 논문에서 발표된 퐁(Phong) 공식은 1977년 제임스 F 블린에 의해 Blinn-Phong 공식으로 개량되었음. 이 공식은 Specular를 가볍게 표현할 수 있는 공식이었고, 유니티에서는 이 Blinn-Phong 공식이 들어 있음 1234567891011121314151617181920212223242526272829Shader "Custom/Blinn-Phong" { Properties{ _MainTex("Albedo (RGB)", 2D) = "white" {} _SpecColor("Specular Color", color) = (1,1,1,1) } SubShader{ Tags{ "RenderType" = "Opaque" } CGPROGRAM#pragma.. 더보기
Lambert(램버트) 라이팅 만들기 유니티 4 이전 시절에 존재하던 가벼운 라이팅 방식인 Lambert 라이팅빛의 음영은 계산하지만, Specular는 계산하지 않는 매우 전통적이고 가벼운 라이팅 공식 현재는 Standard 라이팅 방식. 라이팅 함수에 대한 자세한 내용은 다른 곳에 정의되어 있고 그곳에는 다른 라이팅 방식(구형 라이팅 방식 포함)도 정의되어 있음. 올바른 라이팅 함수 이름만 불러 오면 램버트 라이팅 생성 가능1234567891011121314151617181920212223242526Shader "Custom/Lambert" { Properties{ _MainTex("Albedo (RGB)", 2D) = "white" {} } SubShader{ Tags{ "RenderType" = "Opaque" } CGPROGRAM#.. 더보기
유니티에 내장된 라이팅 구조 우리가 쉐이더를 처음 만들면 자동적으로 생성되는 Standard Shader는 유니티5부터 기본으로 적용된 쉐이더 형태. 이 Standard Shadr의 라이팅은 분명 좋은 라이팅이지만, 물리 기반 쉐이더 라이트이기 때문에 모바일과 같은 저사양 기기에서 구동하기에는 다소 무거움그래서 유니티 내부적으로 유니티 4버전 이전부터 사용하던 라이트 구조도 그대로 구현되어 있음. 이 라이팅은 물리 기반 쉐이더 이전의 다른 3D 프로그램에서도 흔하게 사용되던 구조로 구조체 차이가 있음. 이 라이팅은 물리 기반 쉐이더보다 품질은 떨어질 수 있지만 상대적으로 가볍기 때문에 물리 기반 쉐이더를 사용할 필요 없이 가볍게 처리해야 하는 모바일 프로젝트에 적합한 쉐이더 구조라고 할 수 있음하지만 하드웨어의 성능이 높아지고 유저.. 더보기
버텍스 컬러를 이용한 텍스쳐 블렌딩에 노멀맵 적용하기 1234567891011121314151617181920212223242526272829303132333435363738394041Shader "Custom/vertexcolor" { Properties { _MainTex("Albedo (RGB)", 2D) = "white" {} _MainTex2("Albedo (RGB)", 2D) = "white" {} _MainTex3("Albedo (RGB)", 2D) = "white" {} _MainTex4("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard nomabient sampler2D _MainT.. 더보기
Normal map(노멀맵) NormalMap Example Normal map이란, 실제 디테일이 없는 부분을 디테일ㄹ이 있는 것처럼 보이게 만들기 위한 눈속임 맵. 일반적으로 푸른색을 띠고 있으며, 빛을 속이기 위한 벡터 데이터들로 이루어진 텍스쳐 파일. NormalMap을 이용해서 빛을 속이게 되면 마치 매우 많은 폴리곤으로 이루어진 오브젝트처럼 디테일이 표현되지만, 실제로 폴리곤이 늘어나는 것은 아님.NormalMap 은 지브러쉬(ZBursh)나 머드박스(Mudbox)같은 스컾팅(Sculpting)툴을 이용하거나, 3D 프로그램에서 고품질의 하이 폴리곤 모델링을 한 후 렌더 투 텍스쳐(Render to texture: RTT)을 이용하여 추출하지만, 이미지의 음영을 기반으로 간단하게 NormalMap을 추출하는 크레이지범프(.. 더보기
Standard Shader - Metallic과 Smoothness 유니티 5.0 업그레이드 후에 유니티도 다른 많은 그래픽 툴이나 엔진처럼 최신의 쉐이더 시스템인 '물리 기반 쉐이더' 시스템을 도입하게 됨. 물리 기반 쉐이더란 기존의 쉐이더 시스템과는 다르게 주변 환경에 따른 재질 변화를 물리 법칙에 기반하여 실시간으로 재질을 구현해주는 사실적인 쉐이더 표현 기법.유니티에 있는 기본 Standard Shader가 대표적인 물리 기반 쉐이더. o.Albedo나 o.Emission 등이 모두 물리 기반 쉐이더의 요소임. 1234567891011struct SurfaceOutputStandard{ fixed3 Albedo; fixed3 Normal; fixed3 Emission; half Metallic; half Smoothness; half Occlusion; half .. 더보기
버텍스 컬러 마스킹으로 활용하기 123456789101112131415161718192021222324252627282930313233343536Shader "Custom/vertexcolor" { Properties { _MainTex("Albedo (RGB)", 2D) = "white" {} _MainTex2("Albedo (RGB)", 2D) = "white" {} _MainTex3("Albedo (RGB)", 2D) = "white" {} _MainTex4("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard nomabient sampler2D _MainTex; sample.. 더보기
UV 숫자로 변화시키기 12345678910111213141516171819202122232425Shader "Custom/FirstSurfaceShader" { Properties{ _MainTex("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex); .. 더보기
lerp 함수의 응용 lerp 함수의 응용 lerp 함수는 lerp(X,Y,s) 형태로 사용되고 X와 Y는 반드시 같은 단위여야 함(float/float2/float3/float4)s인자는 반드시 한 자리의 수인 float 사용. 이 수치가 0이면 X가 출력되고 1이면 Y가 출력되고, 0.5면 X,Y가 반씩 섞여서 출력됨마지막 인자인 s를 인터페이스와 연결하여 X 텍스쳐가 Y 텍스쳐로 변하는 기능 생성 가능12345678910111213141516171819202122232425262728293031Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _MainTex2 ("Albedo (RGB)", 2D) = "whi.. 더보기