Unity 6.3
0 онлайн 88 гостей 3 в системе
Вход

RayTracingShader.SetConstantBuffer

Declaration

public void SetConstantBuffer(int nameID, ComputeBuffer buffer, int offset, int size);
public void SetConstantBuffer(string name, ComputeBuffer buffer, int offset, int size);
public void SetConstantBuffer(int nameID, GraphicsBuffer buffer, int offset, int size);
public void SetConstantBuffer(string name, GraphicsBuffer buffer, int offset, int size);

Параметры

Параметр Описание
nameID ID имя свойства для постоянного буфера в коде шейдера. Используйте Shader.PropertyToID для получения этого ID.
имя Имя постоянного буфера в коде шейдера.
буфер Буфер для привязки в качестве постоянного буфера.
офсет Смещение в байтах от начала ComputeBuffer или GraphicsBuffer для привязки. Должно быть кратным SystemInfo.constantBufferOffsetAlignmentили 0, если это значение равно 0.
размер Число байт для привязки.

Описание

Привязывает постоянный буфер, созданный с помощью ComputeBuffer или GraphicsBuffer.

С помощью этого метода все параметры шейдера в указанном константном буфере переопределяются содержимым переданного ComputeBuffer или GraphicsBuffer.

При использовании ComputeBuffer в качестве параметра, он должен быть создан с ComputeBufferType.Constant Аналогичным образом, когда GraphicsBuffer используется в качестве параметра, он должен быть создан с GraphicsBuffer.Target.Constant flag. Расположение данных в постоянном буфере должно точно соответствовать данным, указанным в ComputeBuffer или GraphicsBuffer.

Если вышеуказанные условия не выполнены, буфер может не быть связан правильно и поэтому будут взяты обычные параметры. В противном случае могут возникнуть визуальные артефакты.

После того, как эта функция была вызвана с ненулевым ComputeBuffer или GraphicsBuffer, вы больше не сможете вручную устанавливать значение переменной внутри буфера переопределённой константы. RayTracingShader.SetFloat и т.д., где заданное имя свойства ID указывает на переменные внутри переопределённого буфера констант, не будет иметь никакого эффекта.

Только шейдеры, определенные в файле .raytrace, могут получить доступ к постоянному буферу, который вы указываете в качестве аргумента для этого метода. Чтобы сделать этот буфер доступным для всех типов шейдеров трассирования лучей (ближайший попадание, любое попадание, пропуск и т.д.), вызовите Shader.SetGlobalConstantBuffer метод вместо.