HLSL напівпрозорий пластиковий шейдер


12

Я намагаюся створити шейдер для відтворення білого пластикового предмета з кольоровим світлом всередині. Або маючи шейдер, який буде напівпрозорим, і якщо я покладу світло всередину об'єкта, то світло з’явиться наскрізь, або ж матиме шейдер, який підробляє ефект світла всередині.

Ефект, що їх відбувається, такий собі, як світло, що проходить через відтінок лампи, подібний до цих зображень:

alt текст alt текст alt текст

В ідеалі я міг би контролювати силу та колір світла, щоб він пульсував та обертався за допомогою декількох приємних яскравих флюрових кольорів

Хоча я не впевнений, з чого почати!

Моє запитання: чи хтось знає методи, які я повинен досліджувати, щоб мати змогу виготовити такий шейдер чи мати приклад того ж / подібного шейдера, який я можу використовувати як вихідний? Або навіть якщо ви хочете надати шейдер, який може зробити цю роботу

Відповіді:


10

Це ефект, відомий як "Розсіювання підповерхні".

У книзі "GPU Pro: Розширені методи візуалізації", яка підходить для використання в режимі реального часу, є приклад реалізації цього простору на екрані.


0

Я не знаю HLSL, тому я не можу дати точну відповідь. Що ви в основному можете зробити, це встановити колір кожного фрагмента залежно від відстані від джерела світла (ігноруючи будь-яке самозатінення).

У псевдокоді це було б приблизно так:

fragment_color = light_intensity * transparent_color * lightsource_color / (ослаблення * distance_to_lightsource ^ 2)

Ви також можете використовувати лінійний коефіцієнт загасання на додаток до квадрата, щоб світло більше поширювалося.


0

Чи потрібно світлу вміти рухатися, і чи повинен об'єкт вміти деформуватися / оживляти? Якщо жодного з цих випадків не відбувається, дешевим способом зробити це було б нанесення монохромної карти текстури на об’єкт, який діє як маска для світла; у шейдері ви зможете взяти на зразок цю текстуру, помножте її на поточний колір / силу світла та додайте до вихідного кольору.

Очевидним наступним питанням є те, як ви створите цю текстуру? Ви можете спробувати намалювати його, якщо у вас є доступ до художника або ви можете самостійно малювати текстури. Він також може бути виведений офлайн-інструментом, використовуючи Raytracing або щось подібне. Я недостатньо знайомий з інструментами променевого пошуку, щоб детально розповісти, як це налаштувати.

Іншим підходом може бути написання шейдера, який відбирає світло за ним, використовуючи нормальну повернуту поверхню в звичайному рівнянні Ламбертового дифузного затінення; тоді ви помножите його на деякий коефіцієнт маски, наприклад, 0,5 або близько того, і додасте до вихідного кольору. Це дозволить динамічно переміщувати світло або геометрію і не потребуватиме текстур, але, напевно, ви не отримаєте результатів настільки гарних, як офлайн-рендерінг.

Що стосується підповерхневого розсіювання: Я не думаю , що це саме те , що хотів тут , тому що всі алгоритми SSS для графіки , які я бачив призначені для світла , який виходить від зовні поверхні, відскакує навколо трохи і виходів знову - таки, в той час як тут світло всередині .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.