분류 전체보기
-
Lambert & Blinn Phong유니티/게임그래픽 2024. 2. 21. 16:06
유니티에 내장되어 있는 라이팅은 총 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카테고리 없음 2024. 2. 21. 16:06
Occlusion : 구석진 부분에 추가적인 음영을 표현하는 기능 일방적으로 환경광이 닿지 못해 그림자가 드리워진 부분도 분명이 존재한다. 하지만 매우 구석지거나 복잡한 물체들로 가려져 환경광이 닿지 못한곳은 더욱 어두워지는데 이것을 Ambient Occlusion이라고 한다. 그리고 이곳에 추가적인 음영을 표현해보겠다 Shader "Custom/NewSurfaceShader" { Properties { _Occlusion("Occlusion", 2D) = "white" {} //추가 } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _Occlusion..
-
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..
-
텍스쳐 입력받기 오류유니티/오류&문제점 2024. 2. 21. 11:14
Shader "Custom/NewSurfaceShader" { Properties { _MAinTex("MainTex", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard sampler2D _MainTex; struct Input { float2 uv_MainTex; float4 color:COLOR; }; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); o.Emission = c.rgb; o.Alpha = c.a; } ENDCG } FallBack..
-
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 변..