Skip to content

Commit 8a1ff4f

Browse files
committed
fragmentSphere
1 parent ae17de9 commit 8a1ff4f

File tree

3 files changed

+162
-3
lines changed

3 files changed

+162
-3
lines changed

packages/shadergradient-v2/src/ShaderGradient/Mesh/Mesh.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { Geometry } from './Geometry'
22
import { MeshT } from '@/types'
33
import { Materials } from './Materials'
4-
import { vertexShader, fragmentShader, vertexSphere } from '@/shaders/a'
4+
import {
5+
vertexShader,
6+
fragmentShader,
7+
vertexSphere,
8+
fragmentSphere,
9+
} from '@/shaders/a'
510
// import { vertexShader, fragmentShader } from '@/shaders/base'
611
import { dToRArr } from '@/utils'
712

@@ -49,7 +54,7 @@ export function Mesh({
4954
uIntensity: 0.5,
5055
}}
5156
vertexShader={type === 'sphere' ? vertexSphere : vertexShader}
52-
fragmentShader={fragmentShader}
57+
fragmentShader={type === 'sphere' ? fragmentSphere : fragmentShader}
5358
onInit={(material) => {
5459
console.log('material (onInit)', material)
5560
}}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
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+
}

packages/shadergradient-v2/src/shaders/a/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ import vertexShader from './vertex.glsl'
22
import fragmentShader from './fragment.glsl'
33

44
import vertexSphere from './vertexSphere.glsl'
5+
import fragmentSphere from './fragmentSphere.glsl'
56

6-
export { vertexShader, fragmentShader, vertexSphere }
7+
export { vertexShader, fragmentShader, vertexSphere, fragmentSphere }

0 commit comments

Comments
 (0)