내가 자주 사용하는 PingPong함수이다. t값이 length값이 되면 t값이 다시 -되어서 0이된다 최댓값이 Length가 되는 것이고, 최솟값은 0이다. Movement에만 사용되는 것은 아니고 Alpha값 조정할 때 자주 사용했다, 깜빡깜빡 거리도록 하는거
Git 충돌 시 수동으로 해결하기 > : 내 프로젝트 지우고 싶은 곳은 ======을 기준으로 지우시면 됩니다. > & == 모두를 지우신 후에 [Mark as resovled]를 눌러주시면 [Commit merge] 버튼이 활성화 됩니다.
첫 번째로 Scene Depth와 Camera 노드를 사용했고 Screen Position을 이용하였으며 두개의 노드를 Substract노드를 통해 뺐습니다. 두 번째로 파도의 타일링을 구현했습니다. Time노드와 각각 Tiling and Offset 노드를 통해 output을 Sample Texture 2D에 각각 넣어줬씁니다. 세 번째로 파도의 출렁임을 표현하기 위해 Position(Object)노드를 사용하였고 Split을 통해 R, B채널만 뽑아왔씁니다(파도의 높이를 뽑아오려면 G채널 뽑아와야 하는거 아닌가..?) 최종 Graph 결과물은 이러하다. 노말맵이 약간 이상하다. 파도의 출렁임이 좀더 자연스러웠으면 좋겠다 싶었다.
모델 제공은 우리XREAL팀인 '오연주'님께서 제공해주셨다! 금손이심... 번개가 번쩍번쩍하는 효과를 추가하고 싶으나 실력부족.. VFX로 하면 이쁠 것 같은데.. + 번개 이펙트 추가함 파티클 시스템을 활용함
Rigidbody rb; if (gameObject.TryGetComponent(out rb)) { // Rigidbody 컴포넌트가 존재하므로 이제 'rb'를 사용하여 접근할 수 있습니다 } else { // 이 GameObject에는 Rigidbody 컴포넌트가 없습니다 } TryGetComponent는 GameObject에 존재하는 경우 지정된 유형의 컴포넌트를 검색하려고 시도합니다. 컴포넌트가 발견되면 true를 반환하고 그 컴포넌트에 대한 참조를 제공합니다. 발견되지 않으면 false를 반환합니다. GetComponent와의 차이 Rigidbody rb = gameObject.GetComponent(); if (rb != null) { // Use rb } 지정된 구성 요소 유형이 발견되지 않으..
유니티 Rigidbody에는 AddForce라는 함수가 있습니다. 이 함수는 Rigidbody에 힘을 더해주는 함수인데 여기에는 더해줄 힘(여기에는 방향도 포함되어있다)과 힘을 어떻게 줄지 종류를 정하는 2개의 인자를 받습는다. ForceMode 종류를 살펴보겠습니다. 1. Aceeleration - 질량(X) - 연속적인 힘(continuous) 2. Force - 질량(O) - 연속적인 힘(continuous) 3. VelocityChange - 질량(X) - 즉각적인 힘(instatnt) 4. Impulse - 질량(O) - 즉각적인 힘(instatnt)
유니티에는 총 4가지 형태의 빛(Light)이 있습니다. 1. Spot 2. Directional 3. Point 4. Area Spot Spot의 경우 가로등 같은 형태의 오브젝트에서 타원형의 빛을 발광하기 위해 사용됩니다. 스포트라이트 생각하면 됩니다. Directional Directional같은 경우 태양광이라고 생각하면 됩니다. Directional의 가장 중요한 값은 방향입니다. Point Point의 경우 횃불이나 전구같은 오브젝트에서 사용됩니다. 오브젝트를 중심으로 발광이 필요할 때 사용됩니다., Area Area의 경우 직접 해봐야 알 것 같아서 직접 구현해보았습니다. 먼저 윈도우 -> 렌더링 -> 라이팅을 누르면 됩니다. 가장 먼저 Auto Generate를 해제하고 2번 동그라미가 가..
AddExplosionForce이란 무엇이냐? 폭발이 일어났을 때 주변 오브젝트들을 날려버리는 상호작용이 필요할 때가 있지 않느냐? 그럴때 사용되곤 하는 기능이다. 스크립트의 원형이다 Rigidbody.AddExplosionForce(폭발파워, 폭발범위, 반경, 날려버릴 방향 등)
Apply Root Motion을 체크하면 애니메이션으로 캐릭터의 움직임과 회전을 조절할 수 있다 애니메이션때문에 캐릭터의 포지션이 이동하는 것을 방지를 할 때는 언체크하면 될 것 같다! Culling Mode같은경우 화면에 렌더링될때만 애니메이션이 실행되길 바라면 설정하면 될 듯! 즉, 화면에 보이지 않으면 애니메이션 재생을 하지 않는거지! Update Mode같은 경우 Normal, Physics, Unscaled Time이 있는데 호출 타이밍에 맞게 사용하면 될거같아! 사용안해봐서 모르겠네..
오늘은 움직이는 토네이도를 구현해봤다 먼저 핵심 노드들을 살펴보자 Radial Shear노드를 알아보자 Description Applies a radial shear warping effect similar to a wave to the value of input UV. The center reference point of the warping effect is defined by input Center and the overall strength of the effect is defined by the value of input Strength. Input Offset can be used to offset the individual channels of the result. (출처 - https://..
오늘은 Dissolve Shdaer를 공부해봤다. 이 움짤을 생성하기 위해 프로그램도 설치했다 Vv 일단 Alpha Clip Threshold에 대해 너무 설명을 잘해준 그림이 있어 가져왔다. (출처 - https://www.youtube.com/watch?v=taMp1g1pBeE) 알파클립스레드홀드의 기준값보다 낮은 애들은 invisible처리된다 어쨌든 Dissolve Shdaer 그래프를 살펴보자. 생각보다 별거 없다. Simple Noise를 추가해 사라질 때 이미지를 추가해주는 거다. Step노드를 추가한다 Step 함수란 Edge와 In으로 결정되는데 In이 Edge보다 크거나 같으면 1 아니면 0이다 Step의 Out을 Color와 곱해줘서 emission에 넣어주면 끝이다! 근데 궁금한게 ..
Depth Buffer가 무엇이냐? 너무 어렵습니다.. 그러던 중 한 블로거의 글을 읽고 쉽게 이해가 돼서 저도 도움이 되고자 한번 후기를 작성해보겠습니다! Depth Buffer란 장면 깊이라는 뜻입니다! 오브젝트가 닿는 면을 강조할 때 사용할 수 있다고 합니다. 렌더링 파이프라인에서 Depth Texture를 사용해야 합니다! (참고 블로그 https://m.blog.naver.com/rmavy0989/221945829681) 일단 오브젝트 깊이를 위해 screen position 노드를 가져옵니다. split를 통해 알파값을 가져옵니다. Mode는 Raw로 설정하고 Screen Depth노드를 생성하고 Eye로 설정합니다. Transparent로 설정하고 씬을 보면 Plane에 닿아있는 부분이 조금..
오늘도 유튜브에서 이뻐보이는 셰이더를 발견해서 바로 따라 작성해봤습니다! 먼저 SampleTexture2D를 소환해주세요! 2개를 소환해줘야합니다, 그 이유는 하나는 대각선 아래 방향으로, 하나는 대각선 위 방향으로 tiling and offset를 해줘서 움직이게 해줄거거든요! 그래서 잘 보시면 One Mius가 있잖아요? 이걸 이용해서 방향을 반대로 바꿔준거에요! 그리고 그 두 Texture 2D를 Add해주는겁니다! 그다음 Color랑 Mulitply해줍니다! 그럼 텍스쳐 부분은 세팅끝! Fresnel Effect를 하나 만들어줍니다. 이건 저번시간에 배웠죠? 외곽의 효과를 주려고 하는겁니다! 이것도 Color와 곱해서 Power를 좀 준다음 위에서 만든 텍스쳐와 Add해주면 됩니다! 여기서부터 솔..
기본 설정은 이렇습니다. 여기선 Lit이네요 Trasnparent이고! 가장 먼저 볼거는 Radial Shear 이 녀석이군요! 이녀석은 무엇일까요? 이 녀석은 볼록한 느낌을 줄 수 있는 녀석입니다!!! 그래보이죠? 그다음은 Voronoi이녀석입니다, 이녀석은 무엇이냐? 뭔가 세포같이 생겼죠 그런 용도인가봅니다 보로노이 다이어그램에서 영감을 얻은 녀석인가보군요.. 그냥 저렇게 생겼다는것만 알아두면 될 것 같네요 저는 이 강좌에서의 핵심은 이부분이라고 생각합니다. 바로 Normal 과 Position을 다루는 거죠! 두개다 Space는 Object입니다 Normal이란 메쉬의 버텍스 방향 정보를 뜻합니다!!!! Position은 말그대로 위치겠죠 Time과 Tiling and Offet을 이용해 Gradi..
XRay Shader 작성법을 알아가 봅시다! 먼저, Material을 Unlit으로 바꾸죠!!! Unlit이라 하면 !!! 빛의 영향을 받지 않는다는 것이죠! 나머지 Opaque, Depth Write , Depth Test 등등의 사용법은 아직 모르겠다 ㅎㅎ Fresnel Effect를 추가합니다. Fresnel Effect란 무엇일까요? 프레넬 효과 현실 세계에서 오브젝트를 시각적으로 구분할 수 있는 중요한 방법 중 하나는 지표각에서 반사가 더 강해진다는 사실과 관련이 있습니다(아래 그림 참조). 이를 프레넬 효과라고 합니다. (출처 https://docs.unity3d.com/kr/530/Manual/StandardShaderFresnel.html) 주목할 점이 두 가지 있습니다. 첫째, 이 반사..
Occlusion Culling이란? Occlusion Culling은 컬링 기법중 하나이며, 드로우콜을 줄이기 위해 눈에 보이지 않는 오브젝트들을 렌더링 하지 않는 것을 뜻합니다! 위 사진처럼 플레이어의 시야각에 벗어나 렌더링이 필요로 하지 않는 오브젝트들을 추리는 것을 컬링이라고 합니다. 즉, 시야 밖 2개의 나무를 없애버리는 것을 Occulsion Culling이라고 합니다. 사용 방법 움직이지 않는 정적 오브젝트에 Static설정을 해주면 됩니다. 이렇게 뜨는데 여기서 Occuluder Static과 Occludee Static을 클릭하면 됩니다. Occuluder Static이란 가리는 대상이 되고, Occludee Static이란 가려지는 대상을 뜻합니다. [Window] -> [Renderi..
정적배칭을 사용하는 최적화 방법정적이란 말 그대로 움직이지 않는 것을 뜻하며, 움직이지 않는 정적 오브젝트에 활용하는 기법이다. 동일한 재질을 공유하는 오브젝트들을 일괄 처리해서 드로우 콜을 줄이는 방법이다. 여기서 드로우콜(Draw Call)이란 CPU가 CPU에게 렌더링을 부탁하는 것이다. 솔직히 이렇게 말하면 이해하기 어렵다. 인정하죠? 그래서 저의 얄팍한 그림실력으로 설명해보겠습니다.위 사진을 보면 각각 오브젝트마다 렌더링을 하게 돼서 하나의 구 오브젝트에 하나의 드로우콜이 일어나게 돼서 총 2번의 드로우 콜이 발생하는 반면,아래 사진을 보면 두 오브젝트가 한꺼번에 렌더링을 하게 돼서 한 번의 드로우 콜이 발생하게 된다 다이내믹 배칭정적 배칭과 반대는 다이내믹 배칭이다움직이는 오브젝트에 사용되는 ..
오늘은 인벤토리 인터렉션을 구현해보겠다 먼저 빈 GameObject를 생성하고 Inventory라고 이름을 바꿔주자 자식으로 Title Canvas를 생성하고 거기에 이미지를 생성해 상단 인벤토리를 표시한다 그 다음으로 자식 Slot(빈 게임오브젝트)들을 생성한다 다음 캔버스를 생성하고 캔버스에 이미지를 추가한다(사이즈는 0.001이 대부분인듯) 그다음 위치에 맞게 설정한다 ( 위 방식대로 안하고 원하는 방식으로 하면 된다 ) Item, Slot, OVR Grabbale 스크립트를 작성해보자 Item 스크립트 작성법이다 isSlot은 현재 슬롯에 들어가 있는지 판별하는 변수이다 slotRotation 같은 경우 슬롯에 집어넣었을 때 똑바로 집어넣기 위함이다 currentSlot은 아이템이 들어가 있는 슬..
Ray Interator를 사용하는 방법을 알려주겠다~ 일단 Ray Interactor을 Input OVR 프리팹의 각 해당하는 Controller에 넣어주고 Ref을 할당해준다. 그리고 드라이버에(Driver)도 추가해준다.(OVRPlayerController에 따로 더 추가할건 없다) 그다음으로 상호작용할 오브젝트를 생성하고 Ray Interactable컴포넌트를 부착해준다. Grabbable 스크립트와 비슷하다, 콜라이더를 할당해주면 끝이다.(Pointable Element에 추가하지 않아야함) 다음으로 Interactable Unity Event Wrappaer를 생성해준다. (가끔 할당되지 않는 경우가 있던데 Mesh가 없으면 안되는 것 같다.) Interactable Unity Event Wr..