본문 바로가기

셰이더 (Shader)89

[Unity/Shader] 파트10-7 : 벡터 연산을 이용한 라이팅 연산 * 유의할 부분만 추려 필기하였다. 유니티에서는 조명 벡터가 뒤집힌 채로 받아져온다. -를 붙여 뒤집지 않아도 된다. 조명 벡터와 노말 벡터를 내적하면 Lambert 라이팅이 된다. 2023. 8. 9.
[Unity/Shader] 파트10-6 : 벡터의 연산 * 벡터의 연산 중, 리마인드할 부분만 추려 필기하였다. 벡터의 덧셈 길이가 같은 두 벡터를 더하면 두 벡터 사이의 절반인 각도가 나온다. 이를 정규화하면 쉽게 절반인 각도의 방향벡터를 얻을 수 있다. 벡터의 내적 내적의 값은 단위벡터일때, cos 값과 같다. 2023. 8. 9.
[Unity/Shader] 파트10-5 : 노말 벡터 - 노말은 버텍스가 가진다. 밝기 연산은 버텍스에서 한다. 계산한 밝기 값을 버텍스에서 보간해서 표현한다. - 각진 물체의 표현 하드 엣지를 표현하려면 한 버텍스에 노말이 3개 혹은 4개가 있어야한다. 버텍스 하나당 노말은 하나 밖에 가지지 못한다. 그래서 버텍스를 복사해서 같은 자리에 추가해서 표현하는 방법 밖에 없다. 따라서, 하드 엣지를 표현하려면 버텍스의 양이 더 늘어난다. 2023. 8. 9.
[Unity/Shader] 파트9-3 : Blinn-Phong 라이팅 퐁 공식을 블린이 개량한 것이다. Specular를 가볍게 표현할 수 있는 공식이다. - 예외사항 _SpecColor라는 프로퍼티가 있다. 코드 안에서는 이 _SpecColor 프로퍼티 값을 받는 변수가 없어야한다. 있으면 오류가 난다. 따라서 _SpecColor는 예약어이다. 코드 내부에서 절대 받아선 안된다. - 구조체 멤버 Gloss는 0~1 사이의 값이다. Specular의 강도이다. Specular는 0~1사이의 값이다. Specular의 크기이다. 0 이면 커진다. 1이면 작아진다. Emission, Normal도 사용 가능하다. 코드 Shader "Custom/NewSurfaceShader 1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white".. 2023. 8. 9.
[Unity/Shader] 파트9-2 : Lambert 라이팅 매우 전통적이고 가벼운 라이팅 공식이다. 코드 Shader "Custom/NewSurfaceShader 1" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Lambert // * 여기를 Lambert로 바꿨다. // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 .. 2023. 8. 9.
[Unity/Shader] 파트9-1 : 유니티에 내장된 라이팅 구조 라이팅 구조는 총 3가지이다. Lambert - Specular 공식이 없다. - SurfaceOutput 구조체를 사용한다. Blinn Phong - Specular 공식이 있다. 그 중 블린 퐁 공식을 사용한다. - SurfaceOutput 구조체를 사용한다. Standard - PBS (물리 기반 쉐이더, Physically Based Shader)이다. - 주변 환경 반사해 Specular 구현한다. - Diffuse와 Specular가 에너지 보존 법칙을 따른다. - SurfaceOutputStandard 구조체 또는 SurfaceOutputStandardSpecular 구조체를 사용한다. (단지 Specular 색상을 임의로 결정한다는 점만 차이가 있다.) 2023. 8. 9.
[Unity/Shader] 파트8-5 : 멀티 텍스쳐링 (버텍스 컬러 적용) 버텍스 컬러를 이용해 여러 텍스쳐를 혼합한다. 그냥 lerp한 것이다. 코드 Shader "Custom/part8-5" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _MainTex2 ("Albedo (RGB)", 2D) = "white" {} _MainTex3 ("Albedo (RGB)", 2D) = "white" {} _MainTex4 ("Albedo (RGB)", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} _Metallic ("Metallic", range(0,1)) = 0.5 _Smoothness ("Smoothness", range(0,1)) = 0.5 } SubShader { Ta.. 2023. 8. 9.
[Unity/Shader] 파트8-4 : Occlusion 구석진 부분의 추가 음영이다. AO (엠비언트 오클루전 = 환경차폐)이라고도 불린다. 매우 구석져있어 환경광도 닿지 못하는 아주 어두운 부분이다. 코드 Shader "Custom/part8-2" { Properties { _MainTex("Albedo (RGB)", 2D) = "white" {} _Metallic("Metalic", Range(0,1)) = 0 _Smoothness("Smoothness", Range(0,1)) = 0.5 _BumpMap("Normalmap", 2D) = "bump"{} _Occlusion("Occlusion", 2D) = "white" {} // * } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Ph.. 2023. 8. 9.
[Unity/Shader] 파트8-3 : Normal map 노말맵에 대해 알아본다. UnpackNormal 부분이 특히 도움된다. 코드 Shader "Custom/part8-2" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _Metallic ("Metalic", Range(0,1)) = 0 _Smoothness("Smoothness", Range(0,1)) = 0.5 _BumpMap("Normalmap", 2D) = "bump"{} // 유니티 내장 쉐이더에서 bump 명칭을 사용하고 있어 bumpmap으로 이름 짓는다. } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting mo.. 2023. 8. 7.