유니티/게임그래픽
-
NormalMap유니티/게임그래픽 2024. 2. 21. 16:06
NormalMap: 컴퓨터 그래픽에서 *폴리곤 수를 늘리지 않고 표면의 시각적 디테일을 향상시키는 데 사용되는 기술. 쉽게 말해 실제 디테일이 없는 부분을 디테일이 있는것처럼 보이게 만들기 위한 눈속임 맵 *폴리곤(Polygon) : 3차원 컴퓨터그래픽을 구성하는 가장 기본단위인 다각형. 개수가 많을수록 현실에 가까운 느낌 일반적으로 푸른 색을 띄고 있으며 , 빛을 속이기 위한 벡터 데이터들로 이루어진 텍스쳐 파일이다 의미에 대해 알아봤으니 이제 한번 노멀맵을 실전에서 이용해보자 _BumpMap("Normalmap", 2D) = "bump" {} 노멀맵을 선언하는 기본문이다. 노멀맵은 수치들의 집합에 가깝지만 형식은 텍스쳐이므로 텍스쳐를 받는것도 동일하다 솔직히 _Maintex("Maintex", 2D)..
-
SurfaceOutputStandard(Metallic & Smoothness)유니티/게임그래픽 2024. 2. 21. 14:19
Standard Shader : 유니티 5.0부터 다른 많은 그래픽 툴이나 엔진처럼 최신 쉐이더 시스템인 물리기반 시스템이 도입됐다 물리기반 쉐이더 : 주변 환경에 따른 재질 변화를 물리 법칙에 기반하여 실시간으로 재질을 구현해주는 사실적인 쉐이더 표현 방식 (Standard Shader가 대표적인 물리기반 쉐이더이고 o.Albedo, o.Emission 모두 물리기반 쉐이더 요소이다) 그리고 SurfaceOutputStandard 구조체에 이 요소들이 정의되어있다 즉, SurfaceOutputStandard는 물리기반 쉐이더 요소들을 정의하고 있는 구조체이다 이번글에서는 쉐이더 요소들 중 Metallic과 Smoothness를 사용해보겠다 Shader "Custom/NewSurfaceShader" { ..
-
Vertex Color Masking유니티/게임그래픽 2024. 2. 21. 14:18
이번엔 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..
-
Vertex Color유니티/게임그래픽 2024. 2. 21. 02:13
Vertex Color : 각 Vertex에 RGB 색상 값 또는 알파값을 선택적으로 저장할 수 있는 기능 여기서 Vertex란 단어 의미 그대로는 꼭지점을 의미한다 이 Vertex에는 각각 고유의 색이 있고 기본으로 주어지는 색은 (1,1,1,1)이다(자체적 RGBA) Vertex에는 5가지의 정보들을 가지고 있는데 바로 위치, UV, 컬러, 노멀, 탄젠트 이다 우선 기본적인건 이정도로만 알아보고 바로 Vertex Color를 적용해보자 그전에 사전준비를 위해 먼저 패키지 매니저에서 Polybrush를 다운받자 Tools에서 다운받은 Polybrush가 뜬다면 성공적으로 다운받은것 Shader "Custom/NewSurfaceShader" { Properties { _MAinTex("MainTex", ..
-
_Time 변수 스크립트 기본형유니티/게임그래픽 2024. 2. 20. 18:04
어떻게 보면 중복인 부분이기도 하지만 헷갈리지 않도록 한번 더 정리하자 void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex); o.Emission = c.rgb; o.Alpha = c.a; } 이게 입력받은 텍스쳐를 출력하는 스크립트의 기본형 void surf (Input IN, inout SurfaceOutputStandard o) { float2 uv = float2(IN.uv_Texture.x + _Time.x, IN.uv_Texture.y + _Time.y); fixed4 c = tex2D(_MainTex, uv); o.Emission = c.rgb; } 그리고 이게 _Time 변..
-
불 이펙트유니티/게임그래픽 2024. 2. 20. 17:36
이번에는 여태까지 배운것들을 이용하여 실감나게 움직이는 불 이펙트를 만들어보겠다 Shader "Custom/NewSurfaceShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _MainTex2 ("Texture2", 2D) = "white" {} } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent" } // 1 CGPROGRAM #pragma surface surf Standard alpha:fade // 2 sampler2D _MainTex; sampler2D _MainTex2; struct Input { float2 uv_MainTex; float2 uv_MainTex2;..
-
UV - Time유니티/게임그래픽 2024. 2. 20. 15:51
14-4일차 - UV 사실 이전글에서 UV에 대한 설명이 부족하여 간단하게나마 찾아본적이 있었다. 하지만 이번엔 UV에 대하여 좀 더 구체적으로 알아보겠다 처음 UV를 사용했던것은 Tex2D라는 함수를 사용하면서부터 sangeun00.tistory.com 오늘은 전에 했던 x,y축으로 값을 넣는대로 움직이는 숫자패드에 이어서 이번엔 UV가 자동으로 흘러갈 수 있게 해주겠다. UV가 자동으로 흘러가게 하기 위해서는 _Time이라는 변수를 사용할 것이다 _Time 변수란 씬이 열리고 난뒤의 시간이다 (x, y, z, w)는 (t/20, t, t*2, t*3) , xyzw는 rgba와 대응된다 _Time.x : 1/20 속도 _Time.y : 원래 시간 _Time.z : 2배 속도의 시간 _Time.w : 3..
-
UV유니티/게임그래픽 2024. 2. 19. 21:45
사실 이전글에서 UV에 대한 설명이 부족하여 간단하게나마 찾아본적이 있었다. 하지만 이번엔 UV에 대하여 좀 더 구체적으로 알아보겠다 처음 UV를 사용했던것은 Tex2D라는 함수를 사용하면서부터였다 fixed4 c = tex2D (_MainTex, IN.uv_MainTex); Tex2D라는 함수는 첫번째 매개변수로 텍스쳐 샘플러를, 두번째 매개변수로는 uv의 좌표를 받는다 그렇게 변수 c에 받은 값을 출력해주면 입력받은 텍스쳐를 그대로 구에 표현하는 방식이었다 _MainTex는 텍스쳐샘플이고, uv_MainTex라는 이름의 좌표는 이제부터 어떤 의미인지 알아보겠다 UV : 지오메트리에 대한 정점 정보에 해당하는 2차원 텍스쳐 좌표 표면 메시와 이미지 텍스처가 해당 표면에 적용되는 방식 사이의 연결을 제공..