HLSL 반투명 플라스틱 쉐이더


12

내부에 착색 된 빛으로 흰색 플라스틱 물체를 복제하기 위해 쉐이더를 제작하려고합니다. 반투명하게 될 셰이더를 가짐으로써 물체에 빛을 넣으면 빛이 통과하거나 내부에 빛의 효과를 속이는 쉐이더가 나타납니다.

임 효과는 다음 그림과 유사한 램프 그늘을 통과하는 빛과 비슷합니다.

대체 텍스트 대체 텍스트 대체 텍스트

이상적으로는 빛의 강도와 색상을 제어하여 빛을 발산하고 멋진 밝은 형광색을 통해 회전시킬 수 있습니다.

어디서부터 시작해야할지 모르겠지만!

내 질문은 누구나 그러한 쉐이더를 생산할 수 있거나 내가 시작점으로 사용할 수있는 동일 / 유사한 쉐이더의 예를 가질 수 있도록 연구해야 할 기술을 알고 있습니까? 또는 작업을 수행 할 수있는 셰이더를 제공하려는 경우에도

답변:


10

이것은 "서브 표면 산란"으로 알려진 효과입니다.

"GPU Pro : Advanced Rendering Techniques"책에는 실시간 사용에 적합한 화면 공간 구현 예가 있습니다.


0

HLSL을 모르므로 정확한 답변을 드릴 수 없습니다. 기본적으로 할 수있는 일은 광원과의 거리에 따라 각 조각의 색상을 설정하는 것입니다 (자체 섀도 잉 무시).

의사 코드에서는 다음과 같습니다.

fragment_color = light_intensity * 투명도 _color * lightsource_color / (감쇠 * distance_to_lightsource ^ 2)

빛이 더 넓게 퍼지도록 제곱에 추가하여 선형 감쇠 계수를 사용할 수도 있습니다.


0

라이트를 움직일 수 있어야하고, 오브젝트를 변형 / 애니메이션 할 수 있어야합니까? 둘 중 어느 경우에도 해당되지 않는 경우, 가장 저렴한 방법은 빛의 마스크 역할을하는 오브젝트에 단색 텍스처 맵을 적용하는 것입니다. 셰이더에서이 텍스처를 샘플링하고, 현재 밝은 색상 / 강도를 곱하고 출력 색상에 추가합니다.

명백한 후속 질문은이 텍스처를 어떻게 생성 할 것인가입니다. 아티스트에게 접근 할 수 있거나 직접 텍스처를 페인트 할 수 있다면 페인팅을 시도 할 수 있습니다. 레이트 레이싱 등을 사용하여 오프라인 도구로 렌더링 할 수도 있습니다. 그래도 설정 방법을 자세하게 알려주는 레이트 레이싱 도구에 익숙하지 않습니다.

다른 접근 방식은 일반적인 Lambert 확산 쉐이딩 방정식에서 반전 된 표면 법선을 사용하여 뒤에있는 빛을 샘플링하는 쉐이더를 작성하는 것입니다. 그런 다음 0.5 정도의 마스크 팩터를 곱하고 출력 색상에 추가하십시오. 이렇게하면 조명이나 지오메트리를 동적으로 이동할 수 있으며 텍스처가 필요하지 않지만 오프라인 렌더링처럼보기에는 좋지 않습니다.

서브 서피스 산란에 관하여 : 필자가 본 그래픽에 대한 모든 SSS 알고리즘 은 표면 외부 에서 나오는 빛을 위해 설계되었으며 , 약간 튀어 나오고 다시 나오고, 여기서 빛은 내부에 있기 때문에 여기에서 정확히 원하는 것은 아닙니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.