diff --git a/src/apps/canvas/structure-view.ts b/src/apps/canvas/structure-view.ts index 3b4658514a82a258c73edc8f7f15dacfef6b3dd1..dce28b08646960608f900b5a4ec2ba84edef3886 100644 --- a/src/apps/canvas/structure-view.ts +++ b/src/apps/canvas/structure-view.ts @@ -70,7 +70,7 @@ export async function StructureView(app: App, viewer: Viewer, models: ReadonlyAr const active: { [k: string]: boolean } = { cartoon: true, point: false, - surface: true, + surface: false, ballAndStick: false, carbohydrate: false, spacefill: false, diff --git a/src/mol-gl/shader/direct-volume.frag b/src/mol-gl/shader/direct-volume.frag index a4c96b73207f7c68e0e78f188fd4cfc51707643a..c6411cda132603ddbe799fa838e39267c67a2fe0 100644 --- a/src/mol-gl/shader/direct-volume.frag +++ b/src/mol-gl/shader/direct-volume.frag @@ -48,6 +48,20 @@ uniform sampler2D tMarker; #pragma glslify: texture3dFrom2dNearest = require(./utils/texture3d-from-2d-nearest.glsl) #pragma glslify: texture3dFrom2dLinear = require(./utils/texture3d-from-2d-linear.glsl) +// uniform vec3 uLightPosition; +uniform vec3 uLightColor; +uniform vec3 uLightAmbient; +uniform mat4 uView; + +#pragma glslify: attenuation = require(./utils/attenuation.glsl) +#pragma glslify: calculateSpecular = require(./utils/phong-specular.glsl) +#pragma glslify: calculateDiffuse = require(./utils/oren-nayar-diffuse.glsl) + +const float specularScale = 0.15; +const float shininess = 200.0; +const float roughness = 100.0; +const float albedo = 0.95; + #if defined(dGridTexType_2d) vec4 textureVal(vec3 pos) { return texture3dFrom2dLinear(tGridTex, pos, uGridDim, uGridTexDim); @@ -135,7 +149,19 @@ vec4 raymarch(vec3 startLoc, vec3 step, vec3 viewDir) { color = readFromTexture(tColor, instance * float(uGroupCount) + group, uColorTexDim).rgb; #endif - src.rgb = color * abs(dot(gradient, viewDir)); + vec3 L = normalize(viewDir); // light direction + vec3 V = normalize(viewDir); // eye direction + vec3 N = normalize(gradient); // surface normal + + // compute our diffuse & specular terms + float specular = calculateSpecular(L, V, N, shininess) * specularScale; + vec3 diffuse = uLightColor * calculateDiffuse(L, V, N, roughness, albedo); + vec3 ambient = uLightAmbient; + + // add the lighting + vec3 finalColor = color.rgb * (diffuse + ambient) + specular; + + src.rgb = finalColor; src.a = uAlpha; float marker = readFromTexture(tMarker, instance * float(uGroupCount) + group, uMarkerTexDim).a * 256.0; diff --git a/src/mol-gl/shader/mesh.frag b/src/mol-gl/shader/mesh.frag index ce0233e3b80d9e30bd2aebaac2708bc7c84408ef..2195060272cbc736d150e39d3d58166569d1f2b3 100644 --- a/src/mol-gl/shader/mesh.frag +++ b/src/mol-gl/shader/mesh.frag @@ -15,7 +15,7 @@ uniform vec3 uLightColor; uniform vec3 uLightAmbient; uniform mat4 uView; -#ifndef dFlatShaded +#if !defined(dFlatShaded) || !defined(enabledStandardDerivatives) varying vec3 vNormal; #endif @@ -23,9 +23,9 @@ uniform mat4 uView; #pragma glslify: calculateSpecular = require(./utils/phong-specular.glsl) #pragma glslify: calculateDiffuse = require(./utils/oren-nayar-diffuse.glsl) -const float specularScale = 0.65; -const float shininess = 100.0; -const float roughness = 5.0; +const float specularScale = 0.15; +const float shininess = 200.0; +const float roughness = 100.0; const float albedo = 0.95; void main() { @@ -45,7 +45,7 @@ void main() { vec3 V = normalize(vViewPosition); // eye direction // surface normal - #ifdef dFlatShaded + #if defined(dFlatShaded) && defined(enabledStandardDerivatives) vec3 fdx = dFdx(vViewPosition); vec3 fdy = dFdy(vViewPosition); vec3 N = -normalize(cross(fdx, fdy));