Size: a a a

Rust GameDev — русскоговорящее сообщество

2020 December 29

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Roman
Суть в том что мне нужно написать шейдер, который для луча и объекта найдет пересечение или его отсутствие
float depth = start;
for (int i = 0; i < MAX_MARCHING_STEPS; i++) {
   float dist = sceneSDF(eye + depth * viewRayDirection);
   if (dist < EPSILON) {
       // We're inside the scene surface!
       return depth;
   }
   // Move along the view ray
   depth += dist;

   if (depth >= end) {
       // Gone too far; give up
       return end;
   }
}
return end;

отсюда: http://jamie-wong.com/2016/07/15/ray-marching-signed-distance-functions/
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
В Вашем случае будет не sceneSDF, а objectSDF.
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Но как Вы в таком случае будете разруливать перекрытие одного объекта другим — я не знаю.
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Ещё Z-буфер поверх добавить?
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Intersection shader вызывается для всех потенциальный пересечений (есть пересечение с AABB). Потом берется ближайшее пересечение и для него вызывается closest-hit shader, если ни одного пересечения нет то miss shader
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Roman
Intersection shader вызывается для всех потенциальный пересечений (есть пересечение с AABB). Потом берется ближайшее пересечение и для него вызывается closest-hit shader, если ни одного пересечения нет то miss shader
Ну, тогда, видимо, problem solved: пихаете вон тот цикл в intersection shader, а дальше как обычно.
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Вопрос в том как мне написать функцию objectSDF
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Roman
Вопрос в том как мне написать функцию objectSDF
Это интересный вопрос, ага. А что на входе и какие ограничения/пожелания?
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Я как раз хотел узнать как лучше это делать и что давать на вход
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
RTX позволяет чуть ли не каждому объекту свой шейдер назначить
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
То есть возможно на входя прямо функцию эту иметь
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Но кто их все напишет?
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Roman
Но кто их все напишет?
А какие есть варианты? 😊
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Не знаю. Может есть какие-то инструменты
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Я вижу такие варианты:
1. все SDF по сути пишет автор движка, а пользователь выбирает из готовых (+ комбинирует комбинаторами)
2. пользователь сам пишет руками
3. пользователь задаёт некоторые параметры или описание, а движок автоматически генерирует по нему шейдер с SDF
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Roman
Не знаю. Может есть какие-то инструменты
Главный инструмент — каталог https://iquilezles.org/www/articles/distfunctions/distfunctions.htm 😃
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Полезная ссылка, спасибо
источник

AT

Alexander Tchitchigi... in Rust GameDev — русскоговорящее сообщество
Roman
Полезная ссылка, спасибо
Там рядом ещё много на эту тему, если что. 😉
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Да что же все за эти SDF вдруг взялись? :)
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Никто про них не говорил, и вот те раз!
источник