본문 바로가기
유니티 엔진

URP 에서 유니티 내장 셰이더를 바꾸고 싶어요!

by 대마왕J 2020. 12. 28.

일반적으로 레거시에서는 유니티 내장 셰이더를 바꾸기 위해서 다음과 같은 기능을 사용합니다. 


바로 유니티 다운로드 아카이브로 가서 


https://unity3d.com/kr/get-unity/download/archive?_ga=2.119300289.95093767.1609142920-1967785289.1604284661





원하는 버전의 내장 셰이더를 선택하여 다운로드 받고, 



이를 받아 압축을 풀고 셰이더를 수정한 후 그 셰이더를 대신 사용하면 되는 것이었습니다. 


그런데 URP에서는 좀 다른게 



Assets  폴더가 있고 Packages 폴더가 있는데, Packages는 우리가 건드릴 수 없는 폴더입니다. 

그런데 핵심 내장 셰이더들이 저 Packges 폴더에 들어 있어요. 즉 다운로드 아카이브에서 바꿀 필요가 없다는 겁니다. 


그럼 어떻게 저 내장 셰이더를 수정할까요?




이렇게 타고 들어가면 수정 가능할까요?


네 저걸 오른클릭해서 익스플로러로 보기 해서 타고 들어가서 수정하면 수정됩니다. 

근데, 저렇게 수정하면 프로젝트를 껐다 켜면 다시 초기화된다는게 문제입니다. 



그것은 왜 그러냐면


사실 저 Packages 폴더 안에는 



json 파일이 하나만 있고, 

그 안에는


{

  "dependencies": {

    "com.unity.collab-proxy": "1.2.16",

    "com.unity.ide.rider": "1.1.4",

    "com.unity.ide.vscode": "1.2.0",

    "com.unity.polybrush": "1.0.2",

    "com.unity.render-pipelines.universal": "7.3.1",

    "com.unity.terrain-tools": "3.0.1-preview",

    "com.unity.test-framework": "1.1.14",

    "com.unity.textmeshpro": "2.0.1",

    "com.unity.timeline": "1.2.17",

    "com.unity.ugui": "1.0.0",

    "com.unity.modules.ai": "1.0.0",

    "com.unity.modules.androidjni": "1.0.0",

    "com.unity.modules.animation": "1.0.0",

    "com.unity.modules.assetbundle": "1.0.0",

    "com.unity.modules.audio": "1.0.0",

    "com.unity.modules.cloth": "1.0.0",

    "com.unity.modules.director": "1.0.0",

    "com.unity.modules.imageconversion": "1.0.0",

    "com.unity.modules.imgui": "1.0.0",

    "com.unity.modules.jsonserialize": "1.0.0",

    "com.unity.modules.particlesystem": "1.0.0",

    "com.unity.modules.physics": "1.0.0",

    "com.unity.modules.physics2d": "1.0.0",

    "com.unity.modules.screencapture": "1.0.0",

    "com.unity.modules.terrain": "1.0.0",

    "com.unity.modules.terrainphysics": "1.0.0",

    "com.unity.modules.tilemap": "1.0.0",

    "com.unity.modules.ui": "1.0.0",

    "com.unity.modules.uielements": "1.0.0",

    "com.unity.modules.umbra": "1.0.0",

    "com.unity.modules.unityanalytics": "1.0.0",

    "com.unity.modules.unitywebrequest": "1.0.0",

    "com.unity.modules.unitywebrequestassetbundle": "1.0.0",

    "com.unity.modules.unitywebrequestaudio": "1.0.0",

    "com.unity.modules.unitywebrequesttexture": "1.0.0",

    "com.unity.modules.unitywebrequestwww": "1.0.0",

    "com.unity.modules.vehicles": "1.0.0",

    "com.unity.modules.video": "1.0.0",

    "com.unity.modules.vr": "1.0.0",

    "com.unity.modules.wind": "1.0.0",

    "com.unity.modules.xr": "1.0.0"

  }

}



이렇게 어떤 모듈이 깔려 있는지에 대한 디펜던시만 나오기 때문입니다. 


그럼 실체는 어디있느냐?


여기의 실체는



이렇게 라이브러리 안의 패키지 캐시 안에 들어 있습니다. 

즉 이 부분은 수정해도 다시 원래대로 금방 복구되는 것이지요. 


그럼 어떻게 수정하느냐...




바로 이렇게, 패키지 캐시에서 패키지 폴더로 복사를 해 줍니다. 더 이상 캐시로 남아 있지 않게 말이지요 

실체화 시켜준다고 해야 하나. 


그리고나서 




이렇게 방금 옮긴 패키지를 언인스톨해주면 됩니다. 


그러면 패키지 폴더에 복사해 놓은 패키지 폴더가 사용되게 되고, 이제 그 안에 있는 셰이더들을 수정하면 다시 원래대로 복구되지 않고 계속 쓸 수 있게 됩니다. 




반응형

댓글