Test를 하기 위해서 게임중에서 Shader를 변형시키는 스크립트를 하나 만들었습니다.
셰이더가 프레임 영향에 엄청 준다는것을 다시한번 느끼게 하는 테스트 였습니다.
더보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShaderChangeAll : MonoBehaviour
{
private bool isLow = false;
void Update()
{
// F9 키가 눌려진 경우
if (Input.GetKeyDown(KeyCode.F9))
{
if (isLow)
{
// 셰이더를 "BG/BG_Lit"로 변경합니다.
ChangeShader("BG/BG_Lit_Low", "BG/BG_Lit");
ChangeShader("BG/BG_GPU_instance_Low", "BG/BG_GPU_instance");
ChangeShader("/BG/BG_Crowd_Low", "BG/BG_Crowd");
isLow = false;
}
else
{
// 셰이더를 "BG/BG_Lit_LOW"로 변경합니다.
ChangeShader("BG/BG_Lit", "BG/BG_Lit_Low");
ChangeShader("BG/BG_GPU_instance", "BG/BG_GPU_instance_Low");
ChangeShader("BG/BG_Crowd", "BG/BG_Crowd_Low");
isLow = true;
}
}
}
void ChangeShader(string originalShader, string newShaderName)
{
Shader newShader = Shader.Find(newShaderName);
// 모든 렌더러를 찾습니다.
Renderer[] renderers = FindObjectsOfType<Renderer>();
foreach (var renderer in renderers)
{
// Layer를 체크하여 변경하지 않을 오브젝트를 건너뛰기
if (renderer.gameObject.layer == LayerMask.NameToLayer("BgSet"))
continue;
// 각각의 재질에 대해 셰이더를 변경합니다.
for (int i = 0; i < renderer.sharedMaterials.Length; i++)
{
Material material = renderer.sharedMaterials[i];
// 현재 셰이더가 원래 셰이더인지 확인합니다.
if (material.shader.name == originalShader)
{
// 새 셰이더를 적용합니다.
material.shader = newShader;
}
}
}
}
}
'업무일지' 카테고리의 다른 글
업무일지 <시스템 관리자> (0) | 2023.06.14 |
---|---|
업무일지 <배경추가> (0) | 2023.06.09 |
업무일지 <HDRP CustomLight> (0) | 2023.05.23 |
업무일지 <Frame> (0) | 2023.05.22 |
업무일지 <연출 작업> (0) | 2023.05.18 |