다음을 통해 공유


모든 적중 셰이더

광선 교집합이 불투명하지 않을 때 호출되는 셰이더입니다.

적중 셰이더는 페이로드 매개 변수와 특성 매개 변수를 선언해야 합니다. 이러한 각 매개 변수는 TraceRayReportHit 에 각각 사용되는 사용자 정의 구조체 형식 일치 형식이거나 고정 함수 삼각형 교차를 사용할 때 교차 특성 구조체 여야 합니다.

적중 셰이더는 다음과 같은 종류의 작업을 수행할 수 있습니다.

  • 광선 페이로드 읽기 및 수정: (inout payload_t rayPayload)
  • 교차 특성 읽기: (attr_t 특성에서)
  • 현재 적중을 수락하고 적중 셰이더를 종료하고 교차 셰이더가 있는 경우 교차 셰이더를 종료하고 활성 상태인 경우 지금까지 가장 가까운 적중 시에 가장 가까운 적중 셰이더를 실행하는 AcceptHitAndEndSearch를 호출합니다.
  • IgnoreHit을 호출합니다. 이는 적중 셰이더를 종료하고 현재 실행 중인 경우 교차 셰이더로 컨트롤을 반환하는 것을 포함하여 적중 횟수 검색을 계속하도록 시스템에 지시하고 ReportHit* 호출 사이트에서 false를 반환합니다.
  • 현재 적중을 허용하고 교차 셰이더에 컨트롤을 반환하는 것을 포함하여 적중을 계속 검색하도록 시스템에 지시하는 이러한 내장 함수 중 하나를 호출하지 않고 반환하고 ReportHit 호출 사이트에서 true를 반환하여 적중이 수락되었음을 나타냅니다.

IgnoreHit 또는 AcceptHitAndEndSearch 의해 적중 셰이더 호출이 종료되더라도 지금까지 광선 페이로드를 수정한 내용은 계속 유지되어야 합니다.

셰이더 유형 특성

[shader("anyhit")]

예제

[shader("anyhit")]
void anyhit_main( inout MyPayload payload, in MyAttributes attr )
{
    float3 hitLocation = ObjectRayOrigin() + ObjectRayDirection() * RayTCurrent();
    float alpha = computeAlpha(hitLocation, attr, ...);

    // Processing shadow and only care if a hit is registered?
    if (TerminateShadowRay(alpha))
        AcceptHitAndEndSearch(); // aborts function

    // Save alpha contribution and ignoring hit?
    if (SaveAndIgnore(payload, RayTCurrent(), alpha, attr, ...))
        IgnoreHit(); // aborts function

    // do something else
    // return to accept and update closest hit
}