공부/Unity

24.06.05

월러비 2024. 6. 10. 17:31

집단 AI

  • Dictionary
    • 1번 그룹에 넣고
    • 2번 그룹에 넣고
    • 아군들은 감지 안되게 하고, 그 외는 감지가 되게 한다.
    • 집단에서 하나가 공격 상태라면, 다른 아군들은 대기상태
      • 공격들어가면 2명만 공격하게 한다든지
      • 이게 힘들면 나를 따라다니는 아군 AI를 먼저 구현해봐라
    • 이거 구현하고 자기 도와주는 아군 NPC를 구현해봐라

 

  • 파이 : 180도
  • 파이 r 제곱 : 면적
  • 2 파이 r : 원을 둘러싼 점
  • 조명 이론 : 스펙큘러, 엠비언트, 등

 

  • 노멀맵 이미지 클릭 - Texture Type (Normal map) Apply
    • 노멀맵 : 질감의 입체적인 굴곡 효과를 준다.

조명 - 그래픽 이론

  • 평면정보를 출력하는 애 : Material
    • 메테리얼 정보를 출력하는데 ‘PBR’을 사용한다.
    • PBR
      • Metalic
      • Smoothless (Roughness 거칠기정도)
  • 색을 보여주는 4가지 방법
    • Ambient : 사방에서 고르게 들어오는 빛
      • 주가 되는 광원 색 (밖에 나가면 태양이 나의 색이고, 실내에 있으면 형광등이 나의 색이다.)
      • 낮이면 태양이 노란 빛을 화면에 비추니 오브젝트가 노란 빛을 내고, 석양이 지면 화면에 주황 빛을 준다.
      • 어느 방향이든, 어느 거리든 고르게 들어오는 빛이다.
        • 전체 씬을 비추는 조명에 사용한다.
        • 하늘에서 들어오는 빛과 지면의 색, 풀숲의 빛을 보간하면서, 실제 게임에서는 허리 위를 하늘의 색으로 비추고 허리 밑은 땅의 색으로 비춘다.
      • A.C (Ambient Color)
    • Diffuse : 내가 가진 색 - 음영 관련 색상
      • 이게 순수한 상태 : Albedo (옷이 검정색이라면, 옷의 Albedo는 검정이다.)
      • Diffuse.Texture(텍스처(이미지) 색) * Diffuse.Color(보정색) * 음영(그림자는 아니고 빛에 의해 가려지는 부분)
      • Nomal Vector(한 면에 수직인 방향) 과 조명의 벡터(노멀벡터에서 빛을 보는 방향의 벡터)의 ‘내적’이 ‘음영’이다.
        • 내적은 1 ~ 0으로 각도가 커질수록 내적 값은 작아진다.
        • 1이 가장 밝고 0에 가까울수록 빛을 못받은 음영이 진 부분이다.
      • 결론 (L.N = Light NomalVector - 조명 수직벡터 / 즉, 음영이다.)
        • D.T * D.C * (-L.N) * NomalMap
    • Specular : 전반사광
      • 스펙큘러용 텍스처를 빼면 재질이나 무늬모양이 안보이고 맨들맨들해진다.
      • 시야에 반사된 빛이 보여야하기 떄문에 시야가 필요하다.
      • 반사벡터가 필요하다.
        • 면에 수직인 노멀벡터에 각을 뒤집는다.
        • 이걸 반사벡터 (Reflection Vector)라고 한다.
      • 이때 스펙큘러 벡터는 ‘반사벡터와 시야 벡터의 내적’ 각도를 사용한다. ⇒ R.E (Reflection Eye)
        • 시야 안에 일정 부분만 빈치 반사되고 그 외의 부분은 반사되지 않는다.
          • 파이 r 곱인 이유
            • r제곱은 면적을 계산한다.
            • 원 외의 부분을 구분하기 위해 ‘파이’를 곱한다.
            • r의 승수는 ‘밀도’를 의미한다.
              • 1은 ‘반지름’, 2는 ‘면’, 3은 ‘부피’ …등
              • 승수가 올라갈수록 면적(면)은 줄어들고 밀도는 증가한다.
      • S.T(Specular Texture) * S.C(Specular Color) * Pow((R.E), Shiness)
      • 최종적인 식 : S.T(Specular Texture) * S.C(Specular Color) * (R.E)의 pow 처리 * GlobalLight.Specular(지금은 이거말고 PBR을 더한다.)
        • Pow : 승수(면적에 가해지는 힘으로 볼 수 있다.) ⇒ 이 값에 따라서 반사된 빛으로 면이 보이는 정도를 정할 수 있다.
        • Shiness : 빛의 강도
        • GlobalLight.Specular : 빛을 반사하더라도 엠비언트처럼 빛을 주는 주체의 색이 있기 때문이다.
        • 레이트레이싱에서 사용한다.
          • 필요할때는 조명에 레이트레이싱을 사용하고, 사용 안한고 끈다면 조명만 계산된다.
    • Emissive : 외곽선 - 외곽에 빛나는 선
      • 배경과 물체의 색이 같을때 구분이 갈 수 있도록 외곽에 구분을 해준다.
      • 주체가 물체를 바라보는 시점을 기준으로 보는 물체의 외곽선이다.
      • 외과선도 1이 가장 밝고, 0에 가까울수록 어두워진다.
      • 1 - (N.E)(Nomal Vector Emissive) ⇒ 외곽선은 각이 클수록 밝아야하기 때문이다.
        • SmoothStep : 일정 구간에서 색이 반전되는 기능의 함수다.
      • E.C(Emissive Color) * (N.E)
    • 이제 각 색들이 나왔으니 이렇게 나온 색 4개는 ‘더한다.(+)’
      • 그래야 내 자신색은 어둡지만 강한 빛이 들어오면 밝아져야 하기 때문이다.
    • 얘네들을 최종적으로 합친 식
  • 조명
float3 direction = -GlobalLight.Direction;
    float NdotL = dot(direction, normalize(normal));
    
    output.Ambient = GlobalLight.Ambient * Material.Ambient;
    float3 E = normalize(ViewPosition() - wPosition);

    [flatten]
    if(NdotL > 0.0f)
    {
        output.Diffuse = Material.Diffuse * NdotL;
        
        [flatten]
        if (Material.Specular.a > 0.0f)
        {
            float3 R = normalize(reflect(-direction, normal));
            float RdotE = saturate(dot(R, E));
            
            float specular = pow(RdotE, Material.Specular.a);
            output.Specular = Material.Specular * specular * GlobalLight.Specular;
        }
    }
    
    [flatten]
    if (Material.Emissive.a > 0.0f)
    {
        float NdotE = dot(E, normalize(normal));
        float emissive = smoothstep(1.0f - Material.Emissive.a, 1.0f, 1.0f - saturate(NdotE));
        
        output.Emissive = Material.Emissive * emissive;
    }

텍스처 종류

  • 기본 텍스처는 1D 텍스처다.
    • 카툰 렌터링에서 외곽선이 진할때 사용하기도 한다.
  • 2D 텍스처는 1D를 여러개를 붙여 한 면을 만든 것이다.
  • 3D는 2D의 면을 여러개 만든다.
  • Cube는 주사위 박스모양 텍스처다.

 

  • 지역조명
  • 전역조명
  • SkyBox
    • Material 생성 - Shader Skybox - 조절
    • WIndow - Rendering - Lighting - Environment - Skybox Material에 만든 Skybox용 메테리얼 넣기
    • 스카이박스 셰이더 타입 4개 정리
  • 조명
    • Window - Rendering - Lighting - Scene - Lighing Settings Asset - New Lighting Settings 클릭

 

  • 빌드 앤 런 (게임 exe 파일 만들기)
    • File - Build Setting - Scene 파일 끌어다 놓기 - Build and Run
  • 조명 남은 설명

'공부 > Unity' 카테고리의 다른 글

24.06.11  (1) 2024.06.11
24.06.07  (2) 2024.06.10
24.06.04  (0) 2024.06.10
24.06.03  (0) 2024.06.10
24.05.31  (1) 2024.06.10