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

Я пытаюсь создать шейдер для воспроизведения белого пластикового объекта с цветным светом внутри. Либо с полупрозрачным шейдером, и если я помещу свет внутрь объекта, свет будет просвечивать, либо с помощью шейдера, который имитирует эффект света внутри.

Эффект, к которому я стремлюсь, похож на свет, проходящий через абажур, как на этих картинках:

alt textальтернативный текст альтернативный текст

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

Хотя я не уверен, с чего начать!

Мой вопрос: знает ли кто-нибудь методы, которые я должен исследовать, чтобы иметь возможность создавать такой шейдер, или есть пример того же/похожего шейдера, который я могу использовать в качестве отправной точки? Или даже если вы хотите предоставить шейдер, который мог бы выполнять эту работу


person Tristan    schedule 08.09.2010    source источник
comment
Ну, я понятия не имею, как это сделать, но размещение изображения результата, который вы хотите, поможет, я думаю!   -  person Peter    schedule 08.09.2010
comment
Я слышал, что шейдер blinn может быть похож на то, что я ищу? но если да, то чем он отличается?   -  person Tristan    schedule 08.09.2010
comment
Затенение по Блинну — это более быстрое приближение к затенению по Фонгу, которое используется для зеркального отражения. Вы можете использовать это для поверхностных отражений в дополнение к чему-то еще, но Blinn сам по себе не даст вам рассеянного света, который вы ищете.   -  person LarsH    schedule 09.09.2010


Ответы (2)


Возможно, вы захотите изучить подповерхностное рассеяние, чтобы понять, как воссоздать такой эффект. Подповерхностное рассеяние важно для рендеринга реалистичной кожи, но в этом случае вы обычно имеете дело со светом перед полупрозрачным объектом или позади него, а не внутри него. Применяются те же основные принципы, но некоторые приемы и приемы, используемые для аппроксимации подповерхностного рассеяния в реальном времени, могут не работать в вашем случае.

person mattnewport    schedule 10.09.2010
comment
Это похоже на путь! Я посмотрел на несколько примеров подповерхностного рассеивания и думаю, что если немного поработать, то получится идеально! Спасибо - person Tristan; 10.09.2010

Милые фотографии. Похоже, тип полупрозрачного пластика, который вы используете, может иметь большое значение. Я вижу, что яркость пластика в каждой точке основана на угле между лучом, идущим от источника света в эту точку, и нормалью к поверхности в этой точке. (Угол просмотра не имеет значения.)

Когда вектор от внутреннего источника света к точке поверхности почти параллелен вектору нормали к поверхности, точка поверхности яркая; когда они почти перпендикулярны друг другу, точка поверхности темная. Поэтому попробуйте использовать скалярное произведение этих двух векторов. Не забудьте нормализовать.

Другими словами, это в основном диффузное отражение, за исключением того, что вы добавляете эффект внутренних источников света (проходящий) к эффекту внешних источников света (отраженный). См. Lambertian_reflectance в качестве отправной точки.

Вы также можете добавить немного зеркального отражения поверх этого.

Третье изображение более сложное: я думаю, оно показывает тени внутренних поверхностей на внешних.

person LarsH    schedule 08.09.2010