본문 바로가기

Unity3D/shader_스터디

(15)
[Unity 쉐이더] Reflection 개인 학습 정리용으로 작성된 글입니다. 반사란? 파동이 다른 두 매질의 경계에서 방향을 바꿔 진행하는 물리 현상. (정반사, 난반사, 굴절, 회절 등등) 물체의 종류와 표면의 상태에 따라 빛이 반사되는 정도가 달라지고, 그것을 쉽게 구별하기 위해 정반사, 난반사 등으로 부릅니다. 빛의 반사를 컴퓨터 그래픽으로 구현하는 방법은 다양합니다. 레이 트레이싱의 경우 광추적방식 렌더링 이라고도 부르는데 광원에서 나온 광선이 물체에 반사하는 모습을 역으로 시뮬레이션한다고 합니다. 실시간 렌더링에 연산량도 어마 무시해 게임에서는 더 가벼운 방법으로 빛의 반사를 실제와 비슷해 보이도록 구현했습니다. 오늘은 그중 큐브 맵을 이용한 반사 구현을 해보고자 합니다. 큐브맵 큐브맵은 오브젝트의 반사를 나타낼 때와 주변 환경을 ..
커스텀라이트(3) 림라이트, 스페큘러 내용 정리 림라이트 응용 스페큘러 이론 우선 램버트 라이트, 저번에 진행한 림라이트까지 준비합니다. 림라이트는 뷰 벡터(viewDir)와 월드 노말(worldNormal)또는 오브젝트의 탄젠트 노말의 dot연산으로 구할 수 있습니다. +탄젠트 노말을 사용하고 있을 때 월드 노말을 동시에 사용하는 것은 지양합니다. 연산한 림라이트를 Emission이 아닌 Alpha에 적용해 봅시다. 반투명 오브젝트의 경우 Z-Buffer(오브젝트의 뒤에 있다고 판단한 픽셀을 그리지 않음)로 인해 다른 오브젝트와 겹쳤을 시 렌더링하는데 오류가 생깁니다. 위의 현상을 방지하기 위해 아래와 같이 알파값을 출력합니다. ZWrite off - Z-Buffer를 사용하지 않게 됩니다. 애니메이션 추가 타임 값을 추가함으로써 오브젝트..
[Unity 쉐이더] Custom Light2 - Normal, Rim Light 이어서 커스텀 라이트 sunsimu1018.tistory.com/16?category=919389 [Unity 쉐이더] vector, Custom Light Vector 연산 Dot 연산 커스텀 라이트 (렘버트) 벡터의 덧셈 뺄셈 친절하게 설명해주시는 영상 (앞부분에서 덧셈 참고) www.youtube.com/watch?v=0Ho616gAijQ&t=380s A+B 시점이 일치하는 벡터는 A벡터와 B벡터를.. sunsimu1018.tistory.com 커스텀 라이트를 이어서 하기 전 Lambert, Custom Light를 준비하고 갑시다. Normal 우선 저번에 진행한 라이트에 노말을 추가합니다. 노말 추가는 간단합니다. 기존에 노말을 불러오는 방식과 똑같습니다. NdotL연산 전에만 불러오면 됩니다...
[Unity 쉐이더] vector, Custom Light Vector 연산 Dot 연산 커스텀 라이트 (렘버트) 벡터의 덧셈 뺄셈 친절하게 설명해주시는 영상 (앞부분에서 덧셈 참고) www.youtube.com/watch?v=0Ho616gAijQ&t=380s A+B 시점이 일치하는 벡터는 A벡터와 B벡터를 변으로 하는 평행사변형을 그리면 생기는 꼭짓점과 시점을 연결하면 A+B값이 나오게 됩니다. 또는 B벡터의 종점에 A벡터의 시점을 이을 경우 마찬가지로 A+B값이 나옵니다. A-B 벡터의 -는 방향이 역으로 뒤집히게 됩니다. 좌표로 보면 1에서 -1로 이동한 것과 같죠. 벡터에는 위치값이 상관없기 때문에 위와 아래의 값은 같게 됩니다. 벡터의 내적 Inner Product A · B= cosθ 벡터는 크기와 방향을 가지고 있어 일반적인 곱셈과 다릅니다. 벡터의..
[Unity쉐이더] 라이팅 이론_Vecter 아래 두 사진은 라이팅 전 후의 같은 배경입니다. 라이트를 이용해서 컬러를 추가했고, 음영 차이로 씬에 입체감을 주는 등 라이트 배치만으로도 최종 결과물을 낼 때 라이팅이 큰 영향을 끼친다는 것을 알 수 있습니다. 컴퓨터 내의 라이팅은 현실의 빛과 빛을 받는 물체에서 일어나는 현상들을 종류별로 구분해 현실, 카메라에 담을 수 있는 풍경과 최대한 비슷한 빛을 구현하고자 했습니다. 초기 라이팅 방식은 간단한 수학 계산이었습니다. 밝은 곳은 빛과 평행하고 있는 90도에 가까운 면. 어두운 곳은 빛과 서로 바라보는 방향이 틀어질수록 어두워지게 됩니다. 아래 사진은 위 라이팅 연산을 맥스 내에서 확인한 것입니다. 이제 유니티 내의 대표적인 라이트 3개를 보고 갑시다. Directional lights 디렉셔널 라..
[Unity 쉐이더] Vertex Color, Normal Map 버텍스 컬러 출력 색상 연산 러프 마스킹 노말 넣기 노말 대신 넣는 값 sunsimu1018.tistory.com/7 [쉐이더] 버텍스 컬러 활용 내용 정리 버텍스 컬러란?? 3D 맥스에서 버텍스 컬러 칠하기 Vertex Propertise Vertex Paint UV채널을 이용한 그라데이션 유니티에서 버텍스 컬러 칠하기 3Dmax에서 가져오기 Polybrush 버텍스 컬러 추가 묘사 sunsimu1018.tistory.com 버텍스 컬러에 대해 더 자세히 적어둠 버텍스 컬러란? 버텍스 컬러에 대해 알기위해 버텍스에 대해 알아보고 갑니다. 저번 UV 정보도 버텍스에 저장되는 것 처럼 색상값도 담을 수 있습니다. 버텍스 자체에 저장된 float4 RGBA의 정보를 버텍스 컬러라고 합니다. 각 버텍스의 사이..
[Unity 쉐이더] Tiling & Offset, UV애니메이션 UV란? UV애니메이션 타임값 이동 텍스쳐를 이용한 애니메이션 응용2- 풀 애니메이션 UV란? Texcoord 텍스쳐 좌표계 3D 모델링이 끝나면 텍스쳐를 입혀야하죠. 그 텍스쳐를 오브젝트의 어디에 입힐지 UV를 피면서 각 버텍스에 저장 해줍니다. 위와같은 UV 정보는 색상과 같이 숫자로 저장됩니다. R float3(1,0,0) G float3(0,1,0) B float3(0,0,1) RGB 색상값이 float3으로 저장되듯이 UV도 x,y좌표를 0~1의 float2로 나타냅니다. 그렇기 때문에 어떤 크기의 이미지든 백분율로 정사각형의 한 장에 UV 정보를 담을 수 있습니다. 각 모서리 사이의 값은 선형보간(lerp)로 보간됩니다. 시작하기 전 할 것 1. 코드 정리하기 2. 대소문자 주의 Tiling ..
[Unity 쉐이더] Lerp 내용 정리 밝기 텍스쳐 넣기 흑백만들기 러프 연습 밝기 조절 저번에는 색상 조절이 가능한 쉐이더를 만들어보았습니다. 이번에는 추가로 밝기까지 조절할 수 있도록 해봅시다. 과정을 하나하나 진행하며 저장해 유니티에서 에러가 뜨지 않는지 확인해줍시다! 시작하기 전에 평소와 같이 코드를 정리해주고 갑니다. 반복 함으로써 코딩이 익숙해지게 만드는 과정 중 하나입니다. 정리가 끝났으니 다시 슬라이더로 RGB색상을 조절하는 쉐이더를 만들어봅시다.(반복 학습) RGB까지의 제작 과정은 저번 글에서 설명했으니 스킵합니다. 밑의 사진들과 주석을 참고해주세요. 밝기를 조정하는 기능을 추가하려면 새로 변수가 필요합니다. R,G,B와 같이 float1의 슬라이더면 되지만 최소,최대값에 차이가 있습니다. 인터페이스를 제작했으니 ..