본문 바로가기

분류 전체보기480

[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.
[서평] 폴리매스 / 다재다능한 사람으로 되돌아가라 자신의 잠재성을 깨닫게 하는 책이다. 자아실현의 로드맵을 제시한다. 폴리매스가 되는 것이 아니라 폴리매스로 되돌아가는 것이라는 문장이 가장 인상 깊었다. 하지만 사례의 나열로 인해 책이 다소 지루하였다. 메모 2023. 8. 8.
[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.