AnyPortrait > 스크립트 > 커맨드 버퍼
유니티의 커맨드 버퍼(Command Buffer)를 AnyPortrait의 캐릭터를 대상으로 사용하기 위한 함수들입니다.
다음의 함수들은 apPortrait가 아닌 apCustomCommandBuffer 클래스에 속합니다.
코드를 작성하는 방법은 페이지 하단의 예제 코드나 커맨드 버퍼 사용 예시를 설명하는 다음의 페이지를 참고해주세요.
- 커맨드 버퍼 작성하기
또한 유니티의 커맨드 버퍼에 대한 자세한 설명은 아래의 유니티 공식 메뉴얼에서 확인하실 수 있습니다.
- 커맨드 버퍼를 사용하여 빌트인 렌더 파이프라인 확장
- 스크립터블 렌더 파이프라인에서 렌더링 커맨드 예약 및 실행
- 커맨드 버퍼 API
- CameraEvent API
apPortrait를 대상으로 하는 커맨드 버퍼 클래스를 생성합니다.
Camera camera : 렌더링을 수행할 카메라
apPortrait portrait : 렌더링이 되는 apPortrait
string commandBufferName : 카메라에 등록되는 커맨드 버퍼의 이름
커맨드 버퍼를 등록된 카메라로부터 제거합니다.
카메라, apPortrait 캐릭터 또는 커맨드 버퍼 클래스중 하나라도 존재하지 않게 된다면 이 함수를 꼭 실행해야합니다.
카메라에 렌더링을 어느 시점에 수행할지 설정합니다.
Built-in 렌더링 파이프라인을 사용하는 경우 호출되어야 하는 함수입니다.
UnityEngine.Rendering.CameraEvent cameraEvent : 렌더링 시점에 대한 enum 변수
카메라에 렌더링을 어느 시점에 수행할지 설정합니다.
Scriptable Render Pipeline(SRP)를 사용할 경우 호출되어야 하는 함수입니다.
이 함수는 SRP를 공식적으로 지원하는 Unity 2019.1 또는 그 이후 버전에서만 지원됩니다.
apCustomCommandBuffer.SRPRenderEvent srpRenderEvent : SRP에서의 렌더링 시점
커맨드 버퍼를 이용하여 캐릭터를 렌더링할 때, 다른 재질이 적용되도록 지정합니다.
인자로서 입력된 Material의 속성들이 복제되어 렌더링에 사용되도록 예약하지만, "_MainTex"와 "_Color"는 복제되지 않습니다.
대체되는 재질의 쉐이더는 "커스텀 쉐이더"로서의 규칙이 지켜져야 합니다.
이 함수가 호출된 이후에 "DrawAllMeshesWithAlternativeMaterials" 함수를 이용하여 그리기 요청을 해야합니다.
만약 Dictionary 타입의 변수로 재질들을 지정한다면, 캐릭터가 가진 여러개의 이미지마다 서로 다른 재질이 적용되어 렌더링될 수 있습니다.
Material alternativeMaterial : 커맨드 버퍼에 의한 렌더링시 대체될 재질
Dictionary<string, Material> imageNameToAlterMaterialMap : 이미지 이름에 따라 서로 다른 재질이 대체되도록 지정된 매핑 변수
Material unmatchedMaterial : 대체 대상의 재질을 찾을 수 없을 경우 공통적으로 적용되는 재질
커맨드 버퍼의 내용을 초기화합니다.
카메라로 캐릭터를 렌더링한 결과가 "렌더 텍스쳐(Render Texture)"에 저장되도록 설정합니다.
RenderTexture renderTexture : 렌더링 결과가 저장될 텍스쳐
설정된 렌더링 대상의 색상이나 깊이 값을 초기화합니다.
Built-in 렌더링 파이프라인에서 호출될 수 있는 함수입니다.
bool clearDepth : 깊이값 초기화 여부
bool clearColor : 색상값 초기화 여부
Color backgroundColor : clearColor가 true일 때, 초기화되는 색상
float depth : clearDepth가 true일 때, 초기화되는 깊이값 (기본값은 1.0f)
설정된 렌더링 대상의 색상이나 깊이 값을 초기화합니다.
Scriptable Render Pipeline(SRP)에서 호출될 수 있는 함수입니다.
이 함수는 SRP를 공식적으로 지원하는 Unity 2019.1 또는 그 이후 버전에서만 지원됩니다.
UnityEngine.Rendering.RTClearFlags clearFlags : 초기화되는 값의 종류를 지정하는 Flag 변수
Color backgroundColor : 초기화되는 색상
float depth : 초기화되는 깊이값 (기본값은 1.0f)
uint stencil : 초기화되는 스텐실값 (기본값은 0)
렌더링시 View Matrix로서 어떤 값이 적용될지를 커맨드 버퍼에 지정합니다.
인자를 지정하지 않는 경우엔 대상의 카메라의 View Matrix와 동일한 값이 렌더링에 이용됩니다.
이 함수는 Unity 2019.1 또는 그 이후 버전에서만 지원되며, 해당 버전에서는 이 함수를 꼭 호출해야합니다.
Matrix4x4 customViewMatrix : 카메라의 설정과 다르게 적용되는 View Matrix
렌더링시 Projection Matrix로서 어떤 값이 적용될지를 커맨드 버퍼에 지정합니다.
인자를 지정하지 않는 경우엔 대상의 카메라의 Projection Matrix와 동일한 값이 렌더링에 이용됩니다.
이 함수는 Unity 2019.1 또는 그 이후 버전에서만 지원되며, 해당 버전에서는 이 함수를 꼭 호출해야합니다.
Matrix4x4 customProjectionMatrix : 카메라의 설정과 다르게 적용되는 Projection Matrix
apOptTransform의 메시를 렌더링하도록 지정합니다.
"apPortrait.GetOptTransform" 함수가 도움이 될 것입니다.
재질이나 World Matrix를 임의로 변경하여 렌더링할 수 있습니다.
apOptTransform optTransform : 렌더링이 될 메시를 가진 apOptTransform
Material material : 렌더링될 대체 재질
Matrix4x4 localToWorldMatrix : 사용자가 임의로 지정하는 World Matrix
현재 화면에 보여지는 apPortrait의 모든 메시들이 렌더링되도록 지정합니다.
bool sortOrder : 렌더링 순서를 다시 계산할지 여부
bool excludeClippedChildMeshes : 커맨드 버퍼와 호환성이 좋지 않은 클리핑되는 메시를 렌더링에서 제외시킬지 여부
Material material : 렌더링시 사용되는 대체 재질
현재 화면에 보여지는 apPortrait의 모든 메시들이 렌더링되도록 지정하는 "DrawAllMeshes"함수와 동일한 역할을 수행하지만, "CreateAlternativeMaterials" 함수로부터 등록된 대체 재질들이 이용됩니다.
bool sortOrder : 렌더링 순서를 다시 계산할지 여부
bool excludeClippedChildMeshes : 커맨드 버퍼와 호환성이 좋지 않은 클리핑되는 메시를 렌더링에서 제외시킬지 여부
유니티의 커맨드 버퍼 객체를 리턴합니다.
UnityEngine.Rendering.CommandBuffer : 커맨드 버퍼 객체
using UnityEngine;
using AnyPortrait;
public class CmdBufferExample : MonoBehaviour
{
// 대상 객체들
public apPortrait portrait;
public Camera targetCamera;
// 커스텀 커맨드 버퍼
private apCustomCommandBuffer _commandBuffer = null;
void Start()
{
if (_commandBuffer == null)
{
portrait.Initialize();
_commandBuffer = new apCustomCommandBuffer(targetCamera, portrait, "Custom Command Buffer");
_commandBuffer.AddToCamera(UnityEngine.Rendering.CameraEvent.AfterForwardAlpha);
}
}
void OnDestroy()
{
if (_commandBuffer != null)
{
_commandBuffer.Destory();
_commandBuffer = null;
}
}
void LateUpdate()
{
if (_commandBuffer != null)
{
_commandBuffer.ClearCommands();
_commandBuffer.SetViewMatrix();
_commandBuffer.SetProjectionMatrix();
_commandBuffer.DrawAllMeshes(true, true);
}
}
}