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 метод вместо.