|
| 1 | + |
| 2 | +#define STANDARD |
| 3 | +#ifdef PHYSICAL |
| 4 | +#define REFLECTIVITY |
| 5 | +#define CLEARCOAT |
| 6 | +#define TRANSMISSION |
| 7 | +#endif |
| 8 | +uniform vec3 diffuse; |
| 9 | +uniform vec3 emissive; |
| 10 | +uniform float roughness; |
| 11 | +uniform float metalness; |
| 12 | +uniform float opacity; |
| 13 | +#ifdef TRANSMISSION |
| 14 | +uniform float transmission; |
| 15 | +#endif |
| 16 | +#ifdef REFLECTIVITY |
| 17 | +uniform float reflectivity; |
| 18 | +#endif |
| 19 | +#ifdef CLEARCOAT |
| 20 | +uniform float clearcoat; |
| 21 | +uniform float clearcoatRoughness; |
| 22 | +#endif |
| 23 | +#ifdef USE_SHEEN |
| 24 | +uniform vec3 sheen; |
| 25 | +#endif |
| 26 | +varying vec3 vViewPosition; |
| 27 | +#ifndef FLAT_SHADED |
| 28 | +#ifdef USE_TANGENT |
| 29 | +varying vec3 vTangent; |
| 30 | +varying vec3 vBitangent; |
| 31 | +#endif |
| 32 | +#endif |
| 33 | +#include <alphamap_pars_fragment> |
| 34 | +#include <aomap_pars_fragment> |
| 35 | +#include <color_pars_fragment> |
| 36 | +#include <common> |
| 37 | +#include <dithering_pars_fragment> |
| 38 | +#include <emissivemap_pars_fragment> |
| 39 | +#include <lightmap_pars_fragment> |
| 40 | +#include <map_pars_fragment> |
| 41 | +#include <packing> |
| 42 | +#include <uv2_pars_fragment> |
| 43 | +#include <uv_pars_fragment> |
| 44 | +// #include <transmissionmap_pars_fragment> |
| 45 | +#include <bsdfs> |
| 46 | +#include <bumpmap_pars_fragment> |
| 47 | +#include <clearcoat_pars_fragment> |
| 48 | +#include <clipping_planes_pars_fragment> |
| 49 | +#include <cube_uv_reflection_fragment> |
| 50 | +#include <envmap_common_pars_fragment> |
| 51 | +#include <envmap_physical_pars_fragment> |
| 52 | +#include <fog_pars_fragment> |
| 53 | +#include <lights_pars_begin> |
| 54 | +#include <lights_physical_pars_fragment> |
| 55 | +#include <logdepthbuf_pars_fragment> |
| 56 | +#include <metalnessmap_pars_fragment> |
| 57 | +#include <normalmap_pars_fragment> |
| 58 | +#include <roughnessmap_pars_fragment> |
| 59 | +#include <shadowmap_pars_fragment> |
| 60 | +// include를 통해 가져온 값은 대부분 환경, 빛 등을 계산하기 위해서 기본 fragment |
| 61 | +// shader의 값들을 받아왔습니다. 일단은 무시하셔도 됩니다. |
| 62 | +varying vec3 vNormal; |
| 63 | +varying float displacement; |
| 64 | +varying vec3 vPos; |
| 65 | +varying float vDistort; |
| 66 | +uniform float uC1r; |
| 67 | +uniform float uC1g; |
| 68 | +uniform float uC1b; |
| 69 | +uniform float uC2r; |
| 70 | +uniform float uC2g; |
| 71 | +uniform float uC2b; |
| 72 | +uniform float uC3r; |
| 73 | +uniform float uC3g; |
| 74 | +uniform float uC3b; |
| 75 | +varying vec3 color1; |
| 76 | +varying vec3 color2; |
| 77 | +varying vec3 color3; |
| 78 | +varying float distanceToCenter; |
| 79 | + |
| 80 | + |
| 81 | +// for npm package, need to add this manually |
| 82 | +// 'linearToRelativeLuminance' : function already has a body |
| 83 | +float linearToRelativeLuminance2( const in vec3 color ) { |
| 84 | + vec3 weights = vec3( 0.2126, 0.7152, 0.0722 ); |
| 85 | + return dot( weights, color.rgb ); |
| 86 | +} |
| 87 | + |
| 88 | +void main() { |
| 89 | + //-------- basic gradient ------------ |
| 90 | + vec3 color1 = vec3(uC1r, uC1g, uC1b); |
| 91 | + vec3 color2 = vec3(uC2r, uC2g, uC2b); |
| 92 | + vec3 color3 = vec3(uC3r, uC3g, uC3b); |
| 93 | + float clearcoat = 1.0; |
| 94 | + float clearcoatRoughness = 0.5; |
| 95 | +#include <clipping_planes_fragment> |
| 96 | + |
| 97 | + float distanceToCenter = distance(vPos, vec3(0, 0, 0)); |
| 98 | + // distanceToCenter로 중심점과의 거리를 구함. |
| 99 | + |
| 100 | + vec4 diffuseColor = |
| 101 | + vec4(mix(color3, mix(color2, color1, smoothstep(-1.0, 1.0, vPos.y)), |
| 102 | + distanceToCenter), |
| 103 | + 1); |
| 104 | + |
| 105 | + //-------- materiality ------------ |
| 106 | + ReflectedLight reflectedLight = |
| 107 | + ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0)); |
| 108 | + vec3 totalEmissiveRadiance = emissive; |
| 109 | +#ifdef TRANSMISSION |
| 110 | + float totalTransmission = transmission; |
| 111 | +#endif |
| 112 | +#include <logdepthbuf_fragment> |
| 113 | +#include <map_fragment> |
| 114 | +#include <color_fragment> |
| 115 | +#include <alphamap_fragment> |
| 116 | +#include <alphatest_fragment> |
| 117 | +#include <roughnessmap_fragment> |
| 118 | +#include <metalnessmap_fragment> |
| 119 | +#include <normal_fragment_begin> |
| 120 | +#include <normal_fragment_maps> |
| 121 | +#include <clearcoat_normal_fragment_begin> |
| 122 | +#include <clearcoat_normal_fragment_maps> |
| 123 | +#include <emissivemap_fragment> |
| 124 | +// #include <transmissionmap_fragment> |
| 125 | +#include <lights_physical_fragment> |
| 126 | +#include <lights_fragment_begin> |
| 127 | +#include <lights_fragment_maps> |
| 128 | +#include <lights_fragment_end> |
| 129 | +#include <aomap_fragment> |
| 130 | + vec3 outgoingLight = |
| 131 | + reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + |
| 132 | + reflectedLight.directSpecular + reflectedLight.indirectSpecular; |
| 133 | +//위에서 정의한 diffuseColor에 환경이나 반사값들을 반영한 값. |
| 134 | +#ifdef TRANSMISSION |
| 135 | + diffuseColor.a *= |
| 136 | + mix(saturate(1. - totalTransmission + |
| 137 | + linearToRelativeLuminance2(reflectedLight.directSpecular + |
| 138 | + reflectedLight.indirectSpecular)), |
| 139 | + 1.0, metalness); |
| 140 | +#endif |
| 141 | + gl_FragColor = vec4(outgoingLight, diffuseColor.a); |
| 142 | + // gl_FragColor가 fragment shader를 통해 나타나는 최종값으로, diffuseColor에서 |
| 143 | + // 정의한 그라디언트 색상 위에 반사나 빛을 계산한 값을 최종값으로 정의. |
| 144 | + // gl_FragColor = vec4(mix(mix(color1, color3, smoothstep(-3.0, 3.0,vPos.x)), |
| 145 | + // color2, vNormal.z), 1.0); 위처럼 최종값을 그라디언트 값 자체를 넣으면 환경 |
| 146 | + // 영향없는 그라디언트만 표현됨. |
| 147 | + |
| 148 | +#include <tonemapping_fragment> |
| 149 | +#include <encodings_fragment> |
| 150 | +#include <fog_fragment> |
| 151 | +#include <premultiplied_alpha_fragment> |
| 152 | +#include <dithering_fragment> |
| 153 | +} |
0 commit comments