Пятница, 22 Ноября 2024, 18:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Что такое 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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг