요약 및 트렌스크립트 정리
YouTube 추출기 | 무료앱 | Mazeline
YouTube URL만 입력하면 영상과 자막을 일괄 추출하고, 내장 AI로 요약·번역·Q&A까지 한 번에 처리하는 Windows 데스크톱 도구입니다.
mazeline.tech
이 발표는 Slang이라는 셰이딩 언어 및 컴파일러를 소개하며, 이것이 그래픽스(Graphics)와 머신러닝(Machine Learning) 분야의 격차를 해소하는 방법을 설명합니다.
1. 배경 및 문제점:
* 신경 그래픽스(Neural Graphics)는 렌더링의 미래를 바꾸고 있으며, AI를 활용한 기술(예: DLSS)이 발전하고 있습니다.
* 하지만 현재의 기술 발전은 고립된 연구 프로젝트에 머물러 있어, 그래픽스 프로그래머들이 최신 ML 기법을 사용하려면 ML 전문가가 되어야 하는 어려움이 있습니다.
* ML 연구는 주로 Python(PyTorch, JAX 등) 환경에서 이루어지며, 그래픽스 개발은 C++와 셰이딩 언어(Vulkan, DirectX 등)를 사용합니다. 이 생태계적 분리가 개발자들에게 큰 마찰을 일으킵니다.
2. Slang의 역할:
* Slang은 셰이딩 언어이자 컴파일러로, 개발자가 코드를 한 번 작성하면 DirectX(HLSL), Vulkan(SPIR-V), OpenGL(GLSL), CUDA 등 여러 그래픽 API와 컴퓨팅 플랫폼을 대상으로 코드를 생성할 수 있게 합니다.
* 이는 개발자가 코드를 한 번 작성하고 어디서든 배포할 수 있게 하며, 기존 GLSL/HLSL 사용자에게도 마이그레이션이 쉽습니다.
* Slang은 Khronos의 일부가 되어 표준화되고 있으며, 커뮤니티가 활발하게 성장하고 있습니다.
3. SlangPike를 통한 브릿지 구축:
* SlangPike는 Slang을 Python ML 생태계와 쉽게 통합하여, ML 워크플로우 전체를 그래픽스 스택으로 옮길 필요 없이 양쪽의 장점을 결합합니다.
* 자동 미분(Automatic Differentiation) 기능이 이 브릿지의 핵심입니다. 이 기능을 통해 그래픽스 함수(BRDF 계산, 조명 계산 등)가 자동으로 훈련 가능(trainable)해집니다.
* 활용 예시 (신경 텍스처 최적화): 전통적인 방식으로는 비선형 데이터(법선, 거칠기 등)의 다운샘플링 시 아티팩트가 발생하기 쉽습니다. Slang을 사용하면, 렌더링에 사용되는 것과 동일한 코드를 사용하여 자동 미분을 통해 최적의 MIP 맵 레벨을 계산하고 텍스처를 개선할 수 있습니다.
결론: Slang은 그래픽스 코드에 ML의 강력한 최적화 능력을 통합하여, 실시간 렌더링 분야에서 ML 기술을 모든 개발자가 쉽게 접근할 수 있도록 만듭니다.
자, 안녕하세요 여러분. 저는 섀넌입니다.
제프가 언급했듯이, 저는 엔비디아에 있습니다.
저는 또한 크로노스에서 최근에 만들어진 슬랭 워킹 그룹의 실무 그룹 의장입니다. 그리고 오늘 저는 슬랭과 이것이 그래픽스 및 머신러닝 생태계 간의 격차를 어떻게 메우는지에 대해 말씀드리려고 합니다.
신경 그래픽스는 렌더링의 미래를 변화시키고 있습니다. 우리는 신경망이 재료를 표현하는 방식을 혁신하는 것을 목격하고 있으며, 이는 수작업으로 코딩하기 어렵고 렌더링 비용이 많이 드는 복잡한 표면 거동을 학습합니다.
신경 텍스처 압축은 기존 저장 비용의 일부만으로 놀라운 품질을 달성하고 있습니다. 그리고 DLSS와 같은 기술은 애초에 렌더링되지 않았던 고품질 픽셀을 생성하는 데 AI를 사용하고 있으며, 이는 불과 몇 년 전만 해도 불가능해 보였던 성능 향상을 제공합니다.
하지만, 여기에 과제가 있습니다. 많은 획기적인 발전이 고립된 연구 프로젝트에서 일어나고 있으며, 종종 기존 그래픽스 파이프라인과 잘 통합되지 않는 전문 머신러닝 프레임워크를 필요로 합니다. 따라서 그래픽스 프로그래머들은 이러한 기술을 실험하기 위해서만 ML 전문가가 되어야 하는 상황에 놓이게 됩니다. 그렇다면 우리가 신경 그래픽스의 힘을 평균적인 그래픽스 개발자의 손에 직접 가져올 수 있다면 어떨까요? 오늘날 셰이더를 작성하는 것처럼 미분 가능한 그래픽스 코드를 작성할 수 있다면 어떨까요?
그것이 바로 슬랭이 가능하게 하는 것입니다. 그래서 오늘 저는 슬랭이 어떻게 그래픽스와 머신러닝 사이의 격차를 메우고, 실시간 렌더링에 종사하는 모든 사람에게 신경 그래픽스를 접근 가능하게 하는지 보여드리겠습니다.
그럼 슬랭이 무엇일까요? 근본적으로 슬랭은 셰이딩 언어이자 컴파일러로, 작성한 코드를 받아 여러 그래픽 API 및 컴퓨팅 플랫폼을 대상으로 할 수 있습니다. 즉, 슬랭으로 셰이더를 한 번 작성하면 컴파일러가 DirectX용 HLSL, Vulkan용 SPIR-V 또는 GLSL, 엔비디아 컴퓨팅 작업을 하는 경우 CUDA를 생성하며, 심지어 CPU 코드까지 생성할 수 있습니다. 따라서 그래픽스 코드를 한 번 작성하고 모든 곳에 배포할 수 있다는 의미입니다. 이미 GLSL이나 HLSL을 사용하던 개발자들에게 슬랭은 기존 코드를 마이그레이션할 수 있는 쉬운 진입점을 제공하여 처음부터 시작할 필요가 없습니다. 대부분의 GLSL과 HLSL은 수정 없이 컴파일됩니다.
더 좋은 점은 슬랭이 이제 Vulkan, OpenGL 및 기타 그래픽 API의 표준화 기구인 크로노스의 일부가 되었다는 것입니다.
이는 모든 기술 개발과 논의를 완전히 오픈 소스로 진행하면서도 다중 회사 거버넌스를 가능하게 합니다.
그래서 저희 개발자 커뮤니티가 번창하고 있습니다. 현재 4,000개가 넘는 GitHub 스타를 보유하고 있으며 계속 증가하고 있습니다. 이 점에 있어서는 동료 셰이더 컴파일러들을 능가했습니다.
그리고 이 편리한 QR 코드로 참여할 수 있는 디스코드에서는 700명이 넘는 멤버가 있습니다.
그리고 그 디스코드에서 매일 활동하는 개발자들을 찾을 수 있습니다. 그래서 질문을 하고 슬랭 팀 및 커뮤니티 멤버들로부터 답변을 받을 수 있는 지원 채널이 있습니다.
개발자들은 토론에 참여하거나, 언어 변경에 대한 제안을 하거나, 작업 중인 무언가의 구현 세부 사항에 대해 논의할 수 있습니다. 저희 개발 채널에서 말이죠. 커뮤니티는 여전히 매우 빠르게 성장하고 있습니다. 슬랭이 엔비디아 프로젝트로 시작되었지만, 지난 6개월 동안 50명이 넘는 기여자 중 절반 이상은 엔비디아 외부 출신이며, 언어 기능 제안과 언어 로드맵에 미치는 영향도 포함됩니다.
따라서 커뮤니티에 참여하고 슬랭을 시작하는 것이 정말 쉽습니다. 심지어 브라우저 창에서 슬랭을 사용해보고 렌더링 결과를 볼 수 있는 웹 플레이그라운드도 있습니다. 뿐만 아니라, 저희 플레이그라운드는 슬랭의 언어 서버를 사용하여 페이지에서 인텔리센스 같은 지원을 제공합니다. 그리고 저희는 누구나 즉시 슬랭 사용을 시작할 수 있도록 문서, 튜토리얼 및 온보딩 자료를 지속적으로 확장해 왔습니다.
좋습니다. 이제 슬랭이 그래픽스와 머신러닝 세계 사이에 다리를 놓는다는 것이 무슨 의미인지 보여드리겠습니다.
머신러닝과 그래픽스 분야의 발전은 완전히 다른 생태계를 구축했습니다. ML 연구원과 실무자들은 PyTorch, JAX, TensorFlow와 같은 프레임워크를 사용하여 Python 환경에서 작업합니다. 반면, 그래픽스 개발자들은 일반적으로 C++와 셰이딩 언어를 사용하여 Vulkan이나 DirectX 같은 API와 인터페이스하며, 코드를 GPU에서 매우 빠르게 실행하는 데 중점을 둡니다. 따라서 이러한 생태계의 분리는 양쪽 분야의 기술과 프레임워크를 모두 사용하려는 개발자들에게 실제적인 마찰을 일으킵니다. 물론 전체 ML 워크플로우를 그래픽스 스택으로 옮기려고 시도할 수는 있지만, 솔직히 말해 그래픽스 툴체인은 ML 개발에 필요한 빠른 실험을 위해 설계되지 않았습니다. 아무도 간단한 아이디어를 테스트하기 위해 수십 페이지에 달하는 C++의 반복적인 코드를 작성하고 싶어 하지 않습니다.
그리고 Python ML 세계에 존재하는 모든 협업 인프라를 재구축하는 것은 엄청난 작업이 될 것입니다.
반대 방향으로 가는 것도 마찬가지로 어렵습니다. 아시다시피 그래픽스 코드는 레이가 어떤 표면에 부딪히는지와 같은 런타임 조건에 따라 스레드별로 극적으로 달라지는 세밀한 제어 흐름이 필요합니다. 기존의 ML 프레임워크는 이러한 동적인 스레드별 분기 처리를 위해 만들어지지 않았습니다.
그래서 저희는 이 두 생태계 간의 다리 역할을 하는 SlangPike를 만들었습니다. 한쪽 세계가 다른 쪽의 도구에 맞추도록 강요하기보다는, SlangPike는 성능이 중요한 그래픽스 코드를 Slang으로 작성하면서도, 이미 알고 있을 수 있는 Python ML 생태계와 쉽게 통합할 수 있도록 해줍니다.
간단한 pip install만으로 Python에서 Slang에 직접 접근할 수 있으며, 원하는 경우 PyTorch와 같은 ML 프레임워크와 직접 통합할 수 있어 일반적인 통합 복잡성이 없습니다. 따라서 이 다리는 양방향입니다. 머신러닝 기술을 그래픽스 코드에 적용하기가 더 쉬울 뿐만 아니라, ML 전문가들이 렌더링에서 실시간 성능을 달성하기도 더 쉬워집니다.
그리고 자동 미분(automatic differentiation)이 이 다리의 원동력입니다.
근본적으로 자동 미분은 컴퓨터가 수학 함수의 정확한 도함수를 자동으로 계산할 수 있게 해주는 기술입니다. 예를 들어 복잡한 조명 계산과 같은 함수를 작성할 때, 자동 미분은 원래 함수의 입력 변수 각각에 대한 기울기를 계산하는 또 다른 함수를 기계적으로 생성할 수 있습니다. 이것이 신경 그래픽스에 왜 중요한지 아는 것이 중요합니다. 거의 모든 신경망 기술은 최적화를 필요로 합니다. 신경 BRDF를 훈련시키든, 텍스처 매개변수를 최적화하든, 재질 표현을 학습시키든, 경사 하강법 기반 최적화 알고리즘을 구동하기 위해 기울기가 필요합니다. 이 알고리즘들은 매개변수를 반복적으로 조정하여 목표에 더 가까워지도록 하지만, 어느 방향으로 가야 할지 알려주는 기울기가 필요합니다.
기존 워크플로우에서는 이러한 기울기를 얻으려면, 번거롭고 오류가 발생하기 쉬하며 변경 사항이 생길 때 유지 관리가 어려운 코드를 직접 작성하거나, 그래픽스 코드와 잘 통합되지 않는 별도의 ML 프레임워크를 사용해야 했습니다.
Slang에서의 자동 미분은 모든 것을 바꿉니다. 이는 작성하는 모든 그래픽스 함수가 자동으로 훈련 가능해진다는 것을 의미합니다. BRDF 함수, 다른 조명 계산, 텍스처 샘플링 등 모든 것이 추가적인 큰 작업 없이 경사 하강 최적화 프로세스의 일부가 됩니다.
그래서 Slang이 무엇을 할 수 있는지 보여주는 작은 실용적인 예시, 즉 신경 텍스처 최적화에 대해 보여드리겠습니다. 여러분은 아마도 에일리어싱과 단순한 색상 텍스처의 성능 문제를 해결하기 위해 도입된 미핑(mipmapping)의 단점에 익숙할 것입니다. 하지만 물리 기반 렌더링 시대에는 훨씬 더 복잡해집니다. 색상뿐만 아니라 물리적 속성을 설명하는 법선 벡터나 재질 거칠기 값 같은 비선형 데이터는 다운샘플링하기가 훨씬 더 까다롭습니다.
색상 데이터에 사용하는 것과 동일한 기술을 사용하면 이 이미지에서 볼 수 있는 반짝임과 같은 시각적 아티팩트가 발생합니다. 이 문제를 해결하기 위해 간단한 휴리스틱부터 복잡한 통계 필터까지 다양한 기술이 개발되었지만, 흥미롭게도 간단한 대안은 기울기 하강법을 사용하여 이 비색상 데이터에 대한 최적의 미평면 맵(mipmap) 레벨을 훈련하는 것입니다.
일반적인 PBR 패러다임에서는 빛에 대한 정보와 물리적 재질에 대한 정보(여기서는 색상, 법선, 거칠기 맵으로 표현됨)에 대한 수학 계산을 많이 수행하여 모든 픽셀의 색상을 계산할 수 있습니다. 따라서 이 모든 것을 조명 계산에 넣으면 음영 처리된 이미지가 나옵니다. 이것을 전체 해상도로 렌더링한 다음 결과 픽셀 색상을 다운샘플링하면 이론적으로 완벽한 미평면 맵 이미지를 얻게 됩니다. 하지만 미평면 맵을 사용하는 이유는 화면에서 차지하는 부분이 많지 않은 것에 대해 많은 수학 계산을 수행하는 것을 피하기 위해서이므로, 모든 수학 계산을 전체 해상도에서 수행하고 싶지 않은 것입니다.
안타깝게도 간단한 박스 필터는 색상 맵의 크기를 줄이는 데 효과적이지만, 앞서 언급한 비선형 데이터인 법선 및 거칠기 맵에 동일한 것을 적용하면 마지막 슬라이드의 것과 같은 깜박이는 혼란으로 변하는 노이즈가 발생합니다.
따라서 우리가 알아내야 할 것은, 더 작은 텍스처로부터 이론적으로 완벽한 결과를 얻으려면 더 작은 미평면 레벨 내부의 값들이 무엇이 되어야 하는가입니다. 그리고 바로 그 지점에서 자동 미분(automatic differentiation)을 사용하여 우리에게 질문에 대한 답을 얻을 수 있습니다.
슬랭(Slang) 관점에서 멋진 점 중 하나는 여러 목적에 동일한 코드를 사용할 수 있다는 것입니다. 따라서 재질 속성 값 세트에 저장된 BRDF를 계산하기 위해 다른 모든 셰이딩 언어에서 하듯이 슬랭에서 렌더링 코드를 작성하고 렌더링 중에 사용할 수 있습니다.
하지만 여기서 주목해야 할 또 다른 점은 이것이 미분 가능한 어노테이션을 가진다는 것입니다. 이 어노테이션은 슬랭에게 이 함수가 렌더링과 자동 미분 모두에 사용될 수 있음을 알려줍니다.
따라서 렌더링할 때는 이 함수를 호출하여 돌 재질을 렌더링합니다. 하지만 역전파 모드(reverse mode)로 호출하여 기울기를 자동으로 계산할 수도 있습니다. 이것이 핵심 통찰입니다.
이미지를 렌더링하는 것과 동일한 조명 수학이 훈련의 일부로 텍스처를 개선하는 데도 도움이 될 수 있습니다.
슬랭 파이(Slang Pi)에서 코드를 표준 순방향 방식으로 호출하는 것은 꽤 간단합니다. 이 기본적인 파이썬 앱은 단순히 창을 만들고, 슬랭 셰이더와 알베도, 법선, 거칠기 데이터를 포함하는 텍스처 파일을 로드한 다음, 최종 픽셀 값을 계산하고 화면에 블릿(blit)하기 위해 방금 본 렌더 함수를 호출합니다. 따라서 이것은 실제로 텍스처를 화면에 그리는 파이썬 앱의 전체 코드입니다.
하지만 미평면 맵은 어떻게 얻을까요? 이전에 이상적인 미평면 맵은 전체 해상도 PBR 계산을 수행한 다음 결과를 다운샘플링하여 얻는 결과일 것이라고 언급했습니다. 그리고 그 결과를 얻으려면 그 자리에서 다운샘플링을 수행합니다.
이것은 미평면 레벨 2만 계산할 것입니다.
하지만 훨씬 더 비용 효율적인 경로는 말씀드린 것처럼 입력 텍스처를 다운샘플링하여 수학 계산을 1/16의 픽셀에 대해서만 수행하는 것입니다. 이를 위해 대신 입력 텍스처를 다음과 같이 다운샘플링합니다.
그리고 이제 여기에 자동 미분과 기울기 하강법을 적용하여 입력 텍스처가 무엇이어야 하는지 알아낼 차례입니다.
손실, 즉 우리가 계산한 값과 우리가 얻기를 원하는 값의 차이를 계산할 수 있다면, 미분 전파를 사용하여 기울기를 계산하고 이상적인 값으로 반복할 수 있습니다. 그래서 우리가 여기서 하는 것이 바로 그것입니다. 그리고 손실 계산이 우리가 렌더링 코드에서 사용하는 것과 동일한 렌더 함수를 직접 호출한다는 점에 주목하세요. 아래 이미지들에서 훈련 중간 과정의 색상 맵과 이상적인 값으로부터의 손실을 나타내는 이미지를 볼 수 있습니다. 따라서 밝은 픽셀의 작은 영역들은 해당 부분이 가져야 할 값과 비교했을 때 상당한 손실을 가지고 있다는 것을 의미합니다.
그리고 우리가 다운샘플 텍스처를 멋지게 훈련시키기 위해 해야 할 마지막 일은 역전파를 수행하는 것입니다. 따라서 전문 용어 없이 말하자면, 여기에 필요한 것은 함수를 역방향으로 수동으로 유도하는 것이며, 제가 방금 함수 호출로 간단히 나타낸 모든 멋진 BRDF 수학에 대해서도 마찬가지입니다. 그래서 모든 것을 작성할 필요가 없습니다.
Slang을 사용하면 이것은 단순히 {dot} bwdf를 사용하여 손실 계산 함수를 역방향으로 호출하는 것만큼 간단해집니다.
컴파일러가 함수에 대한 미분 형태를 자동으로 생성해 주거나, 여러 함수를 조합한 경우 전체 함수 스택을 생성해 줍니다. 그리고 역전파를 수행합니다. 따라서 결과적으로 손실을 줄이기 위해 텐서 내의 관련 값들이 어떻게 변경되어야 하는지를 나타내는 기울기를 가진 훈련된 텐서들을 얻게 됩니다. 따라서 루프를 실행하는 것만큼 간단하게 이 과정을 반복하여 손실을 최소화할 수 있습니다.
따라서 여기 GIF에서 볼 수 있듯이, 이것은 실제로 노멀 맵의 훈련입니다. 처음에 매우 빠르게 수렴하는 것처럼 보이지만, 시간이 지남에 따라 더 좋아지는 것을 지켜보세요.
따라서 이 알려진 텍스처는 의도적으로 간단하며, 기본적인 재질에 대해 노멀 맵과 러프니스 맵만 훈련한 것입니다. 그리고 이것은 단일 조명 방향에서만 나왔으므로, 빛을 사방으로 옮기는 것만큼 반드시 유용하지는 않습니다. 그러나 이 접근 방식의 진정한 힘은 훨씬 더 복잡한 시나리오를 고려할 때 명확해집니다. 예를 들어, 여러 개의 클리어 코트 층, 표면 산란, 금속성 플레이크가 있는 자동차 페인트처럼 여러 층을 가진 재질이나, 복잡한 섬유 상호 작용을 가진 직물, 또는 여러 산란 층을 가진 피부와 같은 재질을 표현하려고 한다고 상상해 보세요.
이러한 재질들은 너무 복잡해서 기존의 접근 방식으로는 실시간으로 구현하는 것이 불가능했던 경우가 많습니다.
하지만 Slang의 미분 가능 프로그래밍은 우리가 방금 본 것과 동일한 기본 접근 방식을 사용하여 이러한 매우 복잡한 재질을 최적으로 표현하는 방법을 학습할 수 있게 해줍니다.
따라서 측정된 데이터로부터 복잡한 재질 거동을 학습하고 싶다면, 동일한 접근 방식을 사용하세요.
복잡한 렌더링 효과를 최적화하고 싶다면, 동일한 접근 방식을 사용하세요. 수동으로 코딩하기 거의 불가능할 텐서 표현을 훈련시키고 싶다면, 동일한 접근 방식을 사용하세요.
이것이 Slang의 비전을 매우 매력적으로 만드는 것입니다. 간단한 텍스처 최적화부터 완전히 새로운 방식으로 복잡한 재질과 렌더링 효과를 표현하는 것까지, 미분 가능 프로그래밍의 힘을 그래픽 개발자들에게 가져다줍니다. 따라서 머신러닝 전문가가 될 필요가 없습니다. 그래픽 코드를 작성하기만 하면 시스템이 최적화를 처리합니다.
이것이 프로그래밍 가능한 그래픽의 미래이며, Slang에서 오늘날 이용 가능합니다.
요약하자면, 신경 그래픽 기술은 실시간 렌더링에서 가능한 것들을 변화시키고 있지만, 지금까지는 이러한 기술을 구현하기 위해 ML 전문 지식과 기존 그래픽 파이프라인과 잘 통합되지 않는 프레임워크라는 근본적인 장벽이 있었습니다.
슬랭이 방정식을 바꿉니다. 셰이딩 언어에 자동 미분 기능이 내장되어 있어 작성하는 모든 그래픽 함수가 학습 가능해집니다. 크로스 플랫폼 컴파일 덕분에 한 번 작성하면 어디서든 배포할 수 있으며, 슬랭 파이는 풍부한 파이썬 ML 생태계와의 격차를 해소하여, 적절한 셰이딩 언어로 성능이 중요한 코드를 작성하면서도 PyTorch 같은 도구를 활용할 수 있게 해줍니다.
이번에는 미평면(mipmaps)에 대한 신경망 텍스처 최적화로 이를 시연했습니다. 이는 렌더링에 사용되는 것과 동일한 조명 코드가 자동으로 훈련 과정의 일부가 되는 실질적인 문제입니다. 수동적인 기울기 직접 유도 과정도 없고, 별도의 ML 프레임워크 통합도 필요 없습니다. 단지 함수를 미분 가능하다고 표시하기만 하면 됩니다.
하지만 이것은 시작에 불과합니다. 신경 그래픽 기술이 주류가 되면서, 슬랭은 그래픽 개발자들이 ML 전문가가 될 필요 없이 이 혁명에 참여할 수 있는 기반을 제공합니다.
렌더링의 미래는 신경망 기반이며, 슬랭과 함께라면 모든 사람이 접근할 수 있는 미래입니다.
이상으로 마치겠습니다. 슬랭에 대해 궁금한 점이 있으시면 기꺼이 답변드리겠습니다.
[박수].
정말 감사합니다. 청중분들 중 질문 있으신가요? 네.
훌륭한 발표 감사합니다. 슬랭을 트라이톤(Triton)과 같은 더 낮은 수준의 언어와 통합할 계획이 있으신가요?
제가 개인적으로 고려한 부분은 아닙니다.
저희의 주요 언어 설계자들에게 물어보시면 더 흥미로운 답변을 얻을 수 있을 겁니다.
영과 테스가 디스코드에서 주로 활동하니, 그들에게 직접 물어보실 수 있습니다.
슬랭이 현재 추론(inference)에 더 많이 사용되나요, 아니면 훈련에 더 많이 사용되나요? 실시간 렌더링과 관련해서요.
슬랭의 핵심적인 유용한 점 중 하나는 두 곳 모두에서 동일한 코드를 사용한다는 것입니다.
그래서 어느 한쪽에 더 많이 사용된다고 말하기는 어렵습니다.
물론 자동 미분을 전혀 사용하지 않는 애플리케이션도 많이 있지만요. 기술적으로는 렌더링에 더 많이 사용된다고 할 수 있겠습니다.
감사합니다.
마커스 씨 이야기입니다. 몇 년 전 제가 이 분야에 대해 좀 순진했을 때가 있었습니다.
어떤 데모를 보고, 제가 예전에 FXAA 같은 안티앨리어싱을 했던 것 같은, 아주 오래된 셰이더를 최적화할 수 있을까 궁금했습니다.
그래서 JAX로 작성하기 시작했죠.
그리고 금방 깨달았습니다. 샘플링을 작성하는 것이 전혀 간단하지 않다는 것을요. >> [웃음] >> 그래서 좀 실망했고, 괜찮다고 생각했습니다. 오늘날이라면 어떻게 작성해야 할지 알겠지만, 제 질문은 이것이 모든 것을 미분하는지, 아니면 제어 흐름이나 일부 샘플링 모드처럼 미분 불가능한 구조가 있는지, 아니면 미분화에 어떤 제약이 있는지 하는 것이었습니다.
수학적으로 미분 가능한 것이라면 모두 미분 가능해야 한다고 생각합니다. 동적 제어 흐름이나 복잡한 제어 흐름도 처리합니다. 그러니 모두 괜찮습니다. 물론 정수는 미분할 수 없지만, 수학적으로 본질적으로 미분 불가능한 것들은 있지만, 복잡한 제어 흐름과 동적 디스패치는 문제가 되지 않습니다.
하지만 저는 심지어 이방성 샘플러나 경계 같은 것들도 처리된다고 생각합니다. 그게 정말 큰 부분이니까요.
그러니까 '모든 것이 처리된다'고 말하며 제가 너무 나갔다고 생각하고 싶지는 않습니다. 하지만 제가 알고 있는 일반적인 전통 그래픽 분야에서 미분 불가능한 영역은 없습니다.
멋지네요.
감사합니다.
다른 질문 있으신가요?
네.
감사합니다. 좋은 발표였습니다. 자동 미분과 관련하여 질문이 있습니다.
특히 어디서나 사용되는 누출 ReLU(leaky ReLU)와 같은 함수에 관한 것입니다.
한 줄짜리 식이지만, 0 지점에서 불연속점 때문에 기술적으로는 미분 가능하지 않습니다. 그럼 슬랭은 그걸 어떻게 처리할까요? 거의 미분 가능해서 무시하고 0을 반환해서 그냥 작동하게 만들 수 있는 정도예요.
그리고 이게 어디서나 사용되고 많은 함수가 그런 식으로, 실제로는 미분 불가능하지만 1을 반환하면 그냥 작동하는 경우들이 많잖아요.
그럼 이건 어떻게 처리되나요?
아, 컴파일러가 그런 상황을 어떻게 감지하는지에 대한 구체적인 내용은 잘 모르겠습니다. 음, 하지만 꽤 흔한 경우는 감지되고, 아시다시피 미분 불가능하다고 표시될 수 있다고 확신합니다.
컴파일러를 멈추게 할 방법들이 있습니다.
어쨌든 그런 경우에 유용한 오류 정보를 제공하기 위해 최선을 다하고 있습니다. 하지만 자동 미분기가 정확히 어떻게 작동하는지에 대한 내부 구조는 저에게는 때때로 좀 난해합니다. 하지만 처음에 구현한 분들이 디스코드에 계시니 더 복잡한 질문에 답해 주실 수 있을 겁니다.
좋습니다. 챈들러에게 다시 한번 감사드립니다.
[박수].
감사합니다.
'TECH.ART.FLOW.IO' 카테고리의 다른 글
| [공유] 반다이남코 TrueHDRI 연구 (0) | 2026.07.09 |
|---|---|
| [공유] ScreenSpace Raymarched Decal Light fo UE5 (0) | 2026.07.09 |
| [공유] [EGSR 2026] Frequency-Aware Spatio-Angular Gaussians for Efficient Global Illumination Precomputation and Real-Time Rendering (0) | 2026.07.09 |
| [번역] 고급 API 성능: 셰이더 (1) | 2026.07.09 |
| [번역] UE5.8 Lumen Lite에서 DDGI까지 — 디버그 기능으로 살펴본 Lumen Lite (1) | 2026.07.08 |