분류 전체보기 223

Half-Lambert

Half-Lambert란 갑자기 음영이 검게 떨어지는 단점을 보완하게 위해 벨브에서 발표한 Lambert라이팅의 수정공식으로, 물리적으로는 옳지 않으나 가볍고 게임속 음영을 보기편하게 하는 공식이다 딱봐도 게임할땐 오른쪽이 더 보기 편해보인다 float4 Lighting_MyLambert(SurfaceOutput s, float3 lightDir, float atten) { float ndot = dot(s.Normal, lightDir) * 0.5 + 0.5; float4 final = saturate(ndot) + 0.5; return final; } 적용하는 방법은 매우 간단하다. ndot에 들어가는 값에 (* 0.5 + 0.5) 만 넣어주면 된다 전후 차이이다. 확실히 더 자연스럽고 보기좋게 바뀐..

Lambert 커스텀 라이트

우선 간단하게 텍스쳐 하나 받아 출력하게 한다 Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf _MyLambert noambient // 환경광 제거 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) // Lambert쓸거면 output 이후로 지우자 { fixed4 c = tex2D(_MainTex, IN.uv_MainTex);..

디지털 라이트 이론 & Vector

대부분의 3D 프로그래밍, 엔진은 크게 3가지의 라이트를 지원한다 1. Direction Light 유니티를 시작하면 가장 기본적으로 담긴 라이트. 강도,컬러,방향 정도의 정보만 담고 있다 가장 가벼운 라이트. (시작점,끝점,넓이x) 2. Point Light 점 모양의 광원이며 사방으로 뻗어나가는 특성. 둥근 모양의 라이트 & 일정 범위의 국지적 분위기 표현 Direction Light보다는 무거움 3. spot Light 특정 부분을 강조할때 사용 너무 당연한 얘기지만 Plane을 라이트와 반대되게 돌려버리면 어두워지고, 똑같이 라이트를 반대로 돌려도 어두워진다 즉, Plane의 앞 방향과 빛의 방향이 마주보면 가장 밝다는 규칙이 만들어진다 너무 당연한 얘기다 방향 벡터 : 한점으로부터 다른 한점까지..

Lambert & Blinn Phong

유니티에 내장되어 있는 라이팅은 총 3가지가 있다 1. Lambert 빛에 의한 밝고 어두움이 구현된 가벼운 라이팅 구조. SurfaceOutput 구조체 사용 (Specular 공식 x) 2. Blinn Phong 램버트 공식에 블린 퐁 공식이 더해진 라이트 구조 (Specular 공식 o) 3. Standard 주변 환경을 반사해서 Specular을 구현 *Specular 공식 : 보는 각도와 조명각도에 따라 계산된 특정 색의 하이라이트 동그라미로 표현 주로 이런건 이론으로 보는것보다는 바로 적용시켜 차이점을 확인하는것이 훨씬 빠를것같다 Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubS..

Occlusion

Occlusion : 구석진 부분에 추가적인 음영을 표현하는 기능 일방적으로 환경광이 닿지 못해 그림자가 드리워진 부분도 분명이 존재한다. 하지만 매우 구석지거나 복잡한 물체들로 가려져 환경광이 닿지 못한곳은 더욱 어두워지는데 이것을 Ambient Occlusion이라고 한다. 그리고 이곳에 추가적인 음영을 표현해보겠다 Shader "Custom/NewSurfaceShader" { Properties { _Occlusion("Occlusion", 2D) = "white" {} //추가 } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _Occlusion..

카테고리 없음 2024.02.21

NormalMap

NormalMap: 컴퓨터 그래픽에서 *폴리곤 수를 늘리지 않고 표면의 시각적 디테일을 향상시키는 데 사용되는 기술. 쉽게 말해 실제 디테일이 없는 부분을 디테일이 있는것처럼 보이게 만들기 위한 눈속임 맵 *폴리곤(Polygon) : 3차원 컴퓨터그래픽을 구성하는 가장 기본단위인 다각형. 개수가 많을수록 현실에 가까운 느낌 일반적으로 푸른 색을 띄고 있으며 , 빛을 속이기 위한 벡터 데이터들로 이루어진 텍스쳐 파일이다 의미에 대해 알아봤으니 이제 한번 노멀맵을 실전에서 이용해보자 _BumpMap("Normalmap", 2D) = "bump" {} 노멀맵을 선언하는 기본문이다. 노멀맵은 수치들의 집합에 가깝지만 형식은 텍스쳐이므로 텍스쳐를 받는것도 동일하다 솔직히 _Maintex("Maintex", 2D)..

SurfaceOutputStandard(Metallic & Smoothness)

Standard Shader : 유니티 5.0부터 다른 많은 그래픽 툴이나 엔진처럼 최신 쉐이더 시스템인 물리기반 시스템이 도입됐다 물리기반 쉐이더 : 주변 환경에 따른 재질 변화를 물리 법칙에 기반하여 실시간으로 재질을 구현해주는 사실적인 쉐이더 표현 방식 (Standard Shader가 대표적인 물리기반 쉐이더이고 o.Albedo, o.Emission 모두 물리기반 쉐이더 요소이다) 그리고 SurfaceOutputStandard 구조체에 이 요소들이 정의되어있다 즉, SurfaceOutputStandard는 물리기반 쉐이더 요소들을 정의하고 있는 구조체이다 이번글에서는 쉐이더 요소들 중 Metallic과 Smoothness를 사용해보겠다 Shader "Custom/NewSurfaceShader" { ..

Vertex Color Masking

이번엔 Vertex Color를 마스킹으로 이용하여 멀티 텍스쳐 기능을 만들어보겠다 Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("MainTex", 2D) = "white" {} _MainTex2 ("MainTex", 2D) = "white" {} _MainTex3 ("MainTex", 2D) = "white" {} _MainTex4 ("MainTex", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard sampler2D _MainTex; sampler2D _MainTex2; sampler2D _MainTex3; s..

반응형