Skip to content

Commit

Permalink
Add CallableShaders.rst
Browse files Browse the repository at this point in the history
  • Loading branch information
FuXiii committed Oct 16, 2023
1 parent 1345e4b commit a87a1c7
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 1 deletion.
6 changes: 6 additions & 0 deletions source/Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@
此更新日志为纵览更新,对于具体文章的更新位于每个文章的开头的 `更新记录` 中。
```

## 2023/10/16

>* 增加`可调用着色器`文档
>* 更新`NVIDIA Vulkan 光线追踪教程`文档
>* 更新`相交着色器`文档
## 2023/10/15

>* 更新`纵览`文档
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ NVIDIA Vulkan 光线追踪教程
* 2023/9/15 更新 ``8 着色器绑定表`` 添加 ``随笔链接``
* 2023/9/20 增加 ``动态更新`` 文档链接
* 2023/10/7 增加 ``相交着色器`` 文档链接
* 2023/10/16 增加 ``可调用着色器`` 文档链接

`文献源`_

Expand Down Expand Up @@ -2429,4 +2430,5 @@ NVIDIA Vulkan 光线追踪教程
extensions/Reflections.rst
extensions/MultipleClosestHitShaders.rst
extensions/Animation.rst
extensions/IntersectionShader.rst
extensions/IntersectionShader.rst
extensions/CallableShaders.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
可调用着色器
======================================

.. dropdown:: 更新记录
:color: muted
:icon: history

* 2023/10/16 增加该扩展文档
* 2023/10/16 增加 ``教程`` 章节
* 2023/10/16 增加 ``数据存储`` 章节

`文献源`_

.. _文献源: https://github.com/nvpro-samples/vk_raytracing_tutorial_KHR/tree/master/ray_tracing_callable

.. _光线追踪教程: ../NVIDIAVulkanRayTracingTutorial.html

.. figure:: ../../../_static/callable.png

可调用着色器结果示意图

教程
####################

该教程为 ``Vulkan`` `光线追踪教程`_ 的扩展。

实时光追支持在光线生成着色器、最近命中着色器、未命中着色器或者其他可调用着色器中使用 ``可调用着色器`` 。可调用着色器的调用有点类似间接函数的调用,不需要将这些着色器链接进可执行程序中。

数据存储
####################

可调用着色器只能够访问父阶段(可调用着色器的调用者)传进来的数据。且一次只能传递一个结构提数据并像负载那样声明。

在父阶段,使用 ``callableDataEXT`` 存储限定符声明传递的数据。比如:

.. code:: glsl
layout(location = 0) callableDataEXT rayLight cLight;
其中 ``rayLight`` 结构体定义在共享文件中。

.. code:: glsl
struct rayLight
{
vec3 inHitPosition;
float outLightDistance;
vec3 outLightDir;
float outIntensity;
};
并且在可调用着色器内部必须使用 ``callableDataInEXT`` 存储限定符声明传入的数据。

.. code:: glsl
layout(location = 0) callableDataInEXT rayLight cLight;
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,20 @@
* 2023/10/10 增加 ``光线与球体求交`` 章节
* 2023/10/10 增加 ``光线与轴对齐包围盒求交`` 章节
* 2023/10/10 增加 ``raytrace2.rchit`` 章节
* 2023/10/16 提供 ``Turbo`` 实现开源示例

`文献源`_

.. _文献源: https://github.com/nvpro-samples/vk_raytracing_tutorial_KHR/tree/master/ray_tracing_intersection#intersection-shader---tutorial

.. admonition:: Turbo 引擎中对该教程的实现示例
:class: note

``Turbo`` 引擎对该教程进行了实现,具体如下:

* `VulkanKHRRayTracingTestForIntersectionShader <https://github.com/FuXiii/Turbo/blob/dev/samples/VulkanKHRRayTracingTestForIntersectionShader.cpp>`_ :在 `NVIDIA Vulkan 光线追踪教程 <../NVIDIAVulkanRayTracingTutorial.html>`_ 基础实现。 ``示例视频(暂无,待补充)`` 。


.. _光线追踪教程: ../NVIDIAVulkanRayTracingTutorial.html

.. figure:: ../../../_static/intersection.png
Expand Down
Binary file added source/_static/callable.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit a87a1c7

Please sign in to comment.