>

테라 리아와 스타 바운드가 가지고있는 안개등 조명 스타일을 달성하려고합니다. Terraria의 조명 시스템은 더 블록/타일 기반이지만 Starbound는 훨씬 더 매끄 럽습니다.

원하는 효과 :

Starbound는 셰이더를 사용하여 조명을 렌더링하지만 어떻게 진행되는지는 미스터리입니다.

원하는 효과를 얻는 방법에 대한 아이디어는 다음과 같습니다. 검은 색 텍스처를 만들고어떻게흰색 영역을 계산하여 라이트 맵 렌더링 텍스처에 저장합니다. 메인 텍스처와 라이트 맵 텍스처의 Additive Blend를 수행하여 Starbound와 유사한 효과를 얻습니다. (그러나 이것은 월드의 라이트를 고려하지 않으며, 라이트 맵 렌더 텍스처에 대한 계산에 포함시키는 방법도 전혀 없습니다)

라이트 맵 렌더 텍스처에서이 "마스크"효과를 만드는 방법에 대한 실마리가 없기 때문에 이탤릭체로어떻게말합니다. 마스크를 만드는 데 필요한 계산을 수행하는 방법은 저쪽에 있습니다. 카메라가 보는 것과 관련하여 게임 세계의 데이터를 번역하고 그에 따라 텍스처를 업데이트하는 방법을 모르겠습니다.

TLDR :Unity 2D에서 Terraria 또는 Starbound와 유사한 조명을 어떻게 얻을 수 있습니까?

  • 답변 # 1

    먼저 컬러 맵을 그립니다

    그러면 라이트 맵을 그립니다

    마침내 둘 다 곱하십시오.

    게임에서 일종의 2 차 조명을 원하고 게임 세계에서 지형 및/또는 오브젝트 배치에 그리드를 사용하는 경우 해결책이 있습니다. 이것은 인스턴트 라디오 시티와 같은 것입니다.

    먼저 광원에서 추적하여 어떤 셀에 빛이 들어 왔는지 알 수 있습니다.

    그런 다음 원래 빛으로부터의 거리에 따라 강도가 약화 된 조명 된 셀에 다른 광원을 배치합니다. 당신은 또한 그것들을 약간 흐리게하고 싶을 수도 있습니다. 결과지도입니다.

    기존 광원을 추가하십시오.

    그런 다음 컬러 맵을 곱하십시오.

    렌더링 파이프 라인에 대한 의사 코드는 다음과 같습니다 (구문 강조 표시는 중요하지 않습니다)

    for each light on scene:
        if light is on screen:
            add light to the drawing queue
    draw frame:
        render frame color map:
            draw each visible tile and object
        for each light in queue:
            trace secondary lights on visible cells and add them to the drawing queue                
        render frame light map:
            set blending to additive
            for each light in queue:
                move light object to the light position
                set light object width and height to the light radius
                set light object color to the light color
                draw light object
            //then we render shadows for solid places
            set blending to subtraction
            for each visible cell:
                if cell is surrounded by other cells from every side:
                    move light object to the cell
                    set light width and height to the radius slightly bigger than cell
                    set light color to white//to subtract any kind of light color
                    draw light object
        set blending to normal
        draw color map
        set blending to multiplication
        draw light map
    
    

관련 자료

  • 이전 unity - 다른 스크립트에서 gameObject 배열 값에 액세스
  • 다음 java - Box2dlights가 그림자를 드리울 수 없습니다