고래의 색상을 다르게하고 싶습니다.Unity FBX 문제
하나는이 스킨으로 렌더링되고 다른 하나는 다른 하나가됩니다.
하지만 색상을 편집하려고하면 두 가지 색상이 동시에 변경됩니다.
피부가 마지막으로 이어집니다.
어떻게해야합니까? 두 개의 동일한 물체가 동일한 재료를 사용하는 경우, 렌더링 또는 최적화하기 위해 메쉬
고래의 색상을 다르게하고 싶습니다.Unity FBX 문제
하나는이 스킨으로 렌더링되고 다른 하나는 다른 하나가됩니다.
하지만 색상을 편집하려고하면 두 가지 색상이 동시에 변경됩니다.
피부가 마지막으로 이어집니다.
어떻게해야합니까? 두 개의 동일한 물체가 동일한 재료를 사용하는 경우, 렌더링 또는 최적화하기 위해 메쉬
는, 실제로 사용되는 것과 같은 경우이다. 간단하게, 두 마리의 고래는 같은 물질을 사용하고 있습니다. 그리기 호출을 저장하는 것입니다.
그래서 변경하면 둘 다 변경됩니다.
해결책은 재료를 복제하여 그 중 하나에 할당하는 것입니다. 이제는 다른 것에 영향을주지 않고 하나를 변경할 수 있습니다. 또한 추가 드로 콜을 하나 추가했습니다.
자료 복제 (두 고래가 일괄 처리되는 것을 방지하기 위해)의 대안으로 MaterialPropertyBlock
s을 사용할 수 있습니다.
일반적으로 사용하기가 쉽습니다. 새 스크립트에서는 MaterialPropertyBlock을 만들고, 객체에 넣을 색상으로 색상을 설정하고 MaterialPropertyBlock을 객체의 렌더러에 지정합니다.
MaterialPropertyBlock.SetColor()에는 작업 예제가 있지만 그리기 호출은 필요하지 않습니다 (이는 지나치게 엔지니어링 된 예입니다). 이 충분하다 :
Start() {
MaterialPropertyBlock mpb = new MaterialPropertyBlock();
mpb.SetColor("_MainColor", new Color(1,0,0));
gameObject.GetComponent<MeshRenderer>().SetPropertyBlock(mpb);
}
결과 :
이것은 당신이 쉐이더 매우 복잡한 일을 할 수있는, 장기적으로 더 효율적으로 될 수있을 테니까요, 모든 객체가 사용하는 것과 동일한 단일 재질이지만 모두 고유 한 모양을 가지고있어 렌더링 속도가 떨어지지 않습니다. 하드 파트은 조정하려는 셰이더의 속성 이름을 알아냅니다.
물론 결과는 재생 모드에서 실행될 때만 나타납니다 (클래스에 [ExecuteInEditMode]
으로 태그 지정하지 않은 경우).
이전에 보지 못한 꽤 산뜻한 방법입니다. – Everts
@Evertts 오, 그래, 아주 멋지다. – Draco18s