Что такое physicaly based shader?
| |
DantorS | Дата: Среда, 21 Мая 2014, 00:44 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| У меня несколько вопросов: 1. Что это такое? 2. Где их искать? 3. Поскольку я не понимаю что это (просто мне постоянно твердят - не используй стандартные шейдеры, используй physicaly based shader-ы) - вопрос такой: если у меня есть один physicaly based shader, и я решил его изменить добавив SSS или теселяцию, у меня останется physicaly based shader? Или мне искать какой-нибудь особый код тесселяции для шейдера?
|
|
| |
Xakep | Дата: Среда, 21 Мая 2014, 06:26 | Сообщение # 2 |
めちゃくちゃちゃ
Сейчас нет на сайте
| ты совсем чтоли не знаешь инглишь? зная школьную программу мог бы название перевести: physicaly based shader - это физически правильный шейдер, т.е. он выглядит почти как реальный. Это тот же самый шейдер, просто код реалистичный )
|
|
| |
DantorS | Дата: Среда, 21 Мая 2014, 06:46 | Сообщение # 3 |
заслуженный участник
Сейчас нет на сайте
| Мне нужен не транслит, а суть. Как его писать. Чем отличается от обычных
|
|
| |
Xakep | Дата: Среда, 21 Мая 2014, 07:04 | Сообщение # 4 |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата DantorS ( ) Мне нужен не транслит, а суть. Как его писать. Чем отличается от обычных самим кодом шейдера отличается, алгоритмами и формулами.
Добавлено (21.05.2014, 07:04) --------------------------------------------- пример: http://www.altdevblogaday.com/2011/08/23/shader-code-for-physically-based-lighting/
Сообщение отредактировал Xakep - Среда, 21 Мая 2014, 07:04 |
|
| |
DantorS | Дата: Среда, 21 Мая 2014, 07:42 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Я имею ввиду функционал. Чем они лучше? Добавлено (21.05.2014, 07:42) ---------------------------------------------
Цитата DantorS ( ) Поскольку я не понимаю что это (просто мне постоянно твердят - не используй стандартные шейдеры, используй physicaly based shader-ы) - вопрос такой: если у меня есть один physicaly based shader, и я решил его изменить добавив SSS или теселяцию, у меня останется physicaly based shader? Или мне искать какой-нибудь особый код тесселяции для шейдера?
Сообщение отредактировал DantorS - Среда, 21 Мая 2014, 07:37 |
|
| |
Xakep | Дата: Среда, 21 Мая 2014, 07:55 | Сообщение # 6 |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата DantorS ( ) Я имею ввиду функционал. Чем они лучше? они реалистичнее и все. Цитата DantorS ( ) Поскольку я не понимаю что это (просто мне постоянно твердят - не используй стандартные шейдеры, используй physicaly based shader-ы) - вопрос такой: если у меня есть один physicaly based shader, и я решил его изменить добавив SSS или теселяцию, у меня останется physicaly based shader? Или мне искать какой-нибудь особый код тесселяции для шейдера? SSS и так можно считать physicaly based shader, теселяция форму объекта меняет, на материале это не отражается, так что да остается. В основном physicaly based shader - это очень реалистичные материалы - металла, пластика, стекла итд.
Добавлено (21.05.2014, 07:55) --------------------------------------------- пример: http://research.tri-ace.com/detail_1.html
Сообщение отредактировал Xakep - Среда, 21 Мая 2014, 07:56 |
|
| |
DantorS | Дата: Среда, 21 Мая 2014, 08:04 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Я что то не понимаю...... Вот допустим есть два шейдера (physicaly based shader и не physicaly based shader). У них есть возможность ставить текстуры дифуз и нормал мап. Чем дифуз будет отличаться? Или нормал мап? Добавлено (21.05.2014, 08:04) --------------------------------------------- Кроме кода, алгоритма
|
|
| |
Xakep | Дата: Среда, 21 Мая 2014, 08:13 | Сообщение # 8 |
めちゃくちゃちゃ
Сейчас нет на сайте
| physicaly based shader и не physicaly based shader - это GLSL или HLSL или CG Shadars, все шейдеры отличаются только кодом внутри. Ничем не будет отличаться, в одном PBS шейдере могут быть ReflectionsMap, BumpMap, RoughnessMap, SpecularMap и много чего, все это по сложным формулам делает картинку более реалистичной, вот пример шейдера Diffuse на Unity: Код Shader "Custom/Physically Based Shading" { Properties { _Color ("Color",Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _Reflections ("Reflection Cubemap", CUBE) = "black" {} _BumpMap ("Normalmap", 2D) = "bump" {} _RoughnessMap ("Roughness Map", 2D) = "white" {} _SpecularMap ("Specular Map", 2D) = "white" {} _SpecularPower ("Specular Power", Range(1,255)) = 1 _Roughness ("Roughness",Range(0.01,1)) = 0.01 _SpecularColor ("Specular Color", Color) = (0,0,0,0) } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma target 3.0 // needed this otherwise worldRefl + INTERNAL_DATA would exceed texture interpolator limit #pragma glsl // needed this so I could sample cubemap mips directly #pragma surface surf Physical sampler2D _MainTex; samplerCUBE _Reflections; sampler2D _BumpMap; sampler2D _RoughnessMap; sampler2D _SpecularMap; float4 _Color; float _SpecularPower; float4 _SpecularColor; float _Roughness; struct Input { float2 uv_MainTex; float3 worldRefl; INTERNAL_DATA }; half4 LightingPhysical( SurfaceOutput s, half3 lightDir, half3 viewDir, half atten ) { // calculate diffuse term float n_dot_l = saturate( dot( s.Normal, lightDir ) * atten ); float3 diffuse = n_dot_l * _LightColor0.rgb; // calculate specular term float3 h = normalize( lightDir + viewDir ); float n_dot_h = saturate( dot( s.Normal, h ) ); float normalization_term = ( ( _SpecularPower * _Roughness ) + 2.0 ) / 8.0; float blinn_phong = pow( n_dot_h, _SpecularPower * _Roughness ); float specular_term = blinn_phong * normalization_term; float cosine_term = n_dot_l; float h_dot_l = dot( h, lightDir ); float base = 1.0 - h_dot_l; float exponential = pow( base, 5.0 ); float3 specColor = _SpecularColor.rgb * s.Gloss; float3 fresnel_term = specColor + ( 1.0 - specColor ) * exponential; float3 specular = specular_term * cosine_term * fresnel_term * _LightColor0.rgb; float3 final_output = s.Albedo * diffuse * ( 1 - fresnel_term ) + specular; return float4( final_output, 1 ); } void surf (Input IN, inout SurfaceOutput o) { float roughness = _Roughness * tex2D(_RoughnessMap,IN.uv_MainTex).r; float4 specularColor = _SpecularColor * tex2D(_SpecularMap,IN.uv_MainTex); half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb * _Color; o.Alpha = c.a; o.Gloss = roughness; o.Normal = UnpackNormal( tex2D(_BumpMap, IN.uv_MainTex) ); o.Emission = texCUBElod(_Reflections,float4(WorldReflectionVector(IN,o.Normal),(1-(roughness))*8)) * specularColor; } ENDCG } FallBack "Diffuse" }
|
|
| |
DantorS | Дата: Среда, 21 Мая 2014, 08:20 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Все советуют marmoset skyshop. Там physicaly based shader-ы? Или вообще есть ли какой-нибкдь ассет для physicaly based shader (нужно именно с sss). В skyshop есть
|
|
| |
Xakep | Дата: Среда, 21 Мая 2014, 08:49 | Сообщение # 10 |
めちゃくちゃちゃ
Сейчас нет на сайте
| Цитата DantorS ( ) Все советуют marmoset skyshop. Там physicaly based shader-ы? Или вообще есть ли какой-нибкдь ассет для physicaly based shader (нужно именно с sss). В skyshop есть ну если советуют бери, по описанию похоже что там PBS, в любом случае выглядит достаточно реалистично, этого должно быть достаточно ) советую PBS в основном из-за реалистичности картинки, производительность в таких шейдерах меньше, и требует более мощный компьютер.Добавлено (21.05.2014, 08:49) --------------------------------------------- либо дождись Unity 5, там из коробки поддержка PBS
|
|
| |
Antiminor | Дата: Суббота, 24 Мая 2014, 19:48 | Сообщение # 11 |
уже был
Сейчас нет на сайте
| DantorS, Вот, почитай, всё описано понятным языком. Часть 1 http://arttalk.ru/forum/viewtopic.php?t=10504 Часть 2 http://arttalk.ru/forum/viewtopic.php?p=174187
|
|
| |
|