From 963cdbdf799d8bac0bda80b6144cb1587c8bca63 Mon Sep 17 00:00:00 2001 From: Marc Baaden Date: Tue, 9 Dec 2014 13:36:18 +0000 Subject: [PATCH] sweet unitymol r676beta - paper accepted un Glycobiology --- Assets/MainMenu.unity | Bin 12984 -> 12852 bytes .../Marcs_Assets/Image Based/DreamEffect.cs | 10 +- Assets/Material/4particle.mat | Bin 4744 -> 4744 bytes Assets/Molecule.unity | Bin 49752 -> 131452 bytes .../Resources/Materials/triangleparticle.mat | Bin 3520 -> 4368 bytes .../Resources/Shader/new/BallImproved.shader | 297 +- .../Shader/new/Ball_HyperBalls_D3D.shader | 1974 +++++++--- .../Shader/new/CubeBonds_TwoColors.shader | 47 +- .../Resources/Shader/new/StickImproved.shader | 431 +-- .../Shader/new/Stick_HyperBalls_D3D.shader | 2257 +++++++----- .../Resources/Shader/new/SurfaceMATCAP.shader | 245 +- .../lit_spheres/artext/1_01.png.meta | 12 +- .../lit_spheres/artext/1_02.png.meta | 26 +- .../lit_spheres/artext/1_03.png.meta | 12 +- .../lit_spheres/artext/1_04.png.meta | 12 +- .../lit_spheres/artext/1stwindow.png.meta | 12 +- .../lit_spheres/artext/2_01.png.meta | 12 +- .../lit_spheres/artext/2_02.png.meta | 12 +- .../lit_spheres/artext/2_03.png.meta | 12 +- .../lit_spheres/artext/2_05.png.meta | 12 +- .../Resources/lit_spheres/artext/3.png.meta | 12 +- .../Resources/lit_spheres/artext/4.png.meta | 12 +- .../lit_spheres/artext/5_01.png.meta | 12 +- .../lit_spheres/artext/5_02.png.meta | 12 +- .../lit_spheres/artext/5_03.png.meta | 12 +- .../lit_spheres/artext/5_04.png.meta | 12 +- .../lit_spheres/artext/6_01.png.meta | 12 +- .../lit_spheres/artext/6_02.png.meta | 12 +- .../lit_spheres/artext/6_03.png.meta | 12 +- .../lit_spheres/artext/6_04.png.meta | 12 +- .../Resources/lit_spheres/artext/7.png.meta | 12 +- .../lit_spheres/artext/7_12.png.meta | 12 +- .../lit_spheres/artext/8_01.png.meta | 12 +- .../lit_spheres/artext/8_02.png.meta | 12 +- .../lit_spheres/artext/aqua.png.meta | 12 +- .../lit_spheres/artext/aquarelle.png.meta | 12 +- .../lit_spheres/artext/army.png.meta | 12 +- .../lit_spheres/artext/art_01.png.meta | 12 +- .../lit_spheres/artext/art_02.png.meta | 12 +- .../lit_spheres/artext/art_03.png.meta | 12 +- .../lit_spheres/artext/art_04.png.meta | 12 +- .../lit_spheres/artext/art_06.png.meta | 12 +- .../lit_spheres/artext/art_07.png.meta | 12 +- .../lit_spheres/artext/art_10.png.meta | 12 +- .../lit_spheres/artext/art_11.png.meta | 12 +- .../lit_spheres/artext/art_red.png.meta | 12 +- .../lit_spheres/artext/artball1.png.meta | 12 +- .../lit_spheres/artext/artball10.png.meta | 12 +- .../lit_spheres/artext/artball11.png.meta | 12 +- .../lit_spheres/artext/artball2.png.meta | 12 +- .../lit_spheres/artext/artball3.png.meta | 12 +- .../lit_spheres/artext/artball4.png.meta | 12 +- .../lit_spheres/artext/artball5.png.meta | 12 +- .../lit_spheres/artext/artball6.png.meta | 12 +- .../lit_spheres/artext/artball7.png.meta | 12 +- .../lit_spheres/artext/artball8.png.meta | 12 +- .../lit_spheres/artext/artball9.png.meta | 12 +- .../lit_spheres/artext/asperge.png.meta | 12 +- .../lit_spheres/artext/balloon1.png.meta | 12 +- .../lit_spheres/artext/balloon2.png.meta | 12 +- .../lit_spheres/artext/balloon3.png.meta | 12 +- .../lit_spheres/artext/balloon4.png.meta | 12 +- .../lit_spheres/artext/banane.png.meta | 12 +- .../lit_spheres/artext/belight.png.meta | 12 +- .../lit_spheres/artext/bijou.png.meta | 12 +- .../lit_spheres/artext/blackNblue.png.meta | 12 +- .../lit_spheres/artext/blue1.png.meta | 12 +- .../lit_spheres/artext/blue2.png.meta | 12 +- .../lit_spheres/artext/blue3.png.meta | 12 +- .../lit_spheres/artext/blue4.png.meta | 12 +- .../lit_spheres/artext/bluebuz.png.meta | 12 +- .../lit_spheres/artext/bronze.png.meta | 12 +- .../lit_spheres/artext/bronze2.png.meta | 12 +- .../lit_spheres/artext/ceramique.png.meta | 12 +- .../lit_spheres/artext/chocolat.png.meta | 12 +- .../lit_spheres/artext/chocolatlait.png.meta | 12 +- .../lit_spheres/artext/concave.png.meta | 12 +- .../lit_spheres/artext/defaultball.png.meta | 12 +- .../lit_spheres/artext/disco.png.meta | 12 +- .../lit_spheres/artext/disco2.png.meta | 12 +- .../lit_spheres/artext/encre.png.meta | 12 +- .../lit_spheres/artext/estampage.png.meta | 12 +- .../lit_spheres/artext/expo.png.meta | 12 +- .../lit_spheres/artext/fruits.png.meta | 12 +- .../lit_spheres/artext/glass1.png.meta | 12 +- .../lit_spheres/artext/glass2.png.meta | 12 +- .../lit_spheres/artext/glossy.png.meta | 12 +- .../lit_spheres/artext/greenglass.png.meta | 12 +- .../lit_spheres/artext/gris.png.meta | 12 +- .../lit_spheres/artext/hameleon.png.meta | 12 +- .../lit_spheres/artext/jaune.png.meta | 12 +- .../lit_spheres/artext/keramic_01.png.meta | 12 +- .../lit_spheres/artext/kirsch.png.meta | 12 +- .../lit_spheres/artext/l+s1.png.meta | 12 +- .../lit_spheres/artext/l+s2.png.meta | 12 +- .../lit_spheres/artext/lemon.png.meta | 12 +- .../lit_spheres/artext/lighgray.png.meta | 12 +- .../lit_spheres/artext/lightgray.png.meta | 12 +- .../lit_spheres/artext/lumiereor.png.meta | 12 +- .../lit_spheres/artext/lune.png.meta | 12 +- .../lit_spheres/artext/mango.png.meta | 12 +- .../lit_spheres/artext/natural_01.png.meta | 12 +- .../lit_spheres/artext/natural_02.png.meta | 12 +- .../lit_spheres/artext/neon.png.meta | 12 +- .../lit_spheres/artext/neon4.png.meta | 12 +- .../lit_spheres/artext/noir.png.meta | 12 +- .../lit_spheres/artext/noirmetal.png.meta | 12 +- .../lit_spheres/artext/oeuf.png.meta | 12 +- .../Resources/lit_spheres/artext/or.png.meta | 12 +- .../lit_spheres/artext/orclair.png.meta | 12 +- .../lit_spheres/artext/orpur.png.meta | 12 +- .../lit_spheres/artext/paint1.png.meta | 12 +- .../lit_spheres/artext/paint2.png.meta | 12 +- .../lit_spheres/artext/paint3.png.meta | 12 +- .../lit_spheres/artext/pasha1.png.meta | 12 +- .../lit_spheres/artext/peinture.png.meta | 12 +- .../lit_spheres/artext/perle.png.meta | 12 +- .../lit_spheres/artext/piggybank.png.meta | 12 +- .../lit_spheres/artext/purple1.png.meta | 12 +- .../lit_spheres/artext/rainbow_01.png.meta | 12 +- .../lit_spheres/artext/rainbow_02.png.meta | 12 +- .../lit_spheres/artext/rainbow_03.png.meta | 12 +- .../lit_spheres/artext/rainbow_04.png.meta | 12 +- .../lit_spheres/artext/raye.png.meta | 12 +- .../lit_spheres/artext/rayonx.png.meta | 12 +- .../lit_spheres/artext/red1.png.meta | 12 +- .../lit_spheres/artext/red2.png.meta | 12 +- .../lit_spheres/artext/red_1.png.meta | 12 +- .../lit_spheres/artext/red_simple.png.meta | 12 +- .../lit_spheres/artext/redtowhite.png.meta | 12 +- .../lit_spheres/artext/removableeye.png.meta | 12 +- .../lit_spheres/artext/rgestampage.png.meta | 12 +- .../lit_spheres/artext/rose.png.meta | 12 +- .../lit_spheres/artext/rosebuz.png.meta | 12 +- .../lit_spheres/artext/rougebrillant.png.meta | 12 +- .../lit_spheres/artext/rougebuz.png.meta | 12 +- .../lit_spheres/artext/rouille.png.meta | 12 +- .../lit_spheres/artext/shad1.png.meta | 12 +- .../lit_spheres/artext/shad2.png.meta | 12 +- .../lit_spheres/artext/shad3.png.meta | 12 +- .../lit_spheres/artext/shadow1.png.meta | 12 +- .../lit_spheres/artext/shadow2.png.meta | 12 +- .../lit_spheres/artext/shine_blue.png.meta | 12 +- .../lit_spheres/artext/shopblack1.png.meta | 12 +- .../artext/shopblack1invert.png.meta | 12 +- .../lit_spheres/artext/shopblack2.png.meta | 12 +- .../lit_spheres/artext/shopblack3.png.meta | 12 +- .../lit_spheres/artext/shopblack4.png.meta | 12 +- .../lit_spheres/artext/shopgreen1.png.meta | 12 +- .../lit_spheres/artext/shopgreen2.png.meta | 12 +- .../lit_spheres/artext/shoppink1.png.meta | 12 +- .../lit_spheres/artext/shoppink2.png.meta | 12 +- .../lit_spheres/artext/shoppink3.png.meta | 12 +- .../lit_spheres/artext/shopred1.png.meta | 12 +- .../lit_spheres/artext/shopred2.png.meta | 12 +- .../lit_spheres/artext/shopred3.png.meta | 12 +- .../lit_spheres/artext/shopred4.png.meta | 12 +- .../lit_spheres/artext/simple10.png.meta | 12 +- .../lit_spheres/artext/simple2.png.meta | 12 +- .../lit_spheres/artext/simple4.png.meta | 12 +- .../lit_spheres/artext/simple6.png.meta | 12 +- .../lit_spheres/artext/simple7.png.meta | 12 +- .../lit_spheres/artext/simple8.png.meta | 12 +- .../lit_spheres/artext/simple9.png.meta | 12 +- .../lit_spheres/artext/simple_01.png.meta | 12 +- .../lit_spheres/artext/simple_02.png.meta | 12 +- .../lit_spheres/artext/simple_03.png.meta | 12 +- .../lit_spheres/artext/simple_blue.png.meta | 12 +- .../artext/simple_contrast.png.meta | 12 +- .../artext/simple_doberman.png.meta | 12 +- .../lit_spheres/artext/simple_gold.png.meta | 12 +- .../artext/simple_goldcopy.png.meta | 12 +- .../lit_spheres/artext/simple_grey.png.meta | 12 +- .../lit_spheres/artext/sombre.png.meta | 12 +- .../lit_spheres/artext/transp_01.png.meta | 12 +- .../lit_spheres/artext/transp_02.png.meta | 12 +- .../lit_spheres/artext/transp_03.png.meta | 12 +- .../lit_spheres/artext/transp_04.png.meta | 12 +- .../lit_spheres/artext/transparent.png.meta | 12 +- .../lit_spheres/artext/verrebuz.png.meta | 10 +- .../lit_spheres/artext/verreorange.png.meta | 10 +- .../lit_spheres/artext/vert.png.meta | 10 +- .../lit_spheres/artext/vertvelours.png.meta | 10 +- .../lit_spheres/artext/violet.png.meta | 10 +- .../lit_spheres/artext/water.png.meta | 10 +- .../lit_spheres/artext/water1.png.meta | 10 +- .../lit_spheres/artext/water2.png.meta | 10 +- .../lit_spheres/artext/water3.png.meta | 10 +- .../lit_spheres/artext/white_01.png.meta | 10 +- .../lit_spheres/artext/white_02.png.meta | 10 +- .../lit_spheres/artext/white_03.png.meta | 10 +- .../Resources/lit_spheres/artext/x.png.meta | 10 +- .../lit_spheres/artistic/Gloss_Black.png.meta | 16 +- .../lit_spheres/artistic/carspen2.jpg.meta | 16 +- .../lit_spheres/artistic/caspern.png.meta | 16 +- .../lit_spheres/artistic/images.jpg.meta | 14 +- .../artistic/tableau-moderne-bille.jpg.meta | 14 +- Assets/Resources/lit_spheres/bio/em1.png.meta | 16 +- Assets/Resources/lit_spheres/bio/em2.png.meta | 16 +- Assets/Resources/lit_spheres/bio/em3.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo1.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo10.png.meta | 14 +- .../Resources/lit_spheres/bio/fluo2.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo3.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo4.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo5.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo6.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo7.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo8.png.meta | 16 +- .../Resources/lit_spheres/bio/fluo9.png.meta | 14 +- .../Resources/lit_spheres/dessin/0-2.jpg.meta | 14 +- .../05-how-shading-crosshatch-3b.jpg.meta | 16 +- .../287457d8aba0f677ac18a913b9f0f441.jpg.meta | 14 +- .../400px-Draw-a-Sphere-Step-2.jpg.meta | 14 +- .../400px-Draw-a-Sphere-Step-7.jpg.meta | 16 +- .../400px-Draw-a-Sphere-Step-8.jpg.meta | 14 +- .../lit_spheres/dessin/74027.png.meta | 14 +- .../8289_Making_a_metallic_sphere_.png.meta | 14 +- .../dessin/CharcoalSphere.jpg.meta | 14 +- .../lit_spheres/dessin/E-C-S (386).PNG.meta | 14 +- .../dessin/GRD3_LS03_IMG01.jpg.meta | 14 +- .../dessin/GRD3_LS03_IMG21.jpg.meta | 14 +- .../lit_spheres/dessin/GlhTq.png.meta | 14 +- .../lit_spheres/dessin/IMG_1339_2.jpg.meta | 14 +- .../lit_spheres/dessin/IMG_1345_2.jpg.meta | 14 +- .../lit_spheres/dessin/Scan23c.jpg.meta | 14 +- .../lit_spheres/dessin/Scan23d.jpg.meta | 14 +- .../dessin/Sketch 10 - sphere1.jpg.meta | 14 +- .../dessin/Sketch 9 - sphere.jpg.meta | 14 +- .../dessin/SphereAndShadow.jpg.meta | 14 +- ...aw-crosshatching-hatching-800x800.jpg.meta | 14 +- .../Resources/lit_spheres/dessin/b11.jpg.meta | 14 +- ...apes_monochrome_oil_painting-(81).jpg.meta | 14 +- .../lit_spheres/dessin/blue.png.meta | 16 +- .../lit_spheres/dessin/bruckner.png.meta | 14 +- .../dessin/chiaroscuro-valuescale.jpg.meta | 14 +- .../dessin/cracked_sphere.jpg.meta | 14 +- .../lit_spheres/dessin/crayon1.png.meta | 14 +- .../draw-shade-spheres-1.3-800X800.jpg.meta | 16 +- .../draw-shade-spheres-1.4-800X800.jpg.meta | 14 +- .../lit_spheres/dessin/draw3.png.meta | 16 +- .../lit_spheres/dessin/droppedImage.jpg.meta | 14 +- .../dessin/escher_3_spheres_1 2.jpg.meta | 14 +- .../dessin/escher_3_spheres_1 3.jpg.meta | 14 +- .../lit_spheres/dessin/ex2_2_carter.png.meta | 14 +- .../lit_spheres/dessin/exercise2.jpg.meta | 14 +- .../lit_spheres/dessin/eye2.jpg.meta | 14 +- .../dessin/fig14-charcoal-sphere.jpg.meta | 14 +- ...orgetownatelier_sphere_posterized.jpg.meta | 14 +- .../lit_spheres/dessin/gray.png.meta | 14 +- .../hand_with_reflecting_sphere.jpg.meta | 14 +- .../dessin/hayward_sphere.png.meta | 12 +- ...sic_sphere_by_unknowntone-d4yfqee.png.meta | 16 +- .../lit_spheres/dessin/hqdefault.jpg.meta | 14 +- .../lit_spheres/dessin/images-7.jpeg.meta | 16 +- .../lit_spheres/dessin/inks.png.meta | 14 +- .../lit_spheres/dessin/melon1.png.meta | 14 +- .../lit_spheres/dessin/mqdefault.jpg.meta | 14 +- .../lit_spheres/dessin/nancy_sphere.png.meta | 14 +- .../lit_spheres/dessin/pointillism 2.jpg.meta | 14 +- .../lit_spheres/dessin/pointillism 3.jpg.meta | 14 +- .../lit_spheres/dessin/rZ0eX.png.meta | 14 +- .../dessin/shaded-sphere-1.jpg.meta | 14 +- .../lit_spheres/dessin/source.jpg.meta | 14 +- .../lit_spheres/dessin/sph_draw_MC.png.meta | 14 +- .../lit_spheres/dessin/sphere-1j.jpg.meta | 14 +- .../lit_spheres/dessin/sphere-1p.png.meta | 14 +- .../lit_spheres/dessin/sphere-2j.jpg.meta | 14 +- .../lit_spheres/dessin/sphere-2p.png.meta | 14 +- .../dessin/sphere-_tutorial_6.jpg.meta | 14 +- .../dessin/sphere-drawingj1.jpeg.meta | 14 +- .../dessin/sphere-exercise-3.jpg.meta | 14 +- .../lit_spheres/dessin/sphere05.jpg.meta | 14 +- .../lit_spheres/dessin/sphere1_1.jpg.meta | 14 +- .../lit_spheres/dessin/sphere1copy.png.meta | 14 +- .../lit_spheres/dessin/sphere2-1.jpg.meta | 14 +- .../dessin/sphere2copykw6.jpg.meta | 14 +- .../lit_spheres/dessin/sphere2p.png.meta | 14 +- .../lit_spheres/dessin/sphere_1_mth.png.meta | 14 +- .../lit_spheres/dessin/spheregif.png.meta | 14 +- .../lit_spheres/dessin/spheregif2.png.meta | 14 +- .../lit_spheres/dessin/spherej.jpg.meta | 14 +- .../dessin/spherewhatches.png.meta | 14 +- .../dessin/starter sphere240 3.jpg.meta | 14 +- .../dessin/starter sphere240.jpg.meta | 14 +- .../lit_spheres/dessin/tYIlA.jpg.meta | 14 +- .../lit_spheres/dessin/toon.jpg.meta | 16 +- .../lit_spheres/dessin/toon2.jpg.meta | 14 +- .../dessin/tumblr_lsyq66Y15D1r0o2eb.png.meta | 14 +- .../lit_spheres/dessin/zbVZE.jpg.meta | 14 +- .../divers/LitSphere_Example1.jpg.meta | 14 +- .../divers/binary-sphere-logo.jpg.meta | 16 +- .../lit_spheres/divers/choco.png.meta | 16 +- .../lit_spheres/divers/daphz0.png.meta | 14 +- .../lit_spheres/divers/daphz05.png.meta | 14 +- .../lit_spheres/divers/daphz1.jpg.meta | 16 +- .../lit_spheres/divers/daphz2.jpg.meta | 16 +- .../lit_spheres/divers/daphz3.jpg.meta | 16 +- .../lit_spheres/divers/draw2.png.meta | 12 +- .../lit_spheres/divers/email.png.meta | 16 +- .../lit_spheres/divers/eye3.png.meta | 14 +- .../lit_spheres/divers/eye3gray.png.meta | 14 +- .../lit_spheres/divers/eye4.png.meta | 14 +- .../lit_spheres/divers/eyes2.png.meta | 14 +- .../lit_spheres/divers/eyes2gray.png.meta | 14 +- .../lit_spheres/divers/eyes5.png.meta | 14 +- .../lit_spheres/divers/gooch.jpg.meta | 16 +- .../lit_spheres/divers/hexa.png.meta | 16 +- .../divers/hyperballparticle4.png.meta | 14 +- .../divers/hyperballparticlegray.png.meta | 14 +- .../lit_spheres/divers/inks2.png.meta | 14 +- .../lit_spheres/divers/matcap_2.png.meta | 14 +- .../lit_spheres/divers/material37.png.meta | 14 +- .../lit_spheres/divers/noise.png.meta | 14 +- .../lit_spheres/divers/round.png.meta | 14 +- .../lit_spheres/divers/round1.png.meta | 14 +- .../lit_spheres/divers/round2.png.meta | 14 +- .../lit_spheres/divers/round_alpha.png.meta | 14 +- .../lit_spheres/divers/roundlight.png.meta | 14 +- .../lit_spheres/divers/truc.jpg.meta | 14 +- .../lit_spheres/divers/vertical1.png.meta | 14 +- .../Resources/lit_spheres/fun/ballon.png.meta | 14 +- .../Resources/lit_spheres/fun/china1.png.meta | 14 +- .../Resources/lit_spheres/fun/china2.png.meta | 14 +- .../Resources/lit_spheres/fun/euro1.png.meta | 14 +- .../lit_spheres/fun/explode1.png.meta | 14 +- .../Resources/lit_spheres/fun/head1.png.meta | 14 +- .../Resources/lit_spheres/fun/head2.png.meta | 14 +- .../Resources/lit_spheres/fun/heart1.png.meta | 14 +- .../Resources/lit_spheres/fun/pig1.png.meta | 14 +- .../lit_spheres/fun/pumpkin1.png.meta | 14 +- .../Resources/lit_spheres/fun/skull1.png.meta | 14 +- .../Resources/lit_spheres/fun/skull2.png.meta | 14 +- .../Resources/lit_spheres/fun/skull3.png.meta | 14 +- .../lit_spheres/glass/glass.png.meta | 14 +- .../lit_spheres/glass/glass2.jpg.meta | 14 +- .../lit_spheres/glass/glassbw.jpg.meta | 14 +- .../metal/bille-en-acier-359590.jpg | Bin 21645 -> 25915 bytes .../metal/bille-en-acier-359590.jpg.meta | 14 +- .../lit_spheres/metal/black1.png.meta | 14 +- .../lit_spheres/metal/bronze1.png.meta | 14 +- .../lit_spheres/metal/chrome1.png.meta | 14 +- .../Resources/lit_spheres/metal/gold.png.meta | 12 +- .../lit_spheres/metal/metal.jpg.meta | 14 +- .../lit_spheres/metal/puzzle1.png.meta | 14 +- .../lit_spheres/metal/silver10.jpg.meta | 14 +- .../lit_spheres/metal/silvery1.png.meta | 14 +- .../lit_spheres/metal/silvery2.png.meta | 14 +- .../lit_spheres/objets/MatcapQuartz.jpg.meta | 14 +- .../objets/bille-en-plastique-359520.jpg.meta | 14 +- .../lit_spheres/objets/bille.jpg.meta | 14 +- .../lit_spheres/objets/blood.png.meta | 16 +- ...blu_green_litsphere_by_jujikabane.jpg.meta | 14 +- .../lit_spheres/objets/bluew.png.meta | 14 +- .../lit_spheres/objets/bowling1.png.meta | 14 +- .../lit_spheres/objets/earth1.png.meta | 14 +- .../lit_spheres/objets/earth2.png.meta | 14 +- .../objets/green_glass_860.png.meta | 14 +- .../Resources/lit_spheres/objets/mat.png.meta | 14 +- .../lit_spheres/objets/matcap.jpg.meta | 14 +- .../lit_spheres/objets/moon1.png.meta | 14 +- .../lit_spheres/objets/moon2.png.meta | 14 +- .../lit_spheres/objets/petanque1.png.meta | 14 +- .../lit_spheres/objets/planet1.png.meta | 14 +- .../lit_spheres/objets/planet2.png.meta | 14 +- .../lit_spheres/objets/stone.jpg.meta | 14 +- .../lit_spheres/objets/tablet1.png.meta | 14 +- .../Resources/lit_spheres/objets/uk1.png.meta | 14 +- .../lit_spheres/organic/Skin.jpg.meta | 14 +- .../Resources/lit_spheres/organic/anemone.jpg | Bin 6368 -> 9862 bytes .../lit_spheres/organic/anemone.jpg.meta | 16 +- .../lit_spheres/organic/blood2.png.meta | 18 +- .../lit_spheres/organic/bone.png.meta | 18 +- .../lit_spheres/organic/leaves1.png.meta | 14 +- .../lit_spheres/organic/nobs1.png.meta | 16 +- .../lit_spheres/organic/nobs2.png.meta | 16 +- .../lit_spheres/organic/skin.png.meta | 14 +- .../lit_spheres/organic/spike1.png.meta | 16 +- .../lit_spheres/organic/spike2.png.meta | 14 +- .../lit_spheres/organic/splinter1.png.meta | 14 +- .../lit_spheres/organic/vessel.png.meta | 14 +- .../lit_spheres/organic/wool1.png.meta | 16 +- .../psurftex/1396091264285309.jpg.meta | 14 +- .../psurftex/2-photos-sphere 2.jpg.meta | 14 +- .../psurftex/2-photos-sphere.jpg.meta | 14 +- ...hapes_monochrome_oil_painting-(0).jpg.meta | 14 +- .../shading-sphere-photo-005.JPG.meta | 14 +- .../lit_spheres/psurftex/silvery2.png.meta | 14 +- .../sphere-drawing-reference.jpg.meta | 14 +- .../psurftex/starter sphere240 2.jpg.meta | 14 +- ...es-a08-49-it-draw-planets-800x800.jpg.meta | 14 +- .../lit_spheres/wood/sph_orange_MC.png.meta | 14 +- .../Resources/lit_spheres/wood/wood1.png.meta | 12 +- Assets/Resources/particlein1.prefab | Bin 9370 -> 8960 bytes Assets/Scripts/CameraControlScript.cs | 18 +- Assets/Scripts/ColorPicker.cs | 102 +- Assets/Scripts/DisplayControl/DMatrix.cs | 46 +- .../Molecule/Control/ControlMolecule.cs | 685 +++- Assets/Scripts/Molecule/Model/AtomModel.cs | 184 +- .../Scripts/Molecule/Model/MoleculeModel.cs | 355 +- .../DisplayAtom/AtomStyle/AtomCubeStyle.cs | 943 ++--- .../DisplayAtom/AtomStyle/AtomSphereStyle.cs | 55 +- .../DisplayAtom/AtomStyle/FieldLineStyle.cs | 54 +- .../View/DisplayAtom/AtomStyle/IAtomStyle.cs | 9 +- .../View/DisplayAtom/BallUpdate/BallUpdate.cs | 34 +- .../DisplayAtom/BallUpdate/BallUpdateCube.cs | 33 +- .../DisplayAtom/BallUpdate/BallUpdateHB.cs | 90 +- .../DisplayAtom/BallUpdate/BallUpdateRC.cs | 9 +- .../BallUpdate/BallUpdateSphere.cs | 20 +- .../DisplayBond/BondStyle/BondCubeStyle.cs | 165 +- .../DisplayBond/BondStyle/BondLineStyle.cs | 26 +- .../BondStyle/BondParticleStyle.cs | 21 +- .../DisplayBond/BondStyle/BondTubeStyle.cs | 9 +- .../DisplayBond/BondUpdate/BondCubeUpdate.cs | 136 +- .../View/DisplayBond/BondUpdate/LineUpdate.cs | 158 +- .../DisplayBond/BondUpdate/StickUpdate.cs | 188 +- .../BondUpdate/StickUpdateParticle.cs | 101 +- .../View/DisplayBond/BondUpdate/TubeUpdate.cs | 4 +- .../Scripts/Molecule/View/DisplayMolecule.cs | 1014 +++--- .../Molecule/View/Particle/ParticleEffect.cs | 30 +- Assets/Scripts/Molecule3D.cs | 1199 +++---- Assets/Scripts/MouseCameraControl.cs | 3 +- Assets/Scripts/OBJ/src/OBJ.cs | 7 +- Assets/Scripts/ParseData/ParsePDB/ReadDX.cs | 96 +- Assets/Scripts/ParseData/ParsePDB/ReadJson.cs | 20 +- .../Scripts/ParseData/ParsePDB/RequestPDB.cs | 626 ++-- .../Scripts/ParseData/ParsePDB/SocketPDB.cs | 22 +- Assets/Scripts/PreloadFromPDB.cs | 8 +- Assets/Scripts/ScenePreload_1KX2.cs | 12 +- Assets/Scripts/ScenePreload_Fieldlines.cs | 18 +- Assets/Scripts/ScenePreload_Network.cs | 12 +- Assets/Scripts/ScenePreload_RNA.cs | 8 +- Assets/Scripts/UI/GUIDisplay.cs | 1955 +++++----- Assets/Scripts/UI/GUIMoleculeController.cs | 3184 +++-------------- Assets/Scripts/UI/MainMenu.cs | 23 +- Assets/Scripts/UI/UIData.cs | 94 +- Assets/Scripts/Utility/ClickAtom.cs | 131 +- Assets/Scripts/Utility/GUILayoutx.cs | 4 +- Assets/Scripts/Utility/ImprovedFileBrowser.cs | 16 +- Assets/Scripts/Utility/MouseOverMolecule.cs | 9 +- .../hermitespline/GenInterpolationArray.cs | 78 +- .../GenInterpolationArray.cs.meta | 1 + .../hermitespline/GenInterpolationPoint.cs | 33 +- .../GenInterpolationPoint.cs.meta | 1 + Assets/Scripts/maxCamera.cs | 1722 +++++++-- Assets/Scripts/surface/GenerateMesh.cs | 438 ++- Assets/Scripts/surface/MarchingCubesRec.cs | 6 +- Assets/Scripts/surface/PDBtoDEN.cs | 280 +- Assets/SkinWithListItem.guiskin | Bin 103008 -> 103024 bytes .../Image Effects (Pro Only).meta | 2 + .../AntialiasingAsPostEffect.js | 4 +- .../AntialiasingAsPostEffect.js.meta | 15 +- .../BloomAndLensFlares.js | 248 +- .../BloomAndLensFlares.js.meta | 17 +- .../Image Effects (Pro Only)/BlurEffect.cs | 220 +- .../BlurEffect.cs.meta | 3 +- .../CameraInfo.js.meta | 3 +- .../ColorCorrectionCurves.js | 7 +- .../ColorCorrectionCurves.js.meta | 7 +- .../ColorCorrectionEffect.cs.meta | 5 +- .../ContrastEnhance.js.meta | 5 +- .../ContrastStretchEffect.cs.meta | 9 +- .../Image Effects (Pro Only)/Crease.js.meta | 7 +- .../DepthOfField34.js.meta | 9 +- .../DepthOfFieldScatter.js | 444 ++- .../DepthOfFieldScatter.js.meta | 7 +- .../EdgeDetectEffect.cs.meta | 3 +- .../EdgeDetectEffectNormals.js | 65 +- .../EdgeDetectEffectNormals.js.meta | 3 +- .../Image Effects (Pro Only)/Fisheye.js.meta | 3 +- .../GlobalFog.js.meta | 3 +- .../Image Effects (Pro Only)/GlowEffect.cs | 190 +- .../GlowEffect.cs.meta | 7 +- .../GrayscaleEffect.cs.meta | 3 +- .../ImageEffectBase.cs.meta | 1 + .../ImageEffects.cs.meta | 13 +- .../MotionBlur.cs.meta | 3 +- .../Image Effects (Pro Only)/NoiseAndGrain.js | 119 +- .../NoiseAndGrain.js.meta | 6 +- .../NoiseEffect.cs.meta | 9 +- .../PostEffectsBase.js | 9 +- .../PostEffectsBase.js.meta | 1 + .../PostEffectsHelper.js.meta | 1 + .../Image Effects (Pro Only)/Quads.js.meta | 1 + .../SSAOEffect.cs.meta | 5 +- .../Image Effects (Pro Only)/ScreenOverlay.js | 2 +- .../ScreenOverlay.js.meta | 3 +- .../SepiaToneEffect.cs.meta | 3 +- .../SunShafts.js.meta | 9 +- .../TiltShift.js.meta | 3 +- .../Image Effects (Pro Only)/Tonemapping.js | 92 +- .../Tonemapping.js.meta | 3 +- .../Triangles.js.meta | 1 + .../TwirlEffect.cs.meta | 3 +- .../Image Effects (Pro Only)/Vignetting.js | 90 +- .../Vignetting.js.meta | 7 +- .../VortexEffect.cs.meta | 3 +- .../Image Effects (Pro Only)/_Sources.meta | 2 + .../_Sources/Shaders.meta | 2 + .../_Sources/Shaders/BlendModesOverlay.shader | 28 +- .../Shaders/BlendModesOverlay.shader.meta | 2 + .../Shaders/BlurEffectConeTaps.shader.meta | 2 + .../Shaders/ChromaticAberrationShader.shader | 105 +- .../ChromaticAberrationShader.shader.meta | 2 + .../Shaders/ColorCorrectionCurves.shader | 12 +- .../Shaders/ColorCorrectionCurves.shader.meta | 2 + .../ColorCorrectionCurvesSimple.shader | 8 +- .../ColorCorrectionCurvesSimple.shader.meta | 2 + .../Shaders/ColorCorrectionEffect.shader.meta | 2 + .../Shaders/ColorCorrectionSelective.shader | 8 +- .../ColorCorrectionSelective.shader.meta | 2 + .../_Sources/Shaders/Contrast Stretch.meta | 2 + .../Contrast Stretch/Adaptation.shader.meta | 2 + .../Contrast Stretch/Apply.shader.meta | 2 + .../Contrast Stretch/Luminance.shader.meta | 2 + .../MinMaxReduction.shader.meta | 2 + .../_Sources/Shaders/ContrastComposite.shader | 2 +- .../Shaders/ContrastComposite.shader.meta | 2 + .../_Sources/Shaders/ConvertDepth.shader.meta | 2 + .../_Sources/Shaders/CreaseApply.shader.meta | 2 + .../_Sources/Shaders/EdgeDetectNormals.shader | 177 +- .../Shaders/EdgeDetectNormals.shader.meta | 2 + .../_Sources/Shaders/EdgeDetectX.shader.meta | 2 + .../Shaders/FisheyeShader.shader.meta | 2 + .../_Sources/Shaders/GlobalFog.shader | 20 +- .../_Sources/Shaders/GlobalFog.shader.meta | 2 + .../_Sources/Shaders/GlowCompose.shader.meta | 2 + .../_Sources/Shaders/GlowConeTap.shader.meta | 2 + .../Shaders/GlowEffectDownsample.shader | 6 +- .../Shaders/GlowEffectDownsample.shader.meta | 2 + .../Shaders/GrayscaleEffect.shader.meta | 2 + .../_Sources/Shaders/MotionBlur.shader.meta | 2 + .../_Sources/Shaders/NoiseAndGrain.shader | 141 +- .../Shaders/NoiseAndGrain.shader.meta | 2 + .../Shaders/NoiseEffectShaderRGB.shader.meta | 2 + .../Shaders/NoiseEffectShaderYUV.shader.meta | 2 + .../Shaders/PrepareSunShaftsBlur.shader.meta | 2 + .../_Sources/Shaders/RadialBlur.shader.meta | 2 + .../_Sources/Shaders/SSAOShader.shader | 562 ++- .../_Sources/Shaders/SSAOShader.shader.meta | 2 + .../Shaders/SepiaToneEffect.shader.meta | 2 + .../Shaders/ShowAlphaChannel.shader.meta | 2 + .../_Sources/Shaders/SimpleClear.shader.meta | 2 + .../Shaders/SunShaftsComposite.shader | 16 +- .../Shaders/SunShaftsComposite.shader.meta | 2 + .../_Sources/Shaders/Tonemapper.shader | 31 +- .../_Sources/Shaders/Tonemapper.shader.meta | 2 + .../_Sources/Shaders/TwirlEffect.shader.meta | 2 + .../_Sources/Shaders/VignettingShader.shader | 23 +- .../Shaders/VignettingShader.shader.meta | 2 + .../_Sources/Shaders/VortexEffect.shader.meta | 2 + .../_Sources/Shaders/_Antialiasing.meta | 2 + .../Shaders/_Antialiasing/DLAA.shader | 6 + .../Shaders/_Antialiasing/DLAA.shader.meta | 2 + .../Shaders/_Antialiasing/FXAA2.shader | 8 +- .../Shaders/_Antialiasing/FXAA2.shader.meta | 2 + .../Shaders/_Antialiasing/FXAA3Console.shader | 2 + .../_Antialiasing/FXAA3Console.shader.meta | 2 + .../Shaders/_Antialiasing/FXAAPreset2.shader | 5 +- .../_Antialiasing/FXAAPreset2.shader.meta | 2 + .../Shaders/_Antialiasing/FXAAPreset3.shader | 5 +- .../_Antialiasing/FXAAPreset3.shader.meta | 2 + .../Shaders/_Antialiasing/NFAA.shader | 6 +- .../Shaders/_Antialiasing/NFAA.shader.meta | 2 + .../Shaders/_Antialiasing/SSAA.shader.meta | 2 + .../_Sources/Shaders/_BloomAndFlares.meta | 2 + .../Shaders/_BloomAndFlares/Blend.shader | 2 +- .../Shaders/_BloomAndFlares/Blend.shader.meta | 2 + .../_BloomAndFlares/BlendOneOne.shader.meta | 2 + .../BrightPassFilter.shader.meta | 2 + .../_BloomAndFlares/LensFlareCreate.shader | 16 +- .../LensFlareCreate.shader.meta | 2 + .../MultiPassHollywoodFlares.shader | 316 +- .../MultiPassHollywoodFlares.shader.meta | 2 + .../_BloomAndFlares/SeparableBlurPlus.shader | 2 + .../SeparableBlurPlus.shader.meta | 2 + .../VignetteShader.shader.meta | 2 + .../_Sources/Shaders/_DepthOfField.meta | 2 + .../Shaders/_DepthOfField/Bokeh34.shader | 4 +- .../Shaders/_DepthOfField/Bokeh34.shader.meta | 2 + .../_DepthOfField/DepthOfField34.shader | 6 +- .../_DepthOfField/DepthOfField34.shader.meta | 2 + .../_DepthOfField/DepthOfFieldScatter.shader | 1123 +++--- .../DepthOfFieldScatter.shader.meta | 2 + .../_DepthOfField/SeparableBlur.shader.meta | 2 + .../SeparableWeightedBlurDof34.shader | 4 +- .../SeparableWeightedBlurDof34.shader.meta | 2 + .../Shaders/_DepthOfField/TiltShift.shader | 34 +- .../_DepthOfField/TiltShift.shader.meta | 2 + .../_Sources/Shaders/frag_ao.cginc.meta | 2 + .../_Sources/Textures.meta | 2 + .../_Sources/Textures/Noise.png.meta | 2 + .../_Sources/Textures/NoiseAndGrain.png.meta | 2 + .../Textures/NoiseEffectGrain.png.meta | 2 + .../Textures/NoiseEffectScratch.png.meta | 2 + .../_Sources/Textures/RandomVectors.png.meta | 2 + .../_Sources/Textures/VignetteMask.png.meta | 2 + .../Textures/color correction ramp.png.meta | 2 + .../_Sources/Textures/grayscale ramp.png.meta | 2 + .../_Sources/Textures/hexShape.psd | Bin 428419 -> 478144 bytes .../_Sources/Textures/hexShape.psd.meta | 4 +- .../_Sources/Textures/sphereShape.psd | Bin 511569 -> 492716 bytes .../_Sources/Textures/sphereShape.psd.meta | 4 +- Doxyfile | 4 +- LICENCE | 2 +- ProjectSettings/EditorBuildSettings.asset | Bin 4284 -> 4308 bytes ProjectSettings/ProjectSettings.asset | Bin 15936 -> 24860 bytes ProjectSettings/QualitySettings.asset | Bin 4544 -> 4568 bytes ProjectSettings/TagManager.asset | Bin 5680 -> 6968 bytes VERSION | 6 +- share/4HFI_m2.pdb | 5 + share/caffeine.pdb | 54 +- 612 files changed, 15873 insertions(+), 13480 deletions(-) diff --git a/Assets/MainMenu.unity b/Assets/MainMenu.unity index 3fca6ad2986165838c89d76b01d734aaf0940600..446c977ee1f00e4bdfb1796be5aa6f92dc126cce 100644 GIT binary patch delta 2351 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 Td!0tc0(;V9u*A7xC4Kx~%gCo> diff --git a/Assets/Marcs_Assets/Image Based/DreamEffect.cs b/Assets/Marcs_Assets/Image Based/DreamEffect.cs index 35d057c6..c1f88cb5 100755 --- a/Assets/Marcs_Assets/Image Based/DreamEffect.cs +++ b/Assets/Marcs_Assets/Image Based/DreamEffect.cs @@ -140,7 +140,7 @@ void OnRenderImage (RenderTexture source, RenderTexture destination) BlackChannelMaterial.SetFloat( "_ContrastPower", ContrastPower ); BlackChannelMaterial.SetFloat( "_ContrastBias", ContrastBias ); - ImageEffects.BlitWithMaterial (BlackChannelMaterial , source, dreamBuffer); + ImageEffects2.BlitWithMaterial (BlackChannelMaterial , source, dreamBuffer); // Copy source to the 4x4 smaller texture. DownSample4x (source, buffer); @@ -153,10 +153,10 @@ void OnRenderImage (RenderTexture source, RenderTexture destination) else FourTapCone (buffer2, buffer, i); oddEven = !oddEven; } - if( oddEven ) ImageEffects.Blit(buffer, destination); - else ImageEffects.Blit(buffer2, destination); + if( oddEven ) ImageEffects2.Blit(buffer, destination); + else ImageEffects2.Blit(buffer2, destination); - ImageEffects.Blit( dreamBuffer, destination, BlendMode.Multiply ); + ImageEffects2.Blit( dreamBuffer, destination, BlendMode.Multiply ); RenderTexture.ReleaseTemporary(buffer); RenderTexture.ReleaseTemporary(buffer2); @@ -196,4 +196,4 @@ private static void Set4TexCoords( float x, float y, float offsetX, float offset GL.MultiTexCoord2( 2, x + offsetX, y + offsetY ); GL.MultiTexCoord2( 3, x - offsetX, y + offsetY ); } -} \ No newline at end of file +} diff --git a/Assets/Material/4particle.mat b/Assets/Material/4particle.mat index b2821ab40c4a42ef3b270fde8bc6169daff49961..689c59918cf964152d8e66e703c15fb9a6488d34 100644 GIT binary patch delta 71 zcmV-N0J#5%C5R=E7y~k9F|iw-3K41z92Co_MYe`=U=~A4uLJ|L(F#Kali&&mlN1o7 d5C{MO0AERNc1B@jW!IxnKa;o+kh543Faa^m7bE}x delta 71 zcmV-N0J#5%C5R=E7y~e7G_f0=3K7|6drc3lK`Eq$*w~el(fI?j(F#Kali&&mlN1o7 dlgJQ|5C{MO0AERNc1B@jW!IxnKeJd7FagoZ8fgFk diff --git a/Assets/Molecule.unity b/Assets/Molecule.unity index c8c760f9166dd74c249dfaf0885b63a67119f78a..379d71da502b4a3e8e9d5833bec68a0481f1b3ed 100644 GIT binary patch literal 131452 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 delta 9805 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 diff --git a/Assets/Resources/Materials/triangleparticle.mat b/Assets/Resources/Materials/triangleparticle.mat index 0cde2f32f844d1c7450e465025e3fe35b8fbbf41..5710e2e14a273a33f8e927b3166f88904f625f5e 100644 GIT binary patch literal 4368 zcmeHK>uwx16m}@kk``zSZMm~;>4i(vHYxYCB!Q$vD0J1d{9QS_-el11%*x|Uvq*@M zkaz_i0P&9(K=1}UKzRlpf^fcLd*T^+^M}8Cq?tMP`Fzfq&&T$R5VL;>aq6TH;u#_E z5aQO{&AEmCg7|lTfBy+;pP_3*8l@ANiWONXL56)GAxCg4g*Zx&hwGVHm=}Z2y{&Im z*L<1u)LJUH3-KfwXXt|9>GgKo=*87uVsgE@XH-@sd3J}!x3%iat+v!EGuD?lM#GQ| z#JZT__NI@ymZWO^3l7CO1vreUaBXRJ91dwgyg%ril8t|m3B^!4qt{0kPXR{aMb{#z#PQ;gI*Y&WZT5V*K%O_Mq~)1O8Z>aT8@RiV@_xaofmp8S-xDv zBKb}+H?xF+*l1So?no_q(n#(-ZaZrTW@U3n_LK%IR%13!1Zb#}*myR;AvPq&#&gzG zi@r<6lvMoL2MG}mv&4+sIv*-+#+y4z889MuRnK)M%2IOHjGxAEysx;tC41y%Hjvmo-@!|1MnP{X`dr zXY|zu90|Ia$oy(}ErMyz`s;-8{7qU7Zv=jr2x`}7;>`$xXTowR3f0ZCo&Zy=016e` z5HB2pnvqsmIZoxJbH0HO*d26&jpRar^GU{*&cz7s8(uo|eUwU9riuf<6#$Vo0{7Eg z8nMTF#HEHEO=};s{c^+}1iIJn7gU_sv92_b%}7@pb~M9CZ%6F5l-H22t>kw?P#IsA z?-B;wF@J;!xURN<_s9&$j<6odo_+kXXEZ)Dnvg|hwoK3d_ zpb#xyV|HdV>vsbC4A~*pzRmW}xW}j5;+C~SV*iJBuf~_z`e5ij03Dtm z{xiq-VWL~dTiiTB#Na5yb)Nc8QX2y2xPYz1pZw@ZlPxXv`1%NEUaLo6gQL{6v?}tE z?$R+Q{=6%H`1_~T-+n#&=zH_?kBj7NDpLlg3``lAGVuQxz==e^pEBD{)lh1abW??W z`!DAfn>N1fIvX;{=zA9J@^^fMm2?o{vci~^(O|ei{~ndpF&H~b7yVHtS(2%Ow)WY_ z7Z>p-+oAt|nWl0Nn8&}|#uksmro(3_DOEh{)A|{zZe<4s64)OknK`f{*YFbm0a*1F AZ~y=R literal 3520 zcmai1%aR*46xHwwkc3BgKjV;)ga9#_%)_Y)kW4a$SqyP8&TL)kwrn@FyIpE|%4X#q zEcgp{d;t_2_EfRWFHjU4maO2Ot5#dxX%DwXZb|pFbaiy4J|o1b?}a%1s}SM|Dutap z*$~fB%jifZ!&ptEHc=R>HR}6~$|F>sq|)1$QPNd2v=={L!SAQGP?d}^JJa!GUruZf ze#;oV`!to_!6-_iL}eMZADqAW6#6<+%Q%)ZU>^MN@uT!apuIb3oNB5RW7#q7I1?2X zeqdmpzZ)fH>8E&wUqpk}eykzjm#FMZqllka?8r=sf63fy2vaPCc$^;h_Y!k`U5tD8 zg0EC)K9BmU9m`=R9wR6Cgy9J=tkW_2=59YSsotF#m1I$x?2RY!Cp1RUK^P_%vA{6E z3Hn9*z|Gi>VzqadC*p`a995UNjx?hjhoE3?Jk&GFf@Daue<8_lTa z2IC$bnBC;aqE35LAY~9zmC9$RuONUh-m(fRpCt?oIA;?X~CQd6kpq6-F=d9=qe7cZ4uD%nzY1XE1EPwF2XQKmnDOa&qvA)?`seI_v&QdDbZ;=oC^>P0-l`z0Gre8$qv_9d zw#IK$xs7;jCO3T0!tzv2hI51|_#=$Rb&<*M_~YdDawebm5&0;`Wb%ay9061_`P~{! zHTa8!alx<3~i zX;y_)5+C-JS}EfM?L#5mC2`^A2Q7Y^$?;_gCRi0ooj9o@$Co8;bwOlsJJY5dDXmEq z9!k=Z0eu?qt@Z^<<=E1TchYHMIAwf+l2akN^NET{MPpfl&_SGrUoRy|LC3Aq!iwv+ zBuMfxpP#}WL$;7Xzd(~?z! zD`^so;0=VVX9+}eKuw_Vzd6*tKy{on6qoV&tIJ0m1zPHPa|!|2=&OO8#-^cFmQHm@ znonl5p;@!&Xwoi(B%Q--J`U2j>He3xIw3Lr<4<~)e7D#A_OCyF|NHQlf3R>jK`6tK lYD!6etzdn-wXL>Vts5H~o7=5WwUi344YoFe;Ko3R{{Vu&c{>0A diff --git a/Assets/Resources/Shader/new/BallImproved.shader b/Assets/Resources/Shader/new/BallImproved.shader index d8d274a6..65757aee 100644 --- a/Assets/Resources/Shader/new/BallImproved.shader +++ b/Assets/Resources/Shader/new/BallImproved.shader @@ -1,83 +1,7 @@ -/// @file BallImproved.shader -/// @brief Details to be specified -/// @author FvNano/LBT team -/// @author Marc Baaden -/// @date 2013-4 -/// -/// Copyright Centre National de la Recherche Scientifique (CNRS) -/// -/// contributors : -/// FvNano/LBT team, 2010-13 -/// Marc Baaden, 2010-13 -/// -/// baaden@smplinux.de -/// http://www.baaden.ibpc.fr -/// -/// This software is a computer program based on the Unity3D game engine. -/// It is part of UnityMol, a general framework whose purpose is to provide -/// a prototype for developing molecular graphics and scientific -/// visualisation applications. More details about UnityMol are provided at -/// the following URL: "http://unitymol.sourceforge.net". Parts of this -/// source code are heavily inspired from the advice provided on the Unity3D -/// forums and the Internet. -/// -/// This software is governed by the CeCILL-C license under French law and -/// abiding by the rules of distribution of free software. You can use, -/// modify and/or redistribute the software under the terms of the CeCILL-C -/// license as circulated by CEA, CNRS and INRIA at the following URL: -/// "http://www.cecill.info". -/// -/// As a counterpart to the access to the source code and rights to copy, -/// modify and redistribute granted by the license, users are provided only -/// with a limited warranty and the software's author, the holder of the -/// economic rights, and the successive licensors have only limited -/// liability. -/// -/// In this respect, the user's attention is drawn to the risks associated -/// with loading, using, modifying and/or developing or reproducing the -/// software by the user in light of its specific status of free software, -/// that may mean that it is complicated to manipulate, and that also -/// therefore means that it is reserved for developers and experienced -/// professionals having in-depth computer knowledge. Users are therefore -/// encouraged to load and test the software's suitability as regards their -/// requirements in conditions enabling the security of their systems and/or -/// data to be ensured and, more generally, to use and operate it in the -/// same conditions as regards security. -/// -/// The fact that you are presently reading this means that you have had -/// knowledge of the CeCILL-C license and that you accept its terms. -/// -/// $Id: BallImproved.shader 208 2013-04-06 20:43:58Z baaden $ -/// -/// References : -/// If you use this code, please cite the following reference : -/// Z. Lv, A. Tek, F. Da Silva, C. Empereur-mot, M. Chavent and M. Baaden: -/// "Game on, Science - how video game technology may help biologists tackle -/// visualization challenges" (2013), PLoS ONE 8(3):e57990. -/// doi:10.1371/journal.pone.0057990 -/// -/// If you use the HyperBalls visualization metaphor, please also cite the -/// following reference : M. Chavent, A. Vanel, A. Tek, B. Levy, S. Robert, -/// B. Raffin and M. Baaden: "GPU-accelerated atom and dynamic bond visualization -/// using HyperBalls, a unified algorithm for balls, sticks and hyperboloids", -/// J. Comput. Chem., 2011, 32, 2924 -/// - -// Upgrade NOTE: replaced 'glstate.matrix.invtrans.modelview[0]' with 'UNITY_MATRIX_IT_MV' -// Upgrade NOTE: replaced 'glstate.matrix.mvp' with 'UNITY_MATRIX_MVP' - -// $Id: BallImproved.shader 208 2013-04-06 20:43:58Z baaden $ -// (c) 2010 by Marc Baaden & Matthieu Chavent, -// Unity3D FvNano shaders coming from FVNano project -// -// On a un cube (mesh) dans la scene -> vertex -// la spherepos du cube est 0, 0, 0 - - Shader "FvNano/Ball HyperBalls OpenGL" { -// Proprietes exposees a l'interface graphique +// Properties exposed to the interface Properties { _Rayon ("Rayon de la Sphere", float) = 0.1 _Color ("Couleur de la Sphere", Color) = (1,0.1,0.1,1.0) @@ -86,6 +10,8 @@ Properties { _Light ("Light vector", Vector) = (1,0,0,0) _Equation("Equation", Vector) = (1,1,1,1) _MatCap ("MatCap (RGB)", 2D) = "white" {} + _Attenuation ("Attenuation", float) = 0 + _Brightness ("Brightness", float) = 1.0 } @@ -94,6 +20,7 @@ Properties { // ========================================================== SubShader { + ZWrite On // doesn't seem to help Pass { //Name "BASE" //Tags { "LightMode" = "Always" } @@ -109,7 +36,7 @@ CGPROGRAM #pragma target 3.0 #pragma vertex ballimproved_v #pragma fragment ballimproved_p -#pragma multi_compile_builtin +#pragma multi_compile_builtin_noshadows #include "UnityCG.cginc" // Variables modifiables dans Unity3D @@ -122,6 +49,8 @@ float4 _Equation; uniform sampler2D _MatCap; float _Cut; float4 _Cutplane; +int _Attenuation; +float _Brightness; // uniform float4x4 _matMVPI; @@ -154,71 +83,76 @@ struct Ray { float3 direction ; }; +float sum (float4 v) { + return v.x + v.y + v.z + v.w; +} + +float sum (float3 v) { + return v.x + v.y + v.z; +} //inverse function -float4x4 mat_inverse(float4x4 matrix) { - - float4x4 inv; +float4x4 mat_inverse(float4x4 my_mat) { - float det = matrix[0][0]*matrix[1][1]*matrix[2][2]*matrix[3][3] + matrix[0][0]*matrix[1][2]*matrix[2][3]*matrix[3][1] + matrix[0][0]*matrix[1][3]*matrix[2][1]*matrix[3][2] + - matrix[0][1]*matrix[1][0]*matrix[2][3]*matrix[3][2] + matrix[0][1]*matrix[1][2]*matrix[2][0]*matrix[3][3] + matrix[0][1]*matrix[1][3]*matrix[2][2]*matrix[3][0] + - matrix[0][2]*matrix[1][0]*matrix[2][1]*matrix[3][3] + matrix[0][2]*matrix[1][1]*matrix[2][3]*matrix[3][0] + matrix[0][2]*matrix[1][3]*matrix[2][0]*matrix[3][1] + - matrix[0][3]*matrix[1][0]*matrix[2][2]*matrix[3][1] + matrix[0][3]*matrix[1][1]*matrix[2][0]*matrix[3][2] + matrix[0][3]*matrix[1][2]*matrix[2][1]*matrix[3][0] - - matrix[0][0]*matrix[1][1]*matrix[2][3]*matrix[3][2] - matrix[0][0]*matrix[1][2]*matrix[2][1]*matrix[3][3] - matrix[0][0]*matrix[1][3]*matrix[2][2]*matrix[3][1] - - matrix[0][1]*matrix[1][0]*matrix[2][2]*matrix[3][3] - matrix[0][1]*matrix[1][2]*matrix[2][3]*matrix[3][0] - matrix[0][1]*matrix[1][3]*matrix[2][0]*matrix[3][2] - - matrix[0][2]*matrix[1][0]*matrix[2][3]*matrix[3][1] - matrix[0][2]*matrix[1][1]*matrix[2][0]*matrix[3][3] - matrix[0][2]*matrix[1][3]*matrix[2][1]*matrix[3][0] - - matrix[0][3]*matrix[1][0]*matrix[2][1]*matrix[3][2] - matrix[0][3]*matrix[1][1]*matrix[2][2]*matrix[3][0] - matrix[0][3]*matrix[1][2]*matrix[2][0]*matrix[3][1] ; + float4x4 inv; + float det = determinant(my_mat); + float invdet = 1/det; - inv[0][0] = (1/det)*( matrix[1][1]*matrix[2][2]*matrix[3][3] + matrix[1][2]*matrix[2][3]*matrix[3][1] + matrix[1][3]*matrix[2][1]*matrix[3][2] - - matrix[1][1]*matrix[2][3]*matrix[3][2] - matrix[1][2]*matrix[2][1]*matrix[3][3] - matrix[1][3]*matrix[2][2]*matrix[3][1] ) ; + inv[0][0] = invdet*( my_mat[1][1]*my_mat[2][2]*my_mat[3][3] + my_mat[1][2]*my_mat[2][3]*my_mat[3][1] + my_mat[1][3]*my_mat[2][1]*my_mat[3][2] - + my_mat[1][1]*my_mat[2][3]*my_mat[3][2] - my_mat[1][2]*my_mat[2][1]*my_mat[3][3] - my_mat[1][3]*my_mat[2][2]*my_mat[3][1] ) ; - inv[0][1] = (1/det)*( matrix[0][1]*matrix[2][3]*matrix[3][2] + matrix[0][2]*matrix[2][1]*matrix[3][3] + matrix[0][3]*matrix[2][2]*matrix[3][1] - - matrix[0][1]*matrix[2][2]*matrix[3][3] - matrix[0][2]*matrix[2][3]*matrix[3][1] - matrix[0][3]*matrix[2][1]*matrix[3][2] ) ; + inv[0][1] = invdet*( my_mat[0][1]*my_mat[2][3]*my_mat[3][2] + my_mat[0][2]*my_mat[2][1]*my_mat[3][3] + my_mat[0][3]*my_mat[2][2]*my_mat[3][1] - + my_mat[0][1]*my_mat[2][2]*my_mat[3][3] - my_mat[0][2]*my_mat[2][3]*my_mat[3][1] - my_mat[0][3]*my_mat[2][1]*my_mat[3][2] ) ; - inv[0][2] = (1/det)*( matrix[0][1]*matrix[1][2]*matrix[3][3] + matrix[0][2]*matrix[1][3]*matrix[3][1] + matrix[0][3]*matrix[1][1]*matrix[3][2] - - matrix[0][1]*matrix[1][3]*matrix[3][2] - matrix[0][2]*matrix[1][1]*matrix[3][3] - matrix[0][3]*matrix[1][2]*matrix[3][1] ) ; + inv[0][2] = invdet*( my_mat[0][1]*my_mat[1][2]*my_mat[3][3] + my_mat[0][2]*my_mat[1][3]*my_mat[3][1] + my_mat[0][3]*my_mat[1][1]*my_mat[3][2] - + my_mat[0][1]*my_mat[1][3]*my_mat[3][2] - my_mat[0][2]*my_mat[1][1]*my_mat[3][3] - my_mat[0][3]*my_mat[1][2]*my_mat[3][1] ) ; - inv[0][3] = (1/det)*( matrix[0][1]*matrix[1][3]*matrix[2][2] + matrix[0][2]*matrix[1][1]*matrix[2][3] + matrix[0][3]*matrix[1][2]*matrix[2][1] - - matrix[0][1]*matrix[1][2]*matrix[2][3] - matrix[0][2]*matrix[1][3]*matrix[2][1] - matrix[0][3]*matrix[1][1]*matrix[2][2] ) ; + inv[0][3] = invdet*( my_mat[0][1]*my_mat[1][3]*my_mat[2][2] + my_mat[0][2]*my_mat[1][1]*my_mat[2][3] + my_mat[0][3]*my_mat[1][2]*my_mat[2][1] - + my_mat[0][1]*my_mat[1][2]*my_mat[2][3] - my_mat[0][2]*my_mat[1][3]*my_mat[2][1] - my_mat[0][3]*my_mat[1][1]*my_mat[2][2] ) ; - inv[1][0] = (1/det)*( matrix[1][0]*matrix[2][3]*matrix[3][2] + matrix[1][2]*matrix[2][0]*matrix[3][3] + matrix[1][3]*matrix[2][2]*matrix[3][0] - - matrix[1][0]*matrix[2][2]*matrix[3][3] - matrix[1][2]*matrix[2][3]*matrix[3][0] - matrix[1][3]*matrix[2][0]*matrix[3][2] ) ; + inv[1][0] = invdet*( my_mat[1][0]*my_mat[2][3]*my_mat[3][2] + my_mat[1][2]*my_mat[2][0]*my_mat[3][3] + my_mat[1][3]*my_mat[2][2]*my_mat[3][0] - + my_mat[1][0]*my_mat[2][2]*my_mat[3][3] - my_mat[1][2]*my_mat[2][3]*my_mat[3][0] - my_mat[1][3]*my_mat[2][0]*my_mat[3][2] ) ; - inv[1][1] = (1/det)*( matrix[0][0]*matrix[2][2]*matrix[3][3] + matrix[0][2]*matrix[2][3]*matrix[3][0] + matrix[0][3]*matrix[2][0]*matrix[3][2] - - matrix[0][0]*matrix[2][3]*matrix[3][2] - matrix[0][2]*matrix[2][0]*matrix[3][3] - matrix[0][3]*matrix[2][2]*matrix[3][0] ) ; + inv[1][1] = invdet*( my_mat[0][0]*my_mat[2][2]*my_mat[3][3] + my_mat[0][2]*my_mat[2][3]*my_mat[3][0] + my_mat[0][3]*my_mat[2][0]*my_mat[3][2] - + my_mat[0][0]*my_mat[2][3]*my_mat[3][2] - my_mat[0][2]*my_mat[2][0]*my_mat[3][3] - my_mat[0][3]*my_mat[2][2]*my_mat[3][0] ) ; - inv[1][2] = (1/det)*( matrix[0][0]*matrix[1][3]*matrix[3][2] + matrix[0][2]*matrix[1][0]*matrix[3][3] + matrix[0][3]*matrix[1][2]*matrix[3][0] - - matrix[0][0]*matrix[1][2]*matrix[3][3] - matrix[0][2]*matrix[1][3]*matrix[3][0] - matrix[0][3]*matrix[1][0]*matrix[3][2] ) ; + inv[1][2] = invdet*( my_mat[0][0]*my_mat[1][3]*my_mat[3][2] + my_mat[0][2]*my_mat[1][0]*my_mat[3][3] + my_mat[0][3]*my_mat[1][2]*my_mat[3][0] - + my_mat[0][0]*my_mat[1][2]*my_mat[3][3] - my_mat[0][2]*my_mat[1][3]*my_mat[3][0] - my_mat[0][3]*my_mat[1][0]*my_mat[3][2] ) ; - inv[1][3] = (1/det)*( matrix[0][0]*matrix[1][2]*matrix[2][3] + matrix[0][2]*matrix[1][3]*matrix[2][0] + matrix[0][3]*matrix[1][0]*matrix[2][2] - - matrix[0][0]*matrix[1][3]*matrix[2][2] - matrix[0][2]*matrix[1][0]*matrix[2][3] - matrix[0][3]*matrix[1][2]*matrix[2][0] ) ; + inv[1][3] = invdet*( my_mat[0][0]*my_mat[1][2]*my_mat[2][3] + my_mat[0][2]*my_mat[1][3]*my_mat[2][0] + my_mat[0][3]*my_mat[1][0]*my_mat[2][2] - + my_mat[0][0]*my_mat[1][3]*my_mat[2][2] - my_mat[0][2]*my_mat[1][0]*my_mat[2][3] - my_mat[0][3]*my_mat[1][2]*my_mat[2][0] ) ; - inv[2][0] = (1/det)*( matrix[1][0]*matrix[2][1]*matrix[3][3] + matrix[1][1]*matrix[2][3]*matrix[3][0] + matrix[1][3]*matrix[2][0]*matrix[3][1] - - matrix[1][0]*matrix[2][3]*matrix[3][1] - matrix[1][1]*matrix[2][0]*matrix[3][3] - matrix[1][3]*matrix[2][1]*matrix[3][0] ) ; + inv[2][0] = invdet*( my_mat[1][0]*my_mat[2][1]*my_mat[3][3] + my_mat[1][1]*my_mat[2][3]*my_mat[3][0] + my_mat[1][3]*my_mat[2][0]*my_mat[3][1] - + my_mat[1][0]*my_mat[2][3]*my_mat[3][1] - my_mat[1][1]*my_mat[2][0]*my_mat[3][3] - my_mat[1][3]*my_mat[2][1]*my_mat[3][0] ) ; - inv[2][1] = (1/det)*( matrix[0][0]*matrix[2][3]*matrix[3][1] + matrix[0][1]*matrix[2][0]*matrix[3][3] + matrix[0][3]*matrix[2][1]*matrix[3][0] - - matrix[0][0]*matrix[2][1]*matrix[3][3] - matrix[0][1]*matrix[2][3]*matrix[3][0] - matrix[0][3]*matrix[2][0]*matrix[3][1] ) ; + inv[2][1] = invdet*( my_mat[0][0]*my_mat[2][3]*my_mat[3][1] + my_mat[0][1]*my_mat[2][0]*my_mat[3][3] + my_mat[0][3]*my_mat[2][1]*my_mat[3][0] - + my_mat[0][0]*my_mat[2][1]*my_mat[3][3] - my_mat[0][1]*my_mat[2][3]*my_mat[3][0] - my_mat[0][3]*my_mat[2][0]*my_mat[3][1] ) ; - inv[2][2] = (1/det)*( matrix[0][0]*matrix[1][1]*matrix[3][3] + matrix[0][1]*matrix[1][3]*matrix[3][0] + matrix[0][3]*matrix[1][0]*matrix[3][1] - - matrix[0][0]*matrix[1][3]*matrix[3][1] - matrix[0][1]*matrix[1][0]*matrix[3][3] - matrix[0][3]*matrix[1][1]*matrix[3][0] ) ; + inv[2][2] = invdet*( my_mat[0][0]*my_mat[1][1]*my_mat[3][3] + my_mat[0][1]*my_mat[1][3]*my_mat[3][0] + my_mat[0][3]*my_mat[1][0]*my_mat[3][1] - + my_mat[0][0]*my_mat[1][3]*my_mat[3][1] - my_mat[0][1]*my_mat[1][0]*my_mat[3][3] - my_mat[0][3]*my_mat[1][1]*my_mat[3][0] ) ; - inv[2][3] = (1/det)*( matrix[0][0]*matrix[1][3]*matrix[2][1] + matrix[0][1]*matrix[1][0]*matrix[2][3] + matrix[0][3]*matrix[1][1]*matrix[2][0] - - matrix[0][0]*matrix[1][1]*matrix[2][3] - matrix[0][1]*matrix[1][3]*matrix[2][0] - matrix[0][3]*matrix[1][0]*matrix[2][1] ) ; + inv[2][3] = invdet*( my_mat[0][0]*my_mat[1][3]*my_mat[2][1] + my_mat[0][1]*my_mat[1][0]*my_mat[2][3] + my_mat[0][3]*my_mat[1][1]*my_mat[2][0] - + my_mat[0][0]*my_mat[1][1]*my_mat[2][3] - my_mat[0][1]*my_mat[1][3]*my_mat[2][0] - my_mat[0][3]*my_mat[1][0]*my_mat[2][1] ) ; - inv[3][0] = (1/det)*( matrix[1][0]*matrix[2][2]*matrix[3][1] + matrix[1][1]*matrix[2][0]*matrix[3][2] + matrix[1][2]*matrix[2][1]*matrix[3][0] - - matrix[1][0]*matrix[2][1]*matrix[3][2] - matrix[1][1]*matrix[2][2]*matrix[3][0] - matrix[1][2]*matrix[2][0]*matrix[3][1] ) ; + inv[3][0] = invdet*( my_mat[1][0]*my_mat[2][2]*my_mat[3][1] + my_mat[1][1]*my_mat[2][0]*my_mat[3][2] + my_mat[1][2]*my_mat[2][1]*my_mat[3][0] - + my_mat[1][0]*my_mat[2][1]*my_mat[3][2] - my_mat[1][1]*my_mat[2][2]*my_mat[3][0] - my_mat[1][2]*my_mat[2][0]*my_mat[3][1] ) ; - inv[3][1] = (1/det)*( matrix[0][0]*matrix[2][1]*matrix[3][2] + matrix[0][1]*matrix[2][2]*matrix[3][0] + matrix[0][2]*matrix[2][0]*matrix[3][1] - - matrix[0][0]*matrix[2][2]*matrix[3][1] - matrix[0][1]*matrix[2][0]*matrix[3][2] - matrix[0][2]*matrix[2][1]*matrix[3][0] ) ; + inv[3][1] = invdet*( my_mat[0][0]*my_mat[2][1]*my_mat[3][2] + my_mat[0][1]*my_mat[2][2]*my_mat[3][0] + my_mat[0][2]*my_mat[2][0]*my_mat[3][1] - + my_mat[0][0]*my_mat[2][2]*my_mat[3][1] - my_mat[0][1]*my_mat[2][0]*my_mat[3][2] - my_mat[0][2]*my_mat[2][1]*my_mat[3][0] ) ; - inv[3][2] = (1/det)*( matrix[0][0]*matrix[1][2]*matrix[3][1] + matrix[0][1]*matrix[1][0]*matrix[3][2] + matrix[0][2]*matrix[1][1]*matrix[3][0] - - matrix[0][0]*matrix[1][1]*matrix[3][2] - matrix[0][1]*matrix[1][2]*matrix[3][0] - matrix[0][2]*matrix[1][0]*matrix[3][1] ) ; + inv[3][2] = invdet*( my_mat[0][0]*my_mat[1][2]*my_mat[3][1] + my_mat[0][1]*my_mat[1][0]*my_mat[3][2] + my_mat[0][2]*my_mat[1][1]*my_mat[3][0] - + my_mat[0][0]*my_mat[1][1]*my_mat[3][2] - my_mat[0][1]*my_mat[1][2]*my_mat[3][0] - my_mat[0][2]*my_mat[1][0]*my_mat[3][1] ) ; - inv[3][3] = (1/det)*( matrix[0][0]*matrix[1][1]*matrix[2][2] + matrix[0][1]*matrix[1][2]*matrix[2][0] + matrix[0][2]*matrix[1][0]*matrix[2][1] - - matrix[0][0]*matrix[1][2]*matrix[2][1] - matrix[0][1]*matrix[1][0]*matrix[2][2] - matrix[0][2]*matrix[1][1]*matrix[2][0] ) ; + inv[3][3] = invdet*( my_mat[0][0]*my_mat[1][1]*my_mat[2][2] + my_mat[0][1]*my_mat[1][2]*my_mat[2][0] + my_mat[0][2]*my_mat[1][0]*my_mat[2][1] - + my_mat[0][0]*my_mat[1][2]*my_mat[2][1] - my_mat[0][1]*my_mat[1][0]*my_mat[2][2] - my_mat[0][2]*my_mat[1][1]*my_mat[2][0] ) ; return inv ; - +} + +float distance_attenuation(int attenuate, float4 eye, float4 pos){ + float dist = distance(pos, eye); + float attenuation = 1/(0.00001 + 0.0001 * dist); + return min(attenuation, 1); } struct Quadric{ @@ -228,58 +162,59 @@ struct Quadric{ //ray-quadric intersection function Quadric isect_surf(Ray r, float4x4 matrix_coef) { - - Quadric q; - float4 direction = float4(r.direction, 0.0); - float4 origin = float4(r.origin, 1.0); - - float a = dot(direction,mul(matrix_coef,direction)) ; - float b = dot(origin,mul(matrix_coef,direction)) ; - float c = dot(origin,mul(matrix_coef,origin)); - - float delta = b*b - a * c ; - if (delta<0) clip(-1); - - float t1 = (-b-sqrt(delta)) / a ; - float t2 = (-b+sqrt(delta)) / a ; - float t =(t1 // Unity3D FvNano shaders coming from FVNano project // @@ -76,8 +76,7 @@ Shader "FvNano/Ball HyperBalls D3D" { - -// Proprietes exposees a l'interface graphique +// Properties exposed to the interface Properties { _Rayon ("Rayon de la Sphere", float) = 0.1 _Color ("Couleur de la Sphere", Color) = (1,0.1,0.1,1.0) @@ -86,6 +85,8 @@ Properties { _Light ("Light vector", Vector) = (1,0,0,0) _Equation("Equation", Vector) = (1,1,1,1) _MatCap ("MatCap (RGB)", 2D) = "white" {} + _Attenuation ("Attenuation", float) = 0 + _Brightness ("Brightness", float) = 1.0 } @@ -94,14 +95,16 @@ Properties { // ========================================================== SubShader { + ZWrite On // doesn't seem to help Pass { - Name "BASE" - Tags { "LightMode" = "Always" } + //Name "BASE" + //Tags { "LightMode" = "Always" } Program "vp" { // Vertex combos: 1 -// opengl - ALU: 244 to 244 -// d3d9 - ALU: 278 to 278, FLOW: 2 to 2 +// opengl - ALU: 210 to 210 +// d3d9 - ALU: 245 to 245, FLOW: 2 to 2 +// d3d11 - ALU: 65 to 65, TEX: 0 to 0, FLOW: 1 to 1 SubProgram "opengl " { Keywords { } Bind "vertex" Vertex @@ -109,8 +112,8 @@ Float 5 [_Rayon] Vector 6 [_TexPos] Vector 7 [_Equation] "3.0-!!ARBvp1.0 -# 244 ALU -PARAM c[8] = { { 0, 2, 1 }, +# 210 ALU +PARAM c[8] = { { 0, 2, 1, -1 }, state.matrix.mvp, program.local[5..7] }; TEMP R0; @@ -127,244 +130,210 @@ TEMP R10; TEMP R11; TEMP R12; TEMP R13; +MOV R0, c[4]; +MUL R2, R0.wxyz, c[3].yzwx; +MAD R2, R0.yzwx, c[3].wxyz, -R2; +MUL R3, R2, c[2].zwxy; +MUL R1, R0.zwxy, c[3].wxyz; +MAD R1, R0.wxyz, c[3].zwxy, -R1; +MUL R2, R0.yzwx, c[3].zwxy; +MAD R0, R0.zwxy, c[3].yzwx, -R2; +MOV R2, c[2]; +MAD R1, R1, c[2].yzwx, R3; +MAD R0, R0, c[2].wxyz, R1; +MOV R1, c[3]; +MUL R0, R0, c[1]; +DP4 R0.x, R0, c[0].zwzw; +MUL R3.w, R2.x, c[1].y; +MUL R10.z, R2.x, c[1]; +MOV R4.x, c[0].z; +SLT R4.x, c[5], R4; +ABS R4.x, R4; +RCP R0.w, R0.x; +MUL R9.x, R2.z, c[1].y; +MUL R11.w, R2.y, c[1].x; +MUL R0.x, R9, c[3]; +MAD R0.x, R11.w, c[3].z, R0; +MUL R10.y, R2.z, c[1].x; +MUL R0.y, R3.w, c[4].z; +MAD R0.x, R10.z, c[3].y, R0; +MAD R0.x, -R10.y, c[3].y, R0; +MUL R8.w, R2.y, c[1].z; +MAD R0.x, -R3.w, c[3].z, R0; +MAD R0.y, R10, c[4], R0; +MAD R0.x, -R8.w, c[3], R0; +MAD R0.y, R8.w, c[4].x, R0; +MUL R12.z, R2.w, c[1].x; +MUL R12.x, R2.w, c[1].y; +MUL R12.y, R2, c[1].w; +MUL R5.w, R0, R0.x; +MAD R0.y, -R11.w, c[4].z, R0; +MAD R0.x, -R9, c[4], R0.y; +MAD R0.x, -R10.z, c[4].y, R0; +MUL R5.z, R0.w, R0.x; +MUL R8.x, R1.z, c[1].y; +MUL R11.x, R1.y, c[1]; +MUL R0.x, R8, c[4]; +MUL R9.z, R1.x, c[1]; +MAD R0.x, R11, c[4].z, R0; +MUL R9.y, R1.z, c[1].x; +MAD R0.x, R9.z, c[4].y, R0; +MUL R11.z, R1.x, c[1].y; +MAD R0.x, -R9.y, c[4].y, R0; +MUL R7.z, R1.y, c[1]; +MAD R0.x, -R11.z, c[4].z, R0; +MAD R0.x, -R7.z, c[4], R0; +MUL R10.w, R1.x, c[2].y; +MUL R5.y, R0.w, R0.x; +MUL R11.y, R1, c[2].x; +MOV R6.w, c[0].z; +MOV R4.z, c[0].x; +MUL R2.x, R2, c[1].w; +MUL R10.x, R1.z, c[2]; +MUL R0.x, R10.w, c[4].z; +MUL R8.z, R1.y, c[2]; +MAD R0.x, R10, c[4].y, R0; +MAD R0.x, R8.z, c[4], R0; +MAD R0.x, -R11.y, c[4].z, R0; +MUL R8.y, R1.z, c[2]; +MAD R3.x, -R8.y, c[4], R0; +MUL R9.w, R1.x, c[2].z; +MAD R3.x, -R9.w, c[4].y, R3; MUL R0.xyz, vertex.position, c[5].x; +MUL R5.x, R0.w, R3; MUL R0.xyz, R0, c[0].y; -MOV R0.w, c[0].z; -MUL R1.xyz, vertex.position, c[0].y; -SLT R0.w, c[5].x, R0; -ABS R0.w, R0; -ADD R1.xyz, R1, c[6]; +ADD R3.xyz, R0, c[6]; +MUL R0.xyz, vertex.position, c[0].y; ADD R0.xyz, R0, c[6]; -ADD R0.xyz, R0, -R1; -SGE R0.w, c[0].x, R0; -MAD R6.xyz, R0, R0.w, R1; -MOV R0, c[2]; -MOV R6.w, c[0].z; -MUL R8.x, R0.y, c[1].z; -MUL R8.y, R0.w, c[1]; -MUL R8.z, R0, c[1].y; -MUL R3.y, R0.x, c[1]; -DP4 R1.z, R6, c[4]; -MUL R3.z, R0.y, c[1].x; -MUL R2.z, R8, c[3].x; -MUL R10.z, R8.y, c[4].x; -MUL R2.y, R0.x, c[1].z; -MAD R1.w, R3.z, c[3].z, R2.z; -MUL R2.x, R0.z, c[1]; -MAD R1.w, R2.y, c[3].y, R1; -MAD R1.w, -R2.x, c[3].y, R1; -MAD R4.z, -R3.y, c[3], R1.w; -MUL R2.w, R3.y, c[4].z; -MAD R2.w, R2.x, c[4].y, R2; -MAD R2.w, R8.x, c[4].x, R2; -MAD R3.x, -R3.z, c[4].z, R2.w; -MUL R2.w, R2.x, c[3]; -MUL R3.w, R2, c[4].y; -MUL R2.w, R3.z, c[3].z; -MAD R3.x, -R8.z, c[4], R3; -MUL R1.w, R0, c[1].x; -MAD R3.w, R2, c[4], R3; -MUL R2.w, R1, c[3].y; -MAD R2.w, R2, c[4].z, R3; -MUL R3.w, R3.y, c[3]; -MAD R2.w, R3, c[4].z, R2; -MAD R2.w, R2.z, c[4], R2; -MUL R2.z, R8.y, c[3]; -MAD R2.w, R2.z, c[4].x, R2; -MUL R2.z, R2.y, c[3].y; -MUL R11.x, R0.y, c[1].w; -MAD R3.w, R1, c[3].y, R3; -MAD R3.w, R11.x, c[3].x, R3; -MUL R11.y, R0.z, c[1].w; -DP4 R1.x, R6, c[1]; -DP4 R1.y, R6, c[2]; -MUL R9.x, R0.w, c[1].z; -MAD R2.z, R2, c[4].w, R2.w; -MUL R7.z, R8.x, c[3].w; -MAD R5.x, R7.z, c[4], R2.z; -MUL R2.z, R0.x, c[1].w; -MUL R2.w, R9.x, c[3].x; -MOV R7.xy, R1; -MOV R7.w, R1.z; +ADD R3.xyz, R3, -R0; +SGE R4.x, c[0], R4; +MAD R6.xyz, R3, R4.x, R0; +DP4 R0.z, R6, c[4]; +MUL R3.x, R3.w, c[3].w; +MAD R3.x, R12.z, c[3].y, R3; +MAD R2.y, R12, c[3].x, R3.x; +MAD R2.y, -R11.w, c[3].w, R2; +MUL R3.y, R11.z, c[4].w; +MUL R3.x, R12, c[4]; +MAD R3.x, R11.w, c[4].w, R3; +MAD R3.x, R2, c[4].y, R3; +MAD R3.x, -R12.z, c[4].y, R3; +MAD R3.x, -R3.w, c[4].w, R3; +MAD R3.x, -R12.y, c[4], R3; +MAD R2.y, -R12.x, c[3].x, R2; +MAD R2.y, -R2.x, c[3], R2; +MUL R3.w, R0, R2.y; +MUL R2.y, R1.w, c[1].x; +DP4 R0.x, R6, c[1]; +DP4 R0.y, R6, c[2]; +MUL R3.z, R0.w, R3.x; +MOV R7.xy, R0; +MOV R7.w, R0.z; MOV R4.xyw, R7; -MAD R0.w, R2, c[4].y, R5.x; -MUL R0.x, R2.z, c[3].z; -MAD R0.w, R0.x, c[4].y, R0; -MUL R0.x, R11, c[3]; -MAD R0.y, R0.x, c[4].z, R0.w; -MUL R0.x, R11.y, c[3].y; -MAD R0.y, R0.x, c[4].x, R0; -MUL R0.x, R3.z, c[3].w; -MAD R0.y, -R0.x, c[4].z, R0; -MUL R0.x, R2, c[3].y; -MAD R0.y, -R0.x, c[4].w, R0; -MUL R0.x, R1.w, c[3].z; -MAD R0.y, -R0.x, c[4], R0; -MUL R0.x, R3.y, c[3].z; -MAD R0.y, -R0.x, c[4].w, R0; -MUL R0.x, R8.z, c[3].w; -MAD R0.y, -R0.x, c[4].x, R0; -MUL R0.x, R8.y, c[3]; -MAD R0.y, -R0.x, c[4].z, R0; -MUL R0.x, R2.y, c[3].w; -MAD R0.y, -R0.x, c[4], R0; -MUL R0.x, R8, c[3]; -MAD R0.y, -R0.x, c[4].w, R0; -MUL R0.x, R9, c[3].y; -MAD R0.y, -R0.x, c[4].x, R0; -MUL R0.x, R2.z, c[3].y; -MAD R0.y, -R0.x, c[4].z, R0; -MUL R0.x, R11, c[3].z; -MAD R0.y, -R0.x, c[4].x, R0; -MUL R0.x, R11.y, c[3]; -MAD R0.x, -R0, c[4].y, R0.y; -RCP R8.w, R0.x; -MAD R0.y, -R8.x, c[3].x, R4.z; -MUL R5.w, R8, R0.y; -MOV R0, c[3]; -MUL R10.w, R0.x, c[2].y; -MAD R3.x, -R2.y, c[4].y, R3; -MUL R9.z, R0, c[1].y; -MUL R5.z, R8.w, R3.x; -MUL R12.z, R0, c[2].x; -MUL R5.x, R10.w, c[4].z; -MUL R11.z, R0.y, c[2].x; -MUL R11.w, R0.x, c[2].z; -MUL R3.x, R0.y, c[1]; -MUL R4.z, R9, c[4].x; -MUL R12.x, R0, c[1].z; -MAD R4.z, R3.x, c[4], R4; -MUL R13.x, R0.z, c[1]; -MAD R4.z, R12.x, c[4].y, R4; -MUL R10.y, R0.x, c[1]; -MAD R4.z, -R13.x, c[4].y, R4; -MAD R4.z, -R10.y, c[4], R4; -MUL R9.y, R0, c[1].z; -MAD R4.z, -R9.y, c[4].x, R4; -MUL R5.y, R8.w, R4.z; -MOV R4.z, c[0].x; -MUL R10.x, R0.y, c[2].z; -MAD R5.x, R12.z, c[4].y, R5; -MAD R5.x, R10, c[4], R5; -MUL R9.w, R0.z, c[2].y; -MAD R5.x, -R11.z, c[4].z, R5; -MAD R5.x, -R9.w, c[4], R5; -MAD R5.x, -R11.w, c[4].y, R5; -MUL R5.x, R8.w, R5; -MAD R3.w, -R3.z, c[3], R3; -MAD R10.z, R3, c[4].w, R10; -MAD R3.z, -R8.y, c[3].x, R3.w; -MAD R3.w, R2.z, c[4].y, R10.z; -MAD R10.z, -R1.w, c[4].y, R3.w; -MAD R3.y, -R3, c[4].w, R10.z; -MAD R3.z, -R2, c[3].y, R3; -MUL R10.z, R0.w, c[2].y; -MUL R3.w, R8, R3.z; -MAD R3.y, -R11.x, c[4].x, R3; -MUL R3.z, R8.w, R3.y; -MUL R12.y, R10.z, c[4].x; -MAD R3.y, R11.z, c[4].w, R12; -MUL R12.y, R0.x, c[2].w; -MUL R11.z, R0.w, c[1].x; -MUL R10.y, R10, c[4].w; -MAD R13.y, R11.z, c[4], R10; -MUL R10.y, R0, c[1].w; -MAD R13.y, R10, c[4].x, R13; -MAD R3.x, -R3, c[4].w, R13.y; -MUL R12.w, R0, c[2].x; -MAD R3.y, R12, c[4], R3; -MAD R3.y, -R12.w, c[4], R3; -MAD R3.y, -R10.w, c[4].w, R3; -MUL R10.w, R0.y, c[2]; -MUL R0.y, R0.w, c[1]; -MAD R3.x, -R0.y, c[4], R3; -MUL R13.y, R0.x, c[1].w; -MAD R0.x, -R13.y, c[4].y, R3; -MAD R3.y, -R10.w, c[4].x, R3; -MUL R3.x, R8.w, R3.y; -MUL R3.y, R8.w, R0.x; -MAD R0.x, R2, c[3].w, R2.w; -MUL R2.w, R2.y, c[4]; -MAD R0.x, R2.z, c[3].z, R0; -MAD R0.x, -R1.w, c[3].z, R0; -MAD R2.w, R1, c[4].z, R2; -MAD R1.w, R11.y, c[4].x, R2; -MAD R1.w, -R2.x, c[4], R1; -MUL R2.x, R11.w, c[4].w; -MAD R0.x, -R2.y, c[3].w, R0; -MAD R0.x, -R11.y, c[3], R0; -MUL R2.w, R8, R0.x; -MAD R1.w, -R9.x, c[4].x, R1; -MAD R1.w, -R2.z, c[4].z, R1; -MUL R0.x, R0.w, c[1].z; -MUL R2.z, R8.w, R1.w; -MUL R1.w, R0.x, c[4].x; -MAD R1.w, R13.x, c[4], R1; -MUL R11.w, R0.z, c[2]; +MUL R11.z, R1.y, c[1].w; +MAD R3.y, R2, c[4], R3; +MAD R3.y, R11.z, c[4].x, R3; +MAD R3.x, -R11, c[4].w, R3.y; +MUL R11.w, R1, c[2].y; +MUL R11.x, R1.w, c[1].y; +MUL R3.y, R11.w, c[4].x; +MAD R3.y, R11, c[4].w, R3; +MUL R12.w, R1.x, c[1]; +MUL R11.y, R1.x, c[2].w; +MAD R3.x, -R11, c[4], R3; +MUL R13.x, R1.w, c[2]; +MAD R1.x, R11.y, c[4].y, R3.y; +MAD R3.x, -R12.w, c[4].y, R3; +MUL R9.w, R9, c[4]; +MUL R3.y, R0.w, R3.x; +MAD R1.x, -R13, c[4].y, R1; +MAD R3.x, -R10.w, c[4].w, R1; +MUL R10.w, R2, c[1].z; +MUL R1.x, R1.y, c[2].w; +MAD R1.y, -R1.x, c[4].x, R3.x; +MUL R3.x, R0.w, R1.y; +MUL R2.w, R10, c[3].x; +MAD R1.y, R10, c[3].w, R2.w; +MAD R1.y, R2.x, c[3].z, R1; +MAD R2.w, -R12.z, c[3].z, R1.y; +MUL R1.y, R2.z, c[1].w; +MAD R2.z, -R10, c[3].w, R2.w; +MUL R13.y, R10.z, c[4].w; +MAD R12.z, R12, c[4], R13.y; +MAD R12.z, R1.y, c[4].x, R12; +MAD R2.w, -R10.y, c[4], R12.z; +MAD R10.y, -R10.w, c[4].x, R2.w; +MAD R2.x, -R2, c[4].z, R10.y; +MAD R2.z, -R1.y, c[3].x, R2; +MUL R2.w, R0, R2.z; +MUL R2.z, R0.w, R2.x; +MUL R10.y, R1.w, c[1].z; +MUL R2.x, R10.y, c[4]; +MAD R2.x, R9.y, c[4].w, R2; +MUL R9.y, R1.z, c[2].w; +MAD R9.w, R13.x, c[4].z, R9; +MAD R9.w, R9.y, c[4].x, R9; +MAD R10.x, -R10, c[4].w, R9.w; +MUL R9.w, R1, c[2].z; MAD R2.x, R12.w, c[4].z, R2; -MAD R2.x, R11.w, c[4], R2; -MAD R2.x, -R12.z, c[4].w, R2; -MUL R12.z, R0.w, c[2]; -MAD R1.w, R13.y, c[4].z, R1; -MAD R0.w, -R11.z, c[4].z, R1; -MAD R2.x, -R12.z, c[4], R2; -MAD R1.w, -R12.y, c[4].z, R2.x; -MUL R2.x, R8.w, R1.w; -MOV R1.zw, R1.z; -MUL R11.z, R0, c[1].w; -MAD R0.w, -R12.x, c[4], R0; -MAD R0.z, -R11, c[4].x, R0.w; -MUL R2.y, R8.w, R0.z; -MAD R0.z, R8.y, c[3], R7; -MUL R0.w, R9.x, c[4].y; -MAD R0.w, R8.z, c[4], R0; -MAD R0.z, R11.y, c[3].y, R0; -MAD R0.w, R11.x, c[4].z, R0; -MAD R0.z, -R8, c[3].w, R0; -MAD R0.w, -R8.y, c[4].z, R0; -MAD R0.w, -R8.x, c[4], R0; -MAD R0.z, -R9.x, c[3].y, R0; -MUL R8.x, R12.z, c[4].y; -MAD R7.z, -R11.y, c[4].y, R0.w; -MAD R0.z, -R11.x, c[3], R0; -MUL R0.w, R8, R0.z; -MUL R0.z, R8.w, R7; -MUL R7.z, R9.y, c[4].w; -MAD R0.y, R0, c[4].z, R7.z; -MAD R8.x, R9.w, c[4].w, R8; -MAD R7.z, R10.w, c[4], R8.x; -MAD R0.y, R11.z, c[4], R0; -MAD R0.y, -R9.z, c[4].w, R0; -MAD R0.x, -R0, c[4].y, R0.y; -MAD R0.y, -R10, c[4].z, R0.x; -MAD R7.z, -R10, c[4], R7; -MAD R7.z, -R10.x, c[4].w, R7; -MAD R7.z, -R11.w, c[4].y, R7; -MUL R0.x, R8.w, R7.z; -MUL R0.y, R8.w, R0; +MAD R1.w, -R2.y, c[4].z, R2.x; +MAD R1.w, -R9.z, c[4], R1; +MUL R9.z, R1, c[1].w; +MAD R1.z, -R9, c[4].x, R1.w; +MUL R2.y, R0.w, R1.z; +MAD R10.x, -R9.w, c[4], R10; +MAD R2.x, -R11.y, c[4].z, R10; +MUL R2.x, R0.w, R2; +MUL R1.z, R8.w, c[3].w; +MUL R1.w, R10, c[4].y; +MAD R1.z, R12.x, c[3], R1; +MAD R1.z, R1.y, c[3].y, R1; +MAD R1.w, R9.x, c[4], R1; +MAD R1.w, R12.y, c[4].z, R1; +MAD R1.z, -R9.x, c[3].w, R1; +MAD R1.w, -R12.x, c[4].z, R1; +MAD R1.w, -R8, c[4], R1; +MAD R1.z, -R10.w, c[3].y, R1; +MAD R1.y, -R1, c[4], R1.w; +MAD R1.z, -R12.y, c[3], R1; +MUL R1.w, R0, R1.z; +MUL R1.z, R0.w, R1.y; +MUL R1.y, R7.z, c[4].w; +MUL R7.z, R9.w, c[4].y; +MAD R1.y, R11.x, c[4].z, R1; +MAD R7.z, R8.y, c[4].w, R7; +MAD R7.z, R1.x, c[4], R7; +MAD R1.y, R9.z, c[4], R1; +MAD R1.x, -R8, c[4].w, R1.y; +MAD R1.y, -R11.w, c[4].z, R7.z; +MAD R1.y, -R8.z, c[4].w, R1; +MAD R1.x, -R10.y, c[4].y, R1; +MAD R7.z, -R9.y, c[4].y, R1.y; +MAD R1.x, -R11.z, c[4].z, R1; +MUL R1.y, R0.w, R1.x; +MUL R1.x, R0.w, R7.z; +MOV R0.zw, R0.z; DP4 R7.z, R6, c[3]; -DP4 result.texcoord[2].x, R0, R1; -DP4 result.texcoord[1].x, R4, R0; -MOV R0.xyz, c[6]; -DP4 result.texcoord[2].w, R5, R1; -DP4 result.texcoord[2].z, R3, R1; -DP4 result.texcoord[2].y, R2, R1; -MUL R1, R0.xyzz, -c[7].xyzz; -MUL R0.w, -R1.x, c[6].x; -MOV result.texcoord[3].xyz, R1; -MUL R1.xy, R0.y, -c[7].y; -MUL R0.xy, R0.zxzw, -c[7].zxzw; -MAD R0.w, -c[5].x, c[5].x, R0; -MAD R0.w, -R1.x, c[6].y, R0; -DP4 result.texcoord[1].w, R5, R4; +DP4 result.texcoord[2].z, R3, R0; DP4 result.texcoord[1].z, R4, R3; +DP4 result.texcoord[2].y, R2, R0; DP4 result.texcoord[1].y, R4, R2; +MOV R3.xyz, c[6]; +MUL R2.xyz, R3, c[7]; +DP4 result.texcoord[2].w, R5, R0; +DP4 result.texcoord[2].x, R1, R0; +MUL R0.xyz, R2, c[6]; +MAD R0.x, -c[5], c[5], R0; +ADD R0.x, R0, R0.y; +DP4 result.texcoord[1].w, R5, R4; +DP4 result.texcoord[1].x, R4, R1; MOV result.position, R7; MOV result.texcoord[4], R7; -MOV result.color.w, R1; -MAD result.texcoord[3].w, -R0.x, c[6].z, R0; -MOV result.texcoord[6].w, R0.y; -MOV result.texcoord[7].w, R1.y; +ADD result.texcoord[3].w, R0.x, R0.z; +MOV result.texcoord[6].w, -R2.x; +MOV result.texcoord[7].w, -R2.y; +MOV result.color.w, -R2.z; +MOV result.texcoord[3].xyz, -R2; MOV result.texcoord[6].yz, c[0].x; MOV result.texcoord[7].xz, c[0].x; MOV result.color.xy, c[0].x; @@ -372,7 +341,7 @@ MOV result.texcoord[6].x, c[7]; MOV result.texcoord[7].y, c[7]; MOV result.color.z, c[7]; END -# 244 instructions, 14 R-regs +# 210 instructions, 14 R-regs " } @@ -384,7 +353,7 @@ Float 4 [_Rayon] Vector 5 [_TexPos] Vector 6 [_Equation] "vs_3_0 -; 278 ALU, 2 FLOW +; 245 ALU, 2 FLOW dcl_position o0 dcl_texcoord1 o1 dcl_texcoord2 o2 @@ -393,245 +362,218 @@ dcl_texcoord7 o4 dcl_color0 o5 dcl_texcoord3 o6 dcl_texcoord4 o7 -def c7, 1.00000000, 2.00000000, 0.00000000, 0 +def c7, 1.00000000, -1.00000000, 2.00000000, 0.00000000 dcl_position0 v0 -mov r0.y, c0.z -mul r1.y, c1.w, r0 -mov r0.x, c0.w -mul r2.z, c1.y, r0.x -mov r0.y, c0 -mul r5.w, c1.z, r0.y -mul r0.z, r1.y, c3.y -mad r0.y, r5.w, c3.w, r0.z -mad r0.z, r2, c3, r0.y +mov r1, c2 +mul r2, c3.wxyz, r1.yzwx +mov r7.x, c1.w +mul r8.x, c2, r7 +mov r1, c2 +mad r1, c3.yzwx, r1.wxyz, -r2 +mov r0, c2 +mul r2, c3.zwxy, r0.wxyz +mov r0, c2 +mad r2, c3.wxyz, r0.zwxy, -r2 +mul r1, r1, c1.zwxy +mov r7.x, c0 +mad r1, r2, c1.yzwx, r1 +mov r0, c2 +mul r2, c3.yzwx, r0.zwxy +mov r0, c2 +mad r0, c3.zwxy, r0.yzwx, -r2 +mad r0, r0, c1.wxyz, r1 +mul r0, r0, c0 +dp4 r0.x, r0, c7.xyxy +rcp r3.x, r0.x mov r0.x, c0.z -mul r6.x, c1.y, r0 -mov r0.y, c0 -mul r8.z, c1.w, r0.y -mul r1.x, r6, c2.w -mov r0.x, c0.w -mul r1.z, c1, r0.x -mad r0.y, r8.z, c2.z, r1.x -mad r0.x, r1.z, c2.y, r0.y -mad r0.z, -r8, c3, r0 -mad r0.y, -r6.x, c3.w, r0.z -mad r0.z, -r5.w, c2.w, r0.x -mov r0.x, c0 -mul r3.w, c1.z, r0.x -mad r0.z, -r1.y, c2.y, r0 -mov r0.x, c0 mul r6.y, c1, r0.x -mul r0.w, r3, c2 -mul r0.x, r6.y, c2.z -mul r0.w, r0, c3.y -mad r1.w, r0.x, c3, r0 -mov r0.w, c0.x +mov r0.y, c0.w +mul r1.z, c1, r0.y mov r0.x, c0.y -mul r6.z, c1.x, r0.x -mul r8.y, c1.w, r0.w -mul r2.x, r6.z, c2.w -mad r9.x, r8.y, c2.y, r2 -mul r0.x, r8.y, c2.y -mad r0.x, r0, c3.z, r1.w -mad r0.w, r2.x, c3.z, r0.x -mul r6.w, r5, c2.x +mov r0.y, c0.w +mul r5.w, c1.y, r0.y +mul r8.w, c1, r0.x +mul r0.z, r6.y, c2.w +mad r0.x, r8.w, c2.z, r0.z +mad r0.z, r1, c2.y, r0.x mov r0.x, c0.z -mul r5.z, c1.x, r0.x -mad r0.w, r6, c3, r0 -mul r0.x, r8.z, c2.z -mad r0.w, r0.x, c3.x, r0 -mul r0.x, r5.z, c2.y -mad r0.w, r0.x, c3, r0 -mov r0.x, c0.w -mul r2.w, c1.x, r0.x -mad r9.x, r2.z, c2, r9 -mad r6.w, r6.y, c2.z, r6 -mov r2.x, c1 -mul r0.x, r1.y, c2 -mad r0.w, r1.x, c3.x, r0 -mad r1.x, r0, c3.y, r0.w -mul r0.w, r2, c2.z -mad r1.x, r0.w, c3.y, r1 -mul r0.w, r2.z, c2.x -mad r1.x, r0.w, c3.z, r1 -mul r0.w, r1.z, c2.y -mad r1.x, r0.w, c3, r1 -mul r0.w, r6.y, c2 -mad r1.x, -r0.w, c3.z, r1 -mul r0.w, r3, c2.y -mad r1.x, -r0.w, c3.w, r1 -mul r0.w, r8.y, c2.z -mad r1.x, -r0.w, c3.y, r1 -mul r0.w, r6.z, c2.z -mad r1.x, -r0.w, c3.w, r1 -mul r0.w, r5, c2 -mad r1.x, -r0.w, c3, r1 -mul r0.w, r8.z, c2.x -mad r1.x, -r0.w, c3.z, r1 -mul r0.w, r5.z, c2 -mad r1.x, -r0.w, c3.y, r1 -mul r0.w, r6.x, c2.x -mad r1.x, -r0.w, c3.w, r1 -mul r0.w, r1.y, c2.y -mad r1.x, -r0.w, c3, r1 -mul r0.w, r2, c2.y -mad r1.x, -r0.w, c3.z, r1 -mul r0.w, r2.z, c2.z -mad r1.x, -r0.w, c3, r1 -mul r0.w, r1.z, c2.x -mad r0.w, -r0, c3.y, r1.x -rcp r3.x, r0.w -mad r0.z, -r2, c2, r0 -mul r0.w, r3.x, r0.z -mad r0.z, -r1, c3.y, r0.y +mul r1.w, c1, r0.x +mov r0.x, c0.y +mul r3.w, c1.z, r0.x +mul r0.w, r1, c3.y +mad r0.x, r3.w, c3.w, r0.w +mad r0.y, r5.w, c3.z, r0.x +mad r0.x, -r3.w, c2.w, r0.z +mad r0.y, -r8.w, c3.z, r0 +mad r0.x, -r1.w, c2.y, r0 +mad r0.x, -r5.w, c2.z, r0 +mad r0.y, -r6, c3.w, r0 +mad r0.y, -r1.z, c3, r0 +mul r0.w, r3.x, r0.x +mul r0.z, r3.x, r0.y +mov r0.x, c0.z +mul r4.y, c2, r0.x +mov r0.y, c0.w +mul r1.y, c2.z, r0 +mov r0.x, c0.y mov r0.y, c0.z -mul r3.y, c2, r0 -mov r0.y, c0 +mul r4.x, c2.w, r0.y +mul r7.x, c1.y, r7 +mul r1.x, r4.y, c3.w +mul r2.y, c2.w, r0.x +mad r0.x, r2.y, c3.z, r1 +mad r1.x, r1.y, c3.y, r0 +mov r0.x, c0.y +mul r3.z, c2, r0.x +mad r0.x, -r3.z, c3.w, r1 +mad r1.x, -r4, c3.y, r0 +mov r0.x, c0.w +mul r2.z, c2.y, r0.x +mov r0.x, c1.y +mul r3.y, c2.z, r0.x +mov r0.x, c1.w +mad r4.w, -r2.z, c3.z, r1.x +mov r0.y, c1.z +mul r1.x, c2.w, r0.y +mul r0.y, r1.x, c3 +mad r2.w, r3.y, c3, r0.y +mul r2.x, c2.y, r0 +mov r0.y, c1 mul r7.y, c2.w, r0 -mul r1.x, r3.y, c3.w -mad r1.w, r7.y, c3.z, r1.x -mov r1.x, c0.w -mul r4.x, c2.z, r1 -mov r0.y, c0 -mul r3.z, c2, r0.y -mad r1.x, r4, c3.y, r1.w -mad r1.w, -r3.z, c3, r1.x -mov r1.x, c0.z -mul r4.w, c2, r1.x -mad r1.x, -r4.w, c3.y, r1.w -mov r0.y, c0.w -mul r7.x, c2.y, r0.y -mad r0.y, -r7.x, c3.z, r1.x -mov r1.w, c1.y -mul r4.z, c2, r1.w -mov r1.x, c1.z -mul r1.x, c2.w, r1 -mul r2.y, r1.x, c3 -mad r4.y, r4.z, c3.w, r2 -mov r2.y, c1.w -mul r7.z, c2.y, r2.y -mov r1.w, c1.y -mul r2.y, c2.w, r1.w -mad r4.y, r7.z, c3.z, r4 -mad r5.x, -r2.y, c3.z, r4.y -mov r1.w, c1 -mov r4.y, c1.z -mul r4.y, c2, r4 -mul r5.y, c2.z, r1.w -mad r5.x, -r4.y, c3.w, r5 -mad r1.w, -r5.y, c3.y, r5.x -mad r5.x, r3.w, c2.w, r0 -mul r0.x, r3, r1.w -mad r1.w, r2, c2.z, r5.x -mul r5.x, r5.z, c3.w -mad r1.w, -r8.y, c2.z, r1 -mad r5.x, r8.y, c3.z, r5 +mad r0.x, r2, c3.z, r2.w +mad r2.w, -r7.y, c3.z, r0.x +mov r0.x, c1.z +mul r4.z, c2.y, r0.x +mad r0.x, -r4.z, c3.w, r2.w +mov r0.y, c1.w +mul r2.w, c2.z, r0.y +mad r0.x, -r2.w, c3.y, r0 +mul r0.y, r3.x, r4.w +mov r4.w, c0.x +mul r6.z, c1, r4.w +mul r5.x, r1.w, c2 +mad r5.y, r6.z, c2.w, r5.x +mov r4.w, c0 +mul r8.z, c1.x, r4.w +mov r5.x, c0.z +mul r6.x, c1, r5 +mov r4.w, c0.x +mul r5.z, c1.w, r4.w +mad r5.y, r8.z, c2.z, r5 +mad r4.w, -r5.z, c2.z, r5.y +mul r5.x, r6, c3.w +mad r5.x, r5.z, c3.z, r5 mad r5.x, r1.z, c3, r5 -mad r1.w, -r5.z, c2, r1 -mad r1.z, -r1, c2.x, r1.w -mad r5.x, -r3.w, c3.w, r5 -mad r1.y, -r1, c3.x, r5.x +mad r4.w, -r6.x, c2, r4 +mad r1.z, -r1, c2.x, r4.w +mad r5.x, -r6.z, c3.w, r5 +mad r4.w, -r1, c3.x, r5.x mul r1.w, r3.x, r1.z -mov r1.z, c0.w -mul r7.w, c2.x, r1.z -mov r5.x, c0 -mul r5.x, c2.z, r5 -mul r4.w, r4, c3.x -mad r4.w, r5.x, c3, r4 -mad r8.w, r7, c3.z, r4 +mad r1.z, -r8, c3, r4.w +mov r5.x, c0.w +mul r7.z, c2.x, r5.x mov r4.w, c0.x -mul r8.x, c2.w, r4.w -mov r1.z, c0 -mad r8.w, -r8.x, c3.z, r8 -mul r4.w, c2.x, r1.z -mad r1.z, -r4.w, c3.w, r8.w -mad r4.x, -r4, c3, r1.z -mad r1.y, -r2.w, c3.z, r1 -mul r1.z, r3.x, r1.y -mul r1.y, r3.x, r4.x +mul r0.x, r3, r0 +mul r4.w, c2.z, r4 +mul r4.x, r4, c3 +mad r4.x, r4.w, c3.w, r4 +mad r5.y, r7.z, c3.z, r4.x +mov r4.x, c0 +mul r8.y, c2.w, r4.x +mad r4.x, -r8.y, c3.z, r5.y +mov r5.x, c0.z +mul r5.y, c2.x, r5.x +mad r4.x, -r5.y, c3.w, r4 +mad r1.y, -r1, c3.x, r4.x +mov r5.x, c1 +mul r7.w, c2, r5.x mov r4.x, c1.z mul r4.x, c2, r4 -mul r8.w, r4.x, c3 -mul r2.x, c2.w, r2 -mad r9.y, r2.x, c3.z, r8.w -mad r9.x, -r6.y, c2.w, r9 -mad r6.w, r5.z, c2.y, r6 -mov r8.w, c1.x -mad r9.y, r5, c3.x, r9 -mul r5.y, c2.z, r8.w -mad r9.y, -r5, c3.w, r9 -mad r1.x, -r1, c3, r9.y -mul r9.y, r8.z, c3.x -mad r8.z, -r8, c2.x, r9.x -mad r9.x, r6.y, c3.w, r9.y -mov r8.w, c1 -mul r8.w, c2.x, r8 -mad r1.x, -r8.w, c3.z, r1 -mad r8.z, -r2.w, c2.y, r8 -mad r9.x, r2.w, c3.y, r9 -mul r2.w, r3.x, r8.z -mad r8.z, -r8.y, c3.y, r9.x -mad r8.z, -r6, c3.w, r8 -mad r2.z, -r2, c3.x, r8 -mov r8.y, c0 -mul r8.y, c2.x, r8 -mul r8.z, r8.y, c3.w -mad r8.z, r8.x, c3.y, r8 -mov r8.x, c0 -mad r8.z, r7.x, c3.x, r8 -mul r7.x, c2.y, r8 -mad r8.z, -r7.x, c3.w, r8 -mov r8.x, c1 -mul r8.x, c2.y, r8 -mul r2.y, r2, c3.x -mad r2.y, r8.x, c3.w, r2 -mad r8.z, -r7.y, c3.x, r8 -mad r7.y, r8.w, c3, r2 -mad r2.x, -r2, c3.y, r7.y -mov r2.y, c1 -mul r7.y, c2.x, r2 -mad r2.y, -r7, c3.w, r2.x -mad r7.z, -r7, c3.x, r2.y -mad r2.x, -r7.w, c3.y, r8.z -mul r2.y, r3.x, r2.x -mul r2.x, r3, r7.z -mul r7.z, r6, c3 -mad r7.z, r3.w, c3.y, r7 -mad r3.w, -r3, c2.y, r6 -mad r6.w, r6.x, c3.x, r7.z -mad r3.w, -r6.z, c2.z, r3 -mad r6.y, -r6, c3.z, r6.w -mad r5.w, -r5, c3.x, r6.y -mad r5.z, -r5, c3.y, r5.w -mul r5.w, r3.z, c3.x -mul r3.z, r3.x, r5 -mad r5.z, r7.x, c3, r5.w -mad r3.w, -r6.x, c2.x, r3 -mul r5.w, r7.y, c3.z -mad r4.w, r4, c3.y, r5.z -mad r4.w, -r5.x, c3.y, r4 +mul r6.w, r4.x, c3 +mad r6.w, r7, c3.z, r6 +mov r5.x, c1 +mad r2.w, r2, c3.x, r6 +mul r5.x, c2.z, r5 +mad r6.w, -r5.x, c3, r2 +mad r1.x, -r1, c3, r6.w +mov r2.w, c0.y +mul r6.w, c1.x, r2 +mul r2.w, r6, c2 +mad r1.x, -r8, c3.z, r1 +mad r2.w, r5.z, c2.y, r2 +mad r2.w, r5, c2.x, r2 +mad r2.w, -r7.x, c2, r2 +mad r2.w, -r8, c2.x, r2 +mad r2.w, -r8.z, c2.y, r2 +mul r8.w, r8, c3.x +mad r8.w, r7.x, c3, r8 +mad r8.w, r8.z, c3.y, r8 +mad r8.w, -r5.z, c3.y, r8 +mov r8.z, c0.y +mul r5.z, c2.x, r8 +mad r8.z, -r6.w, c3.w, r8.w +mad r8.z, -r5.w, c3.x, r8 +mul r8.w, r5.z, c3 +mad r8.y, r8, c3, r8.w +mov r5.w, c0.x +mad r2.z, r2, c3.x, r8.y +mul r5.w, c2.y, r5 +mad r8.y, -r5.w, c3.w, r2.z +mad r2.y, -r2, c3.x, r8 +mad r2.y, -r7.z, c3, r2 +mul r2.z, r3.x, r8 +mov r7.z, c1.y +mov r8.y, c1.x +mul r8.z, r7.y, c3.x +mul r7.y, c2, r8 +mad r8.y, r7, c3.w, r8.z +mad r8.x, r8, c3.y, r8.y +mad r7.w, -r7, c3.y, r8.x +mul r7.z, c2.x, r7 +mad r7.w, -r7.z, c3, r7 +mad r2.x, -r2, c3, r7.w +mul r7.w, r3, c2.x +mul r8.x, r6.w, c3.z +mad r7.w, r7.x, c2.z, r7 +mad r7.w, r6.x, c2.y, r7 +mad r8.x, r6.z, c3.y, r8 +mad r6.z, -r6, c2.y, r7.w +mad r6.z, -r6.w, c2, r6 +mad r7.w, r6.y, c3.x, r8.x +mad r6.y, -r6, c2.x, r6.z +mad r6.w, -r7.x, c3.z, r7 +mad r6.z, -r3.w, c3.x, r6.w +mul r3.w, r3.x, r6.y +mul r6.y, r3.z, c3.x +mad r6.x, -r6, c3.y, r6.z +mul r3.z, r3.x, r6.x +mad r5.w, r5, c3.z, r6.y +mul r6.x, r7.z, c3.z mad r5.y, r5, c3, r5.w -mad r5.x, r4.y, c3, r5.y -mad r4.y, -r8, c3.z, r4.w -mad r3.y, -r3, c3.x, r4 -mad r4.w, -r8.x, c3.z, r5.x -mad r4.y, -r4.z, c3.x, r4.w -mad r4.y, -r4.x, c3, r4 +mad r5.x, r5, c3.y, r6 +mad r4.w, -r4, c3.y, r5.y +mad r5.x, r4.z, c3, r5 +mad r4.z, -r5, c3, r4.w +mad r4.y, -r4, c3.x, r4.z +mad r4.w, -r7.y, c3.z, r5.x +mad r4.z, -r3.y, c3.x, r4.w +mul r3.y, r3.x, r4 +mad r4.y, -r4.x, c3, r4.z mov r4.x, c7 -mul r0.z, r3.x, r0 -mul r0.y, r3.x, r0 +mul r1.z, r3.x, r1 +mul r1.y, r3.x, r1 mul r1.x, r3, r1 -mul r2.z, r3.x, r2 -mul r3.w, r3.x, r3 -mul r3.y, r3.x, r3 +mul r2.w, r3.x, r2 +mul r2.y, r3.x, r2 +mul r2.x, r3, r2 mul r3.x, r3, r4.y if_lt c4.x, r4.x -mul r4.xyz, v0, c7.y +mul r4.xyz, v0, c7.z add r4.xyz, r4, c5 mov r4.w, c7.x else mul r4.xyz, v0, c4.x -mul r4.xyz, r4, c7.y +mul r4.xyz, r4, c7.z add r4.xyz, r4, c5 mov r4.w, c7.x endif @@ -643,61 +585,844 @@ mov r5.zw, r5.z mov r7.xy, r5 dp4 r7.z, r4, c2 mov r6.xyw, r7 -mov r6.z, c7 -dp4 o1.x, r6, r0 -dp4 o2.x, r0, r5 -mov r0.xy, c6.xzzw -mul r0.xyz, c5.xzzw, -r0.xyyw -mov o5.w, r0.z -mov r0.z, c6.y -mul r0.zw, c5.y, -r0.z -mul r0.x, -r0, c5 +mov r6.z, c7.w +dp4 o1.z, r6, r2 +dp4 o2.z, r2, r5 dp4 o1.y, r6, r1 +dp4 o1.x, r6, r0 +mov r2.xyz, c6 dp4 o2.y, r1, r5 -mad r1.x, -c4, c4, r0 -mov o6.z, r0.y -mov r0.xy, c6.xzzw -mul r0.xy, c5.zxzw, -r0.yxzw -mad r0.z, -r0, c5.y, r1.x -mad o6.w, -r0.x, c5.z, r0.z -mov o3.w, r0.y -mov r0.xy, c5 +mul r1.xyz, c5, r2 +dp4 o2.x, r0, r5 +mul r0.xyz, r1, c5 +mad r0.x, -c4, c4, r0 +add r0.x, r0, r0.y dp4 o1.w, r3, r6 -dp4 o1.z, r6, r2 dp4 o2.w, r3, r5 -dp4 o2.z, r2, r5 mov o0, r7 mov o7, r7 -mov o3.yz, c7.z -mov o4.xz, c7.z -mov o4.w, r0 -mov o5.xy, c7.z -mul o6.xy, -c6, r0 +add o6.w, r0.x, r0.z +mov o3.w, -r1.x +mov o4.w, -r1.y +mov o5.w, -r1.z +mov o6.xyz, -r1 +mov o3.yz, c7.w +mov o4.xz, c7.w +mov o5.xy, c7.w mov o3.x, c6 mov o4.y, c6 mov o5.z, c6 " } +SubProgram "d3d11 " { +Keywords { } +Bind "vertex" Vertex +ConstBuffer "$Globals" 160 // 112 used size, 11 vars +Float 16 [_Rayon] +Vector 48 [_TexPos] 4 +Vector 96 [_Equation] 4 +ConstBuffer "UnityPerDraw" 336 // 64 used size, 6 vars +Matrix 0 [glstate_matrix_mvp] 4 +BindCB "$Globals" 0 +BindCB "UnityPerDraw" 1 +// 170 instructions, 16 temp regs, 0 temp arrays: +// ALU 65 float, 0 int, 0 uint +// TEX 0 (0 load, 0 comp, 0 bias, 0 grad) +// FLOW 1 static, 0 dynamic +"vs_4_0 +eefiecedofiplilgngcgkkionaioflojghiblnfcabaaaaaaiebkaaaaadaaaaaa +cmaaaaaagaaaaaaaemabaaaaejfdeheocmaaaaaaabaaaaaaaiaaaaaacaaaaaaa +aaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapahaaaafaepfdejfeejepeoaaklklkl +epfdeheooeaaaaaaaiaaaaaaaiaaaaaamiaaaaaaaaaaaaaaabaaaaaaadaaaaaa +aaaaaaaaapaaaaaaneaaaaaaabaaaaaaaaaaaaaaadaaaaaaabaaaaaaapaaaaaa +neaaaaaaacaaaaaaaaaaaaaaadaaaaaaacaaaaaaapaaaaaaneaaaaaaagaaaaaa +aaaaaaaaadaaaaaaadaaaaaaapaaaaaaneaaaaaaahaaaaaaaaaaaaaaadaaaaaa +aeaaaaaaapaaaaaannaaaaaaaaaaaaaaaaaaaaaaadaaaaaaafaaaaaaapaaaaaa +neaaaaaaadaaaaaaaaaaaaaaadaaaaaaagaaaaaaapaaaaaaneaaaaaaaeaaaaaa +aaaaaaaaadaaaaaaahaaaaaaapaaaaaafdfgfpfagphdgjhegjgpgoaafeeffied +epepfceeaaedepemepfcaaklfdeieefcdabjaaaaeaaaabaaemagaaaafjaaaaae +egiocaaaaaaaaaaaahaaaaaafjaaaaaeegiocaaaabaaaaaaaeaaaaaafpaaaaad +hcbabaaaaaaaaaaaghaaaaaepccabaaaaaaaaaaaabaaaaaagfaaaaadpccabaaa +abaaaaaagfaaaaadpccabaaaacaaaaaagfaaaaadpccabaaaadaaaaaagfaaaaad +pccabaaaaeaaaaaagfaaaaadpccabaaaafaaaaaagfaaaaadpccabaaaagaaaaaa +gfaaaaadpccabaaaahaaaaaagiaaaaacbaaaaaaaaaaaaaajbcaabaaaaaaaaaaa +akiacaaaaaaaaaaaabaaaaaaakiacaaaaaaaaaaaabaaaaaadcaaaaakhcaabaaa +aaaaaaaaegbcbaaaaaaaaaaaagaabaaaaaaaaaaaegiccaaaaaaaaaaaadaaaaaa +dbaaaaaiicaabaaaaaaaaaaaakiacaaaaaaaaaaaabaaaaaaabeaaaaaaaaaiadp +dcaaaaanhcaabaaaabaaaaaaegbcbaaaaaaaaaaaaceaaaaaaaaaaaeaaaaaaaea +aaaaaaeaaaaaaaaaegiccaaaaaaaaaaaadaaaaaadhaaaaajhcaabaaaaaaaaaaa +pgapbaaaaaaaaaaaegacbaaaabaaaaaaegacbaaaaaaaaaaadiaaaaaipcaabaaa +abaaaaaafgafbaaaaaaaaaaaegiocaaaabaaaaaaabaaaaaadcaaaaakpcaabaaa +abaaaaaaegiocaaaabaaaaaaaaaaaaaaagaabaaaaaaaaaaaegaobaaaabaaaaaa +dcaaaaakpcaabaaaaaaaaaaaegiocaaaabaaaaaaacaaaaaakgakbaaaaaaaaaaa +egaobaaaabaaaaaaaaaaaaaipcaabaaaaaaaaaaaegaobaaaaaaaaaaaegiocaaa +abaaaaaaadaaaaaadgaaaaafpccabaaaaaaaaaaaegaobaaaaaaaaaaadiaaaaaj +pcaabaaaabaaaaaangijcaaaabaaaaaaacaaaaaakgihcaaaabaaaaaaadaaaaaa +diaaaaajpcaabaaaacaaaaaajgiccaaaabaaaaaaaaaaaaaaggiicaaaabaaaaaa +acaaaaaadiaaaaaibcaabaaaadaaaaaabkaabaaaacaaaaaadkiacaaaabaaaaaa +adaaaaaadiaaaaajpcaabaaaaeaaaaaaggiicaaaabaaaaaaaaaaaaaajgiccaaa +abaaaaaaadaaaaaadcaaaaakbcaabaaaadaaaaaabkaabaaaaeaaaaaadkiacaaa +abaaaaaaacaaaaaaakaabaaaadaaaaaadcaaaaakbcaabaaaadaaaaaadkaabaaa +abaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaaadaaaaaadcaaaaalbcaabaaa +adaaaaaaakaabaiaebaaaaaaacaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaa +adaaaaaadcaaaaalbcaabaaaadaaaaaaakaabaiaebaaaaaaabaaaaaadkiacaaa +abaaaaaaaaaaaaaaakaabaaaadaaaaaadcaaaaalbcaabaaaadaaaaaaakaabaia +ebaaaaaaaeaaaaaadkiacaaaabaaaaaaacaaaaaaakaabaaaadaaaaaadcaaaaam +ocaabaaaadaaaaaakgihcaaaabaaaaaaacaaaaaapgijcaaaabaaaaaaadaaaaaa +fgaobaiaebaaaaaaabaaaaaabaaaaaaibcaabaaaafaaaaaajgahbaaaadaaaaaa +jgihcaaaabaaaaaaabaaaaaadiaaaaajocaabaaaadaaaaaapgiecaaaabaaaaaa +acaaaaaafgidcaaaabaaaaaaadaaaaaadcaaaaamocaabaaaadaaaaaafgidcaaa +abaaaaaaacaaaaaapgiecaaaabaaaaaaadaaaaaafgaobaiaebaaaaaaadaaaaaa +baaaaaaiecaabaaaafaaaaaajgahbaaaadaaaaaaegidcaaaabaaaaaaabaaaaaa +diaaaaajocaabaaaadaaaaaapgiicaaaabaaaaaaacaaaaaakgidcaaaabaaaaaa +adaaaaaadcaaaaamhcaabaaaagaaaaaaogiicaiaebaaaaaaabaaaaaaacaaaaaa +dgiocaaaabaaaaaaadaaaaaajgahbaaaadaaaaaabaaaaaaiccaabaaaafaaaaaa +egacbaaaagaaaaaaigidcaaaabaaaaaaabaaaaaadiaaaaajhcaabaaaagaaaaaa +jgiecaaaabaaaaaaacaaaaaacgijcaaaabaaaaaaadaaaaaadcaaaaamlcaabaaa +agaaaaaacgigcaaaabaaaaaaacaaaaaajgibcaaaabaaaaaaadaaaaaaegaibaia +ebaaaaaaagaaaaaabaaaaaaiicaabaaaafaaaaaaegadbaaaagaaaaaaegiccaaa +abaaaaaaabaaaaaabbaaaaaiccaabaaaabaaaaaaegaobaaaafaaaaaaegiocaaa +abaaaaaaaaaaaaaaaoaaaaakccaabaaaabaaaaaaaceaaaaaaaaaiadpaaaaiadp +aaaaiadpaaaaiadpbkaabaaaabaaaaaadiaaaaahbcaabaaaafaaaaaaakaabaaa +adaaaaaabkaabaaaabaaaaaadiaaaaajdcaabaaaadaaaaaaegiacaaaabaaaaaa +acaaaaaacgikcaaaabaaaaaaadaaaaaadiaaaaaiecaabaaaabaaaaaaakaabaaa +adaaaaaadkiacaaaabaaaaaaaaaaaaaadcaaaaakecaabaaaabaaaaaadkaabaaa +acaaaaaadkiacaaaabaaaaaaadaaaaaackaabaaaabaaaaaadcaaaaakecaabaaa +abaaaaaadkaabaaaaeaaaaaadkiacaaaabaaaaaaacaaaaaackaabaaaabaaaaaa +dcaaaaalecaabaaaabaaaaaackaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaa +acaaaaaackaabaaaabaaaaaadcaaaaalecaabaaaabaaaaaackaabaiaebaaaaaa +acaaaaaadkiacaaaabaaaaaaadaaaaaackaabaaaabaaaaaadcaaaaalecaabaaa +abaaaaaadkaabaiaebaaaaaaadaaaaaadkiacaaaabaaaaaaaaaaaaaackaabaaa +abaaaaaadiaaaaahccaabaaaafaaaaaackaabaaaabaaaaaabkaabaaaabaaaaaa +diaaaaajpcaabaaaahaaaaaaegibcaaaabaaaaaaaaaaaaaabgiecaaaabaaaaaa +acaaaaaadiaaaaaidcaabaaaagaaaaaaogakbaaaahaaaaaalgipcaaaabaaaaaa +adaaaaaadcaaaaakecaabaaaabaaaaaackaabaaaagaaaaaackiacaaaabaaaaaa +aaaaaaaabkaabaaaagaaaaaadiaaaaajpcaabaaaaiaaaaaabgiecaaaabaaaaaa +aaaaaaaaegibcaaaabaaaaaaadaaaaaadcaaaaakecaabaaaabaaaaaadkaabaaa +aiaaaaaackiacaaaabaaaaaaacaaaaaackaabaaaabaaaaaadcaaaaalecaabaaa +abaaaaaackaabaiaebaaaaaaaiaaaaaackiacaaaabaaaaaaacaaaaaackaabaaa +abaaaaaadcaaaaalecaabaaaabaaaaaackaabaiaebaaaaaaahaaaaaackiacaaa +abaaaaaaadaaaaaackaabaaaabaaaaaadcaaaaalecaabaaaabaaaaaabkaabaia +ebaaaaaaadaaaaaackiacaaaabaaaaaaaaaaaaaackaabaaaabaaaaaadiaaaaah +icaabaaaafaaaaaackaabaaaabaaaaaabkaabaaaabaaaaaabaaaaaahcccabaaa +abaaaaaaegadbaaaafaaaaaaegadbaaaaaaaaaaadiaaaaajpcaabaaaajaaaaaa +ggiicaaaabaaaaaaabaaaaaajgiccaaaabaaaaaaacaaaaaadiaaaaaikcaabaaa +agaaaaaafganbaaaajaaaaaapgipcaaaabaaaaaaadaaaaaadcaaaaakbcaabaaa +abaaaaaaakaabaaaabaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaaagaaaaaa +diaaaaajpcaabaaaakaaaaaajgiccaaaabaaaaaaabaaaaaaggiicaaaabaaaaaa +adaaaaaadcaaaaakbcaabaaaabaaaaaabkaabaaaakaaaaaadkiacaaaabaaaaaa +acaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaaakaabaiaebaaaaaa +akaaaaaadkiacaaaabaaaaaaacaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaa +abaaaaaaakaabaiaebaaaaaaajaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaa +abaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaabaaaaaadkiacaaa +abaaaaaaabaaaaaaakaabaaaabaaaaaadiaaaaahbcaabaaaalaaaaaaakaabaaa +abaaaaaabkaabaaaabaaaaaadcaaaaakbcaabaaaabaaaaaadkaabaaaakaaaaaa +dkiacaaaabaaaaaaacaaaaaadkaabaaaagaaaaaadcaaaaakbcaabaaaabaaaaaa +dkaabaaaadaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaal +bcaabaaaabaaaaaackaabaiaebaaaaaaajaaaaaadkiacaaaabaaaaaaadaaaaaa +akaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaaakaabaiaebaaaaaaadaaaaaa +dkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaa +ckaabaiaebaaaaaaakaaaaaadkiacaaaabaaaaaaacaaaaaaakaabaaaabaaaaaa +diaaaaahccaabaaaalaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaadiaaaaaj +pcaabaaaamaaaaaabgiecaaaabaaaaaaabaaaaaaegibcaaaabaaaaaaacaaaaaa +diaaaaaibcaabaaaabaaaaaadkaabaaaamaaaaaackiacaaaabaaaaaaadaaaaaa +diaaaaajpcaabaaaanaaaaaaegibcaaaabaaaaaaabaaaaaabgiecaaaabaaaaaa +adaaaaaadcaaaaakbcaabaaaabaaaaaadkaabaaaanaaaaaackiacaaaabaaaaaa +acaaaaaaakaabaaaabaaaaaadcaaaaakbcaabaaaabaaaaaabkaabaaaadaaaaaa +ckiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaa +ckaabaiaebaaaaaaamaaaaaackiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaa +dcaaaaalbcaabaaaabaaaaaackaabaiaebaaaaaaagaaaaaackiacaaaabaaaaaa +abaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaackaabaiaebaaaaaa +anaaaaaackiacaaaabaaaaaaacaaaaaaakaabaaaabaaaaaadiaaaaahicaabaaa +alaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaabaaaaaahbccabaaaabaaaaaa +egadbaaaalaaaaaaegadbaaaaaaaaaaadiaaaaajpcaabaaaaoaaaaaaggiicaaa +abaaaaaaaaaaaaaajgiccaaaabaaaaaaabaaaaaadiaaaaaibcaabaaaabaaaaaa +akaabaaaaoaaaaaadkiacaaaabaaaaaaacaaaaaadcaaaaakbcaabaaaabaaaaaa +akaabaaaacaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaak +bcaabaaaabaaaaaaakaabaaaajaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaa +abaaaaaadcaaaaalbcaabaaaabaaaaaabkaabaiaebaaaaaaaoaaaaaadkiacaaa +abaaaaaaacaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaabkaabaia +ebaaaaaaajaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaaabaaaaaadcaaaaal +bcaabaaaabaaaaaabkaabaiaebaaaaaaacaaaaaadkiacaaaabaaaaaaabaaaaaa +akaabaaaabaaaaaadiaaaaahbcaabaaaapaaaaaaakaabaaaabaaaaaabkaabaaa +abaaaaaadiaaaaaibcaabaaaabaaaaaackaabaaaajaaaaaadkiacaaaabaaaaaa +aaaaaaaadcaaaaakbcaabaaaabaaaaaackaabaaaaoaaaaaadkiacaaaabaaaaaa +acaaaaaaakaabaaaabaaaaaadcaaaaakbcaabaaaabaaaaaackaabaaaacaaaaaa +dkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaa +dkaabaiaebaaaaaaacaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaa +dcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaaoaaaaaadkiacaaaabaaaaaa +acaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaa +ajaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaaabaaaaaadiaaaaahccaabaaa +apaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaadiaaaaaibcaabaaaabaaaaaa +ckaabaaaamaaaaaackiacaaaabaaaaaaaaaaaaaadiaaaaajpcaabaaaacaaaaaa +bgiecaaaabaaaaaaaaaaaaaaegibcaaaabaaaaaaabaaaaaadcaaaaakbcaabaaa +abaaaaaackaabaaaacaaaaaackiacaaaabaaaaaaacaaaaaaakaabaaaabaaaaaa +dcaaaaakbcaabaaaabaaaaaackaabaaaahaaaaaackiacaaaabaaaaaaabaaaaaa +akaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaahaaaaaa +ckiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaa +dkaabaiaebaaaaaaacaaaaaackiacaaaabaaaaaaacaaaaaaakaabaaaabaaaaaa +dcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaamaaaaaackiacaaaabaaaaaa +aaaaaaaaakaabaaaabaaaaaadiaaaaahicaabaaaapaaaaaaakaabaaaabaaaaaa +bkaabaaaabaaaaaabaaaaaahiccabaaaabaaaaaaegadbaaaapaaaaaaegadbaaa +aaaaaaaadiaaaaaibcaabaaaabaaaaaaakaabaaaakaaaaaadkiacaaaabaaaaaa +aaaaaaaadcaaaaakbcaabaaaabaaaaaabkaabaaaaoaaaaaadkiacaaaabaaaaaa +adaaaaaaakaabaaaabaaaaaadcaaaaakbcaabaaaabaaaaaaakaabaaaaeaaaaaa +dkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaa +bkaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaa +dcaaaaalbcaabaaaabaaaaaaakaabaiaebaaaaaaaoaaaaaadkiacaaaabaaaaaa +adaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaabkaabaiaebaaaaaa +akaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaaabaaaaaadiaaaaahbcaabaaa +ajaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaadiaaaaaibcaabaaaabaaaaaa +dkaabaaaaoaaaaaadkiacaaaabaaaaaaadaaaaaadcaaaaakbcaabaaaabaaaaaa +ckaabaaaaeaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaak +bcaabaaaabaaaaaackaabaaaakaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaa +abaaaaaadcaaaaalbcaabaaaabaaaaaackaabaiaebaaaaaaaoaaaaaadkiacaaa +abaaaaaaadaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaia +ebaaaaaaakaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaaabaaaaaadcaaaaal +bcaabaaaabaaaaaadkaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaaabaaaaaa +akaabaaaabaaaaaadiaaaaahccaabaaaajaaaaaaakaabaaaabaaaaaabkaabaaa +abaaaaaadiaaaaaibcaabaaaabaaaaaadkaabaaaacaaaaaackiacaaaabaaaaaa +adaaaaaadcaaaaakbcaabaaaabaaaaaackaabaaaaiaaaaaackiacaaaabaaaaaa +abaaaaaaakaabaaaabaaaaaadcaaaaakbcaabaaaabaaaaaackaabaaaanaaaaaa +ckiacaaaabaaaaaaaaaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaa +ckaabaiaebaaaaaaacaaaaaackiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaa +dcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaanaaaaaackiacaaaabaaaaaa +aaaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaa +aiaaaaaackiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadiaaaaahicaabaaa +ajaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaabaaaaaaheccabaaaabaaaaaa +egadbaaaajaaaaaaegadbaaaaaaaaaaadiaaaaaibcaabaaaabaaaaaackaabaaa +agaaaaaadkiacaaaabaaaaaaabaaaaaadcaaaaakbcaabaaaabaaaaaackaabaaa +amaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaadcaaaaakbcaabaaa +abaaaaaackaabaaaanaaaaaadkiacaaaabaaaaaaacaaaaaaakaabaaaabaaaaaa +dcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaanaaaaaadkiacaaaabaaaaaa +acaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaa +amaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaa +abaaaaaabkaabaiaebaaaaaaadaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaa +abaaaaaadiaaaaahecaabaaaalaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaa +bbaaaaahbccabaaaacaaaaaaegaobaaaalaaaaaaegapbaaaaaaaaaaadcaaaaak +bcaabaaaabaaaaaackaabaaaaiaaaaaadkiacaaaabaaaaaaacaaaaaaakaabaaa +agaaaaaadcaaaaakbcaabaaaabaaaaaabkaabaaaadaaaaaadkiacaaaabaaaaaa +aaaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaa +ahaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaa +abaaaaaackaabaiaebaaaaaaagaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaa +abaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaiaebaaaaaaaiaaaaaadkiacaaa +abaaaaaaacaaaaaaakaabaaaabaaaaaadiaaaaahecaabaaaafaaaaaaakaabaaa +abaaaaaabkaabaaaabaaaaaabbaaaaahcccabaaaacaaaaaaegaobaaaafaaaaaa +egapbaaaaaaaaaaadiaaaaaibcaabaaaabaaaaaaakaabaaaacaaaaaadkiacaaa +abaaaaaaacaaaaaadcaaaaakbcaabaaaabaaaaaaakaabaaaahaaaaaadkiacaaa +abaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaakbcaabaaaabaaaaaaakaabaaa +amaaaaaadkiacaaaabaaaaaaaaaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaa +abaaaaaabkaabaiaebaaaaaaacaaaaaadkiacaaaabaaaaaaacaaaaaaakaabaaa +abaaaaaadcaaaaalbcaabaaaabaaaaaabkaabaiaebaaaaaaamaaaaaadkiacaaa +abaaaaaaaaaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaabkaabaia +ebaaaaaaahaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaaabaaaaaadiaaaaah +ecaabaaaapaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaabbaaaaahiccabaaa +acaaaaaaegaobaaaapaaaaaaegapbaaaaaaaaaaadiaaaaaibcaabaaaabaaaaaa +akaabaaaanaaaaaadkiacaaaabaaaaaaaaaaaaaadcaaaaakbcaabaaaabaaaaaa +ckaabaaaacaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaadcaaaaak +bcaabaaaabaaaaaaakaabaaaaiaaaaaadkiacaaaabaaaaaaabaaaaaaakaabaaa +abaaaaaadcaaaaalbcaabaaaabaaaaaabkaabaiaebaaaaaaaiaaaaaadkiacaaa +abaaaaaaabaaaaaaakaabaaaabaaaaaadcaaaaalbcaabaaaabaaaaaadkaabaia +ebaaaaaaacaaaaaadkiacaaaabaaaaaaadaaaaaaakaabaaaabaaaaaadcaaaaal +bcaabaaaabaaaaaabkaabaiaebaaaaaaanaaaaaadkiacaaaabaaaaaaaaaaaaaa +akaabaaaabaaaaaadiaaaaahecaabaaaajaaaaaaakaabaaaabaaaaaabkaabaaa +abaaaaaabbaaaaaheccabaaaacaaaaaaegaobaaaajaaaaaaegapbaaaaaaaaaaa +dgaaaaafpccabaaaahaaaaaaegaobaaaaaaaaaaadgaaaaagbccabaaaadaaaaaa +akiacaaaaaaaaaaaagaaaaaadgaaaaaigccabaaaadaaaaaaaceaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaadiaaaaajhcaabaaaaaaaaaaaegiccaaaaaaaaaaa +adaaaaaaegiccaaaaaaaaaaaagaaaaaadgaaaaagiccabaaaadaaaaaaakaabaia +ebaaaaaaaaaaaaaadgaaaaaifccabaaaaeaaaaaaaceaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaadgaaaaagcccabaaaaeaaaaaabkiacaaaaaaaaaaaagaaaaaa +dgaaaaagiccabaaaaeaaaaaabkaabaiaebaaaaaaaaaaaaaadgaaaaaidccabaaa +afaaaaaaaceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgaaaaageccabaaa +afaaaaaackiacaaaaaaaaaaaagaaaaaadgaaaaagiccabaaaafaaaaaackaabaia +ebaaaaaaaaaaaaaadiaaaaaiicaabaaaaaaaaaaaakaabaaaaaaaaaaaakiacaaa +aaaaaaaaadaaaaaadcaaaaamicaabaaaaaaaaaaaakiacaiaebaaaaaaaaaaaaaa +abaaaaaaakiacaaaaaaaaaaaabaaaaaadkaabaaaaaaaaaaadcaaaaakicaabaaa +aaaaaaaabkaabaaaaaaaaaaabkiacaaaaaaaaaaaadaaaaaadkaabaaaaaaaaaaa +dcaaaaakiccabaaaagaaaaaackaabaaaaaaaaaaackiacaaaaaaaaaaaadaaaaaa +dkaabaaaaaaaaaaadgaaaaaghccabaaaagaaaaaaegacbaiaebaaaaaaaaaaaaaa +doaaaaab" +} + +SubProgram "gles3 " { +Keywords { } +"!!GLES3#version 300 es + + +#ifdef VERTEX + +#define gl_Vertex _glesVertex +in vec4 _glesVertex; +float xll_determinant_mf2x2( mat2 m) { + return m[0][0]*m[1][1] - m[0][1]*m[1][0]; +} +float xll_determinant_mf3x3( mat3 m) { + vec3 temp; + temp.x = m[1][1]*m[2][2] - m[1][2]*m[2][1]; + temp.y = - (m[0][1]*m[2][2] - m[0][2]*m[2][1]); + temp.z = m[0][1]*m[1][2] - m[0][2]*m[1][1]; + return dot( m[0], temp); +} +float xll_determinant_mf4x4( mat4 m) { + vec4 temp; + temp.x = xll_determinant_mf3x3( mat3( m[1].yzw, m[2].yzw, m[3].yzw)); + temp.y = -xll_determinant_mf3x3( mat3( m[0].yzw, m[2].yzw, m[3].yzw)); + temp.z = xll_determinant_mf3x3( mat3( m[0].yzw, m[1].yzw, m[3].yzw)); + temp.w = -xll_determinant_mf3x3( mat3( m[0].yzw, m[1].yzw, m[2].yzw)); + return dot( m[0], temp); +} +#line 150 +struct v2f_vertex_lit { + highp vec2 uv; + lowp vec4 diff; + lowp vec4 spec; +}; +#line 186 +struct v2f_img { + highp vec4 pos; + mediump vec2 uv; +}; +#line 180 +struct appdata_img { + highp vec4 vertex; + mediump vec2 texcoord; +}; +#line 383 +struct Quadric { + highp vec3 s1; + highp vec3 s2; +}; +#line 340 +struct Ray { + highp vec3 origin; + highp vec3 direction; +}; +#line 322 +struct v2p { + highp vec4 p; + highp vec4 i_near; + highp vec4 i_far; + highp vec4 colonne1; + highp vec4 colonne2; + highp vec4 colonne3; + highp vec4 colonne4; + highp vec4 worldpos; +}; +#line 317 +struct appdata { + highp vec4 vertex; +}; +#line 334 +struct fragment_out { + highp vec4 Color; + highp float depth; +}; +uniform highp vec4 _Time; +uniform highp vec4 _SinTime; +#line 3 +uniform highp vec4 _CosTime; +uniform highp vec4 unity_DeltaTime; +uniform highp vec3 _WorldSpaceCameraPos; +uniform highp vec4 _ProjectionParams; +#line 7 +uniform highp vec4 _ScreenParams; +uniform highp vec4 _ZBufferParams; +uniform highp vec4 unity_CameraWorldClipPlanes[6]; +uniform highp vec4 _WorldSpaceLightPos0; +#line 11 +uniform highp vec4 _LightPositionRange; +uniform highp vec4 unity_4LightPosX0; +uniform highp vec4 unity_4LightPosY0; +uniform highp vec4 unity_4LightPosZ0; +#line 15 +uniform highp vec4 unity_4LightAtten0; +uniform highp vec4 unity_LightColor[4]; +uniform highp vec4 unity_LightPosition[4]; +uniform highp vec4 unity_LightAtten[4]; +#line 19 +uniform highp vec4 unity_SHAr; +uniform highp vec4 unity_SHAg; +uniform highp vec4 unity_SHAb; +uniform highp vec4 unity_SHBr; +#line 23 +uniform highp vec4 unity_SHBg; +uniform highp vec4 unity_SHBb; +uniform highp vec4 unity_SHC; +uniform highp vec3 unity_LightColor0; +uniform highp vec3 unity_LightColor1; +uniform highp vec3 unity_LightColor2; +uniform highp vec3 unity_LightColor3; +#line 27 +uniform highp vec4 unity_ShadowSplitSpheres[4]; +uniform highp vec4 unity_ShadowSplitSqRadii; +uniform highp vec4 unity_LightShadowBias; +uniform highp vec4 _LightSplitsNear; +#line 31 +uniform highp vec4 _LightSplitsFar; +uniform highp mat4 unity_World2Shadow[4]; +uniform highp vec4 _LightShadowData; +uniform highp vec4 unity_ShadowFadeCenterAndType; +#line 35 +uniform highp mat4 glstate_matrix_mvp; +uniform highp mat4 glstate_matrix_modelview0; +uniform highp mat4 glstate_matrix_invtrans_modelview0; +uniform highp mat4 _Object2World; +#line 39 +uniform highp mat4 _World2Object; +uniform highp vec4 unity_Scale; +uniform highp mat4 glstate_matrix_transpose_modelview0; +uniform highp mat4 glstate_matrix_texture0; +#line 43 +uniform highp mat4 glstate_matrix_texture1; +uniform highp mat4 glstate_matrix_texture2; +uniform highp mat4 glstate_matrix_texture3; +uniform highp mat4 glstate_matrix_projection; +#line 47 +uniform highp vec4 glstate_lightmodel_ambient; +uniform highp mat4 unity_MatrixV; +uniform highp mat4 unity_MatrixVP; +uniform lowp vec4 unity_ColorSpaceGrey; +#line 76 +#line 81 +#line 86 +#line 90 +#line 95 +#line 119 +#line 136 +#line 157 +#line 165 +#line 192 +#line 205 +#line 214 +#line 219 +#line 228 +#line 233 +#line 242 +#line 259 +#line 264 +#line 290 +#line 298 +#line 302 +#line 306 +uniform highp float _Rayon; +uniform highp vec4 _Color; +uniform highp vec4 _TexPos; +uniform highp float _Visibilite; +#line 310 +uniform highp vec4 _Light; +uniform highp vec4 _Equation; +uniform sampler2D _MatCap; +uniform highp float _Cut; +#line 314 +uniform highp vec4 _Cutplane; +uniform highp int _Attenuation; +uniform highp float _Brightness; +#line 346 +#line 350 +#line 354 +#line 389 +#line 415 +#line 424 +#line 354 +highp mat4 mat_inverse( in highp mat4 my_mat ) { + highp mat4 inv; + highp float det = xll_determinant_mf4x4(my_mat); + #line 358 + highp float invdet = (1.0 / det); + inv[0][0] = (invdet * (((((((my_mat[1][1] * my_mat[2][2]) * my_mat[3][3]) + ((my_mat[2][1] * my_mat[3][2]) * my_mat[1][3])) + ((my_mat[3][1] * my_mat[1][2]) * my_mat[2][3])) - ((my_mat[1][1] * my_mat[3][2]) * my_mat[2][3])) - ((my_mat[2][1] * my_mat[1][2]) * my_mat[3][3])) - ((my_mat[3][1] * my_mat[2][2]) * my_mat[1][3]))); + inv[1][0] = (invdet * (((((((my_mat[1][0] * my_mat[3][2]) * my_mat[2][3]) + ((my_mat[2][0] * my_mat[1][2]) * my_mat[3][3])) + ((my_mat[3][0] * my_mat[2][2]) * my_mat[1][3])) - ((my_mat[1][0] * my_mat[2][2]) * my_mat[3][3])) - ((my_mat[2][0] * my_mat[3][2]) * my_mat[1][3])) - ((my_mat[3][0] * my_mat[1][2]) * my_mat[2][3]))); + inv[2][0] = (invdet * (((((((my_mat[1][0] * my_mat[2][1]) * my_mat[3][3]) + ((my_mat[2][0] * my_mat[3][1]) * my_mat[1][3])) + ((my_mat[3][0] * my_mat[1][1]) * my_mat[2][3])) - ((my_mat[1][0] * my_mat[3][1]) * my_mat[2][3])) - ((my_mat[2][0] * my_mat[1][1]) * my_mat[3][3])) - ((my_mat[3][0] * my_mat[2][1]) * my_mat[1][3]))); + #line 362 + inv[3][0] = (invdet * (((((((my_mat[1][0] * my_mat[3][1]) * my_mat[2][2]) + ((my_mat[2][0] * my_mat[1][1]) * my_mat[3][2])) + ((my_mat[3][0] * my_mat[2][1]) * my_mat[1][2])) - ((my_mat[1][0] * my_mat[2][1]) * my_mat[3][2])) - ((my_mat[2][0] * my_mat[3][1]) * my_mat[1][2])) - ((my_mat[3][0] * my_mat[1][1]) * my_mat[2][2]))); + inv[0][1] = (invdet * (((((((my_mat[0][1] * my_mat[3][2]) * my_mat[2][3]) + ((my_mat[2][1] * my_mat[0][2]) * my_mat[3][3])) + ((my_mat[3][1] * my_mat[2][2]) * my_mat[0][3])) - ((my_mat[0][1] * my_mat[2][2]) * my_mat[3][3])) - ((my_mat[2][1] * my_mat[3][2]) * my_mat[0][3])) - ((my_mat[3][1] * my_mat[0][2]) * my_mat[2][3]))); + inv[1][1] = (invdet * (((((((my_mat[0][0] * my_mat[2][2]) * my_mat[3][3]) + ((my_mat[2][0] * my_mat[3][2]) * my_mat[0][3])) + ((my_mat[3][0] * my_mat[0][2]) * my_mat[2][3])) - ((my_mat[0][0] * my_mat[3][2]) * my_mat[2][3])) - ((my_mat[2][0] * my_mat[0][2]) * my_mat[3][3])) - ((my_mat[3][0] * my_mat[2][2]) * my_mat[0][3]))); + inv[2][1] = (invdet * (((((((my_mat[0][0] * my_mat[3][1]) * my_mat[2][3]) + ((my_mat[2][0] * my_mat[0][1]) * my_mat[3][3])) + ((my_mat[3][0] * my_mat[2][1]) * my_mat[0][3])) - ((my_mat[0][0] * my_mat[2][1]) * my_mat[3][3])) - ((my_mat[2][0] * my_mat[3][1]) * my_mat[0][3])) - ((my_mat[3][0] * my_mat[0][1]) * my_mat[2][3]))); + #line 366 + inv[3][1] = (invdet * (((((((my_mat[0][0] * my_mat[2][1]) * my_mat[3][2]) + ((my_mat[2][0] * my_mat[3][1]) * my_mat[0][2])) + ((my_mat[3][0] * my_mat[0][1]) * my_mat[2][2])) - ((my_mat[0][0] * my_mat[3][1]) * my_mat[2][2])) - ((my_mat[2][0] * my_mat[0][1]) * my_mat[3][2])) - ((my_mat[3][0] * my_mat[2][1]) * my_mat[0][2]))); + inv[0][2] = (invdet * (((((((my_mat[0][1] * my_mat[1][2]) * my_mat[3][3]) + ((my_mat[1][1] * my_mat[3][2]) * my_mat[0][3])) + ((my_mat[3][1] * my_mat[0][2]) * my_mat[1][3])) - ((my_mat[0][1] * my_mat[3][2]) * my_mat[1][3])) - ((my_mat[1][1] * my_mat[0][2]) * my_mat[3][3])) - ((my_mat[3][1] * my_mat[1][2]) * my_mat[0][3]))); + inv[1][2] = (invdet * (((((((my_mat[0][0] * my_mat[3][2]) * my_mat[1][3]) + ((my_mat[1][0] * my_mat[0][2]) * my_mat[3][3])) + ((my_mat[3][0] * my_mat[1][2]) * my_mat[0][3])) - ((my_mat[0][0] * my_mat[1][2]) * my_mat[3][3])) - ((my_mat[1][0] * my_mat[3][2]) * my_mat[0][3])) - ((my_mat[3][0] * my_mat[0][2]) * my_mat[1][3]))); + inv[2][2] = (invdet * (((((((my_mat[0][0] * my_mat[1][1]) * my_mat[3][3]) + ((my_mat[1][0] * my_mat[3][1]) * my_mat[0][3])) + ((my_mat[3][0] * my_mat[0][1]) * my_mat[1][3])) - ((my_mat[0][0] * my_mat[3][1]) * my_mat[1][3])) - ((my_mat[1][0] * my_mat[0][1]) * my_mat[3][3])) - ((my_mat[3][0] * my_mat[1][1]) * my_mat[0][3]))); + #line 370 + inv[3][2] = (invdet * (((((((my_mat[0][0] * my_mat[3][1]) * my_mat[1][2]) + ((my_mat[1][0] * my_mat[0][1]) * my_mat[3][2])) + ((my_mat[3][0] * my_mat[1][1]) * my_mat[0][2])) - ((my_mat[0][0] * my_mat[1][1]) * my_mat[3][2])) - ((my_mat[1][0] * my_mat[3][1]) * my_mat[0][2])) - ((my_mat[3][0] * my_mat[0][1]) * my_mat[1][2]))); + inv[0][3] = (invdet * (((((((my_mat[0][1] * my_mat[2][2]) * my_mat[1][3]) + ((my_mat[1][1] * my_mat[0][2]) * my_mat[2][3])) + ((my_mat[2][1] * my_mat[1][2]) * my_mat[0][3])) - ((my_mat[0][1] * my_mat[1][2]) * my_mat[2][3])) - ((my_mat[1][1] * my_mat[2][2]) * my_mat[0][3])) - ((my_mat[2][1] * my_mat[0][2]) * my_mat[1][3]))); + inv[1][3] = (invdet * (((((((my_mat[0][0] * my_mat[1][2]) * my_mat[2][3]) + ((my_mat[1][0] * my_mat[2][2]) * my_mat[0][3])) + ((my_mat[2][0] * my_mat[0][2]) * my_mat[1][3])) - ((my_mat[0][0] * my_mat[2][2]) * my_mat[1][3])) - ((my_mat[1][0] * my_mat[0][2]) * my_mat[2][3])) - ((my_mat[2][0] * my_mat[1][2]) * my_mat[0][3]))); + inv[2][3] = (invdet * (((((((my_mat[0][0] * my_mat[2][1]) * my_mat[1][3]) + ((my_mat[1][0] * my_mat[0][1]) * my_mat[2][3])) + ((my_mat[2][0] * my_mat[1][1]) * my_mat[0][3])) - ((my_mat[0][0] * my_mat[1][1]) * my_mat[2][3])) - ((my_mat[1][0] * my_mat[2][1]) * my_mat[0][3])) - ((my_mat[2][0] * my_mat[0][1]) * my_mat[1][3]))); + #line 374 + inv[3][3] = (invdet * (((((((my_mat[0][0] * my_mat[1][1]) * my_mat[2][2]) + ((my_mat[1][0] * my_mat[2][1]) * my_mat[0][2])) + ((my_mat[2][0] * my_mat[0][1]) * my_mat[1][2])) - ((my_mat[0][0] * my_mat[2][1]) * my_mat[1][2])) - ((my_mat[1][0] * my_mat[0][1]) * my_mat[2][2])) - ((my_mat[2][0] * my_mat[1][1]) * my_mat[0][2]))); + return inv; +} +#line 430 +v2p ballimproved_v( in appdata v ) { + #line 432 + highp mat4 ModelViewProj = glstate_matrix_mvp; + highp mat4 ModelViewProjI = mat_inverse( ModelViewProj); + v2p o; + highp vec4 spaceposition; + #line 436 + spaceposition.xyz = _TexPos.xyz; + spaceposition.w = 1.0; + if ((_Rayon < 1.0)){ + spaceposition.xyz += (v.vertex.xyz * 2.0); + } + else{ + spaceposition.xyz += (v.vertex.xyz * (2.0 * _Rayon)); + } + #line 440 + o.p = (ModelViewProj * spaceposition); + v.vertex = o.p; + o.worldpos = o.p; + highp vec4 near = o.p; + #line 444 + near.z = 0.0; + near = (ModelViewProjI * near); + highp vec4 far = o.p; + far.z = far.w; + #line 448 + o.i_far = (ModelViewProjI * far); + o.i_near = near; + highp vec4 equation1 = vec4( _Equation.xyz, _Rayon); + highp vec4 eq1TexPos = (equation1 * _TexPos); + #line 452 + highp vec4 eq1TexSq = (eq1TexPos * _TexPos); + o.colonne1 = vec4( equation1.x, 0.0, 0.0, (-eq1TexPos.x)); + o.colonne2 = vec4( 0.0, equation1.y, 0.0, (-eq1TexPos.y)); + o.colonne3 = vec4( 0.0, 0.0, equation1.z, (-eq1TexPos.z)); + #line 456 + o.colonne4 = vec4( (-eq1TexPos.x), (-eq1TexPos.y), (-eq1TexPos.z), (((((-equation1.w) * equation1.w) + eq1TexSq.x) + eq1TexSq.y) + eq1TexSq.z)); + return o; +} +out highp vec4 xlv_TEXCOORD1; +out highp vec4 xlv_TEXCOORD2; +out highp vec4 xlv_TEXCOORD6; +out highp vec4 xlv_TEXCOORD7; +out highp vec4 xlv_COLOR0; +out highp vec4 xlv_TEXCOORD3; +out highp vec4 xlv_TEXCOORD4; +void main() { + v2p xl_retval; + appdata xlt_v; + xlt_v.vertex = vec4(gl_Vertex); + xl_retval = ballimproved_v( xlt_v); + gl_Position = vec4(xl_retval.p); + xlv_TEXCOORD1 = vec4(xl_retval.i_near); + xlv_TEXCOORD2 = vec4(xl_retval.i_far); + xlv_TEXCOORD6 = vec4(xl_retval.colonne1); + xlv_TEXCOORD7 = vec4(xl_retval.colonne2); + xlv_COLOR0 = vec4(xl_retval.colonne3); + xlv_TEXCOORD3 = vec4(xl_retval.colonne4); + xlv_TEXCOORD4 = vec4(xl_retval.worldpos); +} + + +#endif +#ifdef FRAGMENT + +#define gl_FragData _glesFragData +layout(location = 0) out mediump vec4 _glesFragData[4]; +void xll_clip_f(float x) { + if ( x<0.0 ) discard; +} +mat2 xll_transpose_mf2x2(mat2 m) { + return mat2( m[0][0], m[1][0], m[0][1], m[1][1]); +} +mat3 xll_transpose_mf3x3(mat3 m) { + return mat3( m[0][0], m[1][0], m[2][0], + m[0][1], m[1][1], m[2][1], + m[0][2], m[1][2], m[2][2]); +} +mat4 xll_transpose_mf4x4(mat4 m) { + return mat4( m[0][0], m[1][0], m[2][0], m[3][0], + m[0][1], m[1][1], m[2][1], m[3][1], + m[0][2], m[1][2], m[2][2], m[3][2], + m[0][3], m[1][3], m[2][3], m[3][3]); +} +#line 150 +struct v2f_vertex_lit { + highp vec2 uv; + lowp vec4 diff; + lowp vec4 spec; +}; +#line 186 +struct v2f_img { + highp vec4 pos; + mediump vec2 uv; +}; +#line 180 +struct appdata_img { + highp vec4 vertex; + mediump vec2 texcoord; +}; +#line 383 +struct Quadric { + highp vec3 s1; + highp vec3 s2; +}; +#line 340 +struct Ray { + highp vec3 origin; + highp vec3 direction; +}; +#line 322 +struct v2p { + highp vec4 p; + highp vec4 i_near; + highp vec4 i_far; + highp vec4 colonne1; + highp vec4 colonne2; + highp vec4 colonne3; + highp vec4 colonne4; + highp vec4 worldpos; +}; +#line 317 +struct appdata { + highp vec4 vertex; +}; +#line 334 +struct fragment_out { + highp vec4 Color; + highp float depth; +}; +uniform highp vec4 _Time; +uniform highp vec4 _SinTime; +#line 3 +uniform highp vec4 _CosTime; +uniform highp vec4 unity_DeltaTime; +uniform highp vec3 _WorldSpaceCameraPos; +uniform highp vec4 _ProjectionParams; +#line 7 +uniform highp vec4 _ScreenParams; +uniform highp vec4 _ZBufferParams; +uniform highp vec4 unity_CameraWorldClipPlanes[6]; +uniform highp vec4 _WorldSpaceLightPos0; +#line 11 +uniform highp vec4 _LightPositionRange; +uniform highp vec4 unity_4LightPosX0; +uniform highp vec4 unity_4LightPosY0; +uniform highp vec4 unity_4LightPosZ0; +#line 15 +uniform highp vec4 unity_4LightAtten0; +uniform highp vec4 unity_LightColor[4]; +uniform highp vec4 unity_LightPosition[4]; +uniform highp vec4 unity_LightAtten[4]; +#line 19 +uniform highp vec4 unity_SHAr; +uniform highp vec4 unity_SHAg; +uniform highp vec4 unity_SHAb; +uniform highp vec4 unity_SHBr; +#line 23 +uniform highp vec4 unity_SHBg; +uniform highp vec4 unity_SHBb; +uniform highp vec4 unity_SHC; +uniform highp vec3 unity_LightColor0; +uniform highp vec3 unity_LightColor1; +uniform highp vec3 unity_LightColor2; +uniform highp vec3 unity_LightColor3; +#line 27 +uniform highp vec4 unity_ShadowSplitSpheres[4]; +uniform highp vec4 unity_ShadowSplitSqRadii; +uniform highp vec4 unity_LightShadowBias; +uniform highp vec4 _LightSplitsNear; +#line 31 +uniform highp vec4 _LightSplitsFar; +uniform highp mat4 unity_World2Shadow[4]; +uniform highp vec4 _LightShadowData; +uniform highp vec4 unity_ShadowFadeCenterAndType; +#line 35 +uniform highp mat4 glstate_matrix_mvp; +uniform highp mat4 glstate_matrix_modelview0; +uniform highp mat4 glstate_matrix_invtrans_modelview0; +uniform highp mat4 _Object2World; +#line 39 +uniform highp mat4 _World2Object; +uniform highp vec4 unity_Scale; +uniform highp mat4 glstate_matrix_transpose_modelview0; +uniform highp mat4 glstate_matrix_texture0; +#line 43 +uniform highp mat4 glstate_matrix_texture1; +uniform highp mat4 glstate_matrix_texture2; +uniform highp mat4 glstate_matrix_texture3; +uniform highp mat4 glstate_matrix_projection; +#line 47 +uniform highp vec4 glstate_lightmodel_ambient; +uniform highp mat4 unity_MatrixV; +uniform highp mat4 unity_MatrixVP; +uniform lowp vec4 unity_ColorSpaceGrey; +#line 76 +#line 81 +#line 86 +#line 90 +#line 95 +#line 119 +#line 136 +#line 157 +#line 165 +#line 192 +#line 205 +#line 214 +#line 219 +#line 228 +#line 233 +#line 242 +#line 259 +#line 264 +#line 290 +#line 298 +#line 302 +#line 306 +uniform highp float _Rayon; +uniform highp vec4 _Color; +uniform highp vec4 _TexPos; +uniform highp float _Visibilite; +#line 310 +uniform highp vec4 _Light; +uniform highp vec4 _Equation; +uniform sampler2D _MatCap; +uniform highp float _Cut; +#line 314 +uniform highp vec4 _Cutplane; +uniform highp int _Attenuation; +uniform highp float _Brightness; +#line 346 +#line 350 +#line 354 +#line 389 +#line 415 +#line 424 +#line 377 +highp float distance_attenuation( in highp int attenuate, in highp vec4 eye, in highp vec4 pos ) { + #line 379 + highp float dist = distance( pos, eye); + highp float attenuation = (1.0 / (1e-05 + (0.0001 * dist))); + return min( attenuation, 1.0); +} +#line 389 +Quadric isect_surf( in Ray r, in highp mat4 matrix_coef ) { + Quadric q; + highp vec4 direction = vec4( r.direction, 0.0); + #line 393 + highp vec4 origin = vec4( r.origin, 1.0); + highp vec4 mcoef_dir = (matrix_coef * direction); + highp float a = dot( direction, mcoef_dir); + highp float b = dot( origin, mcoef_dir); + #line 397 + highp float c = dot( origin, (matrix_coef * origin)); + highp float delta = ((b * b) - (a * c)); + if ((delta < 0.0)){ + xll_clip_f(-1.0); + } + highp float sqDelta = sqrt(delta); + #line 401 + highp float t1 = (((-b) - sqDelta) / a); + highp float t2 = (((-b) + sqDelta) / a); + highp float t = (( (t1 < t2) ) ? ( t1 ) : ( t2 )); + q.s1 = (r.origin + (t * r.direction)); + #line 405 + q.s2 = q.s1; + return q; +} +#line 415 +Ray primary_ray( in highp vec4 near1, in highp vec4 far1 ) { + highp vec3 near = (near1.xyz / near1.w); + highp vec3 far = (far1.xyz / far1.w); + #line 419 + Ray ray; + ray.origin = near; + ray.direction = (far - near); + return ray; +} +#line 424 +highp float update_z_buffer( in highp vec3 M, in highp mat4 ModelViewP ) { + highp vec4 Ms = (ModelViewP * vec4( M, 1.0)); + highp float depth1 = (0.5 + (Ms.z / (2.0 * Ms.w))); + #line 428 + return depth1; +} +#line 459 +fragment_out ballimproved_p( in v2p i ) { + #line 461 + highp vec3 light = _Light.xyz; + highp mat4 ModelViewProj = glstate_matrix_mvp; + highp mat4 ModelViewIT = glstate_matrix_invtrans_modelview0; + highp vec4 pcolor2; + #line 465 + fragment_out OUT; + highp mat4 mat = xll_transpose_mf4x4(mat4( i.colonne1, i.colonne2, i.colonne3, i.colonne4)); + Ray ray = primary_ray( i.i_near, i.i_far); + Quadric q = isect_surf( ray, mat); + #line 469 + highp vec3 M = q.s1; + OUT.depth = update_z_buffer( M, ModelViewProj); + highp vec4 M1 = vec4( M, 1.0); + highp vec4 M2 = (mat * M1); + #line 473 + highp vec3 normal = normalize((ModelViewIT * M2).xyz); + highp vec3 lightvec = vec3( 0.0, 0.0, 1.0); + highp vec3 eyepos = vec3( 0.0, 0.0, 1.0); + highp float diffuse = dot( normal, lightvec); + #line 477 + highp vec3 diffusecolor; + diffusecolor = _Color.xyz; + mediump vec2 vn = normal.xy; + highp vec4 matcapLookup = texture( _MatCap, ((vn * 0.5) + 0.5)); + #line 481 + OUT.Color.xyz = (diffuse * diffusecolor); + OUT.Color.w = _Color.w; + OUT.Color = (((OUT.Color * matcapLookup) * 1.25) * _Brightness); + if ((_Attenuation == 1)){ + #line 486 + highp float attenuation = distance_attenuation( 1, i.i_near, i.i_far); + OUT.Color = (OUT.Color * attenuation); + } + return OUT; +} +in highp vec4 xlv_TEXCOORD1; +in highp vec4 xlv_TEXCOORD2; +in highp vec4 xlv_TEXCOORD6; +in highp vec4 xlv_TEXCOORD7; +in highp vec4 xlv_COLOR0; +in highp vec4 xlv_TEXCOORD3; +in highp vec4 xlv_TEXCOORD4; +void main() { + fragment_out xl_retval; + v2p xlt_i; + xlt_i.p = vec4(0.0); + xlt_i.i_near = vec4(xlv_TEXCOORD1); + xlt_i.i_far = vec4(xlv_TEXCOORD2); + xlt_i.colonne1 = vec4(xlv_TEXCOORD6); + xlt_i.colonne2 = vec4(xlv_TEXCOORD7); + xlt_i.colonne3 = vec4(xlv_COLOR0); + xlt_i.colonne4 = vec4(xlv_TEXCOORD3); + xlt_i.worldpos = vec4(xlv_TEXCOORD4); + xl_retval = ballimproved_p( xlt_i); + gl_FragData[0] = vec4(xl_retval.Color); + gl_FragDepth = float(xl_retval.depth); +} + + +#endif" +} + } Program "fp" { // Fragment combos: 1 -// opengl - ALU: 65 to 65, TEX: 1 to 1 -// d3d9 - ALU: 65 to 65, TEX: 3 to 3 +// opengl - ALU: 68 to 68, TEX: 1 to 1 +// d3d9 - ALU: 66 to 66, TEX: 2 to 2 +// d3d11 - ALU: 47 to 47, TEX: 1 to 1, FLOW: 1 to 1 SubProgram "opengl " { Keywords { } -Matrix 8 [_Object2World] -Vector 12 [_Color] -Float 13 [_Cut] -Vector 14 [_Cutplane] +Vector 8 [_Color] +Float 9 [_Attenuation] +Float 10 [_Brightness] SetTexture 0 [_MatCap] 2D "3.0-!!ARBfp1.0 -# 65 ALU, 1 TEX -PARAM c[17] = { state.matrix.mvp, +# 68 ALU, 1 TEX +PARAM c[13] = { state.matrix.mvp, state.matrix.modelview[0].invtrans, - program.local[8..14], - { 1, 0, 0.5, 200 }, - { 1.5 } }; + program.local[8..10], + { 1, 0, 2, 0.5 }, + { 1.25, 9.9999997e-05, 9.9999997e-06 } }; TEMP R0; TEMP R1; TEMP R2; @@ -705,10 +1430,10 @@ TEMP R3; TEMP R4; RCP R0.x, fragment.texcoord[1].w; MUL R3.xyz, fragment.texcoord[1], R0.x; -MOV R3.w, c[15].x; +MOV R3.w, c[11].x; RCP R0.x, fragment.texcoord[2].w; MAD R2.xyz, fragment.texcoord[2], R0.x, -R3; -MOV R2.w, c[15].y; +MOV R2.w, c[11].y; DP4 R1.w, fragment.texcoord[3], R2; DP4 R1.z, R2, fragment.color.primary; DP4 R1.y, R2, fragment.texcoord[7]; @@ -720,15 +1445,19 @@ DP4 R0.x, R3, fragment.texcoord[6]; DP4 R0.y, R3, fragment.texcoord[7]; DP4 R0.y, R3, R0; DP4 R0.x, R1, R2; -MOV R0.w, c[15].x; MUL R4.x, R0, R0.y; MUL R3.w, R4.y, R4.y; ADD R0.y, R3.w, -R4.x; RSQ R0.y, R0.y; -RCP R0.z, R0.x; RCP R0.y, R0.y; -ADD R0.x, -R4.y, -R0.y; -MUL R0.x, R0, R0.z; +ADD R0.z, -R4.y, -R0.y; +MOV R0.w, c[11].x; +RCP R0.x, R0.x; +ADD R0.y, -R4, R0; +MUL R0.y, R0.x, R0; +MUL R0.x, R0.z, R0; +ADD R0.z, R0.x, -R0.y; +CMP R0.x, R0.z, R0, R0.y; MAD R0.xyz, R0.x, R2, R3; DP4 R1.w, R0, fragment.texcoord[3]; DP4 R1.z, R0, fragment.color.primary; @@ -738,38 +1467,37 @@ DP4 R2.z, R1, c[6]; DP4 R2.x, R1, c[4]; DP4 R2.y, R1, c[5]; DP3 R1.x, R2, R2; -RSQ R1.x, R1.x; -MUL R1.xyz, R1.x, R2; -MAX R1.w, R1.z, c[15].y; -POW R1.w, R1.w, c[15].w; -MAD R2.xyz, R1.z, c[12], R1.w; -MAD R1.xy, R1, c[15].z, c[15].z; +RSQ R2.w, R1.x; +MUL R3.xyz, R2.w, R2; +MOV R1, fragment.texcoord[2]; +ADD R1, fragment.texcoord[1], -R1; +DP4 R1.z, R1, R1; +MUL R2.xyz, R3.z, c[8]; +MAD R1.xy, R3, c[11].w, c[11].w; +RSQ R2.w, R1.z; +RCP R3.x, R2.w; +MOV R2.w, c[8]; TEX R1, R1, texture[0], 2D; -MOV R2.w, c[12]; MUL R1, R2, R1; -MUL result.color, R1, c[16].x; -DP4 R2.x, R0, c[3]; -DP4 R1.x, R0, c[2]; -RCP R1.y, R2.x; -MAD R1.x, R1, R1.y, c[15]; -DP4 R1.y, R0, c[8]; -MUL result.depth.z, R1.x, c[15]; -DP4 R1.x, R0, c[9]; -DP4 R0.y, R0, c[10]; -MAD R1.y, R1, c[14].x, c[14].w; -MAD R1.y, R1.x, c[14], R1; -MOV R1.x, c[15]; -ADD R0.x, -R1, c[13]; -MUL R0.y, R0, c[14].z; -ABS R0.x, R0; -SLT R0.y, R1, -R0; -CMP R0.x, -R0, c[15].y, c[15]; -MUL R0.x, R0, R0.y; -SLT R0.y, R3.w, R4.x; -KIL -R0.x; -KIL -R0.y; +MAD R2.x, R3, c[12].y, c[12].z; +MOV R3.x, c[11]; +ADD R3.y, -R3.x, c[9].x; +DP4 R3.x, R0, c[3]; +DP4 R0.x, R0, c[2]; +MUL R1, R1, c[10].x; +RCP R2.x, R2.x; +SLT R0.z, R3.w, R4.x; +MUL R1, R1, c[12].x; +MIN R2.x, R2, c[11]; +MUL R2, R1, R2.x; +ABS R3.y, R3; +CMP result.color, -R3.y, R1, R2; +MUL R1.x, R3, c[11].z; +RCP R0.y, R1.x; +MAD result.depth.z, R0.x, R0.y, c[11].w; // hack for D3D: depth may need to be unmasked +KIL -R0.z; END -# 65 instructions, 5 R-regs +# 68 instructions, 5 R-regs " } @@ -777,16 +1505,15 @@ SubProgram "d3d9 " { Keywords { } Matrix 0 [glstate_matrix_mvp] Matrix 4 [glstate_matrix_invtrans_modelview0] -Matrix 8 [_Object2World] -Vector 12 [_Color] -Float 13 [_Cut] -Vector 14 [_Cutplane] +Vector 8 [_Color] +Float 9 [_Attenuation] +Float 10 [_Brightness] SetTexture 0 [_MatCap] 2D "ps_3_0 -; 65 ALU, 3 TEX +; 66 ALU, 2 TEX dcl_2d s0 -def c15, 1.00000000, 0.00000000, -1.00000000, 200.00000000 -def c16, 0.50000000, 1.50000000, 0, 0 +def c11, 1.00000000, 0.00000000, -1.00000000, 0.50000000 +def c12, 1.25000000, 0.00010000, 0.00001000, 2.00000000 dcl_texcoord1 v0 dcl_texcoord2 v1 dcl_texcoord6 v2 @@ -795,7 +1522,7 @@ dcl_color0 v4 dcl_texcoord3 v5 rcp r0.x, v0.w mul r1.xyz, v0, r0.x -mov r1.w, c15.x +mov r1.w, c11.x dp4 r0.w, r1, v5 dp4 r0.z, r1, v4 dp4 r0.x, r1, v2 @@ -803,7 +1530,7 @@ dp4 r0.y, r1, v3 dp4 r3.x, r1, r0 rcp r0.x, v1.w mad r0.xyz, v1, r0.x, -r1 -mov r0.w, c15.y +mov r0.w, c11.y dp4 r2.w, v5, r0 dp4 r2.z, r0, v4 dp4 r2.x, r0, v2 @@ -813,11 +1540,15 @@ dp4 r1.w, r1, r2 mul r3.x, r0.w, r3 mad r3.w, r1, r1, -r3.x rsq r2.x, r3.w -mov r2.w, c15.x -rcp r2.y, r0.w rcp r2.x, r2.x -add r0.w, -r1, -r2.x -mul r0.w, r0, r2.y +add r2.y, -r1.w, -r2.x +mov r2.w, c11.x +add r1.w, -r1, r2.x +rcp r0.w, r0.w +mul r1.w, r0, r1 +mul r0.w, r2.y, r0 +add r2.x, r0.w, -r1.w +cmp r0.w, r2.x, r1, r0 mad r2.xyz, r0, r0.w, r1 dp4 r0.w, v5, r2 dp4 r0.z, v4, r2 @@ -829,46 +1560,145 @@ dp4 r1.y, r0, c5 dp3 r0.x, r1, r1 rsq r0.x, r0.x mul r3.xyz, r0.x, r1 -max r1.x, r3.z, c15.y -pow r0, r1.x, c15.w -mad r1.xyz, r3.z, c12, r0.x -mad_pp r0.xy, r3, c16.x, c16.x -dp4 r1.w, r2, c8 -mad r3.x, r1.w, c14, c14.w -dp4 r1.w, r2, c9 -mad r3.y, r1.w, c14, r3.x -mov r1.w, c13.x -dp4 r3.x, r2, c10 -add r1.w, c15.z, r1 -mad r3.x, r3, c14.z, r3.y -abs r1.w, r1 -texld r0, r0, s0 -cmp r1.w, -r1, c15.x, c15.y -cmp r3.x, r3, c15.y, c15 -mul_pp r3.x, r1.w, r3 -mov r1.w, c12 -mul r1, r1, r0 -mov_pp r0, -r3.x -texkill r0.xyzw -dp4 r0.y, r2, c3 -rcp r0.z, r0.y -dp4 r0.y, r2, c2 -mul oC0, r1, c16.y -mad r1.x, r0.y, r0.z, c15 -cmp r0.x, r3.w, c15.y, c15 +mov r0, v1 +add r0, v0, -r0 +mul r1.xyz, r3.z, c8 +dp4 r1.w, r0, r0 +mad_pp r3.xy, r3, c11.w, c11.w +texld r0, r3, s0 +rsq r3.x, r1.w +mov r1.w, c8 +mul r0, r1, r0 +rcp r1.x, r3.x +mad r1.x, r1, c12.y, c12.z +rcp r1.y, r1.x +mov r1.x, c9 +add r3.x, c11.z, r1 +mul r0, r0, c10.x +mul r0, r0, c12.x +min r1.y, r1, c11.x +mul r1, r0, r1.y +abs r3.x, r3 +cmp oC0, -r3.x, r1, r0 +dp4 r0.x, r2, c3 +mul r0.y, r0.x, c12.w +rcp r1.y, r0.y +dp4 r1.x, r2, c2 +cmp r0.x, r3.w, c11.y, c11 mov_pp r0, -r0.x -mul oDepth, r1.x, c16.x //Hack for Direct3D. Original line : mul oDepth.z, r1.x, c16.x +mad oDepth, r1.x, r1.y, c11.w texkill r0.xyzw " } +SubProgram "d3d11 " { +Keywords { } +ConstBuffer "$Globals" 160 // 152 used size, 11 vars +Vector 32 [_Color] 4 +// unknown _Attenuation Class=0 Type=2 Cols=1 Rows=1 Size=4 +Float 148 [_Brightness] +ConstBuffer "UnityPerDraw" 336 // 192 used size, 6 vars +Matrix 0 [glstate_matrix_mvp] 4 +Matrix 128 [glstate_matrix_invtrans_modelview0] 4 +BindCB "$Globals" 0 +BindCB "UnityPerDraw" 1 +SetTexture 0 [_MatCap] 2D 0 +// 63 instructions, 4 temp regs, 0 temp arrays: +// ALU 46 float, 1 int, 0 uint +// TEX 1 (0 load, 0 comp, 0 bias, 0 grad) +// FLOW 1 static, 0 dynamic +"ps_4_0 +eefieceddconoknclpollgmklgobjogfbpblpmikabaaaaaaieajaaaaadaaaaaa +cmaaaaaabiabaaaagmabaaaaejfdeheooeaaaaaaaiaaaaaaaiaaaaaamiaaaaaa +aaaaaaaaabaaaaaaadaaaaaaaaaaaaaaapaaaaaaneaaaaaaabaaaaaaaaaaaaaa +adaaaaaaabaaaaaaapapaaaaneaaaaaaacaaaaaaaaaaaaaaadaaaaaaacaaaaaa +apapaaaaneaaaaaaagaaaaaaaaaaaaaaadaaaaaaadaaaaaaapapaaaaneaaaaaa +ahaaaaaaaaaaaaaaadaaaaaaaeaaaaaaapapaaaannaaaaaaaaaaaaaaaaaaaaaa +adaaaaaaafaaaaaaapapaaaaneaaaaaaadaaaaaaaaaaaaaaadaaaaaaagaaaaaa +apapaaaaneaaaaaaaeaaaaaaaaaaaaaaadaaaaaaahaaaaaaapaaaaaafdfgfpfa +gphdgjhegjgpgoaafeeffiedepepfceeaaedepemepfcaaklepfdeheoemaaaaaa +acaaaaaaaiaaaaaadiaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapaaaaaa +ecaaaaaaaaaaaaaaaaaaaaaaadaaaaaappppppppabaoaaaafdfgfpfegbhcghgf +heaafdfgfpeegfhahegiaaklfdeieefcbaaiaaaaeaaaaaaaaeacaaaafjaaaaae +egiocaaaaaaaaaaaakaaaaaafjaaaaaeegiocaaaabaaaaaaamaaaaaafkaaaaad +aagabaaaaaaaaaaafibiaaaeaahabaaaaaaaaaaaffffaaaagcbaaaadpcbabaaa +abaaaaaagcbaaaadpcbabaaaacaaaaaagcbaaaadpcbabaaaadaaaaaagcbaaaad +pcbabaaaaeaaaaaagcbaaaadpcbabaaaafaaaaaagcbaaaadpcbabaaaagaaaaaa +gfaaaaadpccabaaaaaaaaaaagfaaaaacabmaaaaagiaaaaacaeaaaaaadgaaaaaf +icaabaaaaaaaaaaaabeaaaaaaaaaiadpaoaaaaahhcaabaaaaaaaaaaaegbcbaaa +abaaaaaapgbpbaaaabaaaaaabbaaaaahbcaabaaaabaaaaaaegbobaaaadaaaaaa +egaobaaaaaaaaaaabbaaaaahccaabaaaabaaaaaaegbobaaaaeaaaaaaegaobaaa +aaaaaaaabbaaaaahecaabaaaabaaaaaaegbobaaaafaaaaaaegaobaaaaaaaaaaa +bbaaaaahicaabaaaabaaaaaaegbobaaaagaaaaaaegaobaaaaaaaaaaabbaaaaah +bcaabaaaabaaaaaaegaobaaaaaaaaaaaegaobaaaabaaaaaaaoaaaaahocaabaaa +abaaaaaaagbjbaaaacaaaaaapgbpbaaaacaaaaaaaaaaaaaiocaabaaaabaaaaaa +agajbaiaebaaaaaaaaaaaaaafgaobaaaabaaaaaabaaaaaahbcaabaaaacaaaaaa +egbcbaaaadaaaaaajgahbaaaabaaaaaabaaaaaahccaabaaaacaaaaaaegbcbaaa +aeaaaaaajgahbaaaabaaaaaabaaaaaahecaabaaaacaaaaaaegbcbaaaafaaaaaa +jgahbaaaabaaaaaabaaaaaahbcaabaaaadaaaaaajgahbaaaabaaaaaaegacbaaa +acaaaaaadiaaaaahbcaabaaaabaaaaaaakaabaaaabaaaaaaakaabaaaadaaaaaa +baaaaaahicaabaaaacaaaaaaegbcbaaaagaaaaaajgahbaaaabaaaaaabbaaaaah +icaabaaaaaaaaaaaegaobaaaaaaaaaaaegaobaaaacaaaaaadcaaaaakbcaabaaa +abaaaaaadkaabaaaaaaaaaaadkaabaaaaaaaaaaaakaabaiaebaaaaaaabaaaaaa +dbaaaaahbcaabaaaacaaaaaaakaabaaaabaaaaaaabeaaaaaaaaaaaaaelaaaaaf +bcaabaaaabaaaaaaakaabaaaabaaaaaaanaaaeadakaabaaaacaaaaaaaaaaaaaj +bcaabaaaacaaaaaadkaabaiaebaaaaaaaaaaaaaaakaabaiaebaaaaaaabaaaaaa +aaaaaaaiicaabaaaaaaaaaaadkaabaiaebaaaaaaaaaaaaaaakaabaaaabaaaaaa +aoaaaaahicaabaaaaaaaaaaadkaabaaaaaaaaaaaakaabaaaadaaaaaaaoaaaaah +bcaabaaaabaaaaaaakaabaaaacaaaaaaakaabaaaadaaaaaadbaaaaahbcaabaaa +acaaaaaaakaabaaaabaaaaaadkaabaaaaaaaaaaadhaaaaajicaabaaaaaaaaaaa +akaabaaaacaaaaaaakaabaaaabaaaaaadkaabaaaaaaaaaaadcaaaaajhcaabaaa +aaaaaaaapgapbaaaaaaaaaaajgahbaaaabaaaaaaegacbaaaaaaaaaaadgaaaaaf +icaabaaaaaaaaaaaabeaaaaaaaaaiadpbbaaaaahbcaabaaaabaaaaaaegbobaaa +aeaaaaaaegaobaaaaaaaaaaadiaaaaaihcaabaaaabaaaaaaagaabaaaabaaaaaa +egiccaaaabaaaaaaajaaaaaabbaaaaahicaabaaaabaaaaaaegbobaaaadaaaaaa +egaobaaaaaaaaaaadcaaaaakhcaabaaaabaaaaaaegiccaaaabaaaaaaaiaaaaaa +pgapbaaaabaaaaaaegacbaaaabaaaaaabbaaaaahicaabaaaabaaaaaaegbobaaa +afaaaaaaegaobaaaaaaaaaaabbaaaaahicaabaaaaaaaaaaaegbobaaaagaaaaaa +egaobaaaaaaaaaaadcaaaaakhcaabaaaabaaaaaaegiccaaaabaaaaaaakaaaaaa +pgapbaaaabaaaaaaegacbaaaabaaaaaadcaaaaakhcaabaaaabaaaaaaegiccaaa +abaaaaaaalaaaaaapgapbaaaaaaaaaaaegacbaaaabaaaaaabaaaaaahicaabaaa +aaaaaaaaegacbaaaabaaaaaaegacbaaaabaaaaaaeeaaaaaficaabaaaaaaaaaaa +dkaabaaaaaaaaaaadiaaaaahhcaabaaaabaaaaaapgapbaaaaaaaaaaaegacbaaa +abaaaaaadiaaaaaihcaabaaaacaaaaaakgakbaaaabaaaaaaegiccaaaaaaaaaaa +acaaaaaadcaaaaapdcaabaaaabaaaaaaegaabaaaabaaaaaaaceaaaaaaaaaaadp +aaaaaadpaaaaaaaaaaaaaaaaaceaaaaaaaaaaadpaaaaaadpaaaaaaaaaaaaaaaa +efaaaaajpcaabaaaabaaaaaaegaabaaaabaaaaaaeghobaaaaaaaaaaaaagabaaa +aaaaaaaadiaaaaahhcaabaaaacaaaaaaegacbaaaabaaaaaaegacbaaaacaaaaaa +diaaaaaiicaabaaaacaaaaaadkaabaaaabaaaaaadkiacaaaaaaaaaaaacaaaaaa +diaaaaaipcaabaaaabaaaaaaegaobaaaacaaaaaafgifcaaaaaaaaaaaajaaaaaa +diaaaaakpcaabaaaabaaaaaaegaobaaaabaaaaaaaceaaaaaaaaakadpaaaakadp +aaaakadpaaaakadpaaaaaaaipcaabaaaacaaaaaaegbobaiaebaaaaaaabaaaaaa +egbobaaaacaaaaaabbaaaaahicaabaaaaaaaaaaaegaobaaaacaaaaaaegaobaaa +acaaaaaaelaaaaaficaabaaaaaaaaaaadkaabaaaaaaaaaaadcaaaaajicaabaaa +aaaaaaaadkaabaaaaaaaaaaaabeaaaaabhlhnbdiabeaaaaakmmfchdhaoaaaaak +icaabaaaaaaaaaaaaceaaaaaaaaaiadpaaaaiadpaaaaiadpaaaaiadpdkaabaaa +aaaaaaaaddaaaaahicaabaaaaaaaaaaadkaabaaaaaaaaaaaabeaaaaaaaaaiadp +diaaaaahpcaabaaaacaaaaaapgapbaaaaaaaaaaaegaobaaaabaaaaaacaaaaaai +icaabaaaaaaaaaaaakiacaaaaaaaaaaaajaaaaaaabeaaaaaabaaaaaadhaaaaaj +pccabaaaaaaaaaaapgapbaaaaaaaaaaaegaobaaaacaaaaaaegaobaaaabaaaaaa +diaaaaaikcaabaaaaaaaaaaafgafbaaaaaaaaaaakgiocaaaabaaaaaaabaaaaaa +dcaaaaakdcaabaaaaaaaaaaaogikcaaaabaaaaaaaaaaaaaaagaabaaaaaaaaaaa +ngafbaaaaaaaaaaadcaaaaakdcaabaaaaaaaaaaaogikcaaaabaaaaaaacaaaaaa +kgakbaaaaaaaaaaaegaabaaaaaaaaaaaaaaaaaaidcaabaaaaaaaaaaaegaabaaa +aaaaaaaaogikcaaaabaaaaaaadaaaaaaaaaaaaahccaabaaaaaaaaaaabkaabaaa +aaaaaaaabkaabaaaaaaaaaaaaoaaaaahbcaabaaaaaaaaaaaakaabaaaaaaaaaaa +bkaabaaaaaaaaaaaaaaaaaagabmaaaaaakaabaaaaaaaaaaaabeaaaaaaaaaaadp +doaaaaab" } -#LINE 376 +SubProgram "gles3 " { +Keywords { } +"!!GLES3" +} + +} + +#LINE 384 } } // Pour les cartes graphiques ne supportant pas nos Shaders -Fallback "VertexLit" -} \ No newline at end of file +//Fallback "VertexLit" // automatically enables shadow casting, which probably eats resources and does't work anyway +} diff --git a/Assets/Resources/Shader/new/CubeBonds_TwoColors.shader b/Assets/Resources/Shader/new/CubeBonds_TwoColors.shader index e09b867c..418ef247 100644 --- a/Assets/Resources/Shader/new/CubeBonds_TwoColors.shader +++ b/Assets/Resources/Shader/new/CubeBonds_TwoColors.shader @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: CubeBonds_TwoColors.shader 210 2013-04-06 20:52:41Z baaden $ +/// $Id: CubeBonds_TwoColors.shader 347 2013-08-20 09:36:34Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -65,10 +65,10 @@ Shader "Custom/CubeBonds_TwoColors" { Properties { - _Color1 ("Color Atom 1", Color) = (1,0.1,0.1,1.0) - _Color2 ("Color Atom 2", Color) = (0.1,0.1,1.0,1.0) - _Pos1 ("Position Atom 1", Vector) = (0.0,0.0,0.0,1.0) - _Pos2 ("Position Atom 2", Vector) = (3.0,0.0,0.0,1.0) + _Color1 ("Color Atom 1", Color) = (1, 0.1, 0.1, 1.0) + _Color2 ("Color Atom 2", Color) = (0.1, 0.1, 1.0, 1.0) + _Pos1 ("Position Atom 1", Vector) = (0.0, 0.0, 0.0, 1.0) + _Pos2 ("Position Atom 2", Vector) = (3.0, 0.0, 0.0, 1.0) } SubShader { Tags { "RenderType"="Opaque" } @@ -91,10 +91,43 @@ Shader "Custom/CubeBonds_TwoColors" { float3 pos = mul(v.vertex,_World2Object); o.col = _Color1.rgb; - if(pos.x < 0) - o.col = _Color2.rgb; + + if(_Pos1.x > _Pos2.x){ + if(pos.x < 0) + o.col = _Color2.rgb; + } + else{ // if(_Pos1.x < _Pos2.x) + if(pos.x > 0) + o.col = _Color2.rgb; + } } + //float minDist = 99999999999.0; +// float3 pos; +// float3 pos1; +// float3 pos2; + + +// pos = v.vertex; + //pos = mul(v.vertex,_World2Object); +// pos1 = mul (_Pos1, (float3x3)_World2Object); +// pos2 = mul (_Pos2, (float3x3)_World2Object); +// float minDist = distance(pos, _Pos2); +// o.col = _Color2.rgb; + +// float dist = distance(pos, _Pos1); +// if(dist < minDist) +// o.col = _Color1.rgb; + + + //float3 pos = mul(v.vertex,_World2Object); + + + //o.col = _Color1.rgb; + //if(pos.x < 0) + //o.col = _Color2.rgb; +// } + void surf (Input IN, inout SurfaceOutput o) { o.Albedo = IN.col.rgb; o.Alpha = 1; diff --git a/Assets/Resources/Shader/new/StickImproved.shader b/Assets/Resources/Shader/new/StickImproved.shader index 60f5c548..6d70d1cd 100644 --- a/Assets/Resources/Shader/new/StickImproved.shader +++ b/Assets/Resources/Shader/new/StickImproved.shader @@ -1,94 +1,20 @@ -/// @file StickImproved.shader -/// @brief Details to be specified -/// @author FvNano/LBT team -/// @author Marc Baaden -/// @date 2013-4 -/// -/// Copyright Centre National de la Recherche Scientifique (CNRS) -/// -/// contributors : -/// FvNano/LBT team, 2010-13 -/// Marc Baaden, 2010-13 -/// -/// baaden@smplinux.de -/// http://www.baaden.ibpc.fr -/// -/// This software is a computer program based on the Unity3D game engine. -/// It is part of UnityMol, a general framework whose purpose is to provide -/// a prototype for developing molecular graphics and scientific -/// visualisation applications. More details about UnityMol are provided at -/// the following URL: "http://unitymol.sourceforge.net". Parts of this -/// source code are heavily inspired from the advice provided on the Unity3D -/// forums and the Internet. -/// -/// This software is governed by the CeCILL-C license under French law and -/// abiding by the rules of distribution of free software. You can use, -/// modify and/or redistribute the software under the terms of the CeCILL-C -/// license as circulated by CEA, CNRS and INRIA at the following URL: -/// "http://www.cecill.info". -/// -/// As a counterpart to the access to the source code and rights to copy, -/// modify and redistribute granted by the license, users are provided only -/// with a limited warranty and the software's author, the holder of the -/// economic rights, and the successive licensors have only limited -/// liability. -/// -/// In this respect, the user's attention is drawn to the risks associated -/// with loading, using, modifying and/or developing or reproducing the -/// software by the user in light of its specific status of free software, -/// that may mean that it is complicated to manipulate, and that also -/// therefore means that it is reserved for developers and experienced -/// professionals having in-depth computer knowledge. Users are therefore -/// encouraged to load and test the software's suitability as regards their -/// requirements in conditions enabling the security of their systems and/or -/// data to be ensured and, more generally, to use and operate it in the -/// same conditions as regards security. -/// -/// The fact that you are presently reading this means that you have had -/// knowledge of the CeCILL-C license and that you accept its terms. -/// -/// $Id: StickImproved.shader 210 2013-04-06 20:52:41Z baaden $ -/// -/// References : -/// If you use this code, please cite the following reference : -/// Z. Lv, A. Tek, F. Da Silva, C. Empereur-mot, M. Chavent and M. Baaden: -/// "Game on, Science - how video game technology may help biologists tackle -/// visualization challenges" (2013), PLoS ONE 8(3):e57990. -/// doi:10.1371/journal.pone.0057990 -/// -/// If you use the HyperBalls visualization metaphor, please also cite the -/// following reference : M. Chavent, A. Vanel, A. Tek, B. Levy, S. Robert, -/// B. Raffin and M. Baaden: "GPU-accelerated atom and dynamic bond visualization -/// using HyperBalls, a unified algorithm for balls, sticks and hyperboloids", -/// J. Comput. Chem., 2011, 32, 2924 -/// - -// Upgrade NOTE: replaced 'glstate.matrix.invtrans.modelview[0]' with 'UNITY_MATRIX_IT_MV' -// Upgrade NOTE: replaced 'glstate.matrix.mvp' with 'UNITY_MATRIX_MVP' - -// $Id: StickImproved.shader 210 2013-04-06 20:52:41Z baaden $ -// (c) 2010 by Marc Baaden & Matthieu Chavent, -// Unity3D FvNano shaders coming from FVNano project -// -// On a un cube (mesh) dans la scene -> vertex -// la spherepos du cube est 0, 0, 0 - Shader "FvNano/Stick HyperBalls OpenGL" { // Proprietes exposees a l'interface graphique Properties { _Rayon1 ("Rayon de la Sphere1", float) = 0.1 _Rayon2 ("Rayon de la Sphere2", float) = 0.1 - _Color ("Couleur du lien", Color) = (1,0.1,0.1,1.0) - _Color2 ("Couleur du lien2", Color) = (1,0.1,0.1,1.0) - _TexPos1 ("Position de la Sphere 1", Vector) = (0.0,0.0,0.0,1.0) // important que w != 0 !! - _TexPos2 ("Position de la Sphere 2", Vector) = (3.0,0.0,0.0,1.0) // important que w != 0 !! + _Color ("Couleur du lien", Color) = (1.0, 0.1, 0.1, 1.0) + _Color2 ("Couleur du lien2", Color) = (1.0, 0.1, 0.1, 1.0) + _TexPos1 ("Position de la Sphere 1", Vector) = (0.0, 0.0, 0.0, 1.0) // important que w != 0 !! + _TexPos2 ("Position de la Sphere 2", Vector) = (3.0, 0.0, 0.0, 1.0) // important que w != 0 !! _Shrink ("Shrink Factor", float) = 0.1 _Visibilite ("Visibilite de l'hyperbole", float) = 1.0 - _Light ("Light vector", Vector) = (1,0,0,0) + _Light ("Light vector", Vector) = (1, 0, 0, 0) _Scale("Link Scale", float) = 1.0 _EllipseFactor("Ellipse Factor", float) = 1.0 _MatCap ("MatCap (RGB)", 2D) = "white" {} + _Attenuation ("Attenuation", float) = 0 } @@ -109,7 +35,7 @@ CGPROGRAM #pragma target 3.0 #pragma vertex stickimproved_v #pragma fragment stickimproved_p -#pragma multi_compile_builtin +#pragma multi_compile_builtin_noshadows // Variables modifiables dans Unity3D float _Rayon1; @@ -123,6 +49,7 @@ float4 _Light; float _Shrink; float _Scale; float _EllipseFactor; +float _Attenuation; uniform sampler2D _MatCap; @@ -133,18 +60,25 @@ struct appdata { float4 vertex : POSITION; }; +float sum (float4 v) { + return v.x + v.y + v.z + v.w; +} + +float sum (float3 v) { + return v.x + v.y + v.z; +} + // Variables passees du vertex au pixel shader struct v2p { float4 p : POSITION; - float4x4 matrix_near : TEXCOORD2; - float2x4 matrix_cutoff : TEXCOORD6; - float4 color_atom1 : TEXCOORD0; + float4x4 matrix_near : TEXCOORD2; + float2x4 matrix_cutoff : TEXCOORD6; + float4 color_atom1 : TEXCOORD0; float shrink : TEXCOORD1; }; -struct fragment_out -{ +struct fragment_out { float4 Color : COLOR0; float depth : DEPTH; }; @@ -155,95 +89,95 @@ struct Ray { }; //inverse function -float4x4 mat_inverse(float4x4 matrix) { +float4x4 mat_inverse(float4x4 my_mat) { - float4x4 inv; + float4x4 inv; + float invdet = 1/determinant(my_mat); - float det = matrix[0][0]*matrix[1][1]*matrix[2][2]*matrix[3][3] + matrix[0][0]*matrix[1][2]*matrix[2][3]*matrix[3][1] + matrix[0][0]*matrix[1][3]*matrix[2][1]*matrix[3][2] + - matrix[0][1]*matrix[1][0]*matrix[2][3]*matrix[3][2] + matrix[0][1]*matrix[1][2]*matrix[2][0]*matrix[3][3] + matrix[0][1]*matrix[1][3]*matrix[2][2]*matrix[3][0] + - matrix[0][2]*matrix[1][0]*matrix[2][1]*matrix[3][3] + matrix[0][2]*matrix[1][1]*matrix[2][3]*matrix[3][0] + matrix[0][2]*matrix[1][3]*matrix[2][0]*matrix[3][1] + - matrix[0][3]*matrix[1][0]*matrix[2][2]*matrix[3][1] + matrix[0][3]*matrix[1][1]*matrix[2][0]*matrix[3][2] + matrix[0][3]*matrix[1][2]*matrix[2][1]*matrix[3][0] - - matrix[0][0]*matrix[1][1]*matrix[2][3]*matrix[3][2] - matrix[0][0]*matrix[1][2]*matrix[2][1]*matrix[3][3] - matrix[0][0]*matrix[1][3]*matrix[2][2]*matrix[3][1] - - matrix[0][1]*matrix[1][0]*matrix[2][2]*matrix[3][3] - matrix[0][1]*matrix[1][2]*matrix[2][3]*matrix[3][0] - matrix[0][1]*matrix[1][3]*matrix[2][0]*matrix[3][2] - - matrix[0][2]*matrix[1][0]*matrix[2][3]*matrix[3][1] - matrix[0][2]*matrix[1][1]*matrix[2][0]*matrix[3][3] - matrix[0][2]*matrix[1][3]*matrix[2][1]*matrix[3][0] - - matrix[0][3]*matrix[1][0]*matrix[2][1]*matrix[3][2] - matrix[0][3]*matrix[1][1]*matrix[2][2]*matrix[3][0] - matrix[0][3]*matrix[1][2]*matrix[2][0]*matrix[3][1] ; - - inv[0][0] = (1/det)*( matrix[1][1]*matrix[2][2]*matrix[3][3] + matrix[1][2]*matrix[2][3]*matrix[3][1] + matrix[1][3]*matrix[2][1]*matrix[3][2] - - matrix[1][1]*matrix[2][3]*matrix[3][2] - matrix[1][2]*matrix[2][1]*matrix[3][3] - matrix[1][3]*matrix[2][2]*matrix[3][1] ) ; + inv[0][0] = invdet*( my_mat[1][1]*my_mat[2][2]*my_mat[3][3] + my_mat[1][2]*my_mat[2][3]*my_mat[3][1] + my_mat[1][3]*my_mat[2][1]*my_mat[3][2] - + my_mat[1][1]*my_mat[2][3]*my_mat[3][2] - my_mat[1][2]*my_mat[2][1]*my_mat[3][3] - my_mat[1][3]*my_mat[2][2]*my_mat[3][1] ) ; - inv[0][1] = (1/det)*( matrix[0][1]*matrix[2][3]*matrix[3][2] + matrix[0][2]*matrix[2][1]*matrix[3][3] + matrix[0][3]*matrix[2][2]*matrix[3][1] - - matrix[0][1]*matrix[2][2]*matrix[3][3] - matrix[0][2]*matrix[2][3]*matrix[3][1] - matrix[0][3]*matrix[2][1]*matrix[3][2] ) ; + inv[0][1] = invdet*( my_mat[0][1]*my_mat[2][3]*my_mat[3][2] + my_mat[0][2]*my_mat[2][1]*my_mat[3][3] + my_mat[0][3]*my_mat[2][2]*my_mat[3][1] - + my_mat[0][1]*my_mat[2][2]*my_mat[3][3] - my_mat[0][2]*my_mat[2][3]*my_mat[3][1] - my_mat[0][3]*my_mat[2][1]*my_mat[3][2] ) ; - inv[0][2] = (1/det)*( matrix[0][1]*matrix[1][2]*matrix[3][3] + matrix[0][2]*matrix[1][3]*matrix[3][1] + matrix[0][3]*matrix[1][1]*matrix[3][2] - - matrix[0][1]*matrix[1][3]*matrix[3][2] - matrix[0][2]*matrix[1][1]*matrix[3][3] - matrix[0][3]*matrix[1][2]*matrix[3][1] ) ; + inv[0][2] = invdet*( my_mat[0][1]*my_mat[1][2]*my_mat[3][3] + my_mat[0][2]*my_mat[1][3]*my_mat[3][1] + my_mat[0][3]*my_mat[1][1]*my_mat[3][2] - + my_mat[0][1]*my_mat[1][3]*my_mat[3][2] - my_mat[0][2]*my_mat[1][1]*my_mat[3][3] - my_mat[0][3]*my_mat[1][2]*my_mat[3][1] ) ; - inv[0][3] = (1/det)*( matrix[0][1]*matrix[1][3]*matrix[2][2] + matrix[0][2]*matrix[1][1]*matrix[2][3] + matrix[0][3]*matrix[1][2]*matrix[2][1] - - matrix[0][1]*matrix[1][2]*matrix[2][3] - matrix[0][2]*matrix[1][3]*matrix[2][1] - matrix[0][3]*matrix[1][1]*matrix[2][2] ) ; + inv[0][3] = invdet*( my_mat[0][1]*my_mat[1][3]*my_mat[2][2] + my_mat[0][2]*my_mat[1][1]*my_mat[2][3] + my_mat[0][3]*my_mat[1][2]*my_mat[2][1] - + my_mat[0][1]*my_mat[1][2]*my_mat[2][3] - my_mat[0][2]*my_mat[1][3]*my_mat[2][1] - my_mat[0][3]*my_mat[1][1]*my_mat[2][2] ) ; - inv[1][0] = (1/det)*( matrix[1][0]*matrix[2][3]*matrix[3][2] + matrix[1][2]*matrix[2][0]*matrix[3][3] + matrix[1][3]*matrix[2][2]*matrix[3][0] - - matrix[1][0]*matrix[2][2]*matrix[3][3] - matrix[1][2]*matrix[2][3]*matrix[3][0] - matrix[1][3]*matrix[2][0]*matrix[3][2] ) ; + inv[1][0] = invdet*( my_mat[1][0]*my_mat[2][3]*my_mat[3][2] + my_mat[1][2]*my_mat[2][0]*my_mat[3][3] + my_mat[1][3]*my_mat[2][2]*my_mat[3][0] - + my_mat[1][0]*my_mat[2][2]*my_mat[3][3] - my_mat[1][2]*my_mat[2][3]*my_mat[3][0] - my_mat[1][3]*my_mat[2][0]*my_mat[3][2] ) ; - inv[1][1] = (1/det)*( matrix[0][0]*matrix[2][2]*matrix[3][3] + matrix[0][2]*matrix[2][3]*matrix[3][0] + matrix[0][3]*matrix[2][0]*matrix[3][2] - - matrix[0][0]*matrix[2][3]*matrix[3][2] - matrix[0][2]*matrix[2][0]*matrix[3][3] - matrix[0][3]*matrix[2][2]*matrix[3][0] ) ; + inv[1][1] = invdet*( my_mat[0][0]*my_mat[2][2]*my_mat[3][3] + my_mat[0][2]*my_mat[2][3]*my_mat[3][0] + my_mat[0][3]*my_mat[2][0]*my_mat[3][2] - + my_mat[0][0]*my_mat[2][3]*my_mat[3][2] - my_mat[0][2]*my_mat[2][0]*my_mat[3][3] - my_mat[0][3]*my_mat[2][2]*my_mat[3][0] ) ; - inv[1][2] = (1/det)*( matrix[0][0]*matrix[1][3]*matrix[3][2] + matrix[0][2]*matrix[1][0]*matrix[3][3] + matrix[0][3]*matrix[1][2]*matrix[3][0] - - matrix[0][0]*matrix[1][2]*matrix[3][3] - matrix[0][2]*matrix[1][3]*matrix[3][0] - matrix[0][3]*matrix[1][0]*matrix[3][2] ) ; + inv[1][2] = invdet*( my_mat[0][0]*my_mat[1][3]*my_mat[3][2] + my_mat[0][2]*my_mat[1][0]*my_mat[3][3] + my_mat[0][3]*my_mat[1][2]*my_mat[3][0] - + my_mat[0][0]*my_mat[1][2]*my_mat[3][3] - my_mat[0][2]*my_mat[1][3]*my_mat[3][0] - my_mat[0][3]*my_mat[1][0]*my_mat[3][2] ) ; - inv[1][3] = (1/det)*( matrix[0][0]*matrix[1][2]*matrix[2][3] + matrix[0][2]*matrix[1][3]*matrix[2][0] + matrix[0][3]*matrix[1][0]*matrix[2][2] - - matrix[0][0]*matrix[1][3]*matrix[2][2] - matrix[0][2]*matrix[1][0]*matrix[2][3] - matrix[0][3]*matrix[1][2]*matrix[2][0] ) ; + inv[1][3] = invdet*( my_mat[0][0]*my_mat[1][2]*my_mat[2][3] + my_mat[0][2]*my_mat[1][3]*my_mat[2][0] + my_mat[0][3]*my_mat[1][0]*my_mat[2][2] - + my_mat[0][0]*my_mat[1][3]*my_mat[2][2] - my_mat[0][2]*my_mat[1][0]*my_mat[2][3] - my_mat[0][3]*my_mat[1][2]*my_mat[2][0] ) ; - inv[2][0] = (1/det)*( matrix[1][0]*matrix[2][1]*matrix[3][3] + matrix[1][1]*matrix[2][3]*matrix[3][0] + matrix[1][3]*matrix[2][0]*matrix[3][1] - - matrix[1][0]*matrix[2][3]*matrix[3][1] - matrix[1][1]*matrix[2][0]*matrix[3][3] - matrix[1][3]*matrix[2][1]*matrix[3][0] ) ; + inv[2][0] = invdet*( my_mat[1][0]*my_mat[2][1]*my_mat[3][3] + my_mat[1][1]*my_mat[2][3]*my_mat[3][0] + my_mat[1][3]*my_mat[2][0]*my_mat[3][1] - + my_mat[1][0]*my_mat[2][3]*my_mat[3][1] - my_mat[1][1]*my_mat[2][0]*my_mat[3][3] - my_mat[1][3]*my_mat[2][1]*my_mat[3][0] ) ; - inv[2][1] = (1/det)*( matrix[0][0]*matrix[2][3]*matrix[3][1] + matrix[0][1]*matrix[2][0]*matrix[3][3] + matrix[0][3]*matrix[2][1]*matrix[3][0] - - matrix[0][0]*matrix[2][1]*matrix[3][3] - matrix[0][1]*matrix[2][3]*matrix[3][0] - matrix[0][3]*matrix[2][0]*matrix[3][1] ) ; + inv[2][1] = invdet*( my_mat[0][0]*my_mat[2][3]*my_mat[3][1] + my_mat[0][1]*my_mat[2][0]*my_mat[3][3] + my_mat[0][3]*my_mat[2][1]*my_mat[3][0] - + my_mat[0][0]*my_mat[2][1]*my_mat[3][3] - my_mat[0][1]*my_mat[2][3]*my_mat[3][0] - my_mat[0][3]*my_mat[2][0]*my_mat[3][1] ) ; - inv[2][2] = (1/det)*( matrix[0][0]*matrix[1][1]*matrix[3][3] + matrix[0][1]*matrix[1][3]*matrix[3][0] + matrix[0][3]*matrix[1][0]*matrix[3][1] - - matrix[0][0]*matrix[1][3]*matrix[3][1] - matrix[0][1]*matrix[1][0]*matrix[3][3] - matrix[0][3]*matrix[1][1]*matrix[3][0] ) ; + inv[2][2] = invdet*( my_mat[0][0]*my_mat[1][1]*my_mat[3][3] + my_mat[0][1]*my_mat[1][3]*my_mat[3][0] + my_mat[0][3]*my_mat[1][0]*my_mat[3][1] - + my_mat[0][0]*my_mat[1][3]*my_mat[3][1] - my_mat[0][1]*my_mat[1][0]*my_mat[3][3] - my_mat[0][3]*my_mat[1][1]*my_mat[3][0] ) ; - inv[2][3] = (1/det)*( matrix[0][0]*matrix[1][3]*matrix[2][1] + matrix[0][1]*matrix[1][0]*matrix[2][3] + matrix[0][3]*matrix[1][1]*matrix[2][0] - - matrix[0][0]*matrix[1][1]*matrix[2][3] - matrix[0][1]*matrix[1][3]*matrix[2][0] - matrix[0][3]*matrix[1][0]*matrix[2][1] ) ; + inv[2][3] = invdet*( my_mat[0][0]*my_mat[1][3]*my_mat[2][1] + my_mat[0][1]*my_mat[1][0]*my_mat[2][3] + my_mat[0][3]*my_mat[1][1]*my_mat[2][0] - + my_mat[0][0]*my_mat[1][1]*my_mat[2][3] - my_mat[0][1]*my_mat[1][3]*my_mat[2][0] - my_mat[0][3]*my_mat[1][0]*my_mat[2][1] ) ; - inv[3][0] = (1/det)*( matrix[1][0]*matrix[2][2]*matrix[3][1] + matrix[1][1]*matrix[2][0]*matrix[3][2] + matrix[1][2]*matrix[2][1]*matrix[3][0] - - matrix[1][0]*matrix[2][1]*matrix[3][2] - matrix[1][1]*matrix[2][2]*matrix[3][0] - matrix[1][2]*matrix[2][0]*matrix[3][1] ) ; + inv[3][0] = invdet*( my_mat[1][0]*my_mat[2][2]*my_mat[3][1] + my_mat[1][1]*my_mat[2][0]*my_mat[3][2] + my_mat[1][2]*my_mat[2][1]*my_mat[3][0] - + my_mat[1][0]*my_mat[2][1]*my_mat[3][2] - my_mat[1][1]*my_mat[2][2]*my_mat[3][0] - my_mat[1][2]*my_mat[2][0]*my_mat[3][1] ) ; - inv[3][1] = (1/det)*( matrix[0][0]*matrix[2][1]*matrix[3][2] + matrix[0][1]*matrix[2][2]*matrix[3][0] + matrix[0][2]*matrix[2][0]*matrix[3][1] - - matrix[0][0]*matrix[2][2]*matrix[3][1] - matrix[0][1]*matrix[2][0]*matrix[3][2] - matrix[0][2]*matrix[2][1]*matrix[3][0] ) ; + inv[3][1] = invdet*( my_mat[0][0]*my_mat[2][1]*my_mat[3][2] + my_mat[0][1]*my_mat[2][2]*my_mat[3][0] + my_mat[0][2]*my_mat[2][0]*my_mat[3][1] - + my_mat[0][0]*my_mat[2][2]*my_mat[3][1] - my_mat[0][1]*my_mat[2][0]*my_mat[3][2] - my_mat[0][2]*my_mat[2][1]*my_mat[3][0] ) ; - inv[3][2] = (1/det)*( matrix[0][0]*matrix[1][2]*matrix[3][1] + matrix[0][1]*matrix[1][0]*matrix[3][2] + matrix[0][2]*matrix[1][1]*matrix[3][0] - - matrix[0][0]*matrix[1][1]*matrix[3][2] - matrix[0][1]*matrix[1][2]*matrix[3][0] - matrix[0][2]*matrix[1][0]*matrix[3][1] ) ; + inv[3][2] = invdet*( my_mat[0][0]*my_mat[1][2]*my_mat[3][1] + my_mat[0][1]*my_mat[1][0]*my_mat[3][2] + my_mat[0][2]*my_mat[1][1]*my_mat[3][0] - + my_mat[0][0]*my_mat[1][1]*my_mat[3][2] - my_mat[0][1]*my_mat[1][2]*my_mat[3][0] - my_mat[0][2]*my_mat[1][0]*my_mat[3][1] ) ; - inv[3][3] = (1/det)*( matrix[0][0]*matrix[1][1]*matrix[2][2] + matrix[0][1]*matrix[1][2]*matrix[2][0] + matrix[0][2]*matrix[1][0]*matrix[2][1] - - matrix[0][0]*matrix[1][2]*matrix[2][1] - matrix[0][1]*matrix[1][0]*matrix[2][2] - matrix[0][2]*matrix[1][1]*matrix[2][0] ) ; + inv[3][3] = invdet*( my_mat[0][0]*my_mat[1][1]*my_mat[2][2] + my_mat[0][1]*my_mat[1][2]*my_mat[2][0] + my_mat[0][2]*my_mat[1][0]*my_mat[2][1] - + my_mat[0][0]*my_mat[1][2]*my_mat[2][1] - my_mat[0][1]*my_mat[1][0]*my_mat[2][2] - my_mat[0][2]*my_mat[1][1]*my_mat[2][0] ) ; return inv ; - +} + +float distance_attenuation(int attenuate, float4 eye, float4 pos){ + float dist = distance(pos, eye); + float attenuation = 1/(0.00001 + 0.0001 * dist); + return min(attenuation, 1); } bool cutoff_plane (float3 M, float3 cutoff, float3 x3) { - float l = x3.x*M.x + x3.y*M.y + x3.z*M.z -x3.x*cutoff.x -x3.y*cutoff.y -x3.z*cutoff.z; - if (l<0.0) { return true; } - else { return false;} + float l = sum(x3 * (M - cutoff)); + if (l<0.0) + return true; + else + return false; } //ray-quadric intersection function float3 isect_surf(Ray r, float4x4 matrix_coef) { - float4 direction = float4(r.direction, 0.0); - float4 origin = float4(r.origin, 1.0); - - float a = dot(direction,mul(matrix_coef,direction)) ; - float b = dot(origin,mul(matrix_coef,direction)) ; - float c = dot(origin,mul(matrix_coef,origin)); + float4 direction = float4(r.direction, 0.0); + float4 origin = float4(r.origin, 1.0); + float4 newDir = mul(matrix_coef, direction); + + float a = dot(direction, newDir) ; + float b = dot(origin, newDir) ; + float c = dot(origin,mul(matrix_coef,origin)); + + float delta = b*b - a*c; + if (delta<0) + clip(-1); + + float t1 = (-b - sqrt(delta)) / a; - float delta = b*b - a * c ; - if (delta<0) clip(-1); - - float t1 = (-b-sqrt(delta)) / a ; - //float t2 = (-b+sqrt(delta)) / a ; - //float t =(t1 radius2) { - spaceposition.y = v.vertex.y * 2.0 * radius1; - spaceposition.x = v.vertex.x * 2.0 * radius1; - } else { - spaceposition.y = v.vertex.y * 2.0 * radius2; - spaceposition.x = v.vertex.x * 2.0 * radius2; - } + if (radius1 > radius2) + spaceposition.xy = v.vertex.xy * 2.0 * radius1; + else + spaceposition.xy = v.vertex.xy * 2.0 * radius2; spaceposition.w = 1; o.shrink = _Shrink; float shrinkfactor = o.shrink; float4 e3; - e3.xyz = normalize(position_atom1-position_atom2); + e3.xyz = normalize(position_atom1 - position_atom2); if (e3.z == 0.0) { e3.z = 0.0000000000001;} if ( (position_atom1.x - position_atom2.x) == 0.0) { position_atom1.x += 0.001;} if ( (position_atom1.y - position_atom2.y) == 0.0) { position_atom1.y += 0.001;} if ( (position_atom1.z - position_atom2.z) == 0.0) { position_atom1.z += 0.001;} float4 focus; - focus.x = ( position_atom1.x*position_atom1.x - position_atom2.x*position_atom2.x + ( radius2*radius2 - radius1*radius1 )*e3.x*e3.x/shrinkfactor )/(2.0*(position_atom1.x - position_atom2.x)); - focus.y = ( position_atom1.y*position_atom1.y - position_atom2.y*position_atom2.y + ( radius2*radius2 - radius1*radius1 )*e3.y*e3.y/shrinkfactor )/(2.0*(position_atom1.y - position_atom2.y)); - focus.z = ( position_atom1.z*position_atom1.z - position_atom2.z*position_atom2.z + ( radius2*radius2 - radius1*radius1 )*e3.z*e3.z/shrinkfactor )/(2.0*(position_atom1.z - position_atom2.z)); + focus = (position_atom1*position_atom1 - position_atom2*position_atom2 + (radius2*radius2 - radius1*radius1) * e3*e3/shrinkfactor) / (2.0 * (position_atom1 - position_atom2)); float3 e1; e1.x = 1.0; e1.y = 1.0; - e1.z = ( (e3.x*focus.x + e3.y*focus.y + e3.z*focus.z) - e1.x*e3.x - e1.y*e3.y)/e3.z; + e1.z = ( sum(e3.xyz * focus.xyz) - e1.x*e3.x - e1.y*e3.y)/e3.z; float3 e1_temp = e1 - focus.xyz; e1 = normalize(e1_temp); - float3 e2 = normalize(cross(e1,e3)); + float3 e2 = normalize(cross(e1,e3.xyz)); - float3 colonne1 = float3(e1.x,e2.x,e3.x); - float3 colonne2 = float3(e1.y,e2.y,e3.y); - float3 colonne3 = float3(e1.z,e2.z,e3.z); + float3 colonne1 = float3(e1.x, e2.x, e3.x); + float3 colonne2 = float3(e1.y, e2.y, e3.y); + float3 colonne3 = float3(e1.z, e2.z, e3.z); - float3x3 R= float3x3(colonne1, colonne2, colonne3); + float3x3 R = float3x3(colonne1, colonne2, colonne3); + // ROTATION: - vertex_position.xyz = mul((float3x3)R,(float3)spaceposition.xyz); + vertex_position.xyz = mul((float3x3)R, (float3)spaceposition.xyz); vertex_position.w = 1.0; // TRANSLATION: - vertex_position.x += (position_atom1.x+position_atom2.x)/2; - vertex_position.y += (position_atom1.y+position_atom2.y)/2; - vertex_position.z += (position_atom1.z+position_atom2.z)/2; + vertex_position.xyz += (position_atom1.xyz + position_atom2.xyz)/2; o.p = mul(ModelViewProj, vertex_position); // Calculate origin and direction of ray that we pass to the fragment ---- float4 i_near, i_far; - float4 near = o.p ; + float4 near = o.p ; near.z = 0.0 ; near = mul(ModelViewProjI, near) ; float4 far = o.p ; far.z = far.w ; - i_far = mul(ModelViewProjI,far) ; + i_far = mul(ModelViewProjI, far) ; i_near = near; e3.w = color_atom2.x; - float4 prime1, prime2; - prime1.xyz = position_atom1 - (position_atom1 - focus.xyz)*o.shrink; - prime2.xyz = position_atom2 - (position_atom2 - focus.xyz)*o.shrink; + float4 prime1, prime2; + prime1.xyz = position_atom1.xyz - (position_atom1.xyz - focus.xyz)*o.shrink; + prime2.xyz = position_atom2.xyz - (position_atom2.xyz - focus.xyz)*o.shrink; prime1.w = color_atom2.y; prime2.w = color_atom2.z; o.matrix_cutoff = float2x4(prime1, prime2); //o.matrix_cutoff = float2x4(position_atom1, position_atom2); - - float Rcarre = (radius1*radius1/shrinkfactor) - ( (position_atom1.x - focus.x)*(position_atom1.x - focus.x) + (position_atom1.y - focus.y)*(position_atom1.y - focus.y) + (position_atom1.z - focus.z)*(position_atom1.z - focus.z) ); + + float4 atom2focus = position_atom1 - focus; + float4 a2fsq = atom2focus * atom2focus; + float Rcarre = (radius1*radius1 / shrinkfactor) - sum(a2fsq.xyz); focus.w = Rcarre; o.matrix_near = float4x4(i_near,i_far, focus, e3); @@ -373,8 +303,7 @@ v2p stickimproved_v (appdata v) // PIXEL SHADER IMPLEMENTATION =============================== -fragment_out stickimproved_p (v2p i) -{ +fragment_out stickimproved_p (v2p i) { float3 light = _Light.xyz; float4x4 ModelViewProj = UNITY_MATRIX_MVP; // matrice pour passer dans les coordonnees de l'ecran float4x4 ModelViewIT = UNITY_MATRIX_IT_MV; @@ -386,15 +315,13 @@ fragment_out stickimproved_p (v2p i) float4 focus = i.matrix_near._m20_m21_m22_m23; float3 e3 = i.matrix_near._m30_m31_m32; - float3 color_atom2; - color_atom2.x = i.matrix_near._m33; - color_atom2.y = i.matrix_cutoff._m03; - color_atom2.z = i.matrix_cutoff._m13; + float3 color_atom2 = float3 (i.matrix_near._m33, i.matrix_cutoff._m03, i.matrix_cutoff._m13); float3 e1; + float3 e3focus = e3 * focus.xyz; e1.x = 1.0; e1.y = 1.0; - e1.z = ( (e3.x*focus.x + e3.y*focus.y + e3.z*focus.z) - e1.x*e3.x - e1.y*e3.y)/e3.z; + e1.z = ( sum(e3focus) - e1.x*e3.x - e1.x*e3.y)/e3.z; float3 e1_temp = e1 - focus.xyz; e1 = normalize(e1_temp); float3 e2 = normalize(cross(e1,e3)); @@ -404,61 +331,65 @@ fragment_out stickimproved_p (v2p i) float4 equation = focus; float shrinkfactor = i.shrink; float t1 = -1/(1-shrinkfactor); - float t2 = 1/(shrinkfactor); + float t2 = 1/shrinkfactor; float4 colonne1, colonne2, colonne3, colonne4; - float3 equation1 = float3(t2,t2*_EllipseFactor,t1); - - float A1 = - e1.x*equation.x - e1.y*equation.y - e1.z*equation.z; - float A2 = - e2.x*equation.x - e2.y*equation.y - e2.z*equation.z; - float A3 = - e3.x*equation.x - e3.y*equation.y - e3.z*equation.z; - - float A11 = equation1.x*e1.x*e1.x + equation1.y*e2.x*e2.x + equation1.z*e3.x*e3.x; - float A21 = equation1.x*e1.x*e1.y + equation1.y*e2.x*e2.y + equation1.z*e3.x*e3.y; - float A31 = equation1.x*e1.x*e1.z + equation1.y*e2.x*e2.z + equation1.z*e3.x*e3.z; - float A41 = equation1.x*e1.x*A1 + equation1.y*e2.x*A2 + equation1.z*e3.x*A3; - - float A22 = equation1.x*e1.y*e1.y + equation1.y*e2.y*e2.y + equation1.z*e3.y*e3.y; - float A32 = equation1.x*e1.y*e1.z + equation1.y*e2.y*e2.z + equation1.z*e3.y*e3.z; - float A42 = equation1.x*e1.y*A1 + equation1.y*e2.y*A2 + equation1.z*e3.y*A3; - - float A33 = equation1.x*e1.z*e1.z + equation1.y*e2.z*e2.z + equation1.z*e3.z*e3.z; - float A43 = equation1.x*e1.z*A1 + equation1.y*e2.z*A2 + equation1.z*e3.z*A3; - - float A44 = equation1.x*A1*A1 + equation1.y*A2*A2 + equation1.z*A3*A3 - equation.w; - - colonne1 = float4(A11,A21,A31,A41); - colonne2 = float4(A21,A22,A32,A42); - colonne3 = float4(A31,A32,A33,A43); - colonne4 = float4(A41,A42,A43,A44); - float4x4 mat = float4x4(colonne1,colonne2,colonne3,colonne4); - Ray ray = primary_ray(i_near,i_far) ; - - float3 M = isect_surf(ray, mat); - OUT.depth = update_z_buffer(M, ModelViewProj) ; - - if(shrinkfactor <0.0){discard;} - if (cutoff_plane(M, cutoff1, -e3) || cutoff_plane(M, cutoff2, e3)){discard;} + float3 equation1 = float3(t2, t2 * _EllipseFactor, t1); + + float A1 = sum(-e1 * equation.xyz); + float A2 = sum(-e2 * equation.xyz); + float A3 = sum(-e3 * equation.xyz); + + float3 As = float3(A1, A2, A3); + + float3 eqex = equation1 * float3(e1.x, e2.x, e3.x); + float3 eqey = equation1 * float3(e1.y, e2.y, e3.y); + float3 eqez = equation1 * float3(e1.z, e2.z, e3.z); + float3 eqAs = equation1 * As * As; + float4 e1ext = float4(e1, As.x); + float4 e2ext = float4(e2, As.y); + float4 e3ext = float4(e3, As.z); + + float4 An1 = eqex.x * e1ext + eqex.y * e2ext + eqex.z * e3ext; // Contains A11, A21, A31, A41 + float3 An2 = eqey.x * e1ext.yzw + eqey.y * e2ext.yzw + eqey.z * e3ext.yzw; // Contains A22, A32, A42 + float2 An3 = eqez.x * e1ext.zw + eqez.y * e2ext.zw + eqez.z * e3ext.zw; // Contains A33, A43 + float A44 = eqAs.x + eqAs.y + eqAs.z - equation.w; // Just A44 + + colonne1 = An1; + colonne2 = float4(An1.y, An2.xyz); + colonne3 = float4(An1.z, An2.y, An3.xy); + colonne4 = float4(An1.w, An2.z, An3.y, A44); + float4x4 mat = float4x4(colonne1,colonne2,colonne3,colonne4); + + Ray ray = primary_ray(i_near,i_far); + float3 M = isect_surf(ray, mat); + OUT.depth = update_z_buffer(M, ModelViewProj); + + if (shrinkfactor < 0.0) + discard; + + if (cutoff_plane(M, cutoff1, -e3) || cutoff_plane(M, cutoff2, e3)) + discard; //------------ blinn phong light try ------------------------ //Transform normal to model space to view-space float4 M1 = float4(M,1.0); - float3 normal = normalize(mul(ModelViewIT,mul(mat,M1)).xyz); - float3 lightvec = normalize(float3(0.0,0.0,1.2)); - float3 eyepos = float3(0.0,0.0,1.0); - float3 halfvec = normalize(lightvec + eyepos); + float3 normal = mul(ModelViewIT, mul(mat,M1)).xyz; + normal = normalize(normal); + float3 lightvec = float3(0, 0, 1); + float3 eyepos = float3(0, 0, 1); + //float3 halfvec = normalize(lightvec + eyepos); float diffuse = dot(normal,lightvec); //float specular = dot(normal, halfvec); - float shininess = 200.0 ; + //float shininess = 200.0 ; - float specular = pow(max(dot(normal, halfvec),0.0),shininess); + //float specular = pow(max(dot(normal, halfvec),0.0),shininess); //float4 lighting = lit(diffuse, specular, 32); - float a = ((M.x-cutoff2.x)*e3.x + (M.y-cutoff2.y)*e3.y +(M.z-cutoff2.z)*e3.z)/distance(cutoff2,cutoff1); - float3 atom_color = lerp( color_atom2, i.color_atom1, a ); + float a = sum((M.xyz - cutoff2) * e3) / distance(cutoff2, cutoff1); + float3 atom_color = lerp(color_atom2, i.color_atom1.xyz, a ); //ca2 is a float3 - - float3 diffusecolor= atom_color; - float3 specularcolor = float3(1.0,1.0,1.0); + float3 diffusecolor = atom_color; + //float3 specularcolor = float3(1.0,1.0,1.0); // // if(dot(normal,eyepos) < 0.5) // // OUT.Color.rgb = float3(0,0,0); @@ -471,20 +402,26 @@ fragment_out stickimproved_p (v2p i) col.a = i.color_atom1.a; // } - //LitSPhere / MatCap - half2 vn; - vn.x = normal.x; - vn.y = normal.y; + // MatCap + half2 vn = normal.xy; float4 matcapLookup = tex2D(_MatCap, vn*0.5 + 0.5); - OUT.Color = col*matcapLookup*1.25; + OUT.Color = col * matcapLookup * 1.25; + + if(_Attenuation == 1) { + float attenuation = distance_attenuation(1, i_near, i_far); + OUT.Color = OUT.Color * attenuation; + } + return OUT; - } + ENDCG } } // Pour les cartes graphiques ne supportant pas nos Shaders -Fallback "VertexLit" +//Fallback "VertexLit" // automatically enables shadow casting, which probably eats resources and does't work anyway } + + diff --git a/Assets/Resources/Shader/new/Stick_HyperBalls_D3D.shader b/Assets/Resources/Shader/new/Stick_HyperBalls_D3D.shader index 8939d0c8..b5a8355a 100644 --- a/Assets/Resources/Shader/new/Stick_HyperBalls_D3D.shader +++ b/Assets/Resources/Shader/new/Stick_HyperBalls_D3D.shader @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: Stick_HyperBalls_D3D.shader 210 2013-04-06 20:52:41Z baaden $ +/// $Id: Stick_HyperBalls_D3D.shader 378 2013-09-10 17:18:27Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -66,7 +66,7 @@ // Upgrade NOTE: replaced 'glstate.matrix.invtrans.modelview[0]' with 'UNITY_MATRIX_IT_MV' // Upgrade NOTE: replaced 'glstate.matrix.mvp' with 'UNITY_MATRIX_MVP' -// $Id: Stick_HyperBalls_D3D.shader 210 2013-04-06 20:52:41Z baaden $ +// $Id: Stick_HyperBalls_D3D.shader 378 2013-09-10 17:18:27Z kouyoumdjian $ // (c) 2010 by Marc Baaden & Matthieu Chavent, // Unity3D FvNano shaders coming from FVNano project // @@ -89,6 +89,9 @@ Properties { _Scale("Link Scale", float) = 1.0 _EllipseFactor("Ellipse Factor", float) = 1.0 _MatCap ("MatCap (RGB)", 2D) = "white" {} + _MatCap2 ("MatCap (RGB)", 2D) = "white" {} + _Attenuation ("Attenuation", float) = 0 + _Brightness ("Brightness", float) = 1.0 } @@ -101,8 +104,9 @@ SubShader { Program "vp" { // Vertex combos: 1 -// opengl - ALU: 341 to 341 -// d3d9 - ALU: 362 to 362, FLOW: 6 to 6 +// opengl - ALU: 274 to 274 +// d3d9 - ALU: 304 to 304, FLOW: 6 to 6 +// d3d11 - ALU: 104 to 104, TEX: 0 to 0, FLOW: 1 to 1 SubProgram "opengl " { Keywords { } Bind "vertex" Vertex @@ -115,11 +119,11 @@ Vector 10 [_TexPos2] Float 11 [_Shrink] Float 12 [_Scale] "3.0-!!ARBvp1.0 -# 341 ALU -PARAM c[14] = { { 0, 0.001, 0.5, 9.9999998e-014 }, +# 274 ALU +PARAM c[14] = { { 0, 0.001, 0.5, 9.9999998e-14 }, state.matrix.mvp, program.local[5..12], - { 2, 1 } }; + { 2, 1, -1 } }; TEMP R0; TEMP R1; TEMP R2; @@ -135,350 +139,282 @@ TEMP R11; TEMP R12; TEMP R13; TEMP R14; -TEMP R15; MOV R0, c[9]; ADD R8, -R0, c[10]; -MOV R0.z, c[12].x; DP4 R0.x, -R8, -R8; -MUL R0.w, R0.z, c[5].x; -MUL R2.x, R8.y, R8.y; -RSQ R0.x, R0.x; -MUL R4.xyz, R0.x, -R8; -ABS R0.y, R4.z; -MUL R1.w, R0.z, c[6].x; -MUL R7.w, R0, R0; -MAD R0.z, R1.w, R1.w, -R7.w; -RCP R8.w, c[11].x; -MOV R6.xy, R4; +RSQ R0.w, R0.x; +MUL R4.xyz, R0.w, -R8; +ABS R0.x, R4.z; +SGE R0.y, c[0].x, R0.x; ADD R0.x, -R4.z, c[0].w; -SGE R0.y, c[0].x, R0; -MAD R2.w, R0.x, R0.y, R4.z; -MUL R0.y, R2.w, R0.z; +MAD R3.w, R0.x, R0.y, R4.z; +MOV R0.x, c[12]; +MUL R1.w, R0.x, c[5].x; +MUL R2.w, R0.x, c[6].x; +MUL R6.w, R1, R1; ABS R0.x, -R8.z; -SGE R0.x, c[0], R0; -MUL R6.w, R0.x, c[0].y; -MUL R1.x, R8.z, R8.z; -MAD R0.x, R6.w, R6.w, -R1; -MUL R0.y, R2.w, R0; -MAD R0.x, R0.y, R8.w, R0; -MUL R0.y, R4.x, R0.z; -ABS R1.x, -R8; -SGE R1.x, c[0], R1; -MUL R9.x, R1, c[0].y; -ADD R1.y, -R8.x, R9.x; -MUL R1.x, R8, R8; -MUL R1.y, R1, c[13].x; -MOV R6.z, R2.w; -MAD R3.x, -R8, -R8, R2; -MOV R3.z, R2.w; -MUL R0.y, R4.x, R0; -MAD R1.x, R9, R9, -R1; -MAD R0.y, R8.w, R0, R1.x; -RCP R1.y, R1.y; -MUL R7.x, R0.y, R1.y; -MUL R0.y, R4, R0.z; +SGE R1.x, c[0], R0; +MUL R9.z, R1.x, c[0].y; +ABS R1.y, -R8.x; +SGE R1.y, c[0].x, R1; ABS R1.x, -R8.y; -SGE R0.z, c[0].x, R1.x; -MUL R9.y, R0.z, c[0]; -ADD R1.x, -R8.y, R9.y; -MUL R1.x, R1, c[13]; -MUL R0.y, R4, R0; -MAD R0.z, R9.y, R9.y, -R2.x; -MAD R0.z, R8.w, R0.y, R0; +SGE R1.x, c[0], R1; +MOV R7.z, R3.w; +MOV R7.xy, R4; +MAD R0.y, R2.w, R2.w, -R6.w; +MUL R2.xyz, R7, R0.y; +MUL R0.xyz, R7, R2; +MUL R9.x, R1.y, c[0].y; +MUL R9.y, R1.x, c[0]; +ADD R1.xyz, R9, -R8; +MUL R1.xyz, R1, c[13].x; +MUL R2.xyz, R8, R8; +RCP R7.w, c[11].x; +MAD R2.xyz, R9, R9, -R2; +MAD R0.xyz, R0, R7.w, R2; RCP R1.x, R1.x; -MUL R9.w, R0.z, R1.x; -ADD R0.y, R6.w, -R8.z; -MUL R0.z, R4.y, R9.w; -MUL R0.y, R0, c[13].x; -RCP R0.y, R0.y; -MUL R9.z, R0.x, R0.y; -MAD R0.z, R4.x, R7.x, R0; -MAD R0.x, R2.w, R9.z, R0.z; +RCP R1.z, R1.z; +RCP R1.y, R1.y; +MUL R6.xyz, R0, R1; +MUL R0.xyz, R7, R6; +ADD R0.x, R0, R0.y; +ADD R0.x, R0, R0.z; ADD R0.x, R0, -R4; -MOV R7.z, R9; -ADD R0.x, R0, -R4.y; -RCP R0.y, R2.w; -MUL R0.z, R0.x, R0.y; -MOV R7.y, R9.w; +ADD R0.z, R0.x, -R4.y; +RCP R1.x, R3.w; +MUL R0.z, R0, R1.x; MOV R0.xy, c[13].y; -ADD R0.xyz, R0, -R7; +ADD R0.xyz, R0, -R6; DP3 R1.x, R0, R0; RSQ R1.x, R1.x; -MUL R0.xyz, R1.x, R0; -MUL R1.xyz, R0.zxyw, R6.yzxw; -MAD R1.xyz, R0.yzxw, R6.zxyw, -R1; -DP3 R2.y, R1, R1; -RSQ R2.y, R2.y; -MUL R2.xyz, R2.y, R1; -MAD R1.x, -R8.z, -R8.z, R3; -MOV R3.y, R2.z; -MOV R3.x, R0.z; +MUL R2.xyz, R1.x, R0; +MUL R0.xyz, R2.zxyw, R7.yzxw; +MAD R0.xyz, R2.yzxw, R7.zxyw, -R0; +DP3 R1.x, R0, R0; RSQ R1.x, R1.x; -RCP R0.z, R1.x; -MUL R1.z, vertex.position, R0; -MUL R1.x, R0.w, vertex.position.y; -MUL R2.z, R1.x, c[13].x; -MUL R1.x, R1.w, vertex.position.y; -SLT R0.z, R1.w, R0.w; -MAD R2.w, R1.x, c[13].x, -R2.z; -ABS R1.x, R0.z; -MUL R0.z, R0.w, vertex.position.x; -MUL R0.w, R0.z, c[13].x; -MUL R0.z, R1.w, vertex.position.x; -MAD R0.z, R0, c[13].x, -R0.w; -SGE R1.y, c[0].x, R1.x; -MAD R1.x, R0.z, R1.y, R0.w; -MAD R1.y, R1, R2.w, R2.z; -DP3 R0.w, R3, R1; -MOV R3.y, R2; -MOV R3.x, R0.y; -MOV R2.y, R2.x; -MOV R2.x, R0; -ADD R0.z, R6.w, R8; -MAD R0.z, R0, c[0], R0.w; -MOV R3.z, R4.y; -DP3 R0.w, R1, R3; -MOV R2.z, R4.x; -ADD R0.y, R8, R9; -MAD R0.y, R0, c[0].z, R0.w; -DP3 R1.x, R1, R2; -ADD R0.x, R8, R9; -MAD R0.x, R0, c[0].z, R1; -MOV R0.w, c[13].y; -DP4 R1.z, R0, c[4]; -DP4 R1.x, R0, c[1]; -DP4 R1.y, R0, c[2]; -DP4 R2.z, R0, c[3]; -MOV R0, c[2]; -MUL R10.y, R0, c[1].z; -MUL R10.z, R0.w, c[1].y; -MUL R3.w, R0.y, c[1].x; -MUL R13.w, R10.z, c[4].x; -MUL R10.x, R0.z, c[1].y; -MUL R13.x, R0.y, c[1].w; -MUL R13.z, R0, c[1].w; -MUL R3.z, R0.x, c[1].y; -MUL R11.y, R0.w, c[1].z; -MOV R2.xy, R1; -MOV R2.w, R1.z; -MOV result.position, R2; -MOV R4.xyw, R2; -MUL R2.z, R10.x, c[3].x; -MUL R2.y, R0.x, c[1].z; -MAD R1.w, R3, c[3].z, R2.z; -MUL R2.x, R0.z, c[1]; -MAD R1.w, R2.y, c[3].y, R1; -MAD R1.w, -R2.x, c[3].y, R1; -MAD R3.y, -R3.z, c[3].z, R1.w; -MUL R2.w, R3.z, c[4].z; -MAD R2.w, R2.x, c[4].y, R2; -MAD R2.w, R10.y, c[4].x, R2; -MAD R3.x, -R3.w, c[4].z, R2.w; -MUL R2.w, R2.x, c[3]; -MUL R4.z, R2.w, c[4].y; -MUL R2.w, R3, c[3].z; -MAD R3.x, -R10, c[4], R3; -MUL R1.w, R0, c[1].x; -MAD R4.z, R2.w, c[4].w, R4; -MUL R2.w, R1, c[3].y; -MAD R2.w, R2, c[4].z, R4.z; -MUL R4.z, R3, c[3].w; -MAD R2.w, R4.z, c[4].z, R2; -MAD R2.w, R2.z, c[4], R2; -MUL R2.z, R10, c[3]; -MAD R2.w, R2.z, c[4].x, R2; -MUL R2.z, R2.y, c[3].y; -MAD R2.z, R2, c[4].w, R2.w; -MUL R10.w, R10.y, c[3]; -MAD R5.x, R10.w, c[4], R2.z; -MUL R2.z, R0.x, c[1].w; -MUL R2.w, R11.y, c[3].x; -MAD R0.w, R2, c[4].y, R5.x; -MUL R0.x, R2.z, c[3].z; -MAD R0.w, R0.x, c[4].y, R0; -MUL R0.x, R13, c[3]; -MAD R0.y, R0.x, c[4].z, R0.w; -MUL R0.x, R13.z, c[3].y; -MAD R0.y, R0.x, c[4].x, R0; -MUL R0.x, R3.w, c[3].w; -MAD R0.y, -R0.x, c[4].z, R0; -MUL R0.x, R2, c[3].y; -MAD R0.y, -R0.x, c[4].w, R0; -MUL R0.x, R1.w, c[3].z; -MAD R0.y, -R0.x, c[4], R0; -MUL R0.x, R3.z, c[3].z; -MAD R0.y, -R0.x, c[4].w, R0; -MUL R0.x, R10, c[3].w; -MAD R0.y, -R0.x, c[4].x, R0; -MUL R0.x, R10.z, c[3]; -MAD R0.y, -R0.x, c[4].z, R0; -MUL R0.x, R2.y, c[3].w; -MAD R0.y, -R0.x, c[4], R0; -MUL R0.x, R10.y, c[3]; -MAD R0.y, -R0.x, c[4].w, R0; -MUL R0.x, R11.y, c[3].y; -MAD R0.y, -R0.x, c[4].x, R0; -MUL R0.x, R2.z, c[3].y; -MAD R0.y, -R0.x, c[4].z, R0; -MUL R0.x, R13, c[3].z; -MAD R0.y, -R0.x, c[4].x, R0; -MUL R0.x, R13.z, c[3]; -MAD R0.x, -R0, c[4].y, R0.y; -RCP R11.x, R0.x; -MAD R0.y, -R10, c[3].x, R3; -MUL R5.w, R11.x, R0.y; -MOV R0, c[3]; -MAD R3.x, -R2.y, c[4].y, R3; -MUL R12.y, R0.z, c[1]; -MUL R5.z, R11.x, R3.x; -MUL R14.y, R0.z, c[1].x; -MUL R14.x, R0.w, c[2]; -MUL R3.x, R0.y, c[1]; -MUL R3.y, R12, c[4].x; -MUL R14.w, R0.x, c[1].z; -MAD R3.y, R3.x, c[4].z, R3; -MAD R3.y, R14.w, c[4], R3; -MAD R3.y, -R14, c[4], R3; -MUL R11.z, R0.x, c[1].y; -MAD R5.x, -R11.z, c[4].z, R3.y; -MUL R3.y, R0.x, c[2]; -MUL R11.w, R0.y, c[1].z; -MUL R15.x, R0.z, c[2]; -MUL R5.y, R3, c[4].z; -MUL R12.x, R0.y, c[2].z; -MAD R5.y, R15.x, c[4], R5; -MUL R13.y, R0, c[2].x; -MAD R5.y, R12.x, c[4].x, R5; -MUL R12.z, R0, c[2].y; -MAD R5.y, -R13, c[4].z, R5; -MUL R14.z, R0.x, c[2]; -MAD R5.y, -R12.z, c[4].x, R5; -MAD R12.w, -R14.z, c[4].y, R5.y; -MAD R5.x, -R11.w, c[4], R5; -MUL R5.y, R11.x, R5.x; -MUL R5.x, R11, R12.w; -MAD R12.w, R1, c[3].y, R4.z; -MOV R4.z, c[0].x; -MAD R12.w, R13.x, c[3].x, R12; -MAD R12.w, -R3, c[3], R12; -MAD R13.w, R3, c[4], R13; -MAD R3.w, -R10.z, c[3].x, R12; -MAD R12.w, R2.z, c[4].y, R13; -MAD R12.w, -R1, c[4].y, R12; -MAD R3.z, -R3, c[4].w, R12.w; -MUL R12.w, R0, c[2].y; -MAD R3.w, -R2.z, c[3].y, R3; -MUL R13.w, R12, c[4].x; -MAD R13.y, R13, c[4].w, R13.w; -MUL R15.y, R0.x, c[2].w; -MAD R3.z, -R13.x, c[4].x, R3; -MAD R13.y, R15, c[4], R13; -MAD R13.y, -R14.x, c[4], R13; -MAD R3.y, -R3, c[4].w, R13; -MUL R13.y, R0, c[2].w; -MUL R13.w, R0, c[1].x; -MUL R11.z, R11, c[4].w; -MAD R15.z, R13.w, c[4].y, R11; -MUL R11.z, R0.y, c[1].w; -MAD R15.z, R11, c[4].x, R15; -MAD R3.x, -R3, c[4].w, R15.z; -MUL R0.y, R0.w, c[1]; -MAD R3.x, -R0.y, c[4], R3; -MUL R15.z, R0.x, c[1].w; -MAD R0.x, -R15.z, c[4].y, R3; -MAD R3.y, -R13, c[4].x, R3; -MUL R3.x, R11, R3.y; -MUL R3.y, R11.x, R0.x; -MAD R0.x, R2, c[3].w, R2.w; -MUL R2.w, R2.y, c[4]; -MAD R0.x, R2.z, c[3].z, R0; -MAD R0.x, -R1.w, c[3].z, R0; -MAD R2.w, R1, c[4].z, R2; -MAD R1.w, R13.z, c[4].x, R2; -MAD R1.w, -R2.x, c[4], R1; -MAD R0.x, -R2.y, c[3].w, R0; -MAD R0.x, -R13.z, c[3], R0; -MUL R2.w, R11.x, R0.x; -MAD R1.w, -R11.y, c[4].x, R1; -MAD R1.w, -R2.z, c[4].z, R1; -MUL R2.x, R14.z, c[4].w; -MAD R2.x, R14, c[4].z, R2; -MUL R14.x, R0.z, c[2].w; -MAD R2.x, R14, c[4], R2; -MUL R0.x, R0.w, c[1].z; -MUL R2.z, R11.x, R1.w; -MUL R1.w, R0.x, c[4].x; -MAD R1.w, R14.y, c[4], R1; -MUL R14.y, R0.w, c[2].z; -MAD R1.w, R15.z, c[4].z, R1; -MAD R0.w, -R13, c[4].z, R1; -MAD R2.x, -R15, c[4].w, R2; -MAD R2.x, -R14.y, c[4], R2; -MAD R1.w, -R15.y, c[4].z, R2.x; -MUL R2.x, R11, R1.w; -MOV R1.zw, R1.z; -MUL R13.w, R0.z, c[1]; -MAD R0.w, -R14, c[4], R0; -MAD R0.z, -R13.w, c[4].x, R0.w; -MUL R2.y, R11.x, R0.z; -MUL R0.w, R11.y, c[4].y; -MAD R0.w, R10.x, c[4], R0; -MAD R0.z, R10, c[3], R10.w; -MAD R0.z, R13, c[3].y, R0; -MAD R0.z, -R10.x, c[3].w, R0; -MAD R0.w, R13.x, c[4].z, R0; -MAD R0.w, -R10.z, c[4].z, R0; -MAD R0.w, -R10.y, c[4], R0; -MAD R0.z, -R11.y, c[3].y, R0; -MUL R10.y, R14, c[4]; -MAD R10.x, -R13.z, c[4].y, R0.w; -MAD R0.z, -R13.x, c[3], R0; -MUL R0.w, R11.x, R0.z; -MUL R0.z, R11.x, R10.x; -MUL R10.x, R11.w, c[4].w; -MAD R0.y, R0, c[4].z, R10.x; -MAD R10.y, R12.z, c[4].w, R10; -MAD R10.x, R13.y, c[4].z, R10.y; -MAD R0.y, R13.w, c[4], R0; -MAD R0.y, -R12, c[4].w, R0; -MAD R0.x, -R0, c[4].y, R0.y; -MAD R0.y, -R11.z, c[4].z, R0.x; -MAD R10.x, -R12.w, c[4].z, R10; -MAD R10.x, -R12, c[4].w, R10; -MAD R10.x, -R14, c[4].y, R10; -MUL R0.x, R11, R10; -MUL R0.y, R11.x, R0; -MUL R3.w, R11.x, R3; -MUL R3.z, R11.x, R3; -DP4 result.texcoord[2].y, R4, R2; -DP4 result.texcoord[3].y, R2, R1; -ADD R2.x, -R7, R9; -DP4 result.texcoord[2].z, R4, R3; -DP4 result.texcoord[3].z, R3, R1; -ADD R3.x, -R9.w, R9.y; -MUL R2.y, R3.x, R3.x; -MAD R2.y, R2.x, R2.x, R2; -ADD R2.x, R6.w, -R9.z; -MOV R9.z, R6.w; -MAD R2.x, R2, R2, R2.y; -MAD R7.w, R7, R8, -R2.x; -MOV R6.w, c[8].x; -DP4 result.texcoord[2].x, R4, R0; -DP4 result.texcoord[3].x, R0, R1; -ADD R0.xyz, -R7, R9; -MAD result.texcoord[6].xyz, -R0, c[11].x, R9; -ADD R0.xyz, R8, -R7; -DP4 result.texcoord[2].w, R5, R4; -DP4 result.texcoord[3].w, R5, R1; -MOV result.texcoord[4], R7; +MUL R3.xyz, R1.x, R0; +RCP R0.y, R0.w; +SLT R0.x, R2.w, R1.w; +MOV R1.x, R2.z; +ABS R0.w, R0.x; +MUL R0.z, vertex.position, R0.y; +MUL R0.xy, R1.w, vertex.position; +MOV R1.w, c[13].y; +MOV R1.y, R3.z; +MOV R1.z, R3.w; +SGE R0.w, c[0].x, R0; +MUL R0.xy, R0, c[13].x; +MUL R2.zw, R2.w, vertex.position.xyxy; +MAD R2.zw, R2, c[13].x, -R0.xyxy; +MAD R0.xy, R2.zwzw, R0.w, R0; +DP3 R2.z, R1, R0; +MOV R1.y, R3; +MOV R1.z, R4.y; +MOV R1.x, R2.y; +DP3 R2.y, R0, R1; +MOV R1.y, R3.x; +MOV R1.z, R4.x; +MOV R1.x, R2; +DP3 R2.x, R0, R1; +ADD R0.xyz, R9, R8; +MAD R1.xyz, R0, c[0].z, R2; +DP4 R0.z, R1, c[4]; +DP4 R0.x, R1, c[1]; +DP4 R0.y, R1, c[2]; +DP4 R5.z, R1, c[3]; +MOV R1, c[4]; +MUL R2, R1.wxyz, c[3].yzwx; +MAD R2, R1.yzwx, c[3].wxyz, -R2; +MUL R4, R2, c[2].zwxy; +MUL R3, R1.zwxy, c[3].wxyz; +MAD R3, R1.wxyz, c[3].zwxy, -R3; +MUL R2, R1.yzwx, c[3].zwxy; +MAD R1, R1.zwxy, c[3].yzwx, -R2; +MOV R2, c[2]; +MAD R3, R3, c[2].yzwx, R4; +MAD R1, R1, c[2].wxyz, R3; +MUL R1, R1, c[1]; +MUL R3.w, R2.x, c[1].y; +DP4 R0.w, R1, c[13].yzyz; +MUL R10.w, R2.z, c[1].y; +RCP R0.w, R0.w; +MOV R5.xy, R0; +MOV R5.w, R0.z; +MUL R13.z, R2.x, c[1]; +MUL R13.y, R2.z, c[1].x; +MUL R1.y, R3.w, c[4].z; +MUL R3.z, R2.y, c[1].x; +MUL R1.x, R10.w, c[3]; +MAD R1.x, R3.z, c[3].z, R1; +MAD R1.x, R13.z, c[3].y, R1; +MAD R1.x, -R13.y, c[3].y, R1; +MUL R11.x, R2.y, c[1].z; +MAD R1.x, -R3.w, c[3].z, R1; +MAD R1.y, R13, c[4], R1; +MAD R1.x, -R11, c[3], R1; +MAD R1.y, R11.x, c[4].x, R1; +MAD R1.y, -R3.z, c[4].z, R1; +MAD R3.x, -R10.w, c[4], R1.y; +MUL R4.w, R0, R1.x; +MOV R1, c[3]; +MAD R3.x, -R13.z, c[4].y, R3; +MUL R13.w, R2, c[1].x; +MUL R10.z, R3.w, c[3].w; +MAD R11.w, R13, c[3].y, R10.z; +MUL R12.x, R2.y, c[1].w; +MAD R2.y, R12.x, c[3].x, R11.w; +MUL R10.z, R2.w, c[1].y; +MUL R14.y, R2.x, c[1].w; +MAD R2.y, -R3.z, c[3].w, R2; +MUL R11.w, R10.z, c[4].x; +MAD R3.z, R3, c[4].w, R11.w; +MAD R2.x, -R10.z, c[3], R2.y; +MAD R3.z, R14.y, c[4].y, R3; +MAD R2.y, -R13.w, c[4], R3.z; +MUL R11.z, R1.x, c[1].y; +MUL R4.z, R0.w, R3.x; +MUL R9.w, R1.z, c[1].y; +MUL R11.y, R1, c[1].x; +MUL R3.x, R9.w, c[4]; +MUL R12.y, R1.z, c[1].x; +MUL R8.w, R1.y, c[1].z; +MUL R12.z, R1, c[2].x; +MUL R10.y, R1, c[2].z; +MUL R10.x, R1.z, c[2].y; +MUL R12.w, R1.x, c[2].z; +MUL R13.x, R1, c[1].z; +MAD R3.x, R11.y, c[4].z, R3; +MAD R3.x, R13, c[4].y, R3; +MAD R3.x, -R12.y, c[4].y, R3; +MAD R3.y, -R11.z, c[4].z, R3.x; +MUL R3.z, R11, c[4].w; +MAD R4.x, -R8.w, c[4], R3.y; +MUL R3.x, R1, c[2].y; +MUL R3.y, R3.x, c[4].z; +MAD R3.y, R12.z, c[4], R3; +MAD R4.y, R10, c[4].x, R3; +MUL R3.y, R1, c[2].x; +MAD R4.y, -R3, c[4].z, R4; +MAD R4.y, -R10.x, c[4].x, R4; +MOV result.position, R5; +MAD R5.z, -R12.w, c[4].y, R4.y; +MUL R4.y, R0.w, R4.x; +MUL R4.x, R0.w, R5.z; +MOV R5.z, c[0].x; +MAD R2.y, -R3.w, c[4].w, R2; +MAD R2.x, -R14.y, c[3].y, R2; +MUL R3.w, R0, R2.x; +MAD R2.x, -R12, c[4], R2.y; +MUL R2.y, R1.w, c[1].x; +MAD R3.z, R2.y, c[4].y, R3; +MUL R11.z, R1.y, c[1].w; +MAD R11.w, R11.z, c[4].x, R3.z; +MUL R3.z, R0.w, R2.x; +MAD R2.x, -R11.y, c[4].w, R11.w; +MUL R11.w, R1, c[2].y; +MUL R11.y, R1.w, c[1]; +MAD R14.x, -R11.y, c[4], R2; +MUL R2.x, R1, c[1].w; +MUL R14.z, R11.w, c[4].x; +MAD R3.y, R3, c[4].w, R14.z; +MUL R14.w, R1.x, c[2]; +MAD R14.x, -R2, c[4].y, R14; +MAD R1.x, R14.w, c[4].y, R3.y; +MUL R3.y, R0.w, R14.x; +MUL R14.x, R2.w, c[1].z; +MUL R14.z, R1.w, c[2].x; +MAD R1.x, -R14.z, c[4].y, R1; +MAD R3.x, -R3, c[4].w, R1; +MUL R1.x, R1.y, c[2].w; +MAD R1.y, -R1.x, c[4].x, R3.x; +MUL R3.x, R0.w, R1.y; +MUL R2.w, R14.x, c[3].x; +MAD R1.y, R13, c[3].w, R2.w; +MAD R2.w, R14.y, c[3].z, R1.y; +MUL R1.y, R13.z, c[4].w; +MAD R2.w, -R13, c[3].z, R2; +MAD R13.w, R13, c[4].z, R1.y; +MUL R1.y, R2.z, c[1].w; +MAD R2.z, -R13, c[3].w, R2.w; +MAD R13.w, R1.y, c[4].x, R13; +MAD R2.w, -R13.y, c[4], R13; +MAD R2.z, -R1.y, c[3].x, R2; +MAD R13.y, -R14.x, c[4].x, R2.w; +MUL R2.w, R0, R2.z; +MAD R2.z, -R14.y, c[4], R13.y; +MUL R13.y, R1.w, c[1].z; +MUL R2.z, R0.w, R2; +DP4 result.texcoord[2].w, R4, R5; +DP4 result.texcoord[2].z, R5, R3; +MUL R13.z, R13.y, c[4].x; +MUL R13.w, R12, c[4]; +MAD R12.w, R12.y, c[4], R13.z; +MAD R2.x, R2, c[4].z, R12.w; +MUL R12.y, R1.z, c[2].w; +MAD R13.z, R14, c[4], R13.w; +MAD R13.z, R12.y, c[4].x, R13; +MAD R12.w, -R12.z, c[4], R13.z; +MUL R12.z, R1.w, c[2]; +MAD R1.w, -R2.y, c[4].z, R2.x; +MAD R12.w, -R12.z, c[4].x, R12; +MAD R2.x, -R14.w, c[4].z, R12.w; +MUL R12.w, R1.z, c[1]; +MAD R1.w, -R13.x, c[4], R1; +MAD R1.z, -R12.w, c[4].x, R1.w; +MUL R2.y, R0.w, R1.z; +MUL R2.x, R0.w, R2; +MUL R1.z, R11.x, c[3].w; +MAD R1.z, R10, c[3], R1; +MAD R1.z, R1.y, c[3].y, R1; +MUL R1.w, R14.x, c[4].y; +MAD R1.w, R10, c[4], R1; +MAD R1.w, R12.x, c[4].z, R1; +MAD R1.w, -R10.z, c[4].z, R1; +MAD R1.w, -R11.x, c[4], R1; +MAD R1.z, -R10.w, c[3].w, R1; +MAD R1.z, -R14.x, c[3].y, R1; +MAD R1.y, -R1, c[4], R1.w; +MAD R1.z, -R12.x, c[3], R1; +MUL R1.w, R0, R1.z; +MUL R1.z, R0.w, R1.y; +MUL R1.y, R8.w, c[4].w; +MUL R10.z, R12, c[4].y; +MAD R8.w, R10.x, c[4], R10.z; +MAD R8.w, R1.x, c[4].z, R8; +MAD R1.y, R11, c[4].z, R1; +MAD R1.x, R12.w, c[4].y, R1.y; +MAD R1.y, -R11.w, c[4].z, R8.w; +MAD R1.y, -R10, c[4].w, R1; +MAD R1.x, -R9.w, c[4].w, R1; +MAD R1.x, -R13.y, c[4].y, R1; +MAD R8.w, -R12.y, c[4].y, R1.y; +MAD R1.y, -R11.z, c[4].z, R1.x; +MUL R1.x, R0.w, R8.w; +MUL R1.y, R0.w, R1; +MOV R0.zw, R0.z; +DP4 result.texcoord[3].w, R4, R0; +DP4 result.texcoord[3].z, R3, R0; +DP4 result.texcoord[2].y, R5, R2; +DP4 result.texcoord[2].x, R5, R1; +ADD R5.xyz, R9, -R6; +MUL R10.xyz, R5, R5; +ADD R4.x, R10, R10.y; +ADD R3.x, R4, R10.z; +MAD R6.w, R6, R7, -R3.x; +MOV R7.w, c[8].x; +DP4 result.texcoord[3].y, R2, R0; +DP4 result.texcoord[3].x, R1, R0; +ADD R0.xyz, R8, -R6; +MOV result.texcoord[4], R6; +MAD result.texcoord[6].xyz, -R5, c[11].x, R9; MAD result.texcoord[7].xyz, -R0, c[11].x, R8; -MOV result.texcoord[5], R6; +MOV result.texcoord[5], R7; MOV result.texcoord[0], c[7]; MOV result.texcoord[6].w, c[8].y; MOV result.texcoord[7].w, c[8].z; MOV result.texcoord[1].x, c[11]; END -# 341 instructions, 16 R-regs +# 274 instructions, 15 R-regs " } @@ -495,7 +431,7 @@ Vector 9 [_TexPos2] Float 10 [_Shrink] Float 11 [_Scale] "vs_3_0 -; 362 ALU, 6 FLOW +; 304 ALU, 6 FLOW dcl_position o0 dcl_texcoord2 o1 dcl_texcoord3 o2 @@ -505,320 +441,269 @@ dcl_texcoord6 o5 dcl_texcoord7 o6 dcl_texcoord0 o7 dcl_texcoord1 o8 -def c12, 0.00000000, 2.00000000, 0.00000000, 0.00100000 -def c13, 1.00000000, 0.50000000, 0, 0 +def c12, 1.00000000, -1.00000000, 0.00000000, 2.00000000 +def c13, 0.00000000, 0.00100000, 0.00000000, 0.50000000 dcl_position0 v0 -mov r0, c9 -add r4, -c8, r0 +mov r1, c2 +mul r2, c3.wxyz, r1.yzwx +mov r1, c2 +mad r1, c3.yzwx, r1.wxyz, -r2 +mov r0, c2 +mul r2, c3.zwxy, r0.wxyz +mov r0, c2 +mad r2, c3.wxyz, r0.zwxy, -r2 +mul r1, r1, c1.zwxy +mov r3.w, c1.y +mad r1, r2, c1.yzwx, r1 +mov r0, c2 +mul r2, c3.yzwx, r0.zwxy +mov r0, c2 +mad r0, c3.zwxy, r0.yzwx, -r2 +mad r0, r0, c1.wxyz, r1 +mul r0, r0, c0 +dp4 r0.x, r0, c12.xyxy +rcp r3.x, r0.x +mov r0.x, c0.z +mul r4.x, c1.y, r0 +mov r0.y, c0.w +mul r1.z, c1, r0.y +mov r0.x, c0.y mov r0.y, c0.z -mul r1.y, c1.w, r0 -mov r0.y, c0 -mul r7.y, c1.z, r0 -mul r0.z, r1.y, c3.y -mul r0.x, -r4.y, -r4.y -mad r0.x, -r4, -r4, r0 -mad r0.x, -r4.z, -r4.z, r0 -rsq r0.x, r0.x -rcp r0.x, r0.x -mul r5.z, v0, r0.x +mul r1.w, c1, r0.y +mul r2.w, c1, r0.x +mul r0.z, r4.x, c2.w +mad r0.x, r2.w, c2.z, r0.z +mad r0.z, r1, c2.y, r0.x +mov r0.x, c0.y +mul r3.z, c1, r0.x +mad r0.y, -r3.z, c2.w, r0.z +mul r0.z, r1.w, c3.y mov r0.x, c0.w mul r2.z, c1.y, r0.x -mad r0.y, r7, c3.w, r0.z -mad r0.z, r2, c3, r0.y +mad r0.x, -r1.w, c2.y, r0.y +mad r0.x, -r2.z, c2.z, r0 +mad r0.z, r3, c3.w, r0 +mad r0.z, r2, c3, r0 +mad r0.y, -r2.w, c3.z, r0.z +mad r0.y, -r4.x, c3.w, r0 +mad r0.y, -r1.z, c3, r0 +mul r0.w, r3.x, r0.x mov r0.x, c0.z -mul r3.z, c1.y, r0.x -mov r0.y, c0 -mul r10.x, c1.w, r0.y -mul r1.x, r3.z, c2.w -mov r0.x, c0.w -mul r1.z, c1, r0.x -mad r0.y, r10.x, c2.z, r1.x -mad r0.x, r1.z, c2.y, r0.y -mad r0.z, -r10.x, c3, r0 -mad r0.y, -r3.z, c3.w, r0.z -mad r0.z, -r7.y, c2.w, r0.x -mov r0.x, c0 -mul r7.w, c1.z, r0.x -mad r0.z, -r1.y, c2.y, r0 -mov r0.x, c0 -mul r8.x, c1.y, r0 -mul r0.w, r7, c2 -mul r0.x, r8, c2.z -mul r0.w, r0, c3.y -mad r1.w, r0.x, c3, r0 -mov r0.w, c0.x +mul r3.y, c2, r0.x +mul r0.z, r3.x, r0.y mov r0.x, c0.y -mul r7.z, c1.x, r0.x -mul r7.x, c1.w, r0.w -mul r6.w, r7.z, c2 -mad r10.y, r7.x, c2, r6.w -mul r0.x, r7, c2.y -mad r0.x, r0, c3.z, r1.w -mad r0.w, r6, c3.z, r0.x -mul r8.y, r7, c2.x -mov r0.x, c0.z -mul r3.w, c1.x, r0.x -mad r0.w, r8.y, c3, r0 -mul r0.x, r10, c2.z -mad r0.w, r0.x, c3.x, r0 -mul r0.x, r3.w, c2.y -mad r0.w, r0.x, c3, r0 +mul r2.y, c2.w, r0.x +mul r0.y, r3, c3.w +mad r1.x, r2.y, c3.z, r0.y mov r0.x, c0.w -mul r2.w, c1.x, r0.x -mad r10.y, r2.z, c2.x, r10 -mad r8.y, r8.x, c2.z, r8 -mul r0.x, r1.y, c2 -mad r0.w, r1.x, c3.x, r0 -mad r1.x, r0, c3.y, r0.w -mul r0.w, r2, c2.z -mad r1.x, r0.w, c3.y, r1 -mul r0.w, r2.z, c2.x -mad r1.x, r0.w, c3.z, r1 -mul r0.w, r1.z, c2.y -mad r1.x, r0.w, c3, r1 -mul r0.w, r8.x, c2 -mad r1.x, -r0.w, c3.z, r1 -mul r0.w, r7, c2.y -mad r1.x, -r0.w, c3.w, r1 -mul r0.w, r7.x, c2.z -mad r1.x, -r0.w, c3.y, r1 -mul r0.w, r7.z, c2.z -mad r1.x, -r0.w, c3.w, r1 -mul r0.w, r7.y, c2 -mad r1.x, -r0.w, c3, r1 -mul r0.w, r10.x, c2.x -mad r1.x, -r0.w, c3.z, r1 -mul r0.w, r3, c2 -mad r1.x, -r0.w, c3.y, r1 -mul r0.w, r3.z, c2.x -mad r1.x, -r0.w, c3.w, r1 -mul r0.w, r1.y, c2.y -mad r1.x, -r0.w, c3, r1 -mul r0.w, r2, c2.y -mad r1.x, -r0.w, c3.z, r1 -mul r0.w, r2.z, c2.z -mad r1.x, -r0.w, c3, r1 -mul r0.w, r1.z, c2.x -mad r0.w, -r0, c3.y, r1.x -rcp r3.x, r0.w -mad r0.z, -r2, c2, r0 -mul r0.w, r3.x, r0.z -mad r0.z, -r1, c3.y, r0.y -mov r0.y, c0.z -mul r5.x, c2.y, r0.y +mul r1.y, c2.z, r0.x mov r0.y, c0 -mul r8.w, c2, r0.y -mul r1.x, r5, c3.w -mad r1.w, r8, c3.z, r1.x -mov r1.x, c0.w -mul r9.z, c2, r1.x -mov r0.y, c0 -mul r3.y, c2.z, r0 -mad r1.x, r9.z, c3.y, r1.w -mad r1.w, -r3.y, c3, r1.x -mov r1.x, c0.z -mul r6.x, c2.w, r1 -mad r1.x, -r6, c3.y, r1.w +mul r4.y, c2.z, r0 +mad r0.x, r1.y, c3.y, r1 +mad r1.x, -r4.y, c3.w, r0 +mov r0.x, c0.z +mul r5.y, c2.w, r0.x +mad r0.x, -r5.y, c3.y, r1 mov r0.y, c0.w -mul r8.z, c2.y, r0.y -mad r0.y, -r8.z, c3.z, r1.x -mov r1.w, c1.y -mul r5.w, c2.z, r1 -mov r1.x, c1.z -mul r1.x, c2.w, r1 +mul r7.x, c2.y, r0.y +mad r0.y, -r7.x, c3.z, r0.x +mov r0.x, c1.z +mul r1.x, c2.w, r0 +mov r0.x, c1.y +mul r5.x, c2.z, r0 mul r2.x, r1, c3.y -mad r5.y, r5.w, c3.w, r2.x -mov r2.x, c1.w -mul r2.y, c2, r2.x -mov r1.w, c1.y -mul r2.x, c2.w, r1.w -mad r5.y, r2, c3.z, r5 -mad r6.y, -r2.x, c3.z, r5 -mov r1.w, c1 -mov r5.y, c1.z -mul r5.y, c2, r5 -mul r6.z, c2, r1.w -mad r6.y, -r5, c3.w, r6 -mad r1.w, -r6.z, c3.y, r6.y -mad r6.y, r7.w, c2.w, r0.x -mul r0.x, r3, r1.w -mad r1.w, r2, c2.z, r6.y -mul r6.y, r3.w, c3.w -mad r1.w, -r7.x, c2.z, r1 -mad r6.y, r7.x, c3.z, r6 -mad r6.y, r1.z, c3.x, r6 -mad r1.w, -r3, c2, r1 -mad r1.z, -r1, c2.x, r1.w -mad r6.y, -r7.w, c3.w, r6 -mad r1.y, -r1, c3.x, r6 +mad r4.z, r5.x, c3.w, r2.x +mov r0.x, c1.w +mul r2.x, c2.y, r0 +mad r0.x, r2, c3.z, r4.z +mul r3.w, c2, r3 +mad r4.w, -r3, c3.z, r0.x +mov r0.x, c1.z +mul r5.z, c2.y, r0.x +mov r4.z, c1.w +mul r5.w, c2.z, r4.z +mad r0.x, -r5.z, c3.w, r4.w +mad r0.x, -r5.w, c3.y, r0 +mov r4.z, c0 +mul r4.w, c1.x, r4.z +mov r4.z, c0.x +mul r7.y, c1.w, r4.z +mul r6.x, r4.w, c3.w +mad r6.z, r7.y, c3, r6.x +mov r6.x, c0.w +mov r4.z, c0.x +mul r7.z, c1.x, r6.x +mul r4.z, c1, r4 +mul r6.y, r1.w, c2.x +mad r6.y, r4.z, c2.w, r6 +mad r6.x, r7.z, c2.z, r6.y +mad r6.y, r1.z, c3.x, r6.z +mad r6.y, -r4.z, c3.w, r6 +mad r1.w, -r1, c3.x, r6.y +mad r6.x, -r7.y, c2.z, r6 +mad r6.x, -r4.w, c2.w, r6 +mad r1.z, -r1, c2.x, r6.x +mad r6.x, -r7.z, c3.z, r1.w mul r1.w, r3.x, r1.z -mov r1.z, c0.w -mul r9.y, c2.x, r1.z +mul r1.z, r3.x, r6.x mov r6.y, c0.x -mad r1.y, -r2.w, c3.z, r1 -mad r10.y, -r8.x, c2.w, r10 -mul r6.y, c2.z, r6 -mul r6.x, r6, c3 -mad r6.x, r6.y, c3.w, r6 -mad r9.w, r9.y, c3.z, r6.x +mul r8.x, c2.w, r6.y mov r6.x, c0 -mul r9.x, c2.w, r6 -mov r1.z, c0 -mad r9.w, -r9.x, c3.z, r9 -mul r6.x, c2, r1.z -mad r1.z, -r6.x, c3.w, r9.w -mad r9.z, -r9, c3.x, r1 -mul r1.z, r3.x, r1.y -mul r1.y, r3.x, r9.z -mov r9.z, c1 -mul r6.w, c2.x, r9.z -mov r9.z, c1.x -mul r9.w, r6, c3 -mul r9.z, c2.w, r9 -mad r10.z, r9, c3, r9.w -mov r9.w, c1.x -mad r10.z, r6, c3.x, r10 -mul r6.z, c2, r9.w -mad r10.z, -r6, c3.w, r10 -mad r1.x, -r1, c3, r10.z -mul r10.z, r10.x, c3.x -mad r10.x, -r10, c2, r10.y -mad r10.y, r8.x, c3.w, r10.z -mov r9.w, c1 -mul r9.w, c2.x, r9 -mad r1.x, -r9.w, c3.z, r1 -mad r10.x, -r2.w, c2.y, r10 -mad r10.y, r2.w, c3, r10 -mul r2.w, r3.x, r10.x -mad r10.x, -r7, c3.y, r10.y -mad r10.x, -r7.z, c3.w, r10 -mad r2.z, -r2, c3.x, r10.x -mov r7.x, c0.y -mul r7.x, c2, r7 -mul r10.x, r7, c3.w -mad r10.x, r9, c3.y, r10 -mov r9.x, c0 -mad r10.x, r8.z, c3, r10 -mul r8.z, c2.y, r9.x -mov r9.x, c1 -mul r3.y, r3, c3.x -mad r3.y, r8.z, c3.z, r3 -mad r3.y, r6.x, c3, r3 -mad r3.y, -r6, c3, r3 -mad r3.y, -r7.x, c3.z, r3 -mad r3.y, -r5.x, c3.x, r3 -mul r9.x, c2.y, r9 -mul r2.x, r2, c3 -mad r10.y, r9.x, c3.w, r2.x -mad r10.x, -r8.z, c3.w, r10 -mad r2.x, -r8.w, c3, r10 -mad r9.w, r9, c3.y, r10.y -mov r8.w, c1.y -mad r2.x, -r9.y, c3.y, r2 -mul r8.w, c2.x, r8 -mad r9.z, -r9, c3.y, r9.w -mad r9.z, -r8.w, c3.w, r9 -mad r9.y, -r2, c3.x, r9.z -mul r2.y, r3.x, r2.x -mul r2.x, r3, r9.y -mul r9.y, r7.z, c3.z -mad r9.y, r7.w, c3, r9 -mad r9.y, r3.z, c3.x, r9 -mad r8.y, r3.w, c2, r8 -mad r8.x, -r8, c3.z, r9.y -mad r7.w, -r7, c2.y, r8.y -mad r7.z, -r7, c2, r7.w -mad r7.y, -r7, c3.x, r8.x -mad r7.y, -r3.w, c3, r7 -mad r3.z, -r3, c2.x, r7 -mul r3.w, r3.x, r3.z -mul r3.z, r3.x, r7.y -mul r7.y, r8.w, c3.z -mad r6.z, r6, c3.y, r7.y -mad r5.y, r5, c3.x, r6.z -mad r5.y, -r9.x, c3.z, r5 -mad r5.y, -r5.w, c3.x, r5 -mad r5.x, -r6.w, c3.y, r5.y +mul r0.x, r3, r0 +mul r5.y, r5, c3.x +mul r6.x, c2.z, r6 +mad r6.z, r6.x, c3.w, r5.y +mov r5.y, c0.w +mul r7.w, c2.x, r5.y +mad r5.y, r7.w, c3.z, r6.z +mad r6.w, -r8.x, c3.z, r5.y +mov r6.y, c0 +mul r6.z, c1.x, r6.y +mov r5.y, c0.z +mul r6.y, c2.x, r5 +mad r5.y, -r6, c3.w, r6.w +mad r1.y, -r1, c3.x, r5 +mul r6.w, r6.z, c2 +mad r5.y, r7, c2, r6.w +mad r8.z, r2, c2.x, r5.y +mov r5.y, c0.x +mul r6.w, c1.y, r5.y +mad r8.w, -r6, c2, r8.z +mov r8.y, c1.z +mul r5.y, c2.x, r8 +mad r8.w, -r2, c2.x, r8 +mov r8.y, c1.x +mul r8.z, r5.y, c3.w +mul r8.y, c2.w, r8 +mad r9.x, r8.y, c3.z, r8.z +mad r8.w, -r7.z, c2.y, r8 +mov r8.z, c1.x +mad r9.x, r5.w, c3, r9 +mul r5.w, c2.z, r8.z +mad r9.x, -r5.w, c3.w, r9 +mad r1.x, -r1, c3, r9 +mul r9.x, r2.w, c3 +mul r2.w, r3.x, r8 +mad r9.x, r6.w, c3.w, r9 +mad r9.x, r7.z, c3.y, r9 +mov r8.w, c0.y +mov r8.z, c1.w +mul r8.z, c2.x, r8 +mad r1.x, -r8.z, c3.z, r1 +mad r7.y, -r7, c3, r9.x +mul r7.z, c2.x, r8.w +mad r8.w, -r6.z, c3, r7.y +mad r2.z, -r2, c3.x, r8.w +mul r9.x, r7.z, c3.w +mad r8.x, r8, c3.y, r9 +mov r7.y, c0.x +mad r7.x, r7, c3, r8 +mul r7.y, c2, r7 +mad r7.x, -r7.y, c3.w, r7 +mad r2.y, -r2, c3.x, r7.x +mad r2.y, -r7.w, c3, r2 +mul r7.x, r3.z, c2 +mad r7.w, r6, c2.z, r7.x +mov r7.x, c1 +mul r4.y, r4, c3.x +mad r4.y, r7, c3.z, r4 +mad r8.w, r4, c2.y, r7 +mul r7.x, c2.y, r7 +mul r3.w, r3, c3.x +mad r3.w, r7.x, c3, r3 +mad r7.w, r8.z, c3.y, r3 +mad r8.x, -r8.y, c3.y, r7.w +mov r3.w, c1.y +mul r7.w, c2.x, r3 +mad r3.w, -r7, c3, r8.x +mad r2.x, -r2, c3, r3.w +mad r8.x, -r4.z, c2.y, r8.w +mad r3.w, -r6.z, c2.z, r8.x +mad r3.w, -r4.x, c2.x, r3 +mul r6.z, r6, c3 +mad r4.z, r4, c3.y, r6 +mad r4.x, r4, c3, r4.z +mad r4.x, -r6.w, c3.z, r4 +mad r3.z, -r3, c3.x, r4.x +mad r4.y, r6, c3, r4 +mad r4.x, -r6, c3.y, r4.y +mad r3.z, -r4.w, c3.y, r3 +mad r4.x, -r7.z, c3.z, r4 +mad r3.y, -r3, c3.x, r4.x +mul r4.x, r7.w, c3.z +mad r5.w, r5, c3.y, r4.x +mad r5.z, r5, c3.x, r5.w +mad r5.z, -r7.x, c3, r5 +mad r5.x, -r5, c3, r5.z +mov r4, c9 +add r4, -c8, r4 +dp4 r5.w, r4, r4 +rsq r5.z, r5.w +mad r5.x, -r5.y, c3.y, r5 +rcp r5.y, r5.z +mul r5.z, v0, r5.y mov r5.y, c5.x -mul r0.z, r3.x, r0 mul r0.y, r3.x, r0 +mul r1.y, r3.x, r1 mul r1.x, r3, r1 mul r2.z, r3.x, r2 +mul r2.y, r3.x, r2 +mul r2.x, r3, r2 +mul r3.w, r3.x, r3 +mul r3.z, r3.x, r3 mul r3.y, r3.x, r3 mul r3.x, r3, r5 mov r5.x, c4 mul r5.w, c11.x, r5.y mul r6.w, c11.x, r5.x -mov r9.xyz, c12.x +mov r9.xyz, c12.z if_gt r6.w, r5.w -mul r5.x, v0, r6.w -mul r5.y, v0, r6.w -mul r5.x, r5, c12.y -mul r5.y, r5, c12 +mul r5.xy, v0, r6.w +mul r5.xy, r5, c12.w else -mul r5.x, v0, r5.w -mul r5.y, v0, r5.w -mul r5.x, r5, c12.y -mul r5.y, r5, c12 +mul r5.xy, v0, r5.w +mul r5.xy, r5, c12.w endif dp4 r4.w, -r4, -r4 rsq r4.w, r4.w mul r6.xyz, r4.w, -r4 mov r12.xy, r6 mov r10.xyz, r6 -if_eq r6.z, c12.x -mov r10.z, c12 +if_eq r6.z, c12.z +mov r10.z, c13.x endif -if_eq -r4.x, c12.x -mov r9.xyz, c12.wxxw +if_eq -r4.x, c12.z +mov r9.xyz, c13.yzzw endif -if_eq -r4.y, c12.x -mov r9.y, c12.w +if_eq -r4.y, c12.z +mov r9.y, c13 endif -if_eq -r4.z, c12.x -mov r9.z, c12.w +if_eq -r4.z, c12.z +mov r9.z, c13.y endif -add r4.w, r9.x, -r4.x -mul r6.y, r4.w, c12 mul r4.w, r6, r6 -add r6.x, r9.y, -r4.y -mul r6.z, r4.x, r4.x -rcp r8.w, c10.x -rcp r6.w, r6.y +add r6.xyz, r9, -r4 +mul r7.xyz, r4, r4 +mad r7.xyz, r9, r9, -r7 +mul r8.xyz, r6, c12.w mad r5.w, r5, r5, -r4 -mul r6.y, r5.w, r12.x -mul r6.x, r6, c12.y -mad r6.z, r9.x, r9.x, -r6 -mul r6.y, r12.x, r6 -mad r6.y, r8.w, r6, r6.z -mul r8.x, r6.y, r6.w -rcp r6.z, r6.x -mul r6.x, r5.w, r12.y -mul r6.y, r4, r4 -mul r5.w, r10.z, r5 -mov r6.w, c13.x -mad r6.y, r9, r9, -r6 -mul r6.x, r12.y, r6 -mad r6.x, r8.w, r6, r6.y -mul r10.w, r6.x, r6.z -mul r6.y, r12, r10.w -add r6.x, r9.z, -r4.z -mov r8.y, r10.w -mad r6.z, r12.x, r8.x, r6.y -mul r6.x, r6, c12.y -rcp r6.y, r6.x -mul r6.x, r4.z, r4.z -mad r6.x, r9.z, r9.z, -r6 -mul r5.w, r10.z, r5 -mad r5.w, r5, r8, r6.x -mul r9.w, r5, r6.y -mad r5.w, r10.z, r9, r6.z +mul r6.xyz, r10, r5.w +mov r6.w, c12.x +rcp r8.w, c10.x +mul r6.xyz, r10, r6 +mad r6.xyz, r6, r8.w, r7 +rcp r7.x, r8.x +rcp r7.z, r8.z +rcp r7.y, r8.y +mul r8.xyz, r6, r7 +mul r6.xyz, r10, r8 +add r5.w, r6.x, r6.y +add r5.w, r5, r6.z add r5.w, r5, -r12.x -mov r8.z, r9.w -rcp r6.x, r10.z add r5.w, r5, -r12.y -mul r6.z, r5.w, r6.x -mov r6.xy, c13.x +rcp r6.z, r10.z +mul r6.z, r5.w, r6 +mov r6.xy, c12.x add r6.xyz, r6, -r8 dp3 r5.w, r6, r6 rsq r5.w, r5.w @@ -832,20 +717,16 @@ mov r11.y, r7.z mov r11.x, r6.z mov r11.z, r10 dp3 r6.z, r11, r5 -add r5.w, r9.z, r4.z -mad r6.z, r5.w, c13.y, r6 mov r11.y, r7 mov r7.y, r7.x mov r7.x, r6 -add r5.w, r9.y, r4.y mov r7.z, r12.x +dp3 r6.x, r5, r7 mov r11.z, r12.y mov r11.x, r6.y dp3 r6.y, r5, r11 -dp3 r5.y, r5, r7 -add r5.x, r9, r4 -mad r6.y, r5.w, c13, r6 -mad r6.x, r5, c13.y, r5.y +add r5.xyz, r9, r4 +mad r6.xyz, r5, c13.w, r6 dp4 r7.z, r6, c3 mov r5.w, r7.z dp4 r7.x, r6, c0 @@ -854,27 +735,24 @@ mov r7.zw, r7.z mov r5.xy, r7 dp4 r5.z, r6, c2 mov o0, r5 -mov r5.z, c12.x -dp4 o1.z, r5, r2 -dp4 o2.z, r2, r7 -add r2.x, r9, -r8 +mov r5.z, c12 dp4 o1.w, r3, r5 +dp4 o1.z, r5, r2 +dp4 o1.x, r5, r0 +dp4 o1.y, r5, r1 +add r5.xyz, r9, -r8 +dp4 o2.x, r0, r7 +add r0.xyz, r4, -r8 +mul r6.xyz, r5, r5 dp4 o2.w, r3, r7 -add r3.x, r9.y, -r10.w -mul r2.y, r3.x, r3.x -mad r2.y, r2.x, r2.x, r2 -add r2.x, r9.z, -r9.w -mad r2.x, r2, r2, r2.y +add r3.x, r6, r6.y +dp4 o2.z, r2, r7 +add r2.x, r3, r6.z mad r8.w, r4, r8, -r2.x -dp4 o1.y, r5, r1 dp4 o2.y, r1, r7 -add r1.xyz, r4, -r8 -dp4 o1.x, r5, r0 -dp4 o2.x, r0, r7 -add r0.xyz, r9, -r8 mov o3, r8 -mad o5.xyz, -r0, c10.x, r9 -mad o6.xyz, -r1, c10.x, r4 +mad o5.xyz, -r5, c10.x, r9 +mad o6.xyz, -r0, c10.x, r4 mov o7, c6 mov o4.xyz, r10 mov o4.w, c7.x @@ -884,22 +762,314 @@ mov o8.x, c10 " } +SubProgram "d3d11 " { +Keywords { } +Bind "vertex" Vertex +ConstBuffer "$Globals" 144 // 120 used size, 13 vars +Float 0 [_Rayon1] +Float 4 [_Rayon2] +Vector 16 [_Color] 4 +Vector 32 [_Color2] 4 +Vector 48 [_TexPos1] 4 +Vector 64 [_TexPos2] 4 +Float 112 [_Shrink] +Float 116 [_Scale] +ConstBuffer "UnityPerDraw" 336 // 64 used size, 6 vars +Matrix 0 [glstate_matrix_mvp] 4 +BindCB "$Globals" 0 +BindCB "UnityPerDraw" 1 +// 228 instructions, 16 temp regs, 0 temp arrays: +// ALU 103 float, 0 int, 1 uint +// TEX 0 (0 load, 0 comp, 0 bias, 0 grad) +// FLOW 1 static, 0 dynamic +"vs_4_0 +eefiecedfgbhpfahgfhabmcfbcjbmedgilpnglenabaaaaaabicbaaaaadaaaaaa +cmaaaaaagaaaaaaajaabaaaaejfdeheocmaaaaaaabaaaaaaaiaaaaaacaaaaaaa +aaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaapahaaaafaepfdejfeejepeoaaklklkl +epfdeheociabaaaaalaaaaaaaiaaaaaabaabaaaaaaaaaaaaabaaaaaaadaaaaaa +aaaaaaaaapaaaaaabmabaaaaacaaaaaaaaaaaaaaadaaaaaaabaaaaaaapaaaaaa +bmabaaaaadaaaaaaaaaaaaaaadaaaaaaacaaaaaaapaaaaaabmabaaaaaeaaaaaa +aaaaaaaaadaaaaaaadaaaaaaapaaaaaabmabaaaaafaaaaaaaaaaaaaaadaaaaaa +aeaaaaaaapaaaaaabmabaaaaagaaaaaaaaaaaaaaadaaaaaaafaaaaaaadamaaaa +bmabaaaaabaaaaaaaaaaaaaaadaaaaaaafaaaaaaaealaaaabmabaaaaahaaaaaa +aaaaaaaaadaaaaaaagaaaaaaadamaaaabmabaaaaaiaaaaaaaaaaaaaaadaaaaaa +ahaaaaaaadamaaaabmabaaaaajaaaaaaaaaaaaaaadaaaaaaaiaaaaaaadamaaaa +bmabaaaaaaaaaaaaaaaaaaaaadaaaaaaajaaaaaaapaaaaaafdfgfpfagphdgjhe +gjgpgoaafeeffiedepepfceeaaklklklfdeieefciabpaaaaeaaaabaaoaahaaaa +fjaaaaaeegiocaaaaaaaaaaaaiaaaaaafjaaaaaeegiocaaaabaaaaaaaeaaaaaa +fpaaaaadhcbabaaaaaaaaaaaghaaaaaepccabaaaaaaaaaaaabaaaaaagfaaaaad +pccabaaaabaaaaaagfaaaaadpccabaaaacaaaaaagfaaaaadpccabaaaadaaaaaa +gfaaaaadpccabaaaaeaaaaaagfaaaaaddccabaaaafaaaaaagfaaaaadeccabaaa +afaaaaaagfaaaaaddccabaaaagaaaaaagfaaaaaddccabaaaahaaaaaagfaaaaad +dccabaaaaiaaaaaagfaaaaadpccabaaaajaaaaaagiaaaaacbaaaaaaadgaaaaai +gcaabaaaaaaaaaaaaceaaaaaaaaaaaaaaaaaiadpaaaaiadpaaaaaaaadiaaaaaj +dcaabaaaabaaaaaabgifcaaaaaaaaaaaaaaaaaaafgifcaaaaaaaaaaaahaaaaaa +diaaaaahicaabaaaaaaaaaaabkaabaaaabaaaaaabkaabaaaabaaaaaadcaaaaak +ecaabaaaabaaaaaaakaabaaaabaaaaaaakaabaaaabaaaaaadkaabaiaebaaaaaa +aaaaaaaaaoaaaaaiicaabaaaaaaaaaaadkaabaaaaaaaaaaaakiacaaaaaaaaaaa +ahaaaaaaaaaaaaakpcaabaaaacaaaaaaegiocaiaebaaaaaaaaaaaaaaadaaaaaa +egiocaaaaaaaaaaaaeaaaaaabbaaaaajicaabaaaabaaaaaaegaobaiaebaaaaaa +acaaaaaaegaobaiaebaaaaaaacaaaaaaeeaaaaaficaabaaaacaaaaaadkaabaaa +abaaaaaaelaaaaaficaabaaaabaaaaaadkaabaaaabaaaaaadiaaaaahecaabaaa +adaaaaaadkaabaaaabaaaaaackbabaaaaaaaaaaadiaaaaailcaabaaaaeaaaaaa +pgapbaaaacaaaaaaegaibaiaebaaaaaaacaaaaaabiaaaaahicaabaaaabaaaaaa +dkaabaaaaeaaaaaaabeaaaaaaaaaaaaadhaaaaajecaabaaaaeaaaaaadkaabaaa +abaaaaaaabeaaaaabdcoobcjdkaabaaaaeaaaaaadiaaaaahhcaabaaaafaaaaaa +egacbaaaaeaaaaaaegacbaaaaeaaaaaadiaaaaahhcaabaaaafaaaaaakgakbaaa +abaaaaaaegacbaaaafaaaaaaaoaaaaaihcaabaaaafaaaaaaegacbaaaafaaaaaa +agiacaaaaaaaaaaaahaaaaaadiaaaaahhcaabaaaagaaaaaaegacbaaaacaaaaaa +egacbaaaacaaaaaabiaaaaalhcaabaaaahaaaaaaegacbaiaebaaaaaaacaaaaaa +aceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaakhcaabaaaahaaaaaa +egacbaaaahaaaaaaaceaaaaagpbciddkgpbciddkgpbciddkaaaaaaaadcaaaaak +hcaabaaaagaaaaaaegacbaaaahaaaaaaegacbaaaahaaaaaaegacbaiaebaaaaaa +agaaaaaaaaaaaaahhcaabaaaafaaaaaaegacbaaaafaaaaaaegacbaaaagaaaaaa +aaaaaaaihcaabaaaagaaaaaaegacbaiaebaaaaaaacaaaaaaegacbaaaahaaaaaa +aaaaaaahhcaabaaaagaaaaaaegacbaaaagaaaaaaegacbaaaagaaaaaaaoaaaaah +hcaabaaaafaaaaaaegacbaaaafaaaaaaegacbaaaagaaaaaadiaaaaahmcaabaaa +abaaaaaaagaebaaaaeaaaaaaagaebaaaafaaaaaaaaaaaaahecaabaaaabaaaaaa +dkaabaaaabaaaaaackaabaaaabaaaaaadcaaaaajecaabaaaabaaaaaackaabaaa +aeaaaaaackaabaaaafaaaaaackaabaaaabaaaaaadcaaaaakecaabaaaabaaaaaa +akaabaiaabaaaaaaacaaaaaadkaabaaaacaaaaaackaabaaaabaaaaaadcaaaaak +ecaabaaaabaaaaaabkaabaiaabaaaaaaacaaaaaadkaabaaaacaaaaaackaabaaa +abaaaaaaaoaaaaahbcaabaaaaaaaaaaackaabaaaabaaaaaackaabaaaaeaaaaaa +aaaaaaaihcaabaaaaaaaaaaaegacbaaaaaaaaaaacgajbaiaebaaaaaaafaaaaaa +baaaaaahecaabaaaabaaaaaaegacbaaaaaaaaaaaegacbaaaaaaaaaaaeeaaaaaf +ecaabaaaabaaaaaackaabaaaabaaaaaadiaaaaahhcaabaaaaaaaaaaacgajbaaa +aaaaaaaakgakbaaaabaaaaaadiaaaaahhcaabaaaagaaaaaajgaebaaaaeaaaaaa +jgaebaaaaaaaaaaadcaaaaakhcaabaaaagaaaaaaegacbaaaaaaaaaaacgajbaaa +aeaaaaaaegacbaiaebaaaaaaagaaaaaabaaaaaahecaabaaaabaaaaaaegacbaaa +agaaaaaaegacbaaaagaaaaaaeeaaaaafecaabaaaabaaaaaackaabaaaabaaaaaa +diaaaaahhcaabaaaagaaaaaakgakbaaaabaaaaaaegacbaaaagaaaaaadgaaaaaf +ccaabaaaaiaaaaaaakaabaaaagaaaaaadgaaaaafbcaabaaaaiaaaaaackaabaaa +aaaaaaaaaaaaaaahpcaabaaaajaaaaaaegbebaaaaaaaaaaaegbebaaaaaaaaaaa +diaaaaahpcaabaaaajaaaaaafgaabaaaabaaaaaaegaobaaaajaaaaaadbaaaaah +bcaabaaaabaaaaaaakaabaaaabaaaaaabkaabaaaabaaaaaadhaaaaajdcaabaaa +adaaaaaaagaabaaaabaaaaaaegaabaaaajaaaaaaogakbaaaajaaaaaadgaaaaaf +ecaabaaaaiaaaaaaakaabaaaaeaaaaaadgaaaaafecaabaaaaaaaaaaabkaabaaa +aeaaaaaabaaaaaahbcaabaaaabaaaaaaegacbaaaaiaaaaaaegacbaaaadaaaaaa +dgaaaaaficcabaaaabaaaaaackaabaaaaiaaaaaadgaaaaafbcaabaaaaeaaaaaa +bkaabaaaaaaaaaaadgaaaaafccaabaaaaaaaaaaabkaabaaaagaaaaaadgaaaaaf +ccaabaaaaeaaaaaackaabaaaagaaaaaabaaaaaahecaabaaaabaaaaaaegacbaaa +aeaaaaaaegacbaaaadaaaaaadgaaaaaficcabaaaadaaaaaackaabaaaaeaaaaaa +baaaaaahccaabaaaabaaaaaaegacbaaaaaaaaaaaegacbaaaadaaaaaadgaaaaaf +iccabaaaacaaaaaackaabaaaaaaaaaaaaaaaaaahhcaabaaaaaaaaaaaegacbaaa +acaaaaaaegacbaaaahaaaaaadcaaaaamhcaabaaaaaaaaaaaegacbaaaaaaaaaaa +aceaaaaaaaaaaadpaaaaaadpaaaaaadpaaaaaaaaegacbaaaabaaaaaadiaaaaai +pcaabaaaabaaaaaafgafbaaaaaaaaaaaegiocaaaabaaaaaaabaaaaaadcaaaaak +pcaabaaaabaaaaaaegiocaaaabaaaaaaaaaaaaaaagaabaaaaaaaaaaaegaobaaa +abaaaaaadcaaaaakpcaabaaaabaaaaaaegiocaaaabaaaaaaacaaaaaakgakbaaa +aaaaaaaaegaobaaaabaaaaaaaaaaaaaipcaabaaaabaaaaaaegaobaaaabaaaaaa +egiocaaaabaaaaaaadaaaaaadgaaaaafpccabaaaaaaaaaaaegaobaaaabaaaaaa +dgaaaaafeccabaaaabaaaaaaakaabaaaafaaaaaadiaaaaajhcaabaaaaaaaaaaa +hgiocaaaabaaaaaaacaaaaaaogijcaaaabaaaaaaadaaaaaadiaaaaajecaabaaa +abaaaaaabkiacaaaabaaaaaaacaaaaaackiacaaaabaaaaaaadaaaaaadiaaaaaj +pcaabaaaadaaaaaaggiicaaaabaaaaaaabaaaaaajgiccaaaabaaaaaaacaaaaaa +diaaaaaidcaabaaaaeaaaaaangafbaaaadaaaaaapgipcaaaabaaaaaaadaaaaaa +dcaaaaakicaabaaaacaaaaaackaabaaaabaaaaaadkiacaaaabaaaaaaabaaaaaa +akaabaaaaeaaaaaadiaaaaajpcaabaaaagaaaaaajgiccaaaabaaaaaaabaaaaaa +ggiicaaaabaaaaaaadaaaaaadcaaaaakicaabaaaacaaaaaabkaabaaaagaaaaaa +dkiacaaaabaaaaaaacaaaaaadkaabaaaacaaaaaadcaaaaalicaabaaaacaaaaaa +akaabaiaebaaaaaaagaaaaaadkiacaaaabaaaaaaacaaaaaadkaabaaaacaaaaaa +dcaaaaalicaabaaaacaaaaaaakaabaiaebaaaaaaadaaaaaadkiacaaaabaaaaaa +adaaaaaadkaabaaaacaaaaaadcaaaaalicaabaaaacaaaaaackaabaiaebaaaaaa +aaaaaaaadkiacaaaabaaaaaaabaaaaaadkaabaaaacaaaaaadcaaaaamncaabaaa +aeaaaaaakgihcaaaabaaaaaaacaaaaaapgijcaaaabaaaaaaadaaaaaaagajbaia +ebaaaaaaaaaaaaaabaaaaaaibcaabaaaaiaaaaaaigadbaaaaeaaaaaajgihcaaa +abaaaaaaabaaaaaadiaaaaajncaabaaaaeaaaaaapgiecaaaabaaaaaaacaaaaaa +fgidcaaaabaaaaaaadaaaaaadcaaaaamncaabaaaaeaaaaaafgidcaaaabaaaaaa +acaaaaaapgiecaaaabaaaaaaadaaaaaaagaobaiaebaaaaaaaeaaaaaabaaaaaai +ecaabaaaaiaaaaaaigadbaaaaeaaaaaaegidcaaaabaaaaaaabaaaaaadiaaaaaj +ncaabaaaaeaaaaaapgiicaaaabaaaaaaacaaaaaakgidcaaaabaaaaaaadaaaaaa +dcaaaaamhcaabaaaajaaaaaaogiicaiaebaaaaaaabaaaaaaacaaaaaadgiocaaa +abaaaaaaadaaaaaaigadbaaaaeaaaaaabaaaaaaiccaabaaaaiaaaaaaegacbaaa +ajaaaaaaigidcaaaabaaaaaaabaaaaaadiaaaaajhcaabaaaajaaaaaajgiecaaa +abaaaaaaacaaaaaacgijcaaaabaaaaaaadaaaaaadcaaaaamlcaabaaaajaaaaaa +cgigcaaaabaaaaaaacaaaaaajgibcaaaabaaaaaaadaaaaaaegaibaiaebaaaaaa +ajaaaaaabaaaaaaiicaabaaaaiaaaaaaegadbaaaajaaaaaaegiccaaaabaaaaaa +abaaaaaabbaaaaaibcaabaaaaaaaaaaaegaobaaaaiaaaaaaegiocaaaabaaaaaa +aaaaaaaaaoaaaaakbcaabaaaaaaaaaaaaceaaaaaaaaaiadpaaaaiadpaaaaiadp +aaaaiadpakaabaaaaaaaaaaadiaaaaahbcaabaaaaiaaaaaadkaabaaaacaaaaaa +akaabaaaaaaaaaaadiaaaaaiccaabaaaaaaaaaaackaabaaaajaaaaaadkiacaaa +abaaaaaaabaaaaaadiaaaaajpcaabaaaakaaaaaabgiecaaaabaaaaaaabaaaaaa +egibcaaaabaaaaaaacaaaaaadcaaaaakccaabaaaaaaaaaaackaabaaaakaaaaaa +dkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaadiaaaaajpcaabaaaalaaaaaa +egibcaaaabaaaaaaabaaaaaabgiecaaaabaaaaaaadaaaaaadcaaaaakccaabaaa +aaaaaaaackaabaaaalaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaa +dcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaaalaaaaaadkiacaaaabaaaaaa +acaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaa +akaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaadiaaaaajfcaabaaa +aeaaaaaaagibcaaaabaaaaaaacaaaaaakgiicaaaabaaaaaaadaaaaaadcaaaaal +ccaabaaaaaaaaaaackaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaaabaaaaaa +bkaabaaaaaaaaaaadiaaaaahecaabaaaaiaaaaaabkaabaaaaaaaaaaaakaabaaa +aaaaaaaadcaaaaakccaabaaaaaaaaaaadkaabaaaagaaaaaadkiacaaaabaaaaaa +acaaaaaabkaabaaaaeaaaaaadcaaaaakccaabaaaaaaaaaaadkaabaaaaeaaaaaa +dkiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaa +ckaabaiaebaaaaaaadaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaa +dcaaaaalccaabaaaaaaaaaaaakaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaa +abaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaackaabaiaebaaaaaa +agaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadiaaaaahccaabaaa +aiaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaadiaaaaaiccaabaaaaaaaaaaa +dkaabaaaakaaaaaackiacaaaabaaaaaaadaaaaaadcaaaaakccaabaaaaaaaaaaa +dkaabaaaalaaaaaackiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadcaaaaak +ccaabaaaaaaaaaaackaabaaaaeaaaaaackiacaaaabaaaaaaabaaaaaabkaabaaa +aaaaaaaadcaaaaalccaabaaaaaaaaaaackaabaiaebaaaaaaakaaaaaackiacaaa +abaaaaaaadaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaackaabaia +ebaaaaaaajaaaaaackiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaackaabaiaebaaaaaaalaaaaaackiacaaaabaaaaaaacaaaaaa +bkaabaaaaaaaaaaadiaaaaahicaabaaaaiaaaaaabkaabaaaaaaaaaaaakaabaaa +aaaaaaaabbaaaaahcccabaaaabaaaaaaegaobaaaaiaaaaaaegapbaaaabaaaaaa +baaaaaahbccabaaaabaaaaaaegadbaaaaiaaaaaaegadbaaaabaaaaaadiaaaaaj +pcaabaaaaiaaaaaajgiccaaaabaaaaaaaaaaaaaaggiicaaaabaaaaaaacaaaaaa +diaaaaaiccaabaaaaaaaaaaabkaabaaaaiaaaaaadkiacaaaabaaaaaaadaaaaaa +diaaaaajpcaabaaaamaaaaaaggiicaaaabaaaaaaaaaaaaaajgiccaaaabaaaaaa +adaaaaaadcaaaaakccaabaaaaaaaaaaabkaabaaaamaaaaaadkiacaaaabaaaaaa +acaaaaaabkaabaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaackaabaaaaaaaaaaa +dkiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaa +akaabaiaebaaaaaaaiaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaa +dcaaaaalccaabaaaaaaaaaaackaabaiaebaaaaaaabaaaaaadkiacaaaabaaaaaa +aaaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaaakaabaiaebaaaaaa +amaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadiaaaaahbcaabaaa +anaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaadiaaaaajpcaabaaaaoaaaaaa +egibcaaaabaaaaaaaaaaaaaabgiecaaaabaaaaaaacaaaaaadiaaaaaigcaabaaa +aaaaaaaakgalbaaaaoaaaaaapgiocaaaabaaaaaaadaaaaaadiaaaaajpcaabaaa +apaaaaaabgiecaaaabaaaaaaaaaaaaaaegibcaaaabaaaaaaadaaaaaadcaaaaak +ccaabaaaaaaaaaaackaabaaaapaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaa +aaaaaaaadcaaaaakecaabaaaaaaaaaaackaabaaaajaaaaaackiacaaaabaaaaaa +aaaaaaaackaabaaaaaaaaaaadcaaaaakecaabaaaaaaaaaaadkaabaaaapaaaaaa +ckiacaaaabaaaaaaacaaaaaackaabaaaaaaaaaaadcaaaaalecaabaaaaaaaaaaa +ckaabaiaebaaaaaaapaaaaaackiacaaaabaaaaaaacaaaaaackaabaaaaaaaaaaa +dcaaaaalecaabaaaaaaaaaaackaabaiaebaaaaaaaoaaaaaackiacaaaabaaaaaa +adaaaaaackaabaaaaaaaaaaadcaaaaalecaabaaaaaaaaaaackaabaiaebaaaaaa +aeaaaaaackiacaaaabaaaaaaaaaaaaaackaabaaaaaaaaaaadiaaaaahicaabaaa +anaaaaaackaabaaaaaaaaaaaakaabaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaa +ckaabaaaaeaaaaaadkiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadiaaaaai +ecaabaaaaaaaaaaaakaabaaaaeaaaaaadkiacaaaabaaaaaaaaaaaaaadcaaaaak +ecaabaaaaaaaaaaadkaabaaaaiaaaaaadkiacaaaabaaaaaaadaaaaaackaabaaa +aaaaaaaadcaaaaakecaabaaaaaaaaaaadkaabaaaamaaaaaadkiacaaaabaaaaaa +acaaaaaackaabaaaaaaaaaaadcaaaaalecaabaaaaaaaaaaackaabaiaebaaaaaa +amaaaaaadkiacaaaabaaaaaaacaaaaaackaabaaaaaaaaaaadcaaaaalecaabaaa +aaaaaaaackaabaiaebaaaaaaaiaaaaaadkiacaaaabaaaaaaadaaaaaackaabaaa +aaaaaaaadcaaaaalecaabaaaaaaaaaaadkaabaiaebaaaaaaaeaaaaaadkiacaaa +abaaaaaaaaaaaaaackaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaia +ebaaaaaaaoaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaackaabaiaebaaaaaaajaaaaaadkiacaaaabaaaaaaaaaaaaaa +bkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaaapaaaaaa +dkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadiaaaaahgcaabaaaanaaaaaa +kgajbaaaaaaaaaaaagaabaaaaaaaaaaabbaaaaahcccabaaaacaaaaaaegaobaaa +anaaaaaaegapbaaaabaaaaaabaaaaaahbccabaaaacaaaaaaegadbaaaanaaaaaa +egadbaaaabaaaaaadgaaaaafeccabaaaacaaaaaabkaabaaaafaaaaaadiaaaaai +ccaabaaaaaaaaaaaakaabaaaalaaaaaadkiacaaaabaaaaaaaaaaaaaadiaaaaaj +pcaabaaaaeaaaaaabgiecaaaabaaaaaaaaaaaaaaegibcaaaabaaaaaaabaaaaaa +dcaaaaakccaabaaaaaaaaaaackaabaaaaeaaaaaadkiacaaaabaaaaaaadaaaaaa +bkaabaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaaakaabaaaapaaaaaadkiacaaa +abaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaabkaabaia +ebaaaaaaapaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaadkaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaaadaaaaaa +bkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaabkaabaiaebaaaaaaalaaaaaa +dkiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadiaaaaahecaabaaaajaaaaaa +bkaabaaaaaaaaaaaakaabaaaaaaaaaaadiaaaaaiccaabaaaaaaaaaaaakaabaaa +agaaaaaadkiacaaaabaaaaaaaaaaaaaadiaaaaajpcaabaaaanaaaaaaggiicaaa +abaaaaaaaaaaaaaajgiccaaaabaaaaaaabaaaaaadcaaaaakccaabaaaaaaaaaaa +bkaabaaaanaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaadcaaaaak +ccaabaaaaaaaaaaaakaabaaaamaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaa +aaaaaaaadcaaaaalccaabaaaaaaaaaaabkaabaiaebaaaaaaamaaaaaadkiacaaa +abaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaaakaabaia +ebaaaaaaanaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaabkaabaiaebaaaaaaagaaaaaadkiacaaaabaaaaaaaaaaaaaa +bkaabaaaaaaaaaaadiaaaaahbcaabaaaajaaaaaabkaabaaaaaaaaaaaakaabaaa +aaaaaaaadiaaaaaiccaabaaaaaaaaaaadkaabaaaanaaaaaadkiacaaaabaaaaaa +adaaaaaadcaaaaakccaabaaaaaaaaaaackaabaaaamaaaaaadkiacaaaabaaaaaa +abaaaaaabkaabaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaackaabaaaagaaaaaa +dkiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaa +ckaabaiaebaaaaaaanaaaaaadkiacaaaabaaaaaaadaaaaaabkaabaaaaaaaaaaa +dcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaaagaaaaaadkiacaaaabaaaaaa +aaaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaa +amaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadiaaaaahccaabaaa +ajaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaadiaaaaaiccaabaaaaaaaaaaa +dkaabaaaaeaaaaaackiacaaaabaaaaaaadaaaaaadcaaaaakccaabaaaaaaaaaaa +ckaabaaaapaaaaaackiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaak +ccaabaaaaaaaaaaackaabaaaalaaaaaackiacaaaabaaaaaaaaaaaaaabkaabaaa +aaaaaaaadcaaaaalccaabaaaaaaaaaaackaabaiaebaaaaaaaeaaaaaackiacaaa +abaaaaaaadaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaia +ebaaaaaaalaaaaaackiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaadkaabaiaebaaaaaaapaaaaaackiacaaaabaaaaaaabaaaaaa +bkaabaaaaaaaaaaadiaaaaahicaabaaaajaaaaaabkaabaaaaaaaaaaaakaabaaa +aaaaaaaabbaaaaahcccabaaaadaaaaaaegaobaaaajaaaaaaegapbaaaabaaaaaa +baaaaaahbccabaaaadaaaaaaegadbaaaajaaaaaaegadbaaaabaaaaaadgaaaaaf +eccabaaaadaaaaaackaabaaaafaaaaaadiaaaaaiccaabaaaaaaaaaaaakaabaaa +aeaaaaaadkiacaaaabaaaaaaacaaaaaadcaaaaakccaabaaaaaaaaaaaakaabaaa +aoaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaakccaabaaa +aaaaaaaaakaabaaaakaaaaaadkiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaa +dcaaaaalccaabaaaaaaaaaaabkaabaiaebaaaaaaaeaaaaaadkiacaaaabaaaaaa +acaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaabkaabaiaebaaaaaa +akaaaaaadkiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaa +aaaaaaaabkaabaiaebaaaaaaaoaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaa +aaaaaaaadiaaaaahecaabaaaagaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaa +diaaaaaiccaabaaaaaaaaaaaakaabaaaanaaaaaadkiacaaaabaaaaaaacaaaaaa +dcaaaaakccaabaaaaaaaaaaaakaabaaaaiaaaaaadkiacaaaabaaaaaaabaaaaaa +bkaabaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaaakaabaaaadaaaaaadkiacaaa +abaaaaaaaaaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaabkaabaia +ebaaaaaaanaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaabkaabaiaebaaaaaaadaaaaaadkiacaaaabaaaaaaaaaaaaaa +bkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaabkaabaiaebaaaaaaaiaaaaaa +dkiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadiaaaaahbcaabaaaagaaaaaa +bkaabaaaaaaaaaaaakaabaaaaaaaaaaadiaaaaaiccaabaaaaaaaaaaackaabaaa +adaaaaaadkiacaaaabaaaaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaackaabaaa +anaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadcaaaaakccaabaaa +aaaaaaaackaabaaaaiaaaaaadkiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaa +dcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaaaiaaaaaadkiacaaaabaaaaaa +abaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaa +anaaaaaadkiacaaaabaaaaaaacaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaa +aaaaaaaadkaabaiaebaaaaaaadaaaaaadkiacaaaabaaaaaaaaaaaaaabkaabaaa +aaaaaaaadiaaaaahccaabaaaagaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaa +diaaaaaiccaabaaaaaaaaaaackaabaaaakaaaaaackiacaaaabaaaaaaaaaaaaaa +dcaaaaakccaabaaaaaaaaaaackaabaaaaeaaaaaackiacaaaabaaaaaaacaaaaaa +bkaabaaaaaaaaaaadcaaaaakccaabaaaaaaaaaaackaabaaaaoaaaaaackiacaaa +abaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaia +ebaaaaaaaoaaaaaackiacaaaabaaaaaaabaaaaaabkaabaaaaaaaaaaadcaaaaal +ccaabaaaaaaaaaaadkaabaiaebaaaaaaaeaaaaaackiacaaaabaaaaaaacaaaaaa +bkaabaaaaaaaaaaadcaaaaalccaabaaaaaaaaaaadkaabaiaebaaaaaaakaaaaaa +ckiacaaaabaaaaaaaaaaaaaabkaabaaaaaaaaaaadiaaaaahicaabaaaagaaaaaa +bkaabaaaaaaaaaaaakaabaaaaaaaaaaabbaaaaahcccabaaaaeaaaaaaegaobaaa +agaaaaaaegapbaaaabaaaaaabaaaaaahbccabaaaaeaaaaaaegadbaaaagaaaaaa +egadbaaaabaaaaaaaaaaaaaihcaabaaaaaaaaaaaegacbaiaebaaaaaaafaaaaaa +egacbaaaahaaaaaaaaaaaaaihcaabaaaabaaaaaaegacbaaaacaaaaaaegacbaia +ebaaaaaaafaaaaaadcaaaaalhcaabaaaabaaaaaaegacbaiaebaaaaaaabaaaaaa +agiacaaaaaaaaaaaahaaaaaaegacbaaaacaaaaaadcaaaaalhcaabaaaacaaaaaa +egacbaiaebaaaaaaaaaaaaaaagiacaaaaaaaaaaaahaaaaaaegacbaaaahaaaaaa +diaaaaahdcaabaaaaaaaaaaaegaabaaaaaaaaaaaegaabaaaaaaaaaaaaaaaaaah +bcaabaaaaaaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaadcaaaaajbcaabaaa +aaaaaaaackaabaaaaaaaaaaackaabaaaaaaaaaaaakaabaaaaaaaaaaaaaaaaaai +eccabaaaaeaaaaaaakaabaiaebaaaaaaaaaaaaaadkaabaaaaaaaaaaadgaaaaag +iccabaaaaeaaaaaaakiacaaaaaaaaaaaacaaaaaadgaaaaafbccabaaaafaaaaaa +akaabaaaacaaaaaadgaaaaafcccabaaaafaaaaaaakaabaaaabaaaaaadgaaaaag +eccabaaaafaaaaaaakiacaaaaaaaaaaaahaaaaaadgaaaaaficaabaaaacaaaaaa +bkaabaaaabaaaaaadgaaaaafdccabaaaagaaaaaangafbaaaacaaaaaadgaaaaaf +icaabaaaabaaaaaackaabaaaacaaaaaadgaaaaafdccabaaaahaaaaaalgapbaaa +abaaaaaadgaaaaagdccabaaaaiaaaaaajgifcaaaaaaaaaaaacaaaaaadgaaaaag +pccabaaaajaaaaaaegiocaaaaaaaaaaaabaaaaaadoaaaaab" +} + } Program "fp" { // Fragment combos: 1 -// opengl - ALU: 173 to 173, TEX: 1 to 1 -// d3d9 - ALU: 175 to 175, TEX: 4 to 4 +// opengl - ALU: 165 to 165, TEX: 2 to 2 +// d3d9 - ALU: 157 to 157, TEX: 5 to 5 +// d3d11 - ALU: 91 to 91, TEX: 2 to 2, FLOW: 1 to 1 SubProgram "opengl " { Keywords { } Float 8 [_EllipseFactor] +Float 9 [_Attenuation] +Float 10 [_Brightness] SetTexture 0 [_MatCap] 2D +SetTexture 1 [_MatCap2] 2D "3.0-!!ARBfp1.0 -# 173 ALU, 1 TEX -PARAM c[11] = { state.matrix.mvp, +# 165 ALU, 2 TEX +PARAM c[13] = { state.matrix.mvp, state.matrix.modelview[0].invtrans, - program.local[8], - { 1, 0, 0.5, 200 }, - { 1.5 } }; + program.local[8..10], + { 1, 0, 2, 0.5 }, + { 1.25, 9.9999997e-05, 9.9999997e-06 } }; TEMP R0; TEMP R1; TEMP R2; @@ -909,181 +1079,173 @@ TEMP R5; TEMP R6; TEMP R7; TEMP R8; -MOV R2.xyz, fragment.texcoord[4]; -MUL R0.w, fragment.texcoord[5].y, R2.y; -MAD R0.x, fragment.texcoord[5], R2, R0.w; -MAD R2.x, -fragment.texcoord[5], R2, -R0.w; -MAD R0.x, fragment.texcoord[5].z, R2.z, R0; -ADD R0.x, -fragment.texcoord[5], R0; -ADD R0.z, -fragment.texcoord[5].y, R0.x; -RCP R1.x, fragment.texcoord[5].z; -ADD R0.w, -fragment.texcoord[1].x, c[9].x; -MAD R4.w, -fragment.texcoord[5].z, R2.z, R2.x; -RCP R4.y, R0.w; -MOV R5.w, c[9].y; -MUL R0.z, R0, R1.x; -MOV R0.xy, c[9].x; -ADD R0.xyz, -fragment.texcoord[4], R0; -DP3 R1.x, R0, R0; -RSQ R1.x, R1.x; -MUL R0.xyz, R1.x, R0; -MUL R1.xyz, fragment.texcoord[5].yzxw, R0.zxyw; -MAD R1.xyz, fragment.texcoord[5].zxyw, R0.yzxw, -R1; -DP3 R1.w, R1, R1; -RSQ R1.w, R1.w; -MUL R1.xyz, R1.w, R1; -MUL R1.w, fragment.texcoord[4].y, R1.y; -MAD R1.w, fragment.texcoord[4].x, -R1.x, -R1; -MAD R3.w, fragment.texcoord[4].z, -R1.z, R1; -RCP R1.w, fragment.texcoord[1].x; -MUL R3.z, R1.w, c[8].x; -MUL R2.w, R3.z, R3; -MUL R2.y, fragment.texcoord[4], R0; -MAD R2.y, fragment.texcoord[4].x, -R0.x, -R2; -MAD R4.x, fragment.texcoord[4].z, -R0.z, R2.y; -MUL R2.z, R1.w, R0.x; -MUL R3.y, R3.z, R1; -MUL R3.x, R1.w, R0.y; -MUL R2.w, R3, R2; -MUL R2.y, R1.w, R4.x; -MAD R2.y, R4.x, R2, R2.w; -MUL R2.w, R3.z, R1.x; -MUL R7.w, R2, R1.x; -MUL R3.z, R3, R1; -MAD R0.x, R2.z, R0, R7.w; -MUL R0.w, -R4.y, R4; -MAD R0.w, R4, R0, R2.y; -ADD R6.w, -fragment.texcoord[4], R0; -MUL R0.w, R2, R3; -MAD R2.x, R2.z, R4, R0.w; -MUL R0.w, -R4.y, fragment.texcoord[5].x; -MAD R6.x, R0.w, R4.w, R2; -MUL R2.x, R3.w, R3.y; -MUL R4.z, R3.w, R3; -MUL R3.w, R1, R0.z; -MAD R1.w, R4.x, R3, R4.z; -MAD R2.x, R4, R3, R2; -MUL R2.y, -R4, fragment.texcoord[5]; -MAD R2.x, R4.w, R2.y, R2; -MUL R4.z, -R4.y, fragment.texcoord[5]; -MAD R4.w, R4, R4.z, R1; -MUL R4.x, R1.z, R3.y; -MUL R1.x, R2.w, R1.z; -RCP R1.w, fragment.texcoord[2].w; -MUL R7.xyz, fragment.texcoord[2], R1.w; -RCP R1.w, fragment.texcoord[3].w; -MAD R5.xyz, fragment.texcoord[3], R1.w, -R7; -MOV R7.w, c[9].x; -MAD R4.y, R0.z, R3.x, R4.x; -MAD R1.x, R2.z, R0.z, R1; -MAD R4.x, R0.w, fragment.texcoord[5].z, R1; -MAD R1.x, fragment.texcoord[5].z, R2.y, R4.y; -MUL R1.z, R1, R3; -MAD R0.z, R0, R3.w, R1; -MAD R4.z, fragment.texcoord[5], R4, R0; -MUL R0.z, R2.w, R1.y; -MOV R4.y, R1.x; -MAD R0.z, R2, R0.y, R0; -MUL R1.y, R1, R3; -MAD R0.y, R0, R3.x, R1; -MAD R3.x, R0.w, fragment.texcoord[5].y, R0.z; -MAD R3.y, fragment.texcoord[5], R2, R0; -DP4 R1.z, R5, R4; -MOV R3.w, R2.x; -MOV R3.z, R1.x; -MOV R6.y, R2.x; -MOV R6.z, R4.w; -MAD R2.x, R0.w, fragment.texcoord[5], R0; -DP4 R1.y, R5, R3; -MOV R2.y, R3.x; -MOV R2.z, R4.x; -MOV R2.w, R6.x; -DP4 R1.x, R5, R2; -DP4 R1.w, R6, R5; -DP4 R8.x, R7, R1; -DP4 R0.x, R7, R2; -DP4 R0.z, R7, R4; -DP4 R0.y, R7, R3; -DP4 R0.w, R7, R6; -DP4 R0.y, R7, R0; -DP4 R0.x, R1, R5; -MOV R0.w, c[9].x; -MUL R7.w, R0.x, R0.y; -MUL R5.w, R8.x, R8.x; -ADD R0.y, R5.w, -R7.w; +MOV R0.xyz, fragment.texcoord[4]; +MUL R0.xyz, fragment.texcoord[5], R0; +ADD R0.x, R0, R0.y; +ADD R3.w, R0.x, R0.z; +ADD R0.x, R3.w, -fragment.texcoord[5]; +ADD R0.z, R0.x, -fragment.texcoord[5].y; +RCP R0.w, fragment.texcoord[5].z; +MOV R6.w, c[11].x; +MOV R4.z, -R3.w; +MUL R0.z, R0, R0.w; +MOV R0.xy, c[11].x; +ADD R0.xyz, R0, -fragment.texcoord[4]; +DP3 R0.w, R0, R0; +RSQ R0.w, R0.w; +MUL R2.xyz, R0.w, R0; +MUL R0.xyz, R2.zxyw, fragment.texcoord[5].yzxw; +MAD R0.xyz, R2.yzxw, fragment.texcoord[5].zxyw, -R0; +DP3 R0.w, R0, R0; +RSQ R0.w, R0.w; +MUL R0.xyz, R0.w, R0; +MUL R3.xyz, fragment.texcoord[4], -R0; +ADD R0.w, R3.x, R3.y; +ADD R1.w, R0, R3.z; +MUL R1.xyz, -R2, fragment.texcoord[4]; +RCP R3.x, fragment.texcoord[1].x; +ADD R0.w, R1.x, R1.y; +ADD R4.x, R0.w, R1.z; +ADD R0.w, -fragment.texcoord[1].x, c[11].x; +RCP R0.w, R0.w; +MOV R3.z, -R0.w; +MOV R2.w, R4.x; +MOV R4.y, R1.w; +MUL R3.y, R3.x, c[8].x; +MUL R1.xyz, R3, R4; +MUL R1.xyz, R1, R4; +ADD R0.w, R1.x, R1.y; +ADD R0.w, R0, R1.z; +ADD R5.w, -fragment.texcoord[4], R0; +MOV R0.w, R1; +MOV R1.y, R0.x; +MOV R1.x, R2; +MOV R1.z, fragment.texcoord[5].x; +MUL R5.xyz, R3, R1; +MUL R1, R5.y, R0; +MAD R4, R5.x, R2, R1; +MOV R1.w, -R3; +MOV R1.xyz, fragment.texcoord[5]; +MAD R7, R5.z, R1, R4; +MOV R4.w, c[11].y; +MOV R5.x, R7.w; +MOV R6.y, R0.z; +MOV R6.x, R2.z; +MOV R4.y, R0; +MOV R4.x, R2.y; +MOV R4.z, fragment.texcoord[5].y; +MUL R4.xyz, R3, R4; +MOV R6.z, fragment.texcoord[5]; +MUL R3.xyz, R3, R6; +MUL R8.xyz, R0.yzww, R4.y; +MAD R6.xyz, R2.yzww, R4.x, R8; +MUL R2.xy, R0.zwzw, R3.y; +MAD R0.xyz, R1.yzww, R4.z, R6; +MAD R1.xy, R2.zwzw, R3.x, R2; +MAD R1.xy, R1.zwzw, R3.z, R1; +RCP R0.w, fragment.texcoord[2].w; +MUL R6.xyz, fragment.texcoord[2], R0.w; +MOV R2.yzw, R0.xxyz; +RCP R0.w, fragment.texcoord[3].w; +MAD R4.xyz, fragment.texcoord[3], R0.w, -R6; +MOV R3.zw, R1.xyxy; +MOV R5.y, R0.z; +MOV R5.z, R1.y; +MOV R2.x, R7.y; +MOV R3.y, R0; +MOV R3.x, R7.z; +DP4 R1.y, R4, R2; +DP4 R1.w, R5, R4; +DP4 R1.z, R4, R3; +DP4 R1.x, R7, R4; +DP4 R8.x, R6, R1; +DP4 R0.y, R6, R2; +DP4 R0.w, R6, R5; +DP4 R0.z, R6, R3; +DP4 R0.x, R6, R7; +DP4 R0.y, R6, R0; +DP4 R0.x, R1, R4; +MOV R0.w, c[11].x; +MUL R6.w, R0.x, R0.y; +MUL R4.w, R8.x, R8.x; +ADD R0.y, R4.w, -R6.w; RSQ R0.y, R0.y; RCP R0.z, R0.x; RCP R0.y, R0.y; ADD R0.x, -R8, -R0.y; MUL R0.x, R0, R0.z; -MAD R0.xyz, R0.x, R5, R7; -DP4 R1.y, R0, R3; -DP4 R1.x, R0, R2; -DP4 R1.z, R0, R4; -DP4 R1.w, R0, R6; +MAD R0.xyz, R0.x, R4, R6; +DP4 R1.y, R0, R2; +DP4 R1.w, R0, R5; +DP4 R1.z, R0, R3; +DP4 R1.x, R0, R7; DP4 R2.z, R1, c[6]; DP4 R2.x, R1, c[4]; DP4 R2.y, R1, c[5]; DP3 R1.x, R2, R2; RSQ R1.x, R1.x; -MUL R4.xyz, R1.x, R2; -MAX R1.y, R4.z, c[9]; -MOV R3.xyz, fragment.texcoord[7]; -ADD R1.x, R0.y, -fragment.texcoord[7].y; -POW R3.w, R1.y, c[9].w; -MUL R1.y, fragment.texcoord[5], R1.x; -ADD R1.x, R0, -fragment.texcoord[7]; -MAD R2.x, fragment.texcoord[5], R1, R1.y; -ADD R1.xyz, fragment.texcoord[6], -R3; -DP3 R2.w, R1, R1; -ADD R1.w, R0.z, -fragment.texcoord[7].z; -MAD R1.w, fragment.texcoord[5].z, R1, R2.x; +MUL R5.xyz, R1.x, R2; +ADD R2.xyz, R0, -fragment.texcoord[7]; +MUL R4.xyz, fragment.texcoord[5], R2; +MAD R1.xy, R5, c[11].w, c[11].w; +ADD R4.x, R4, R4.y; +TEX R3, R1, texture[0], 2D; +TEX R1, R1, texture[1], 2D; +MOV R2.xyz, fragment.texcoord[7]; +ADD R2.xyz, fragment.texcoord[6], -R2; +DP3 R5.x, R2, R2; +MOV R2, fragment.texcoord[3]; +ADD R2, fragment.texcoord[2], -R2; +DP4 R2.w, R2, R2; RSQ R2.w, R2.w; -MUL R1.w, R2, R1; -MOV R1.z, fragment.texcoord[7].w; -MOV R1.x, fragment.texcoord[5].w; -MOV R1.y, fragment.texcoord[6].w; -ADD R2.xyz, fragment.texcoord[0], -R1; -MAD R1.xyz, R1.w, R2, R1; -MAD R2.xyz, R4.z, R1, R3.w; -MAD R4.xy, R4, c[9].z, c[9].z; -TEX R1, R4, texture[0], 2D; +ADD R3, R3, -R1; +MOV R2.x, fragment.texcoord[5].w; +MOV R2.z, fragment.texcoord[7].w; +MOV R2.y, fragment.texcoord[6].w; +RCP R2.w, R2.w; +ADD R4.y, R4.x, R4.z; +RSQ R5.x, R5.x; +MUL R4.y, R5.x, R4; +MAD R1, R4.y, R3, R1; +ADD R3.xyz, fragment.texcoord[0], -R2; +MAD R2.xyz, R4.y, R3, R2; +MAD R3.x, R2.w, c[12].y, c[12].z; +MOV R3.w, c[11].x; +MUL R2.xyz, R5.z, R2; MOV R2.w, fragment.texcoord[0]; MUL R1, R2, R1; -MUL R2.x, R0.y, -fragment.texcoord[5].y; -MUL result.color, R1, c[10].x; -MAD R1.x, R0, -fragment.texcoord[5], R2; -MAD R1.y, R0.x, fragment.texcoord[5].x, -R2.x; -MAD R2.x, R0.z, fragment.texcoord[5].z, R1.y; -MAD R1.w, R0.z, -fragment.texcoord[5].z, R1.x; -MOV R1.xyz, fragment.texcoord[6]; -MAD R1.x, fragment.texcoord[5], R1, R1.w; -MAD R1.x, fragment.texcoord[5].y, R1.y, R1; -MUL R1.z, -fragment.texcoord[5], R1; -SLT R1.x, R1, R1.z; -MAD R1.y, -fragment.texcoord[5].x, R3.x, R2.x; -ABS R1.x, R1; -MUL R1.z, fragment.texcoord[5], R3; -MAD R1.y, -fragment.texcoord[5], R3, R1; -SLT R1.y, R1, R1.z; +RCP R2.x, R3.x; +ADD R3.xyz, R0, -fragment.texcoord[6]; +MUL R3.xyz, -fragment.texcoord[5], R3; +MUL R1, R1, c[10].x; +MUL R1, R1, c[12].x; +MIN R2.x, R2, c[11]; +MUL R2, R1, R2.x; +ADD R3.y, R3.x, R3; +ADD R3.w, -R3, c[9].x; +ABS R3.x, R3.w; +CMP result.color, -R3.x, R1, R2; +SLT R1.x, R3.y, -R3.z; +SLT R1.y, R4.x, -R4.z; ABS R1.y, R1; -CMP R1.z, -R1.y, c[9].y, c[9].x; -CMP R1.x, -R1, c[9].y, c[9]; -CMP R1.y, -R1.x, c[9], c[9].x; +CMP R1.z, -R1.y, c[11].y, c[11].x; +ABS R1.x, R1; +CMP R1.x, -R1, c[11].y, c[11]; +CMP R1.y, -R1.x, c[11], c[11].x; DP4 R1.x, R0, c[3]; DP4 R0.x, R0, c[2]; -CMP R1.z, -R1, c[9].y, c[9].x; +CMP R1.z, -R1, c[11].y, c[11].x; ADD_SAT R1.y, R1, R1.z; +MUL R1.x, R1, c[11].z; RCP R1.x, R1.x; -MAD R0.x, R0, R1, c[9]; -MUL result.depth.z, R0.x, c[9]; -SLT R0.y, R5.w, R7.w; -SLT R0.x, fragment.texcoord[1], c[9].y; +MAD result.depth.z, R0.x, R1.x, c[11].w; // hack for D3D: depth may need to be unmasked +SLT R0.y, R4.w, R6.w; +SLT R0.x, fragment.texcoord[1], c[11].y; KIL -R1.y; KIL -R0.y; KIL -R0.x; END -# 173 instructions, 9 R-regs +# 165 instructions, 9 R-regs " } @@ -1092,12 +1254,16 @@ Keywords { } Matrix 0 [glstate_matrix_mvp] Matrix 4 [glstate_matrix_invtrans_modelview0] Float 8 [_EllipseFactor] +Float 9 [_Attenuation] +Float 10 [_Brightness] SetTexture 0 [_MatCap] 2D +SetTexture 1 [_MatCap2] 2D "ps_3_0 -; 175 ALU, 4 TEX +; 157 ALU, 5 TEX dcl_2d s0 -def c9, 1.00000000, 0.00000000, 200.00000000, 0.50000000 -def c10, 1.50000000, 0, 0, 0 +dcl_2d s1 +def c11, 1.00000000, 0.00000000, -1.00000000, 0.50000000 +def c12, 1.25000000, 0.00010000, 0.00001000, 2.00000000 dcl_texcoord2 v0 dcl_texcoord3 v1 dcl_texcoord4 v2 @@ -1106,193 +1272,366 @@ dcl_texcoord6 v4 dcl_texcoord7 v5 dcl_texcoord0 v6 dcl_texcoord1 v7.x +mov r0.xyz, v2 +mul r0.xyz, v3, r0 +add r0.x, r0, r0.y +add r3.w, r0.x, r0.z +add r0.x, r3.w, -v3 +add r0.z, r0.x, -v3.y +rcp r0.w, v3.z +mov r5.z, -r3.w +mul r0.z, r0, r0.w +mov r0.xy, c11.x +add r0.xyz, r0, -v2 +dp3 r0.w, r0, r0 +rsq r0.w, r0.w +mul r2.xyz, r0.w, r0 +mul r0.xyz, r2.zxyw, v3.yzxw +mad r0.xyz, r2.yzxw, v3.zxyw, -r0 +dp3 r0.w, r0, r0 +rsq r0.w, r0.w +mul r1.xyz, r0.w, r0 +mul r3.xyz, v2, -r1 +add r0.w, r3.x, r3.y +add r0.w, r0, r3.z +mul r0.xyz, -r2, v2 rcp r3.x, v7.x -mov r0.x, v2.y -mul r0.w, v3.y, r0.x -mov r0.x, v2 -mad r0.y, v3.x, r0.x, r0.w -mov r0.x, v2.z -mad r0.z, v3, r0.x, r0.y -add r0.z, -v3.x, r0 -mov r6.w, c9.x +add r0.x, r0, r0.y +add r5.x, r0, r0.z +add r0.x, -v7, c11 +rcp r0.x, r0.x +mov r3.z, -r0.x +mov r1.w, r0 +mov r2.w, r5.x +mov r5.y, r0.w mul r3.y, r3.x, c8.x -rcp r1.x, v3.z -add r0.z, -v3.y, r0 -mul r0.z, r0, r1.x -mov r0.xy, c9.x -add r0.xyz, -v2, r0 -dp3 r1.x, r0, r0 -rsq r1.x, r1.x -mul r0.xyz, r1.x, r0 -mul r1.xyz, v3.yzxw, r0.zxyw -mad r1.xyz, v3.zxyw, r0.yzxw, -r1 -dp3 r1.w, r1, r1 -rsq r1.w, r1.w -mul r1.xyz, r1.w, r1 -mul r2.z, r3.y, r1.y -mul r1.w, v2.y, r1.y -mad r1.w, v2.x, -r1.x, -r1 -mad r3.z, v2, -r1, r1.w -mul r4.x, r3.y, r1 -mul r2.x, r3.y, r3.z -mul r3.y, r3, r1.z -mul r1.w, v2.y, r0.y -mad r1.w, v2.x, -r0.x, -r1 -mad r3.w, v2.z, -r0.z, r1 -mul r2.y, r3.z, r2.x -mul r2.x, r3, r3.w -mul r4.y, r3.x, r0 -mul r7.x, r1.z, r2.z -mad r2.y, r3.w, r2.x, r2 -mov r1.w, v2.x -mad r2.x, -v3, r1.w, -r0.w -add r1.w, -v7.x, c9.x -mov r0.w, v2.z -mad r0.w, -v3.z, r0, r2.x -rcp r4.z, r1.w -mul r1.w, -r4.z, r0 -mad r1.w, r0, r1, r2.y -add r5.w, -v2, r1 -mul r2.x, r3, r0 -mul r1.w, r4.x, r3.z -mad r2.y, r2.x, r3.w, r1.w -mul r1.w, -r4.z, v3.x -mad r5.x, r1.w, r0.w, r2.y -mul r2.y, r3.z, r2.z -mad r2.w, r3, r4.y, r2.y -mul r2.y, -r4.z, v3 -mad r2.w, r0, r2.y, r2 -mul r4.w, r3.z, r3.y -mul r3.z, r3.x, r0 -mad r3.x, r3.w, r3.z, r4.w -mul r4.w, -r4.z, v3.z -mad r3.w, r0, r4, r3.x -mul r4.z, r1.y, r2 -mul r3.x, r4, r1.z -mad r2.z, r2.x, r0, r3.x -mad r7.x, r0.z, r4.y, r7 -mad r3.x, r1.w, v3.z, r2.z -mul r1.z, r1, r3.y -mad r0.z, r0, r3, r1 -mad r2.z, v3, r2.y, r7.x -mad r3.z, v3, r4.w, r0 -mad r4.y, r0, r4, r4.z -mul r1.y, r4.x, r1 -mul r1.x, r4, r1 -mad r0.x, r2, r0, r1 -mad r0.y, r2.x, r0, r1 -mad r2.x, r1.w, v3.y, r0.y -mad r1.x, r1.w, v3, r0 -rcp r0.w, v0.w -mul r6.xyz, v0, r0.w -mad r2.y, v3, r2, r4 -mov r3.y, r2.z -mov r1.y, r2.x -mov r1.z, r3.x -mov r1.w, r5.x -dp4 r0.x, r6, r1 -dp4 r0.y, r6, r2 -mov r4.w, c9.y -mov r5.y, r2.w -mov r5.z, r3.w -dp4 r0.z, r6, r3 -dp4 r0.w, r6, r5 -dp4 r7.x, r6, r0 -rcp r0.x, v1.w -mad r4.xyz, v1, r0.x, -r6 -dp4 r0.x, r4, r1 -dp4 r0.y, r4, r2 -dp4 r0.z, r4, r3 +mul r0.xyz, r3, r5 +mul r0.xyz, r0, r5 +add r0.x, r0, r0.y +add r0.x, r0, r0.z +add r4.w, -v2, r0.x +mov r0.y, r1.x +mov r0.x, r2 +mov r0.z, v3.x +mul r4.xyz, r3, r0 +mul r0, r4.y, r1 +mad r5, r4.x, r2, r0 +mov r0.w, -r3 +mov r0.xyz, v3 +mad r6, r4.z, r0, r5 +mov r5.w, c11.x +mov r3.w, c11.y +mov r4.y, r1 +mov r4.x, r2.y +mov r4.z, v3.y +mul r5.xyz, r3, r4 +mov r4.x, r6.w +mul r8.xyz, r1.yzww, r5.y +mov r7.y, r1.z +mov r7.x, r2.z +mov r7.z, v3 +mul r3.xyz, r3, r7 +mad r7.xyz, r2.yzww, r5.x, r8 +mul r2.xy, r1.zwzw, r3.y +mad r1.xyz, r0.yzww, r5.z, r7 +mad r0.xy, r2.zwzw, r3.x, r2 +mad r0.xy, r0.zwzw, r3.z, r0 +rcp r0.z, v0.w +mul r5.xyz, v0, r0.z +mov r2.zw, r0.xyxy +mov r4.y, r1.z +mov r4.z, r0.y +mov r2.y, r1 +mov r1.yzw, r1.xxyz +mov r2.x, r6.z +mov r1.x, r6.y +dp4 r0.y, r5, r1 +dp4 r0.z, r5, r2 dp4 r0.w, r5, r4 -dp4 r4.w, r0, r4 -dp4 r0.x, r6, r0 -mul r7.x, r4.w, r7 -mad r6.w, r0.x, r0.x, -r7.x -rsq r0.y, r6.w +dp4 r0.x, r5, r6 +dp4 r7.x, r5, r0 +rcp r0.x, v1.w +mad r3.xyz, v1, r0.x, -r5 +dp4 r0.y, r3, r1 +dp4 r0.z, r3, r2 +dp4 r0.w, r4, r3 +dp4 r0.x, r6, r3 +dp4 r3.w, r0, r3 +dp4 r0.x, r5, r0 +mul r7.x, r3.w, r7 +mad r5.w, r0.x, r0.x, -r7.x +rsq r0.y, r5.w rcp r0.y, r0.y -mov r0.w, c9.x -rcp r0.z, r4.w +mov r0.w, c11.x +rcp r0.z, r3.w add r0.x, -r0, -r0.y mul r0.x, r0, r0.z -mad r0.xyz, r4, r0.x, r6 -dp4 r4.x, r1, r0 -dp4 r4.y, r2, r0 -dp4 r4.z, r3, r0 -dp4 r4.w, r5, r0 -dp4 r1.z, r4, c6 -dp4 r1.x, r4, c4 -dp4 r1.y, r4, c5 +mad r0.xyz, r3, r0.x, r5 +dp4 r3.z, r2, r0 +dp4 r3.y, r1, r0 +dp4 r3.w, r4, r0 +dp4 r3.x, r6, r0 +add r2.xyz, r0, -v5 +mul r4.xyz, v3, r2 +add r2.w, r4.x, r4.y +mov r2.xyz, v5 +add r2.xyz, v4, -r2 +dp3 r4.y, r2, r2 +add r4.x, r2.w, r4.z +mov r2, v1 +add r2, v0, -r2 +dp4 r2.w, r2, r2 +rsq r4.y, r4.y +rsq r2.w, r2.w +dp4 r1.z, r3, c6 +dp4 r1.x, r3, c4 +dp4 r1.y, r3, c5 dp3 r1.w, r1, r1 rsq r1.w, r1.w -mul r2.xyz, r1.w, r1 -max r2.w, r2.z, c9.y -pow r1, r2.w, c9.z -mad_pp r3.xy, r2, c9.w, c9.w -mov r1.w, r1.x -add r1.y, r0, -v5 -add r1.x, r0, -v5 -mul r1.y, v3, r1 -mad r2.y, v3.x, r1.x, r1 -add r2.x, r0.z, -v5.z -mov r1.xyz, v5 -add r1.xyz, v4, -r1 -mad r2.y, v3.z, r2.x, r2 -dp3 r2.x, r1, r1 -rsq r2.x, r2.x -mov r1.z, v5.w -mov r1.x, v3.w -mov r1.y, v4.w -mul r2.x, r2, r2.y -add r4.xyz, v6, -r1 -mad r1.xyz, r2.x, r4, r1 -mad r2.xyz, r2.z, r1, r1.w -texld r1, r3, s0 +mul r5.xyz, r1.w, r1 +mad_pp r1.xy, r5, c11.w, c11.w +texld r3, r1, s0 +texld r1, r1, s1 +add r3, r3, -r1 +mul r4.y, r4, r4.x +mad r1, r4.y, r3, r1 +mov r3.w, c9.x +mov r2.x, v3.w +mov r2.z, v5.w +mov r2.y, v4.w +add r3.xyz, v6, -r2 +mad r2.xyz, r4.y, r3, r2 +rcp r2.w, r2.w +mad r3.x, r2.w, c12.y, c12.z +mul r2.xyz, r5.z, r2 mov r2.w, v6 -mul r2, r2, r1 -mul r1.x, -v3.y, r0.y -mad r1.y, v3.x, r0.x, -r1.x -mad r1.z, v3, r0, r1.y -mov r1.y, v5.x -mad r1.z, -v3.x, r1.y, r1 -mov r1.y, v5 -mad r1.z, -v3.y, r1.y, r1 -mov r1.y, v5.z -mul oC0, r2, c10.x +mul r1, r2, r1 +rcp r2.x, r3.x +add r3.xyz, r0, -v4 +mul r3.xyz, -v3, r3 +mul r1, r1, c10.x +mul r1, r1, c12.x +min r2.x, r2, c11 +mul r2, r1, r2.x +add r3.x, r3, r3.y +add r3.w, c11.z, r3 +abs r3.y, r3.w +cmp oC0, -r3.y, r2, r1 dp4 r2.x, r0, c3 -mad r1.x, -v3, r0, r1 -mad r1.z, -v3, r1.y, r1 -mad r1.y, -v3.z, r0.z, r1.x -mov r1.x, v4 -mad r1.y, v3.x, r1.x, r1 -mov r1.x, v4.y -mad r1.y, v3, r1.x, r1 -mov r1.x, v4.z -mad r1.x, v3.z, r1, r1.y +add r1.x, r3, r3.z dp4 r0.x, r0, c2 -rcp r2.x, r2.x -mad r0.x, r0, r2, c9 -mul oDepth, r0.x, c9.w //Hack for Direct3D. Original line : mul oDepth.z, r0.x, c9.w -cmp r0.x, r6.w, c9.y, c9 -mov_pp r0, -r0.x -cmp_pp r1.y, r1.z, c9, c9.x -cmp_pp r1.x, r1, c9.y, c9 +cmp_pp r1.y, r4.x, c11, c11.x +cmp_pp r1.x, r1, c11.y, c11 add_pp_sat r1.x, r1, r1.y mov_pp r1, -r1.x texkill r1.xyzw -cmp r1.x, v7, c9.y, c9 +mul r2.x, r2, c12.w +rcp r1.x, r2.x +mad oDepth, r0.x, r1.x, c11.w +cmp r0.x, r5.w, c11.y, c11 +cmp r1.x, v7, c11.y, c11 +mov_pp r0, -r0.x mov_pp r1, -r1.x texkill r0.xyzw texkill r1.xyzw " } +SubProgram "d3d11 " { +Keywords { } +ConstBuffer "$Globals" 144 // 132 used size, 13 vars +Float 120 [_EllipseFactor] +Float 124 [_Attenuation] +Float 128 [_Brightness] +ConstBuffer "UnityPerDraw" 336 // 192 used size, 6 vars +Matrix 0 [glstate_matrix_mvp] 4 +Matrix 128 [glstate_matrix_invtrans_modelview0] 4 +BindCB "$Globals" 0 +BindCB "UnityPerDraw" 1 +SetTexture 0 [_MatCap] 2D 0 +SetTexture 1 [_MatCap2] 2D 1 +// 168 instructions, 11 temp regs, 0 temp arrays: +// ALU 90 float, 0 int, 1 uint +// TEX 2 (0 load, 0 comp, 0 bias, 0 grad) +// FLOW 1 static, 0 dynamic +"ps_4_0 +eefiecedbcbmkgmicnmcomgbomlgpdoigaglmcncabaaaaaaoibeaaaaadaaaaaa +cmaaaaaafmabaaaalaabaaaaejfdeheociabaaaaalaaaaaaaiaaaaaabaabaaaa +aaaaaaaaabaaaaaaadaaaaaaaaaaaaaaapaaaaaabmabaaaaacaaaaaaaaaaaaaa +adaaaaaaabaaaaaaapapaaaabmabaaaaadaaaaaaaaaaaaaaadaaaaaaacaaaaaa +apapaaaabmabaaaaaeaaaaaaaaaaaaaaadaaaaaaadaaaaaaapapaaaabmabaaaa +afaaaaaaaaaaaaaaadaaaaaaaeaaaaaaapapaaaabmabaaaaagaaaaaaaaaaaaaa +adaaaaaaafaaaaaaadadaaaabmabaaaaabaaaaaaaaaaaaaaadaaaaaaafaaaaaa +aeaeaaaabmabaaaaahaaaaaaaaaaaaaaadaaaaaaagaaaaaaadadaaaabmabaaaa +aiaaaaaaaaaaaaaaadaaaaaaahaaaaaaadadaaaabmabaaaaajaaaaaaaaaaaaaa +adaaaaaaaiaaaaaaadadaaaabmabaaaaaaaaaaaaaaaaaaaaadaaaaaaajaaaaaa +apapaaaafdfgfpfagphdgjhegjgpgoaafeeffiedepepfceeaaklklklepfdeheo +emaaaaaaacaaaaaaaiaaaaaadiaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaa +apaaaaaaecaaaaaaaaaaaaaaaaaaaaaaadaaaaaappppppppabaoaaaafdfgfpfe +gbhcghgfheaafdfgfpeegfhahegiaaklfdeieefcdabdaaaaeaaaaaaammaeaaaa +fjaaaaaeegiocaaaaaaaaaaaajaaaaaafjaaaaaeegiocaaaabaaaaaaamaaaaaa +fkaaaaadaagabaaaaaaaaaaafkaaaaadaagabaaaabaaaaaafibiaaaeaahabaaa +aaaaaaaaffffaaaafibiaaaeaahabaaaabaaaaaaffffaaaagcbaaaadpcbabaaa +abaaaaaagcbaaaadpcbabaaaacaaaaaagcbaaaadpcbabaaaadaaaaaagcbaaaad +pcbabaaaaeaaaaaagcbaaaaddcbabaaaafaaaaaagcbaaaadecbabaaaafaaaaaa +gcbaaaaddcbabaaaagaaaaaagcbaaaaddcbabaaaahaaaaaagcbaaaaddcbabaaa +aiaaaaaagcbaaaadpcbabaaaajaaaaaagfaaaaadpccabaaaaaaaaaaagfaaaaac +abmaaaaagiaaaaacalaaaaaadgaaaaafbcaabaaaaaaaaaaadkbabaaaabaaaaaa +dgaaaaafccaabaaaaaaaaaaadkbabaaaacaaaaaadgaaaaafecaabaaaaaaaaaaa +dkbabaaaadaaaaaadgaaaaafbcaabaaaabaaaaaackbabaaaabaaaaaadgaaaaaf +ecaabaaaabaaaaaackbabaaaacaaaaaadgaaaaaficaabaaaabaaaaaackbabaaa +adaaaaaadiaaaaahdcaabaaaacaaaaaaegaabaaaaaaaaaaaigaabaaaabaaaaaa +aaaaaaahbcaabaaaacaaaaaabkaabaaaacaaaaaaakaabaaaacaaaaaadcaaaaaj +bcaabaaaacaaaaaackaabaaaaaaaaaaadkaabaaaabaaaaaaakaabaaaacaaaaaa +dgaaaaafdcaabaaaabaaaaaalgbpbaaaabaaaaaaaaaaaaaibcaabaaaabaaaaaa +akaabaiaebaaaaaaabaaaaaaakaabaaaacaaaaaaaaaaaaaibcaabaaaabaaaaaa +akaabaaaabaaaaaadkbabaiaebaaaaaaacaaaaaaaoaaaaahecaabaaaacaaaaaa +akaabaaaabaaaaaadkbabaaaadaaaaaadgaaaaaidcaabaaaacaaaaaaaceaaaaa +aaaaiadpaaaaiadpaaaaaaaaaaaaaaaaaaaaaaaihcaabaaaacaaaaaajgahbaia +ebaaaaaaabaaaaaaegacbaaaacaaaaaabaaaaaahbcaabaaaabaaaaaaegacbaaa +acaaaaaaegacbaaaacaaaaaaeeaaaaafbcaabaaaabaaaaaaakaabaaaabaaaaaa +diaaaaahhcaabaaaacaaaaaaagaabaaaabaaaaaaegacbaaaacaaaaaadiaaaaah +hcaabaaaadaaaaaajgaebaaaaaaaaaaacgajbaaaacaaaaaadcaaaaakhcaabaaa +adaaaaaajgaebaaaacaaaaaacgajbaaaaaaaaaaaegacbaiaebaaaaaaadaaaaaa +baaaaaahbcaabaaaabaaaaaaegacbaaaadaaaaaaegacbaaaadaaaaaaeeaaaaaf +bcaabaaaabaaaaaaakaabaaaabaaaaaadiaaaaahhcaabaaaadaaaaaaagaabaaa +abaaaaaaegacbaaaadaaaaaaaaaaaaaibcaabaaaabaaaaaackbabaiaebaaaaaa +afaaaaaaabeaaaaaaaaaiadpaoaaaaahecaabaaaaeaaaaaaabeaaaaaaaaaialp +akaabaaaabaaaaaaaoaaaaakbcaabaaaaeaaaaaaaceaaaaaaaaaiadpaaaaiadp +aaaaiadpaaaaiadpckbabaaaafaaaaaadiaaaaaiccaabaaaaeaaaaaaakaabaaa +aeaaaaaackiacaaaaaaaaaaaahaaaaaadiaaaaaidcaabaaaafaaaaaajgafbaaa +abaaaaaaegaabaiaebaaaaaaacaaaaaaaaaaaaahbcaabaaaabaaaaaabkaabaaa +afaaaaaaakaabaaaafaaaaaadcaaaaakbcaabaaaafaaaaaackaabaiaebaaaaaa +acaaaaaadkaabaaaabaaaaaaakaabaaaabaaaaaadiaaaaaidcaabaaaagaaaaaa +jgafbaaaabaaaaaaegaabaiaebaaaaaaadaaaaaaaaaaaaahbcaabaaaabaaaaaa +bkaabaaaagaaaaaaakaabaaaagaaaaaadcaaaaakccaabaaaafaaaaaackaabaia +ebaaaaaaadaaaaaadkaabaaaabaaaaaaakaabaaaabaaaaaadiaaaaaidcaabaaa +abaaaaaaegaabaiaebaaaaaaaaaaaaaajgafbaaaabaaaaaaaaaaaaahbcaabaaa +abaaaaaabkaabaaaabaaaaaaakaabaaaabaaaaaadcaaaaakecaabaaaafaaaaaa +ckaabaiaebaaaaaaaaaaaaaadkaabaaaabaaaaaaakaabaaaabaaaaaadgaaaaaf +bcaabaaaabaaaaaaakaabaaaacaaaaaadgaaaaafccaabaaaabaaaaaaakaabaaa +adaaaaaadgaaaaafecaabaaaabaaaaaadkbabaaaabaaaaaadiaaaaahhcaabaaa +abaaaaaaegacbaaaabaaaaaaegacbaaaaeaaaaaadgaaaaafbcaabaaaagaaaaaa +bkaabaaaacaaaaaadgaaaaafccaabaaaagaaaaaabkaabaaaadaaaaaadgaaaaaf +ecaabaaaagaaaaaadkbabaaaacaaaaaadiaaaaahhcaabaaaagaaaaaaegacbaaa +aeaaaaaaegacbaaaagaaaaaadgaaaaafbcaabaaaahaaaaaackaabaaaacaaaaaa +dgaaaaafccaabaaaahaaaaaackaabaaaadaaaaaadgaaaaafecaabaaaahaaaaaa +dkbabaaaadaaaaaadiaaaaahhcaabaaaahaaaaaaegacbaaaaeaaaaaaegacbaaa +ahaaaaaadiaaaaahhcaabaaaaiaaaaaaegacbaaaafaaaaaaegacbaaaafaaaaaa +diaaaaahdcaabaaaaeaaaaaaegaabaaaaeaaaaaaegaabaaaaiaaaaaadgaaaaaf +icaabaaaacaaaaaaakaabaaaafaaaaaadgaaaaaficaabaaaadaaaaaabkaabaaa +afaaaaaadiaaaaahpcaabaaaajaaaaaafgafbaaaabaaaaaaegaobaaaadaaaaaa +dcaaaaajpcaabaaaajaaaaaaagaabaaaabaaaaaaegaobaaaacaaaaaaegaobaaa +ajaaaaaadgaaaaaficaabaaaaaaaaaaackaabaaaafaaaaaadcaaaaajpcaabaaa +abaaaaaakgakbaaaabaaaaaaegaobaaaaaaaaaaaegaobaaaajaaaaaadiaaaaah +hcaabaaaafaaaaaajgahbaaaadaaaaaafgafbaaaagaaaaaadcaaaaajhcaabaaa +afaaaaaaagaabaaaagaaaaaajgahbaaaacaaaaaaegacbaaaafaaaaaadcaaaaaj +ocaabaaaafaaaaaakgakbaaaagaaaaaafgaobaaaaaaaaaaaagajbaaaafaaaaaa +diaaaaahdcaabaaaacaaaaaaogakbaaaadaaaaaafgafbaaaahaaaaaadcaaaaaj +dcaabaaaacaaaaaaagaabaaaahaaaaaaogakbaaaacaaaaaaegaabaaaacaaaaaa +dcaaaaajmcaabaaaacaaaaaakgakbaaaahaaaaaakgaobaaaaaaaaaaaagaebaaa +acaaaaaaaaaaaaahicaabaaaaaaaaaaabkaabaaaaeaaaaaaakaabaaaaeaaaaaa +dcaaaaajicaabaaaaaaaaaaackaabaaaaiaaaaaackaabaaaaeaaaaaadkaabaaa +aaaaaaaaaaaaaaaiicaabaaaadaaaaaadkaabaaaaaaaaaaackbabaiaebaaaaaa +aeaaaaaadgaaaaafbcaabaaaaeaaaaaaakbabaaaabaaaaaadgaaaaafccaabaaa +aeaaaaaaakbabaaaacaaaaaadgaaaaafecaabaaaaeaaaaaaakbabaaaadaaaaaa +aoaaaaahhcaabaaaagaaaaaaegacbaaaaeaaaaaaagbabaaaaeaaaaaadgaaaaaf +bcaabaaaahaaaaaabkbabaaaabaaaaaadgaaaaafccaabaaaahaaaaaabkbabaaa +acaaaaaadgaaaaafecaabaaaahaaaaaabkbabaaaadaaaaaaaoaaaaahhcaabaaa +aiaaaaaaegacbaaaahaaaaaafgbfbaaaaeaaaaaaaaaaaaaihcaabaaaaiaaaaaa +egacbaiaebaaaaaaagaaaaaaegacbaaaaiaaaaaabaaaaaahbcaabaaaajaaaaaa +egacbaaaabaaaaaaegacbaaaaiaaaaaadgaaaaafbcaabaaaafaaaaaabkaabaaa +abaaaaaabaaaaaahccaabaaaajaaaaaaegacbaaaafaaaaaaegacbaaaaiaaaaaa +dgaaaaafbcaabaaaacaaaaaackaabaaaabaaaaaadgaaaaafccaabaaaacaaaaaa +ckaabaaaafaaaaaabaaaaaahecaabaaaajaaaaaaegacbaaaacaaaaaaegacbaaa +aiaaaaaadgaaaaafbcaabaaaadaaaaaadkaabaaaabaaaaaadgaaaaafccaabaaa +adaaaaaadkaabaaaafaaaaaadgaaaaafecaabaaaadaaaaaadkaabaaaacaaaaaa +baaaaaahicaabaaaajaaaaaaegacbaaaadaaaaaaegacbaaaaiaaaaaabaaaaaah +icaabaaaaaaaaaaaegacbaaaaiaaaaaaegacbaaaajaaaaaadgaaaaaficaabaaa +agaaaaaaabeaaaaaaaaaiadpbbaaaaahicaabaaaaiaaaaaaegaobaaaagaaaaaa +egaobaaaajaaaaaabbaaaaahbcaabaaaajaaaaaaegaobaaaabaaaaaaegaobaaa +agaaaaaabbaaaaahccaabaaaajaaaaaaegaobaaaafaaaaaaegaobaaaagaaaaaa +bbaaaaahecaabaaaajaaaaaaegaobaaaacaaaaaaegaobaaaagaaaaaabbaaaaah +icaabaaaajaaaaaaegaobaaaadaaaaaaegaobaaaagaaaaaabbaaaaahicaabaaa +agaaaaaaegaobaaaagaaaaaaegaobaaaajaaaaaadiaaaaahicaabaaaagaaaaaa +dkaabaaaaaaaaaaadkaabaaaagaaaaaadcaaaaakicaabaaaagaaaaaadkaabaaa +aiaaaaaadkaabaaaaiaaaaaadkaabaiaebaaaaaaagaaaaaadbaaaaahbcaabaaa +ajaaaaaadkaabaaaagaaaaaaabeaaaaaaaaaaaaaanaaaeadakaabaaaajaaaaaa +dbaaaaahbcaabaaaajaaaaaackbabaaaafaaaaaaabeaaaaaaaaaaaaaanaaaead +akaabaaaajaaaaaaelaaaaaficaabaaaagaaaaaadkaabaaaagaaaaaaaaaaaaaj +icaabaaaagaaaaaadkaabaiaebaaaaaaagaaaaaadkaabaiaebaaaaaaaiaaaaaa +aoaaaaahicaabaaaaaaaaaaadkaabaaaagaaaaaadkaabaaaaaaaaaaadcaaaaaj +hcaabaaaagaaaaaapgapbaaaaaaaaaaaegacbaaaaiaaaaaaegacbaaaagaaaaaa +dgaaaaafbcaabaaaaiaaaaaaakbabaaaafaaaaaadgaaaaafccaabaaaaiaaaaaa +akbabaaaagaaaaaadgaaaaafecaabaaaaiaaaaaaakbabaaaahaaaaaaaaaaaaai +hcaabaaaajaaaaaaegacbaaaagaaaaaaegacbaiaebaaaaaaaiaaaaaadiaaaaai +dcaabaaaajaaaaaaegaabaiaebaaaaaaaaaaaaaaegaabaaaajaaaaaaaaaaaaah +icaabaaaaaaaaaaabkaabaaaajaaaaaaakaabaaaajaaaaaadcaaaaakicaabaaa +aaaaaaaackaabaiaebaaaaaaaaaaaaaackaabaaaajaaaaaadkaabaaaaaaaaaaa +dgaaaaafbcaabaaaajaaaaaabkbabaaaafaaaaaadgaaaaafccaabaaaajaaaaaa +bkbabaaaagaaaaaadgaaaaafecaabaaaajaaaaaabkbabaaaahaaaaaaaaaaaaai +hcaabaaaakaaaaaaegacbaaaagaaaaaaegacbaiaebaaaaaaajaaaaaadiaaaaah +dcaabaaaaaaaaaaaegaabaaaaaaaaaaaegaabaaaakaaaaaaaaaaaaahbcaabaaa +aaaaaaaabkaabaaaaaaaaaaaakaabaaaaaaaaaaadcaaaaajbcaabaaaaaaaaaaa +ckaabaaaaaaaaaaackaabaaaakaaaaaaakaabaaaaaaaaaaadbaaaaakkcaabaaa +aaaaaaaaagambaaaaaaaaaaaaceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +dmaaaaahccaabaaaaaaaaaaabkaabaaaaaaaaaaadkaabaaaaaaaaaaaanaaaead +bkaabaaaaaaaaaaadiaaaaaigcaabaaaaaaaaaaafgafbaaaagaaaaaakgilcaaa +abaaaaaaabaaaaaadcaaaaakgcaabaaaaaaaaaaakgilcaaaabaaaaaaaaaaaaaa +agaabaaaagaaaaaafgagbaaaaaaaaaaadcaaaaakgcaabaaaaaaaaaaakgilcaaa +abaaaaaaacaaaaaakgakbaaaagaaaaaafgagbaaaaaaaaaaaaaaaaaaigcaabaaa +aaaaaaaafgagbaaaaaaaaaaakgilcaaaabaaaaaaadaaaaaaaaaaaaahecaabaaa +aaaaaaaackaabaaaaaaaaaaackaabaaaaaaaaaaaaoaaaaahccaabaaaaaaaaaaa +bkaabaaaaaaaaaaackaabaaaaaaaaaaaaaaaaaagabmaaaaabkaabaaaaaaaaaaa +abeaaaaaaaaaaadpdgaaaaaficaabaaaagaaaaaaabeaaaaaaaaaiadpbbaaaaah +ccaabaaaaaaaaaaaegaobaaaabaaaaaaegaobaaaagaaaaaabbaaaaahecaabaaa +aaaaaaaaegaobaaaafaaaaaaegaobaaaagaaaaaabbaaaaahicaabaaaaaaaaaaa +egaobaaaacaaaaaaegaobaaaagaaaaaabbaaaaahbcaabaaaabaaaaaaegaobaaa +adaaaaaaegaobaaaagaaaaaadiaaaaaiocaabaaaabaaaaaakgakbaaaaaaaaaaa +agijcaaaabaaaaaaajaaaaaadcaaaaakocaabaaaabaaaaaaagijcaaaabaaaaaa +aiaaaaaafgafbaaaaaaaaaaafgaobaaaabaaaaaadcaaaaakocaabaaaaaaaaaaa +agijcaaaabaaaaaaakaaaaaapgapbaaaaaaaaaaafgaobaaaabaaaaaadcaaaaak +ocaabaaaaaaaaaaaagijcaaaabaaaaaaalaaaaaaagaabaaaabaaaaaafgaobaaa +aaaaaaaabaaaaaahbcaabaaaabaaaaaajgahbaaaaaaaaaaajgahbaaaaaaaaaaa +eeaaaaafbcaabaaaabaaaaaaakaabaaaabaaaaaadiaaaaahocaabaaaaaaaaaaa +fgaobaaaaaaaaaaaagaabaaaabaaaaaaaaaaaaaihcaabaaaabaaaaaaegacbaia +ebaaaaaaaiaaaaaaegacbaaaajaaaaaabaaaaaahbcaabaaaabaaaaaaegacbaaa +abaaaaaaegacbaaaabaaaaaaelaaaaafbcaabaaaabaaaaaaakaabaaaabaaaaaa +aoaaaaahbcaabaaaaaaaaaaaakaabaaaaaaaaaaaakaabaaaabaaaaaadgaaaaaf +bcaabaaaabaaaaaadkbabaaaaeaaaaaadgaaaaafgcaabaaaabaaaaaaagbbbaaa +aiaaaaaaaaaaaaaihcaabaaaacaaaaaaegacbaiaebaaaaaaabaaaaaaegbcbaaa +ajaaaaaadcaaaaajhcaabaaaabaaaaaaagaabaaaaaaaaaaaegacbaaaacaaaaaa +egacbaaaabaaaaaadiaaaaahhcaabaaaabaaaaaapgapbaaaaaaaaaaaegacbaaa +abaaaaaadcaaaaapgcaabaaaaaaaaaaafgagbaaaaaaaaaaaaceaaaaaaaaaaaaa +aaaaaadpaaaaaadpaaaaaaaaaceaaaaaaaaaaaaaaaaaaadpaaaaaadpaaaaaaaa +efaaaaajpcaabaaaacaaaaaajgafbaaaaaaaaaaaeghobaaaaaaaaaaaaagabaaa +aaaaaaaaefaaaaajpcaabaaaadaaaaaajgafbaaaaaaaaaaaeghobaaaabaaaaaa +aagabaaaabaaaaaaaaaaaaaipcaabaaaacaaaaaaegaobaaaacaaaaaaegaobaia +ebaaaaaaadaaaaaadcaaaaajpcaabaaaaaaaaaaaagaabaaaaaaaaaaaegaobaaa +acaaaaaaegaobaaaadaaaaaadgaaaaaficaabaaaabaaaaaadkbabaaaajaaaaaa +diaaaaahpcaabaaaaaaaaaaaegaobaaaaaaaaaaaegaobaaaabaaaaaadiaaaaai +pcaabaaaaaaaaaaaegaobaaaaaaaaaaaagiacaaaaaaaaaaaaiaaaaaadiaaaaak +pcaabaaaaaaaaaaaegaobaaaaaaaaaaaaceaaaaaaaaakadpaaaakadpaaaakadp +aaaakadpbiaaaaaibcaabaaaabaaaaaadkiacaaaaaaaaaaaahaaaaaaabeaaaaa +aaaaiadpdgaaaaaficaabaaaaeaaaaaaakbabaaaaeaaaaaadgaaaaaficaabaaa +ahaaaaaabkbabaaaaeaaaaaaaaaaaaaipcaabaaaacaaaaaaegaobaiaebaaaaaa +aeaaaaaaegaobaaaahaaaaaabbaaaaahccaabaaaabaaaaaaegaobaaaacaaaaaa +egaobaaaacaaaaaaelaaaaafccaabaaaabaaaaaabkaabaaaabaaaaaadcaaaaaj +ccaabaaaabaaaaaabkaabaaaabaaaaaaabeaaaaabhlhnbdiabeaaaaakmmfchdh +aoaaaaakccaabaaaabaaaaaaaceaaaaaaaaaiadpaaaaiadpaaaaiadpaaaaiadp +bkaabaaaabaaaaaaddaaaaahccaabaaaabaaaaaabkaabaaaabaaaaaaabeaaaaa +aaaaiadpdiaaaaahpcaabaaaacaaaaaaegaobaaaaaaaaaaafgafbaaaabaaaaaa +dhaaaaajpccabaaaaaaaaaaaagaabaaaabaaaaaaegaobaaaacaaaaaaegaobaaa +aaaaaaaadoaaaaab" +} + } -#LINE 416 +#LINE 508 } } // Pour les cartes graphiques ne supportant pas nos Shaders -Fallback "VertexLit" -} \ No newline at end of file +//Fallback "VertexLit" +} diff --git a/Assets/Resources/Shader/new/SurfaceMATCAP.shader b/Assets/Resources/Shader/new/SurfaceMATCAP.shader index 155845aa..7dd5e13a 100644 --- a/Assets/Resources/Shader/new/SurfaceMATCAP.shader +++ b/Assets/Resources/Shader/new/SurfaceMATCAP.shader @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: SurfaceMATCAP.shader 210 2013-04-06 20:52:41Z baaden $ +/// $Id: SurfaceMATCAP.shader 378 2013-09-10 17:18:27Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -65,130 +65,139 @@ Shader "Mat Cap Cut" { Properties { - _Color ("Main Color", Color) = (0.5,0.5,0.5,1) //couleur général de la surface + _Color ("Main Color", Color) = (1,1,1,1) //couleur générale de la surface _ColorIN ("Color Cut" , Color) = (0.5,0.5,0.5,1) // Couleur du plan de coupe - _SpecColor ("Specular Color", Color) = (0, 0, 0, 1) // Couleur des reflet de la surface - _Shininess ("Shininess", Range (0.03, 1)) = 0.078125 // Brillance de la surface inactif ici + _SpecColor ("Specular Color", Color) = (0, 0, 0, 1) // Couleur des reflets de la surface + _Shininess ("Shininess", Range (0.03, 1)) = 0.078125 // Brillance de la surface, inactive ici _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} // Texture de la surface _BumpMap ("Bumpmap (RGB)", 2D) = "bump" {} - _texture ("activation texture",float)= 0 // activation des texture + _texture ("activation texture",float)= 0 // activation des textures _MatCap ("MatCap (RGB)", 2D) = "white" {} // texture MAtCap _depthcut("depth", float) = 0 // distance de cut de la surface _cut("Active cut", float) = 0 // active ou non le cut _cutX("axe X", float)=1 _cutY("axe Y", float)=1 // axe pour le cut fixe _cutZ("axe Z", float)=1 - _colormode("color", float) = 0 // activation du dégradé de couleur + _colormode("color", float) = 1 // activation du dégradé de couleur + _Brightness("Brightness", float) = 1.0 + _ColorWeight("Lerp weight", float) = 0.5 } + +// RenderType opaque + basic lightmode allows for SSAO, with the drawback that it's applied even on part of the surface that is cut out. SubShader { - Tags { "RenderType"="Transparent" } - /* Upgrade NOTE: commented out, possibly part of old style per-pixel lighting: Blend AppSrcAdd AppDstAdd */ + Tags { "RenderType"="Opaque" } + // Upgrade NOTE: commented out, possibly part of old style per-pixel lighting: Blend AppSrcAdd AppDstAdd Fog { Color [_AddFog] } - Pass { - Name "BASE" - Tags { "LightMode" = "Always" } - cull back - CGPROGRAM + Pass { + Name "BASE" + //Tags { "LightMode" = "Always" } + cull back + CGPROGRAM // Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members uv,TtoV0,TtoV1) -#pragma exclude_renderers d3d11 xbox360 + #pragma exclude_renderers d3d11 xbox360 // Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct v2f members uv,TtoV0,TtoV1) - #pragma exclude_renderers xbox360 - #pragma vertex vert - #pragma fragment frag - #pragma fragmentoption ARB_fog_exp2 - #pragma fragmentoption ARB_precision_hint_fastest - #include "UnityCG.cginc" + #pragma exclude_renderers xbox360 + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_fog_exp2 + #pragma fragmentoption ARB_precision_hint_fastest + #include "UnityCG.cginc" - float4 pos; - float4 worldPos; - fixed4 _ColorIn; - float _cut; - float _depthcut; - float _cutX; - float _cutY; - float _cutZ; - float3 _SurfacePos; - float _texture; - float _colormode; + float4 pos; + float4 worldPos; + fixed4 _ColorIn; + float _cut; + float _depthcut; + float _cutX; + float _cutY; + float _cutZ; + float3 _SurfacePos; + float _texture; + float _colormode; + float _Brightness; + float _ColorWeight; - struct appdata { - float4 vertex : POSITION; - float4 texcoord : TEXCOORD0; - float4 color : COLOR; - float3 normal : NORMAL; - float4 tangent : TANGENT; - }; + struct appdata { + float4 vertex : POSITION; + float4 texcoord : TEXCOORD0; + float4 color : COLOR; + float3 normal : NORMAL; + float4 tangent : TANGENT; + }; - struct v2f { - float4 pos : SV_POSITION; - float2 uv; - float3 TtoV0; - float3 TtoV1; - float4 worldPos : TEXCOORD1 ; - fixed4 color : COLOR; - - }; + struct v2f { + float4 pos : SV_POSITION; + float2 uv; + float3 TtoV0; + float3 TtoV1; + float4 worldPos : TEXCOORD1 ; + fixed4 color : COLOR; + //float3 normal : TEXCOORD0; + }; + + uniform float4 _BumpMap_ST; - - - uniform float4 _BumpMap_ST; - - v2f vert (appdata v) - { - v2f o; - o.pos = mul (UNITY_MATRIX_MVP, v.vertex); - o.uv = TRANSFORM_TEX(v.texcoord,_BumpMap); - o.worldPos = v.vertex; - o.color = v.color; - - TANGENT_SPACE_ROTATION; - o.TtoV0 = mul(rotation, UNITY_MATRIX_MV[0].xyz); - o.TtoV1 = mul(rotation, UNITY_MATRIX_MV[1].xyz); - return o; - } + v2f vert (appdata v) { + v2f o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord,_BumpMap); + o.worldPos = v.vertex; + o.color = v.color; + + TANGENT_SPACE_ROTATION; + o.TtoV0 = mul(rotation, UNITY_MATRIX_MV[0].xyz); + o.TtoV1 = mul(rotation, UNITY_MATRIX_MV[1].xyz); + //o.normal = mul((float3x3) UNITY_MATRIX_MVP, v.normal); + //o.normal = v.normal; + return o; + } - uniform float4 _Color; - uniform sampler2D _BumpMap; - uniform sampler2D _MatCap; + uniform float4 _Color; + uniform sampler2D _BumpMap; + uniform sampler2D _MatCap; - float4 frag (v2f i) : COLOR - { - - pos = mul (UNITY_MATRIX_MVP, float4(i.worldPos.x+_SurfacePos.x,i.worldPos.y+_SurfacePos.y,i.worldPos.z+_SurfacePos.z,0)); - - // Cut of the molecule - if ( _cut== 1f ){ // active le cut fixe - if ((_depthcut + _cutX*(i.worldPos.x+_SurfacePos.x) + _cutY*(i.worldPos.y+_SurfacePos.y) + _cutZ*(i.worldPos.z+_SurfacePos.z))<0){ - clip(-1); - }//else { - //clip((_depthcut + _cutX*(i.worldPos.x+_SurfacePos.x) + _cutY*(i.worldPos.y+_SurfacePos.y) + _cutZ*(i.worldPos.z+_SurfacePos.z))); - //} - }else if ( _cut== 2f ){ - clip (frac(-(_depthcut + pos.z)/500) -0.5); - } - // get normal from the normal map - float3 normal = tex2D(_BumpMap, i.uv).xyz * 2 - 1; - half2 vn; - vn.x = dot(i.TtoV0, normal); - vn.y = dot(i.TtoV1, normal); - - float4 matcapLookup = tex2D(_MatCap, vn*0.5 + 0.5); - - // coment for benoist video - //if (_colormode == 0f){ - // _Color=i.color; - // } - - return _Color*matcapLookup*1.5; + float4 frag (v2f i) : COLOR { + pos = mul (UNITY_MATRIX_MVP, float4(i.worldPos.x+_SurfacePos.x,i.worldPos.y+_SurfacePos.y,i.worldPos.z+_SurfacePos.z,0)); - } - ENDCG - } // End PASS + // Cut of the molecule + if ( _cut== 1f ){ // active le cut fixe + if ((_depthcut + _cutX*(i.worldPos.x+_SurfacePos.x) + _cutY*(i.worldPos.y+_SurfacePos.y) + _cutZ*(i.worldPos.z+_SurfacePos.z))<0){ + clip(-1); + }//else { + //clip((_depthcut + _cutX*(i.worldPos.x+_SurfacePos.x) + _cutY*(i.worldPos.y+_SurfacePos.y) + _cutZ*(i.worldPos.z+_SurfacePos.z))); + //} + }else if ( _cut== 2f ){ + clip (frac(-(_depthcut + pos.z)/500) -0.5); + } + // get normal from the normal map + float3 normal; + normal = tex2D(_BumpMap, i.uv).xyz * 2 - 1; + //normal = i.normal; + half2 vn; + vn.x = dot(i.TtoV0, normal); + vn.y = dot(i.TtoV1, normal); + + //vn = normal.xy; + + float4 matcapLookup = tex2D(_MatCap, vn*0.5 + 0.5); + + // coment for benoist video + if (_colormode == 0f){ + _Color=i.color; + } + + float4 finalColor = lerp(_Color, i.color, _ColorWeight); + + //return _Color*matcapLookup*1.5; + return finalColor*matcapLookup*1.5 * _Brightness; + } + ENDCG + } // End PASS Pass{ Tags { } // tag tres important, la modification peut entrainer la dispartition du plan de coupe @@ -225,19 +234,15 @@ SubShader { float2 texcoord : TEXCOORD0; }; - struct fragment_out - { - float4 Color : COLOR0; - }; + struct fragment_out { + float4 Color : COLOR0; + }; uniform float4 _MainTex_ST; // VERTEX SHADER IMPLEMENTATION ============================= - v2p Surface_v(appdata_base v) - { - + v2p Surface_v(appdata_base v) { v2p o; // Shader output - o.worldPos = v.vertex; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex); @@ -245,8 +250,7 @@ SubShader { } // FRAGMENT SHADER IMPLEMENTATION =========================== - fragment_out Surface_p(v2p i) - { + fragment_out Surface_p(v2p i) { fragment_out OUT; pos = mul (UNITY_MATRIX_MVP, float4(i.worldPos.x+_SurfacePos.x,i.worldPos.y+_SurfacePos.y,i.worldPos.z+_SurfacePos.z,0)); @@ -258,7 +262,7 @@ SubShader { //clip((_depthcut + _cutX*(i.worldPos.x+_SurfacePos.x) + _cutY*(i.worldPos.y+_SurfacePos.y) + _cutZ*(i.worldPos.z+_SurfacePos.z))); //} }else if ( _cut== 2f ){ - clip (frac(-(_depthcut + pos.z)/500) -0.5); + clip (frac(-(_depthcut + pos.z)/500) -0.5); } if ( _cut != 0f ){ @@ -277,12 +281,16 @@ SubShader { float3 eyepos = float3(0,0,1.0); float3 halfvec = normalize(lightvec + eyepos); + float ambient = 0.35; // should be obtained from the application float diffuse = dot(normal,lightvec); - float shininess = 500.0; - float specular = pow(max(dot(normal, halfvec),0.0),shininess); + //float shininess = 300.0; + //float specular = pow(max(dot(normal, halfvec),0.0),shininess); - float3 diffusecolor; - float3 specularcolor = float3(1.0,1.0,1.0); + float3 diffusecolor; + float3 ambientcolor; + //float3 specularcolor = float3(1.0,1.0,1.0); + //specularcolor = specular * specularcolor; + // if ( frac(_cutX*(i.worldPos.x+_SurfacePos.x) + _cutY*(i.worldPos.y+_SurfacePos.y) + _cutZ*(i.worldPos.z+_SurfacePos.z)) < 0.5 ){ @@ -290,7 +298,9 @@ SubShader { // diffusecolor = float3(102f/255,102f/255,102f/255); - diffusecolor = _ColorIN.rgb; + diffusecolor = _ColorIN.rgb * max(0,diffuse); + ambientcolor = _ColorIN.rgb * ambient; + //diffusecolor = _ColorIN.rgb; // ajout de rayure sur le plan ############################# @@ -317,10 +327,11 @@ SubShader { // Coloration uni basique #################################### - OUT.Color.a = 0.2; + //OUT.Color.a = 0.2; // OUT.Color.rgb = float3(102f/255,102f/255,102f/255); - OUT.Color.rgb = _ColorIN.rgb; + //OUT.Color.rgb = _ColorIN.rgb; + OUT.Color.rgb = diffusecolor + ambientcolor;// + specularcolor ; // OUT.Color.a = 1f; }else if ( _cut== 0f ) diff --git a/Assets/Resources/lit_spheres/artext/1_01.png.meta b/Assets/Resources/lit_spheres/artext/1_01.png.meta index 1b2cf027..564cbd23 100644 --- a/Assets/Resources/lit_spheres/artext/1_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/1_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/1_02.png.meta b/Assets/Resources/lit_spheres/artext/1_02.png.meta index 6959cd69..dbb48fa3 100644 --- a/Assets/Resources/lit_spheres/artext/1_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/1_02.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 0 + enableMipMap: 1 linearTexture: 1 correctGamma: 0 fadeOut: 0 @@ -13,23 +13,33 @@ TextureImporter: mipMapFadeDistanceEnd: 3 bumpmap: convertToNormalMap: 0 - externalNormalMap: 0 + externalNormalMap: 1 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 1 buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: userData: diff --git a/Assets/Resources/lit_spheres/artext/1_03.png.meta b/Assets/Resources/lit_spheres/artext/1_03.png.meta index e41de4ba..0d470cc7 100644 --- a/Assets/Resources/lit_spheres/artext/1_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/1_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/1_04.png.meta b/Assets/Resources/lit_spheres/artext/1_04.png.meta index 04dc1dfb..d5be20cc 100644 --- a/Assets/Resources/lit_spheres/artext/1_04.png.meta +++ b/Assets/Resources/lit_spheres/artext/1_04.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/1stwindow.png.meta b/Assets/Resources/lit_spheres/artext/1stwindow.png.meta index a8483e31..3eab966b 100644 --- a/Assets/Resources/lit_spheres/artext/1stwindow.png.meta +++ b/Assets/Resources/lit_spheres/artext/1stwindow.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/2_01.png.meta b/Assets/Resources/lit_spheres/artext/2_01.png.meta index 9c491b17..b9f0a827 100644 --- a/Assets/Resources/lit_spheres/artext/2_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/2_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/2_02.png.meta b/Assets/Resources/lit_spheres/artext/2_02.png.meta index 792a52fa..edec7224 100644 --- a/Assets/Resources/lit_spheres/artext/2_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/2_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/2_03.png.meta b/Assets/Resources/lit_spheres/artext/2_03.png.meta index 34cf4e99..c5db2bce 100644 --- a/Assets/Resources/lit_spheres/artext/2_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/2_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/2_05.png.meta b/Assets/Resources/lit_spheres/artext/2_05.png.meta index 80f650cb..bc7e5c87 100644 --- a/Assets/Resources/lit_spheres/artext/2_05.png.meta +++ b/Assets/Resources/lit_spheres/artext/2_05.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/3.png.meta b/Assets/Resources/lit_spheres/artext/3.png.meta index a16efaed..78d98551 100644 --- a/Assets/Resources/lit_spheres/artext/3.png.meta +++ b/Assets/Resources/lit_spheres/artext/3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/4.png.meta b/Assets/Resources/lit_spheres/artext/4.png.meta index 5fab232a..89489313 100644 --- a/Assets/Resources/lit_spheres/artext/4.png.meta +++ b/Assets/Resources/lit_spheres/artext/4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/5_01.png.meta b/Assets/Resources/lit_spheres/artext/5_01.png.meta index 84fff4e5..91548b91 100644 --- a/Assets/Resources/lit_spheres/artext/5_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/5_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/5_02.png.meta b/Assets/Resources/lit_spheres/artext/5_02.png.meta index 7a6ec3bf..b214cbe4 100644 --- a/Assets/Resources/lit_spheres/artext/5_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/5_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/5_03.png.meta b/Assets/Resources/lit_spheres/artext/5_03.png.meta index 154d77a7..ebfbd8fe 100644 --- a/Assets/Resources/lit_spheres/artext/5_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/5_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/5_04.png.meta b/Assets/Resources/lit_spheres/artext/5_04.png.meta index e13a291f..86b7b6a8 100644 --- a/Assets/Resources/lit_spheres/artext/5_04.png.meta +++ b/Assets/Resources/lit_spheres/artext/5_04.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/6_01.png.meta b/Assets/Resources/lit_spheres/artext/6_01.png.meta index e0d49f87..02aff7f6 100644 --- a/Assets/Resources/lit_spheres/artext/6_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/6_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/6_02.png.meta b/Assets/Resources/lit_spheres/artext/6_02.png.meta index fcf19ad0..4d3ac0e2 100644 --- a/Assets/Resources/lit_spheres/artext/6_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/6_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/6_03.png.meta b/Assets/Resources/lit_spheres/artext/6_03.png.meta index 76ab44f1..bb309c65 100644 --- a/Assets/Resources/lit_spheres/artext/6_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/6_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/6_04.png.meta b/Assets/Resources/lit_spheres/artext/6_04.png.meta index 90694c4b..433232e3 100644 --- a/Assets/Resources/lit_spheres/artext/6_04.png.meta +++ b/Assets/Resources/lit_spheres/artext/6_04.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/7.png.meta b/Assets/Resources/lit_spheres/artext/7.png.meta index 008af589..b2268e54 100644 --- a/Assets/Resources/lit_spheres/artext/7.png.meta +++ b/Assets/Resources/lit_spheres/artext/7.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/7_12.png.meta b/Assets/Resources/lit_spheres/artext/7_12.png.meta index 81bb5164..1d8c76f5 100644 --- a/Assets/Resources/lit_spheres/artext/7_12.png.meta +++ b/Assets/Resources/lit_spheres/artext/7_12.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/8_01.png.meta b/Assets/Resources/lit_spheres/artext/8_01.png.meta index ef91a4eb..8916661d 100644 --- a/Assets/Resources/lit_spheres/artext/8_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/8_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/8_02.png.meta b/Assets/Resources/lit_spheres/artext/8_02.png.meta index 09fea288..eab2664a 100644 --- a/Assets/Resources/lit_spheres/artext/8_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/8_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/aqua.png.meta b/Assets/Resources/lit_spheres/artext/aqua.png.meta index f5a0b1db..21930ff1 100644 --- a/Assets/Resources/lit_spheres/artext/aqua.png.meta +++ b/Assets/Resources/lit_spheres/artext/aqua.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/aquarelle.png.meta b/Assets/Resources/lit_spheres/artext/aquarelle.png.meta index 54cf73ae..02a3918e 100644 --- a/Assets/Resources/lit_spheres/artext/aquarelle.png.meta +++ b/Assets/Resources/lit_spheres/artext/aquarelle.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/army.png.meta b/Assets/Resources/lit_spheres/artext/army.png.meta index 79562f82..5d81f5be 100644 --- a/Assets/Resources/lit_spheres/artext/army.png.meta +++ b/Assets/Resources/lit_spheres/artext/army.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_01.png.meta b/Assets/Resources/lit_spheres/artext/art_01.png.meta index cf9c0133..56eb7819 100644 --- a/Assets/Resources/lit_spheres/artext/art_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_02.png.meta b/Assets/Resources/lit_spheres/artext/art_02.png.meta index c2c1f092..d44692b9 100644 --- a/Assets/Resources/lit_spheres/artext/art_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_03.png.meta b/Assets/Resources/lit_spheres/artext/art_03.png.meta index a04181d5..c8fd8e5f 100644 --- a/Assets/Resources/lit_spheres/artext/art_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_04.png.meta b/Assets/Resources/lit_spheres/artext/art_04.png.meta index c5d3bd18..735ab9f9 100644 --- a/Assets/Resources/lit_spheres/artext/art_04.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_04.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_06.png.meta b/Assets/Resources/lit_spheres/artext/art_06.png.meta index 7dee61b2..144b2b03 100644 --- a/Assets/Resources/lit_spheres/artext/art_06.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_06.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_07.png.meta b/Assets/Resources/lit_spheres/artext/art_07.png.meta index 0e035cbe..36dda0ac 100644 --- a/Assets/Resources/lit_spheres/artext/art_07.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_07.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_10.png.meta b/Assets/Resources/lit_spheres/artext/art_10.png.meta index d9c24aab..d9ad4090 100644 --- a/Assets/Resources/lit_spheres/artext/art_10.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_10.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_11.png.meta b/Assets/Resources/lit_spheres/artext/art_11.png.meta index a975038a..a9ea2c06 100644 --- a/Assets/Resources/lit_spheres/artext/art_11.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_11.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/art_red.png.meta b/Assets/Resources/lit_spheres/artext/art_red.png.meta index e579aab2..cb1b3575 100644 --- a/Assets/Resources/lit_spheres/artext/art_red.png.meta +++ b/Assets/Resources/lit_spheres/artext/art_red.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball1.png.meta b/Assets/Resources/lit_spheres/artext/artball1.png.meta index 06215b3f..3fb532df 100644 --- a/Assets/Resources/lit_spheres/artext/artball1.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball10.png.meta b/Assets/Resources/lit_spheres/artext/artball10.png.meta index 649053b9..779cfd95 100644 --- a/Assets/Resources/lit_spheres/artext/artball10.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball10.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball11.png.meta b/Assets/Resources/lit_spheres/artext/artball11.png.meta index 7bc3587a..01396e07 100644 --- a/Assets/Resources/lit_spheres/artext/artball11.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball11.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball2.png.meta b/Assets/Resources/lit_spheres/artext/artball2.png.meta index ebc71dcc..5f287cea 100644 --- a/Assets/Resources/lit_spheres/artext/artball2.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball3.png.meta b/Assets/Resources/lit_spheres/artext/artball3.png.meta index 4b7d3010..9ce6d7ea 100644 --- a/Assets/Resources/lit_spheres/artext/artball3.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball4.png.meta b/Assets/Resources/lit_spheres/artext/artball4.png.meta index c80a074a..1746ddad 100644 --- a/Assets/Resources/lit_spheres/artext/artball4.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball5.png.meta b/Assets/Resources/lit_spheres/artext/artball5.png.meta index 172497b4..c472ae45 100644 --- a/Assets/Resources/lit_spheres/artext/artball5.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball5.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball6.png.meta b/Assets/Resources/lit_spheres/artext/artball6.png.meta index 89ffee20..898cf8f6 100644 --- a/Assets/Resources/lit_spheres/artext/artball6.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball6.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball7.png.meta b/Assets/Resources/lit_spheres/artext/artball7.png.meta index 787cf1a7..24208dab 100644 --- a/Assets/Resources/lit_spheres/artext/artball7.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball7.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball8.png.meta b/Assets/Resources/lit_spheres/artext/artball8.png.meta index 338b5988..88315af1 100644 --- a/Assets/Resources/lit_spheres/artext/artball8.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball8.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/artball9.png.meta b/Assets/Resources/lit_spheres/artext/artball9.png.meta index b76d1929..885b7708 100644 --- a/Assets/Resources/lit_spheres/artext/artball9.png.meta +++ b/Assets/Resources/lit_spheres/artext/artball9.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/asperge.png.meta b/Assets/Resources/lit_spheres/artext/asperge.png.meta index 9e224353..13ddfe6f 100644 --- a/Assets/Resources/lit_spheres/artext/asperge.png.meta +++ b/Assets/Resources/lit_spheres/artext/asperge.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/balloon1.png.meta b/Assets/Resources/lit_spheres/artext/balloon1.png.meta index d5722c81..b1da1d15 100644 --- a/Assets/Resources/lit_spheres/artext/balloon1.png.meta +++ b/Assets/Resources/lit_spheres/artext/balloon1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/balloon2.png.meta b/Assets/Resources/lit_spheres/artext/balloon2.png.meta index 652ebf11..abc62183 100644 --- a/Assets/Resources/lit_spheres/artext/balloon2.png.meta +++ b/Assets/Resources/lit_spheres/artext/balloon2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/balloon3.png.meta b/Assets/Resources/lit_spheres/artext/balloon3.png.meta index a1592ce8..fc6514be 100644 --- a/Assets/Resources/lit_spheres/artext/balloon3.png.meta +++ b/Assets/Resources/lit_spheres/artext/balloon3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/balloon4.png.meta b/Assets/Resources/lit_spheres/artext/balloon4.png.meta index 9943dbbb..a41cf101 100644 --- a/Assets/Resources/lit_spheres/artext/balloon4.png.meta +++ b/Assets/Resources/lit_spheres/artext/balloon4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/banane.png.meta b/Assets/Resources/lit_spheres/artext/banane.png.meta index 08453f0d..2eef5dc3 100644 --- a/Assets/Resources/lit_spheres/artext/banane.png.meta +++ b/Assets/Resources/lit_spheres/artext/banane.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/belight.png.meta b/Assets/Resources/lit_spheres/artext/belight.png.meta index dac9812b..f7158916 100644 --- a/Assets/Resources/lit_spheres/artext/belight.png.meta +++ b/Assets/Resources/lit_spheres/artext/belight.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/bijou.png.meta b/Assets/Resources/lit_spheres/artext/bijou.png.meta index d4aecbf8..22d4906b 100644 --- a/Assets/Resources/lit_spheres/artext/bijou.png.meta +++ b/Assets/Resources/lit_spheres/artext/bijou.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/blackNblue.png.meta b/Assets/Resources/lit_spheres/artext/blackNblue.png.meta index 2bdf356c..5ab75256 100644 --- a/Assets/Resources/lit_spheres/artext/blackNblue.png.meta +++ b/Assets/Resources/lit_spheres/artext/blackNblue.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/blue1.png.meta b/Assets/Resources/lit_spheres/artext/blue1.png.meta index 984eb2d9..27598131 100644 --- a/Assets/Resources/lit_spheres/artext/blue1.png.meta +++ b/Assets/Resources/lit_spheres/artext/blue1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/blue2.png.meta b/Assets/Resources/lit_spheres/artext/blue2.png.meta index 2a5a0095..b96cf169 100644 --- a/Assets/Resources/lit_spheres/artext/blue2.png.meta +++ b/Assets/Resources/lit_spheres/artext/blue2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/blue3.png.meta b/Assets/Resources/lit_spheres/artext/blue3.png.meta index 5e0e8501..2eaac7c2 100644 --- a/Assets/Resources/lit_spheres/artext/blue3.png.meta +++ b/Assets/Resources/lit_spheres/artext/blue3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/blue4.png.meta b/Assets/Resources/lit_spheres/artext/blue4.png.meta index 908d7eeb..a79c706c 100644 --- a/Assets/Resources/lit_spheres/artext/blue4.png.meta +++ b/Assets/Resources/lit_spheres/artext/blue4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/bluebuz.png.meta b/Assets/Resources/lit_spheres/artext/bluebuz.png.meta index db297f7b..bd78c934 100644 --- a/Assets/Resources/lit_spheres/artext/bluebuz.png.meta +++ b/Assets/Resources/lit_spheres/artext/bluebuz.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/bronze.png.meta b/Assets/Resources/lit_spheres/artext/bronze.png.meta index 3decc1e1..7ee30bcd 100644 --- a/Assets/Resources/lit_spheres/artext/bronze.png.meta +++ b/Assets/Resources/lit_spheres/artext/bronze.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/bronze2.png.meta b/Assets/Resources/lit_spheres/artext/bronze2.png.meta index 535701d8..41b0c353 100644 --- a/Assets/Resources/lit_spheres/artext/bronze2.png.meta +++ b/Assets/Resources/lit_spheres/artext/bronze2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/ceramique.png.meta b/Assets/Resources/lit_spheres/artext/ceramique.png.meta index 984e02cd..13364aa4 100644 --- a/Assets/Resources/lit_spheres/artext/ceramique.png.meta +++ b/Assets/Resources/lit_spheres/artext/ceramique.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/chocolat.png.meta b/Assets/Resources/lit_spheres/artext/chocolat.png.meta index ad1345de..cb787bfe 100644 --- a/Assets/Resources/lit_spheres/artext/chocolat.png.meta +++ b/Assets/Resources/lit_spheres/artext/chocolat.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/chocolatlait.png.meta b/Assets/Resources/lit_spheres/artext/chocolatlait.png.meta index c8c9a36a..84100414 100644 --- a/Assets/Resources/lit_spheres/artext/chocolatlait.png.meta +++ b/Assets/Resources/lit_spheres/artext/chocolatlait.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/concave.png.meta b/Assets/Resources/lit_spheres/artext/concave.png.meta index f220302e..9ecd20f0 100644 --- a/Assets/Resources/lit_spheres/artext/concave.png.meta +++ b/Assets/Resources/lit_spheres/artext/concave.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/defaultball.png.meta b/Assets/Resources/lit_spheres/artext/defaultball.png.meta index c79e3e6f..06a163e8 100644 --- a/Assets/Resources/lit_spheres/artext/defaultball.png.meta +++ b/Assets/Resources/lit_spheres/artext/defaultball.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/disco.png.meta b/Assets/Resources/lit_spheres/artext/disco.png.meta index 5a64af27..048ccd20 100644 --- a/Assets/Resources/lit_spheres/artext/disco.png.meta +++ b/Assets/Resources/lit_spheres/artext/disco.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/disco2.png.meta b/Assets/Resources/lit_spheres/artext/disco2.png.meta index ebd94804..cdf244ad 100644 --- a/Assets/Resources/lit_spheres/artext/disco2.png.meta +++ b/Assets/Resources/lit_spheres/artext/disco2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/encre.png.meta b/Assets/Resources/lit_spheres/artext/encre.png.meta index c547bc4e..16dd6d10 100644 --- a/Assets/Resources/lit_spheres/artext/encre.png.meta +++ b/Assets/Resources/lit_spheres/artext/encre.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/estampage.png.meta b/Assets/Resources/lit_spheres/artext/estampage.png.meta index 0435556d..603ec956 100644 --- a/Assets/Resources/lit_spheres/artext/estampage.png.meta +++ b/Assets/Resources/lit_spheres/artext/estampage.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/expo.png.meta b/Assets/Resources/lit_spheres/artext/expo.png.meta index 58d85864..e72e497d 100644 --- a/Assets/Resources/lit_spheres/artext/expo.png.meta +++ b/Assets/Resources/lit_spheres/artext/expo.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/fruits.png.meta b/Assets/Resources/lit_spheres/artext/fruits.png.meta index 85e47058..d868b75f 100644 --- a/Assets/Resources/lit_spheres/artext/fruits.png.meta +++ b/Assets/Resources/lit_spheres/artext/fruits.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/glass1.png.meta b/Assets/Resources/lit_spheres/artext/glass1.png.meta index 012a9abb..3a95b5c3 100644 --- a/Assets/Resources/lit_spheres/artext/glass1.png.meta +++ b/Assets/Resources/lit_spheres/artext/glass1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/glass2.png.meta b/Assets/Resources/lit_spheres/artext/glass2.png.meta index 150d899c..08c7967d 100644 --- a/Assets/Resources/lit_spheres/artext/glass2.png.meta +++ b/Assets/Resources/lit_spheres/artext/glass2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/glossy.png.meta b/Assets/Resources/lit_spheres/artext/glossy.png.meta index a0faad54..b3ffae16 100644 --- a/Assets/Resources/lit_spheres/artext/glossy.png.meta +++ b/Assets/Resources/lit_spheres/artext/glossy.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/greenglass.png.meta b/Assets/Resources/lit_spheres/artext/greenglass.png.meta index 43e59b45..13601381 100644 --- a/Assets/Resources/lit_spheres/artext/greenglass.png.meta +++ b/Assets/Resources/lit_spheres/artext/greenglass.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/gris.png.meta b/Assets/Resources/lit_spheres/artext/gris.png.meta index 058ba6ca..66a0d1a4 100644 --- a/Assets/Resources/lit_spheres/artext/gris.png.meta +++ b/Assets/Resources/lit_spheres/artext/gris.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/hameleon.png.meta b/Assets/Resources/lit_spheres/artext/hameleon.png.meta index 1213e3cf..64c57428 100644 --- a/Assets/Resources/lit_spheres/artext/hameleon.png.meta +++ b/Assets/Resources/lit_spheres/artext/hameleon.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/jaune.png.meta b/Assets/Resources/lit_spheres/artext/jaune.png.meta index 751fc173..348bf96c 100644 --- a/Assets/Resources/lit_spheres/artext/jaune.png.meta +++ b/Assets/Resources/lit_spheres/artext/jaune.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/keramic_01.png.meta b/Assets/Resources/lit_spheres/artext/keramic_01.png.meta index eeefbd0a..34851484 100644 --- a/Assets/Resources/lit_spheres/artext/keramic_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/keramic_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/kirsch.png.meta b/Assets/Resources/lit_spheres/artext/kirsch.png.meta index 7372b31c..de327fd1 100644 --- a/Assets/Resources/lit_spheres/artext/kirsch.png.meta +++ b/Assets/Resources/lit_spheres/artext/kirsch.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/l+s1.png.meta b/Assets/Resources/lit_spheres/artext/l+s1.png.meta index 88efba42..2ea8d54e 100644 --- a/Assets/Resources/lit_spheres/artext/l+s1.png.meta +++ b/Assets/Resources/lit_spheres/artext/l+s1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/l+s2.png.meta b/Assets/Resources/lit_spheres/artext/l+s2.png.meta index 9969ceda..83afa9d0 100644 --- a/Assets/Resources/lit_spheres/artext/l+s2.png.meta +++ b/Assets/Resources/lit_spheres/artext/l+s2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/lemon.png.meta b/Assets/Resources/lit_spheres/artext/lemon.png.meta index cb39e4ab..4a511739 100644 --- a/Assets/Resources/lit_spheres/artext/lemon.png.meta +++ b/Assets/Resources/lit_spheres/artext/lemon.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/lighgray.png.meta b/Assets/Resources/lit_spheres/artext/lighgray.png.meta index e1645bd4..08c36659 100644 --- a/Assets/Resources/lit_spheres/artext/lighgray.png.meta +++ b/Assets/Resources/lit_spheres/artext/lighgray.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/lightgray.png.meta b/Assets/Resources/lit_spheres/artext/lightgray.png.meta index 12af2c75..ca512259 100644 --- a/Assets/Resources/lit_spheres/artext/lightgray.png.meta +++ b/Assets/Resources/lit_spheres/artext/lightgray.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/lumiereor.png.meta b/Assets/Resources/lit_spheres/artext/lumiereor.png.meta index 4e3cdaa3..dc0be2c7 100644 --- a/Assets/Resources/lit_spheres/artext/lumiereor.png.meta +++ b/Assets/Resources/lit_spheres/artext/lumiereor.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/lune.png.meta b/Assets/Resources/lit_spheres/artext/lune.png.meta index 7c632fda..6f4e5a57 100644 --- a/Assets/Resources/lit_spheres/artext/lune.png.meta +++ b/Assets/Resources/lit_spheres/artext/lune.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/mango.png.meta b/Assets/Resources/lit_spheres/artext/mango.png.meta index 867e35a7..920be56d 100644 --- a/Assets/Resources/lit_spheres/artext/mango.png.meta +++ b/Assets/Resources/lit_spheres/artext/mango.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/natural_01.png.meta b/Assets/Resources/lit_spheres/artext/natural_01.png.meta index 444b4471..ed57d483 100644 --- a/Assets/Resources/lit_spheres/artext/natural_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/natural_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/natural_02.png.meta b/Assets/Resources/lit_spheres/artext/natural_02.png.meta index 1d252dbc..47b01e30 100644 --- a/Assets/Resources/lit_spheres/artext/natural_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/natural_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/neon.png.meta b/Assets/Resources/lit_spheres/artext/neon.png.meta index 72b61409..75487911 100644 --- a/Assets/Resources/lit_spheres/artext/neon.png.meta +++ b/Assets/Resources/lit_spheres/artext/neon.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/neon4.png.meta b/Assets/Resources/lit_spheres/artext/neon4.png.meta index 1a37e752..9fddbfcc 100644 --- a/Assets/Resources/lit_spheres/artext/neon4.png.meta +++ b/Assets/Resources/lit_spheres/artext/neon4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/noir.png.meta b/Assets/Resources/lit_spheres/artext/noir.png.meta index f9bc4a6d..0b97dcb7 100644 --- a/Assets/Resources/lit_spheres/artext/noir.png.meta +++ b/Assets/Resources/lit_spheres/artext/noir.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/noirmetal.png.meta b/Assets/Resources/lit_spheres/artext/noirmetal.png.meta index 2fbd1608..4ed7a589 100644 --- a/Assets/Resources/lit_spheres/artext/noirmetal.png.meta +++ b/Assets/Resources/lit_spheres/artext/noirmetal.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/oeuf.png.meta b/Assets/Resources/lit_spheres/artext/oeuf.png.meta index fd58c1bc..f008fe08 100644 --- a/Assets/Resources/lit_spheres/artext/oeuf.png.meta +++ b/Assets/Resources/lit_spheres/artext/oeuf.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/or.png.meta b/Assets/Resources/lit_spheres/artext/or.png.meta index a47b6c87..869b7371 100644 --- a/Assets/Resources/lit_spheres/artext/or.png.meta +++ b/Assets/Resources/lit_spheres/artext/or.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/orclair.png.meta b/Assets/Resources/lit_spheres/artext/orclair.png.meta index 66bbbe61..aa432d68 100644 --- a/Assets/Resources/lit_spheres/artext/orclair.png.meta +++ b/Assets/Resources/lit_spheres/artext/orclair.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/orpur.png.meta b/Assets/Resources/lit_spheres/artext/orpur.png.meta index cd313ba5..b6759141 100644 --- a/Assets/Resources/lit_spheres/artext/orpur.png.meta +++ b/Assets/Resources/lit_spheres/artext/orpur.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/paint1.png.meta b/Assets/Resources/lit_spheres/artext/paint1.png.meta index aeb537ab..f0c27c77 100644 --- a/Assets/Resources/lit_spheres/artext/paint1.png.meta +++ b/Assets/Resources/lit_spheres/artext/paint1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/paint2.png.meta b/Assets/Resources/lit_spheres/artext/paint2.png.meta index 261beeaf..f5a10cd8 100644 --- a/Assets/Resources/lit_spheres/artext/paint2.png.meta +++ b/Assets/Resources/lit_spheres/artext/paint2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/paint3.png.meta b/Assets/Resources/lit_spheres/artext/paint3.png.meta index 195ac3c1..f7ee63da 100644 --- a/Assets/Resources/lit_spheres/artext/paint3.png.meta +++ b/Assets/Resources/lit_spheres/artext/paint3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/pasha1.png.meta b/Assets/Resources/lit_spheres/artext/pasha1.png.meta index 650fd960..6811538e 100644 --- a/Assets/Resources/lit_spheres/artext/pasha1.png.meta +++ b/Assets/Resources/lit_spheres/artext/pasha1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/peinture.png.meta b/Assets/Resources/lit_spheres/artext/peinture.png.meta index 0e15f03f..ee98a69d 100644 --- a/Assets/Resources/lit_spheres/artext/peinture.png.meta +++ b/Assets/Resources/lit_spheres/artext/peinture.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/perle.png.meta b/Assets/Resources/lit_spheres/artext/perle.png.meta index d6737e6c..4f85a673 100644 --- a/Assets/Resources/lit_spheres/artext/perle.png.meta +++ b/Assets/Resources/lit_spheres/artext/perle.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/piggybank.png.meta b/Assets/Resources/lit_spheres/artext/piggybank.png.meta index f04b314e..a6bbba2d 100644 --- a/Assets/Resources/lit_spheres/artext/piggybank.png.meta +++ b/Assets/Resources/lit_spheres/artext/piggybank.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/purple1.png.meta b/Assets/Resources/lit_spheres/artext/purple1.png.meta index ccd9f808..2595e376 100644 --- a/Assets/Resources/lit_spheres/artext/purple1.png.meta +++ b/Assets/Resources/lit_spheres/artext/purple1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rainbow_01.png.meta b/Assets/Resources/lit_spheres/artext/rainbow_01.png.meta index a695d213..0f923195 100644 --- a/Assets/Resources/lit_spheres/artext/rainbow_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/rainbow_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rainbow_02.png.meta b/Assets/Resources/lit_spheres/artext/rainbow_02.png.meta index deac55af..5097e7bc 100644 --- a/Assets/Resources/lit_spheres/artext/rainbow_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/rainbow_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rainbow_03.png.meta b/Assets/Resources/lit_spheres/artext/rainbow_03.png.meta index 9a7d70a5..159694cb 100644 --- a/Assets/Resources/lit_spheres/artext/rainbow_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/rainbow_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rainbow_04.png.meta b/Assets/Resources/lit_spheres/artext/rainbow_04.png.meta index d0f7461b..d5662de2 100644 --- a/Assets/Resources/lit_spheres/artext/rainbow_04.png.meta +++ b/Assets/Resources/lit_spheres/artext/rainbow_04.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/raye.png.meta b/Assets/Resources/lit_spheres/artext/raye.png.meta index 278c2fca..e0d6efb6 100644 --- a/Assets/Resources/lit_spheres/artext/raye.png.meta +++ b/Assets/Resources/lit_spheres/artext/raye.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rayonx.png.meta b/Assets/Resources/lit_spheres/artext/rayonx.png.meta index a1c10316..b37604e3 100644 --- a/Assets/Resources/lit_spheres/artext/rayonx.png.meta +++ b/Assets/Resources/lit_spheres/artext/rayonx.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/red1.png.meta b/Assets/Resources/lit_spheres/artext/red1.png.meta index de6bfd4e..8a7d617e 100644 --- a/Assets/Resources/lit_spheres/artext/red1.png.meta +++ b/Assets/Resources/lit_spheres/artext/red1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/red2.png.meta b/Assets/Resources/lit_spheres/artext/red2.png.meta index 113842e6..d2231b77 100644 --- a/Assets/Resources/lit_spheres/artext/red2.png.meta +++ b/Assets/Resources/lit_spheres/artext/red2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/red_1.png.meta b/Assets/Resources/lit_spheres/artext/red_1.png.meta index fc5bf773..4ba4b9b8 100644 --- a/Assets/Resources/lit_spheres/artext/red_1.png.meta +++ b/Assets/Resources/lit_spheres/artext/red_1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/red_simple.png.meta b/Assets/Resources/lit_spheres/artext/red_simple.png.meta index 9dcd3ff4..b57ba230 100644 --- a/Assets/Resources/lit_spheres/artext/red_simple.png.meta +++ b/Assets/Resources/lit_spheres/artext/red_simple.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/redtowhite.png.meta b/Assets/Resources/lit_spheres/artext/redtowhite.png.meta index 18cd7a8c..c4c8464c 100644 --- a/Assets/Resources/lit_spheres/artext/redtowhite.png.meta +++ b/Assets/Resources/lit_spheres/artext/redtowhite.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/removableeye.png.meta b/Assets/Resources/lit_spheres/artext/removableeye.png.meta index 1812e157..e9b49fd4 100644 --- a/Assets/Resources/lit_spheres/artext/removableeye.png.meta +++ b/Assets/Resources/lit_spheres/artext/removableeye.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rgestampage.png.meta b/Assets/Resources/lit_spheres/artext/rgestampage.png.meta index 941daf04..f98cc1d5 100644 --- a/Assets/Resources/lit_spheres/artext/rgestampage.png.meta +++ b/Assets/Resources/lit_spheres/artext/rgestampage.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rose.png.meta b/Assets/Resources/lit_spheres/artext/rose.png.meta index e4f8378c..8ea3b9d5 100644 --- a/Assets/Resources/lit_spheres/artext/rose.png.meta +++ b/Assets/Resources/lit_spheres/artext/rose.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rosebuz.png.meta b/Assets/Resources/lit_spheres/artext/rosebuz.png.meta index 25d5f338..f6928659 100644 --- a/Assets/Resources/lit_spheres/artext/rosebuz.png.meta +++ b/Assets/Resources/lit_spheres/artext/rosebuz.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rougebrillant.png.meta b/Assets/Resources/lit_spheres/artext/rougebrillant.png.meta index bae29dc5..237a0423 100644 --- a/Assets/Resources/lit_spheres/artext/rougebrillant.png.meta +++ b/Assets/Resources/lit_spheres/artext/rougebrillant.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rougebuz.png.meta b/Assets/Resources/lit_spheres/artext/rougebuz.png.meta index 096ab4ef..4d47ecb7 100644 --- a/Assets/Resources/lit_spheres/artext/rougebuz.png.meta +++ b/Assets/Resources/lit_spheres/artext/rougebuz.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/rouille.png.meta b/Assets/Resources/lit_spheres/artext/rouille.png.meta index 3849bcad..4f47dbb5 100644 --- a/Assets/Resources/lit_spheres/artext/rouille.png.meta +++ b/Assets/Resources/lit_spheres/artext/rouille.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shad1.png.meta b/Assets/Resources/lit_spheres/artext/shad1.png.meta index b49d288d..270943eb 100644 --- a/Assets/Resources/lit_spheres/artext/shad1.png.meta +++ b/Assets/Resources/lit_spheres/artext/shad1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shad2.png.meta b/Assets/Resources/lit_spheres/artext/shad2.png.meta index 1a3d7117..0c71da32 100644 --- a/Assets/Resources/lit_spheres/artext/shad2.png.meta +++ b/Assets/Resources/lit_spheres/artext/shad2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shad3.png.meta b/Assets/Resources/lit_spheres/artext/shad3.png.meta index cba9bf60..2620cd09 100644 --- a/Assets/Resources/lit_spheres/artext/shad3.png.meta +++ b/Assets/Resources/lit_spheres/artext/shad3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shadow1.png.meta b/Assets/Resources/lit_spheres/artext/shadow1.png.meta index 220e2753..783b465f 100644 --- a/Assets/Resources/lit_spheres/artext/shadow1.png.meta +++ b/Assets/Resources/lit_spheres/artext/shadow1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shadow2.png.meta b/Assets/Resources/lit_spheres/artext/shadow2.png.meta index 6af9658c..8918d034 100644 --- a/Assets/Resources/lit_spheres/artext/shadow2.png.meta +++ b/Assets/Resources/lit_spheres/artext/shadow2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shine_blue.png.meta b/Assets/Resources/lit_spheres/artext/shine_blue.png.meta index e1e2f595..fd05b1d0 100644 --- a/Assets/Resources/lit_spheres/artext/shine_blue.png.meta +++ b/Assets/Resources/lit_spheres/artext/shine_blue.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopblack1.png.meta b/Assets/Resources/lit_spheres/artext/shopblack1.png.meta index 8a24e72e..cea0c225 100644 --- a/Assets/Resources/lit_spheres/artext/shopblack1.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopblack1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopblack1invert.png.meta b/Assets/Resources/lit_spheres/artext/shopblack1invert.png.meta index a1f6e9a0..e815a53f 100644 --- a/Assets/Resources/lit_spheres/artext/shopblack1invert.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopblack1invert.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopblack2.png.meta b/Assets/Resources/lit_spheres/artext/shopblack2.png.meta index 9585009e..7512c787 100644 --- a/Assets/Resources/lit_spheres/artext/shopblack2.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopblack2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopblack3.png.meta b/Assets/Resources/lit_spheres/artext/shopblack3.png.meta index 29c16ffa..328cad76 100644 --- a/Assets/Resources/lit_spheres/artext/shopblack3.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopblack3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopblack4.png.meta b/Assets/Resources/lit_spheres/artext/shopblack4.png.meta index a5ffed1f..b9dcbd0a 100644 --- a/Assets/Resources/lit_spheres/artext/shopblack4.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopblack4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopgreen1.png.meta b/Assets/Resources/lit_spheres/artext/shopgreen1.png.meta index 74d879f0..f6749d9a 100644 --- a/Assets/Resources/lit_spheres/artext/shopgreen1.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopgreen1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopgreen2.png.meta b/Assets/Resources/lit_spheres/artext/shopgreen2.png.meta index bfd71edb..570b7731 100644 --- a/Assets/Resources/lit_spheres/artext/shopgreen2.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopgreen2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shoppink1.png.meta b/Assets/Resources/lit_spheres/artext/shoppink1.png.meta index f9fdb821..ea21f1eb 100644 --- a/Assets/Resources/lit_spheres/artext/shoppink1.png.meta +++ b/Assets/Resources/lit_spheres/artext/shoppink1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shoppink2.png.meta b/Assets/Resources/lit_spheres/artext/shoppink2.png.meta index d02b9d11..32a4450b 100644 --- a/Assets/Resources/lit_spheres/artext/shoppink2.png.meta +++ b/Assets/Resources/lit_spheres/artext/shoppink2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shoppink3.png.meta b/Assets/Resources/lit_spheres/artext/shoppink3.png.meta index e0d12216..e8d0a592 100644 --- a/Assets/Resources/lit_spheres/artext/shoppink3.png.meta +++ b/Assets/Resources/lit_spheres/artext/shoppink3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopred1.png.meta b/Assets/Resources/lit_spheres/artext/shopred1.png.meta index ee846cc3..406ce0ca 100644 --- a/Assets/Resources/lit_spheres/artext/shopred1.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopred1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopred2.png.meta b/Assets/Resources/lit_spheres/artext/shopred2.png.meta index fb0dcd1f..2092c8ed 100644 --- a/Assets/Resources/lit_spheres/artext/shopred2.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopred2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopred3.png.meta b/Assets/Resources/lit_spheres/artext/shopred3.png.meta index a18d698c..059ed29e 100644 --- a/Assets/Resources/lit_spheres/artext/shopred3.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopred3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/shopred4.png.meta b/Assets/Resources/lit_spheres/artext/shopred4.png.meta index f4e0c072..b2db1d1e 100644 --- a/Assets/Resources/lit_spheres/artext/shopred4.png.meta +++ b/Assets/Resources/lit_spheres/artext/shopred4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple10.png.meta b/Assets/Resources/lit_spheres/artext/simple10.png.meta index 0d9d0929..3e1f9715 100644 --- a/Assets/Resources/lit_spheres/artext/simple10.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple10.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple2.png.meta b/Assets/Resources/lit_spheres/artext/simple2.png.meta index 84659a80..3b4a0f46 100644 --- a/Assets/Resources/lit_spheres/artext/simple2.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple4.png.meta b/Assets/Resources/lit_spheres/artext/simple4.png.meta index e9c14173..c429632f 100644 --- a/Assets/Resources/lit_spheres/artext/simple4.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple6.png.meta b/Assets/Resources/lit_spheres/artext/simple6.png.meta index b9afb53d..9f7b65dc 100644 --- a/Assets/Resources/lit_spheres/artext/simple6.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple6.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple7.png.meta b/Assets/Resources/lit_spheres/artext/simple7.png.meta index b205813e..542f74a0 100644 --- a/Assets/Resources/lit_spheres/artext/simple7.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple7.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple8.png.meta b/Assets/Resources/lit_spheres/artext/simple8.png.meta index ad1ab577..f0908b35 100644 --- a/Assets/Resources/lit_spheres/artext/simple8.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple8.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple9.png.meta b/Assets/Resources/lit_spheres/artext/simple9.png.meta index 75bef5ed..e4303d77 100644 --- a/Assets/Resources/lit_spheres/artext/simple9.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple9.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_01.png.meta b/Assets/Resources/lit_spheres/artext/simple_01.png.meta index 0f0e1ea7..17de0e21 100644 --- a/Assets/Resources/lit_spheres/artext/simple_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_02.png.meta b/Assets/Resources/lit_spheres/artext/simple_02.png.meta index 61f6dc5f..05eeb936 100644 --- a/Assets/Resources/lit_spheres/artext/simple_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_03.png.meta b/Assets/Resources/lit_spheres/artext/simple_03.png.meta index bf02559e..647bfaff 100644 --- a/Assets/Resources/lit_spheres/artext/simple_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_blue.png.meta b/Assets/Resources/lit_spheres/artext/simple_blue.png.meta index 4b8d5a8c..e0b593c2 100644 --- a/Assets/Resources/lit_spheres/artext/simple_blue.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_blue.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_contrast.png.meta b/Assets/Resources/lit_spheres/artext/simple_contrast.png.meta index 230d92d2..babf8081 100644 --- a/Assets/Resources/lit_spheres/artext/simple_contrast.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_contrast.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_doberman.png.meta b/Assets/Resources/lit_spheres/artext/simple_doberman.png.meta index 93d4d965..e987264e 100644 --- a/Assets/Resources/lit_spheres/artext/simple_doberman.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_doberman.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_gold.png.meta b/Assets/Resources/lit_spheres/artext/simple_gold.png.meta index 61409987..f9dcdc8a 100644 --- a/Assets/Resources/lit_spheres/artext/simple_gold.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_gold.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_goldcopy.png.meta b/Assets/Resources/lit_spheres/artext/simple_goldcopy.png.meta index 76f4e4db..dff173ff 100644 --- a/Assets/Resources/lit_spheres/artext/simple_goldcopy.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_goldcopy.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/simple_grey.png.meta b/Assets/Resources/lit_spheres/artext/simple_grey.png.meta index 339e3833..14e70f7e 100644 --- a/Assets/Resources/lit_spheres/artext/simple_grey.png.meta +++ b/Assets/Resources/lit_spheres/artext/simple_grey.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/sombre.png.meta b/Assets/Resources/lit_spheres/artext/sombre.png.meta index 6cffbafc..87999955 100644 --- a/Assets/Resources/lit_spheres/artext/sombre.png.meta +++ b/Assets/Resources/lit_spheres/artext/sombre.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/transp_01.png.meta b/Assets/Resources/lit_spheres/artext/transp_01.png.meta index b8fd531a..50e8a033 100644 --- a/Assets/Resources/lit_spheres/artext/transp_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/transp_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/transp_02.png.meta b/Assets/Resources/lit_spheres/artext/transp_02.png.meta index e87d3ab6..61e645cf 100644 --- a/Assets/Resources/lit_spheres/artext/transp_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/transp_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/transp_03.png.meta b/Assets/Resources/lit_spheres/artext/transp_03.png.meta index 60916214..14890d38 100644 --- a/Assets/Resources/lit_spheres/artext/transp_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/transp_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/transp_04.png.meta b/Assets/Resources/lit_spheres/artext/transp_04.png.meta index 2270b141..afbd99b0 100644 --- a/Assets/Resources/lit_spheres/artext/transp_04.png.meta +++ b/Assets/Resources/lit_spheres/artext/transp_04.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/transparent.png.meta b/Assets/Resources/lit_spheres/artext/transparent.png.meta index 3a8cffce..a7bf9d47 100644 --- a/Assets/Resources/lit_spheres/artext/transparent.png.meta +++ b/Assets/Resources/lit_spheres/artext/transparent.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/verrebuz.png.meta b/Assets/Resources/lit_spheres/artext/verrebuz.png.meta index e59d8adf..8e616643 100644 --- a/Assets/Resources/lit_spheres/artext/verrebuz.png.meta +++ b/Assets/Resources/lit_spheres/artext/verrebuz.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/verreorange.png.meta b/Assets/Resources/lit_spheres/artext/verreorange.png.meta index 5b978f68..d6f9f9ab 100644 --- a/Assets/Resources/lit_spheres/artext/verreorange.png.meta +++ b/Assets/Resources/lit_spheres/artext/verreorange.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/vert.png.meta b/Assets/Resources/lit_spheres/artext/vert.png.meta index 09fa1e58..4b200a0d 100644 --- a/Assets/Resources/lit_spheres/artext/vert.png.meta +++ b/Assets/Resources/lit_spheres/artext/vert.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/vertvelours.png.meta b/Assets/Resources/lit_spheres/artext/vertvelours.png.meta index 56744ce2..f9733998 100644 --- a/Assets/Resources/lit_spheres/artext/vertvelours.png.meta +++ b/Assets/Resources/lit_spheres/artext/vertvelours.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/violet.png.meta b/Assets/Resources/lit_spheres/artext/violet.png.meta index f180f6aa..c03decf9 100644 --- a/Assets/Resources/lit_spheres/artext/violet.png.meta +++ b/Assets/Resources/lit_spheres/artext/violet.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/water.png.meta b/Assets/Resources/lit_spheres/artext/water.png.meta index dc20d591..32b4b264 100644 --- a/Assets/Resources/lit_spheres/artext/water.png.meta +++ b/Assets/Resources/lit_spheres/artext/water.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/water1.png.meta b/Assets/Resources/lit_spheres/artext/water1.png.meta index 1821df30..3999decc 100644 --- a/Assets/Resources/lit_spheres/artext/water1.png.meta +++ b/Assets/Resources/lit_spheres/artext/water1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/water2.png.meta b/Assets/Resources/lit_spheres/artext/water2.png.meta index 45eb8880..09a890f7 100644 --- a/Assets/Resources/lit_spheres/artext/water2.png.meta +++ b/Assets/Resources/lit_spheres/artext/water2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/water3.png.meta b/Assets/Resources/lit_spheres/artext/water3.png.meta index df260b73..76dce036 100644 --- a/Assets/Resources/lit_spheres/artext/water3.png.meta +++ b/Assets/Resources/lit_spheres/artext/water3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/white_01.png.meta b/Assets/Resources/lit_spheres/artext/white_01.png.meta index 32e4eb10..00395235 100644 --- a/Assets/Resources/lit_spheres/artext/white_01.png.meta +++ b/Assets/Resources/lit_spheres/artext/white_01.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/white_02.png.meta b/Assets/Resources/lit_spheres/artext/white_02.png.meta index e881b87d..29346970 100644 --- a/Assets/Resources/lit_spheres/artext/white_02.png.meta +++ b/Assets/Resources/lit_spheres/artext/white_02.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/white_03.png.meta b/Assets/Resources/lit_spheres/artext/white_03.png.meta index e1ce2903..f9c5378c 100644 --- a/Assets/Resources/lit_spheres/artext/white_03.png.meta +++ b/Assets/Resources/lit_spheres/artext/white_03.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artext/x.png.meta b/Assets/Resources/lit_spheres/artext/x.png.meta index 1d99d698..bf0532bc 100644 --- a/Assets/Resources/lit_spheres/artext/x.png.meta +++ b/Assets/Resources/lit_spheres/artext/x.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 + filterMode: 1 aniso: 1 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artistic/Gloss_Black.png.meta b/Assets/Resources/lit_spheres/artistic/Gloss_Black.png.meta index 88020368..a0994e67 100644 --- a/Assets/Resources/lit_spheres/artistic/Gloss_Black.png.meta +++ b/Assets/Resources/lit_spheres/artistic/Gloss_Black.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/artistic/carspen2.jpg.meta b/Assets/Resources/lit_spheres/artistic/carspen2.jpg.meta index a395420a..af473c2f 100644 --- a/Assets/Resources/lit_spheres/artistic/carspen2.jpg.meta +++ b/Assets/Resources/lit_spheres/artistic/carspen2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/artistic/caspern.png.meta b/Assets/Resources/lit_spheres/artistic/caspern.png.meta index 66f86d17..03a18197 100644 --- a/Assets/Resources/lit_spheres/artistic/caspern.png.meta +++ b/Assets/Resources/lit_spheres/artistic/caspern.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/artistic/images.jpg.meta b/Assets/Resources/lit_spheres/artistic/images.jpg.meta index fb611339..209828ac 100644 --- a/Assets/Resources/lit_spheres/artistic/images.jpg.meta +++ b/Assets/Resources/lit_spheres/artistic/images.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/artistic/tableau-moderne-bille.jpg.meta b/Assets/Resources/lit_spheres/artistic/tableau-moderne-bille.jpg.meta index a0e0afa7..f24e12be 100644 --- a/Assets/Resources/lit_spheres/artistic/tableau-moderne-bille.jpg.meta +++ b/Assets/Resources/lit_spheres/artistic/tableau-moderne-bille.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/em1.png.meta b/Assets/Resources/lit_spheres/bio/em1.png.meta index 4a26449a..bb03d094 100644 --- a/Assets/Resources/lit_spheres/bio/em1.png.meta +++ b/Assets/Resources/lit_spheres/bio/em1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/em2.png.meta b/Assets/Resources/lit_spheres/bio/em2.png.meta index 20f52cdb..965ba198 100644 --- a/Assets/Resources/lit_spheres/bio/em2.png.meta +++ b/Assets/Resources/lit_spheres/bio/em2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/em3.png.meta b/Assets/Resources/lit_spheres/bio/em3.png.meta index bc882202..adac1da8 100644 --- a/Assets/Resources/lit_spheres/bio/em3.png.meta +++ b/Assets/Resources/lit_spheres/bio/em3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo1.png.meta b/Assets/Resources/lit_spheres/bio/fluo1.png.meta index 22302ee0..987b7345 100644 --- a/Assets/Resources/lit_spheres/bio/fluo1.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo10.png.meta b/Assets/Resources/lit_spheres/bio/fluo10.png.meta index e9a293c6..7c92e2a1 100644 --- a/Assets/Resources/lit_spheres/bio/fluo10.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo10.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 0 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo2.png.meta b/Assets/Resources/lit_spheres/bio/fluo2.png.meta index 54b78dfc..2435a88b 100644 --- a/Assets/Resources/lit_spheres/bio/fluo2.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo3.png.meta b/Assets/Resources/lit_spheres/bio/fluo3.png.meta index 78d40c6b..243e4366 100644 --- a/Assets/Resources/lit_spheres/bio/fluo3.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo4.png.meta b/Assets/Resources/lit_spheres/bio/fluo4.png.meta index 74c7154a..6d5ebeff 100644 --- a/Assets/Resources/lit_spheres/bio/fluo4.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo4.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo5.png.meta b/Assets/Resources/lit_spheres/bio/fluo5.png.meta index 0e2a0b02..139eff11 100644 --- a/Assets/Resources/lit_spheres/bio/fluo5.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo5.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo6.png.meta b/Assets/Resources/lit_spheres/bio/fluo6.png.meta index 28ebef3c..b92384b5 100644 --- a/Assets/Resources/lit_spheres/bio/fluo6.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo6.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo7.png.meta b/Assets/Resources/lit_spheres/bio/fluo7.png.meta index 68005a44..bdfc738a 100644 --- a/Assets/Resources/lit_spheres/bio/fluo7.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo7.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo8.png.meta b/Assets/Resources/lit_spheres/bio/fluo8.png.meta index 4e403673..7cb0bf38 100644 --- a/Assets/Resources/lit_spheres/bio/fluo8.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo8.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/bio/fluo9.png.meta b/Assets/Resources/lit_spheres/bio/fluo9.png.meta index f648a017..59f9f9b1 100644 --- a/Assets/Resources/lit_spheres/bio/fluo9.png.meta +++ b/Assets/Resources/lit_spheres/bio/fluo9.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 0 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/dessin/0-2.jpg.meta b/Assets/Resources/lit_spheres/dessin/0-2.jpg.meta index f4c27e87..20fa9440 100644 --- a/Assets/Resources/lit_spheres/dessin/0-2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/0-2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/05-how-shading-crosshatch-3b.jpg.meta b/Assets/Resources/lit_spheres/dessin/05-how-shading-crosshatch-3b.jpg.meta index f423afb4..f0eed288 100644 --- a/Assets/Resources/lit_spheres/dessin/05-how-shading-crosshatch-3b.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/05-how-shading-crosshatch-3b.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 256 + maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/287457d8aba0f677ac18a913b9f0f441.jpg.meta b/Assets/Resources/lit_spheres/dessin/287457d8aba0f677ac18a913b9f0f441.jpg.meta index 09c67d1d..492fb4d0 100644 --- a/Assets/Resources/lit_spheres/dessin/287457d8aba0f677ac18a913b9f0f441.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/287457d8aba0f677ac18a913b9f0f441.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-2.jpg.meta b/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-2.jpg.meta index ce181e98..86e71865 100644 --- a/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-7.jpg.meta b/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-7.jpg.meta index d648093a..7f440cdc 100644 --- a/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-7.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-7.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 512 + maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-8.jpg.meta b/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-8.jpg.meta index 17e14e0b..9fe944bb 100644 --- a/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-8.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/400px-Draw-a-Sphere-Step-8.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/74027.png.meta b/Assets/Resources/lit_spheres/dessin/74027.png.meta index d14db130..30ec0916 100644 --- a/Assets/Resources/lit_spheres/dessin/74027.png.meta +++ b/Assets/Resources/lit_spheres/dessin/74027.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/8289_Making_a_metallic_sphere_.png.meta b/Assets/Resources/lit_spheres/dessin/8289_Making_a_metallic_sphere_.png.meta index 0101c80a..cc655014 100644 --- a/Assets/Resources/lit_spheres/dessin/8289_Making_a_metallic_sphere_.png.meta +++ b/Assets/Resources/lit_spheres/dessin/8289_Making_a_metallic_sphere_.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 - textureFormat: -3 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 2 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 0 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/CharcoalSphere.jpg.meta b/Assets/Resources/lit_spheres/dessin/CharcoalSphere.jpg.meta index f0a7dbe9..efa81381 100644 --- a/Assets/Resources/lit_spheres/dessin/CharcoalSphere.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/CharcoalSphere.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/E-C-S (386).PNG.meta b/Assets/Resources/lit_spheres/dessin/E-C-S (386).PNG.meta index 63357d23..f58f82a3 100644 --- a/Assets/Resources/lit_spheres/dessin/E-C-S (386).PNG.meta +++ b/Assets/Resources/lit_spheres/dessin/E-C-S (386).PNG.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG01.jpg.meta b/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG01.jpg.meta index 4badc2c2..77cd74df 100644 --- a/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG01.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG01.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG21.jpg.meta b/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG21.jpg.meta index f454aa66..59576028 100644 --- a/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG21.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/GRD3_LS03_IMG21.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/GlhTq.png.meta b/Assets/Resources/lit_spheres/dessin/GlhTq.png.meta index 3709a617..97bce543 100644 --- a/Assets/Resources/lit_spheres/dessin/GlhTq.png.meta +++ b/Assets/Resources/lit_spheres/dessin/GlhTq.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/IMG_1339_2.jpg.meta b/Assets/Resources/lit_spheres/dessin/IMG_1339_2.jpg.meta index f44ce2d1..fb851a5c 100644 --- a/Assets/Resources/lit_spheres/dessin/IMG_1339_2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/IMG_1339_2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/IMG_1345_2.jpg.meta b/Assets/Resources/lit_spheres/dessin/IMG_1345_2.jpg.meta index 51cb7130..9583ae8f 100644 --- a/Assets/Resources/lit_spheres/dessin/IMG_1345_2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/IMG_1345_2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/Scan23c.jpg.meta b/Assets/Resources/lit_spheres/dessin/Scan23c.jpg.meta index ee3ab4f7..70347b2c 100644 --- a/Assets/Resources/lit_spheres/dessin/Scan23c.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/Scan23c.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/Scan23d.jpg.meta b/Assets/Resources/lit_spheres/dessin/Scan23d.jpg.meta index 009f3992..a11ba0a4 100644 --- a/Assets/Resources/lit_spheres/dessin/Scan23d.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/Scan23d.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/Sketch 10 - sphere1.jpg.meta b/Assets/Resources/lit_spheres/dessin/Sketch 10 - sphere1.jpg.meta index 2aa6ccbc..d52e0d3d 100644 --- a/Assets/Resources/lit_spheres/dessin/Sketch 10 - sphere1.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/Sketch 10 - sphere1.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/Sketch 9 - sphere.jpg.meta b/Assets/Resources/lit_spheres/dessin/Sketch 9 - sphere.jpg.meta index 34704e84..6cfdab8b 100644 --- a/Assets/Resources/lit_spheres/dessin/Sketch 9 - sphere.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/Sketch 9 - sphere.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/SphereAndShadow.jpg.meta b/Assets/Resources/lit_spheres/dessin/SphereAndShadow.jpg.meta index 78306379..5aa90609 100644 --- a/Assets/Resources/lit_spheres/dessin/SphereAndShadow.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/SphereAndShadow.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800.jpg.meta b/Assets/Resources/lit_spheres/dessin/article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800.jpg.meta index 62676a7d..fba8e6af 100644 --- a/Assets/Resources/lit_spheres/dessin/article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/b11.jpg.meta b/Assets/Resources/lit_spheres/dessin/b11.jpg.meta index de43a17e..12ccac70 100644 --- a/Assets/Resources/lit_spheres/dessin/b11.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/b11.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/basic_shapes_monochrome_oil_painting-(81).jpg.meta b/Assets/Resources/lit_spheres/dessin/basic_shapes_monochrome_oil_painting-(81).jpg.meta index 48863658..b969c991 100644 --- a/Assets/Resources/lit_spheres/dessin/basic_shapes_monochrome_oil_painting-(81).jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/basic_shapes_monochrome_oil_painting-(81).jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 3 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/blue.png.meta b/Assets/Resources/lit_spheres/dessin/blue.png.meta index 07e31236..30d8ab07 100644 --- a/Assets/Resources/lit_spheres/dessin/blue.png.meta +++ b/Assets/Resources/lit_spheres/dessin/blue.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 - textureFormat: -3 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/bruckner.png.meta b/Assets/Resources/lit_spheres/dessin/bruckner.png.meta index 12a7a194..f7d78240 100644 --- a/Assets/Resources/lit_spheres/dessin/bruckner.png.meta +++ b/Assets/Resources/lit_spheres/dessin/bruckner.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/chiaroscuro-valuescale.jpg.meta b/Assets/Resources/lit_spheres/dessin/chiaroscuro-valuescale.jpg.meta index 3fb26d0c..8a48ffad 100644 --- a/Assets/Resources/lit_spheres/dessin/chiaroscuro-valuescale.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/chiaroscuro-valuescale.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/cracked_sphere.jpg.meta b/Assets/Resources/lit_spheres/dessin/cracked_sphere.jpg.meta index 3f36d5c4..b11adca5 100644 --- a/Assets/Resources/lit_spheres/dessin/cracked_sphere.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/cracked_sphere.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/crayon1.png.meta b/Assets/Resources/lit_spheres/dessin/crayon1.png.meta index 236dd1fc..2cf1d2ae 100644 --- a/Assets/Resources/lit_spheres/dessin/crayon1.png.meta +++ b/Assets/Resources/lit_spheres/dessin/crayon1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.3-800X800.jpg.meta b/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.3-800X800.jpg.meta index 87178a48..79fc32f8 100644 --- a/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.3-800X800.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.3-800X800.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 512 + maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.4-800X800.jpg.meta b/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.4-800X800.jpg.meta index 7cdd858a..715c47ed 100644 --- a/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.4-800X800.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/draw-shade-spheres-1.4-800X800.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/draw3.png.meta b/Assets/Resources/lit_spheres/dessin/draw3.png.meta index 82cdb9de..9c935cdc 100644 --- a/Assets/Resources/lit_spheres/dessin/draw3.png.meta +++ b/Assets/Resources/lit_spheres/dessin/draw3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 - textureFormat: -3 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/droppedImage.jpg.meta b/Assets/Resources/lit_spheres/dessin/droppedImage.jpg.meta index 128ca720..c11f01c3 100644 --- a/Assets/Resources/lit_spheres/dessin/droppedImage.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/droppedImage.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 2.jpg.meta b/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 2.jpg.meta index 1665d43d..8e129d95 100644 --- a/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 3.jpg.meta b/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 3.jpg.meta index a82eaeb3..ca1a71fe 100644 --- a/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 3.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/escher_3_spheres_1 3.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/ex2_2_carter.png.meta b/Assets/Resources/lit_spheres/dessin/ex2_2_carter.png.meta index 5bb6a2e0..cfa7cb72 100644 --- a/Assets/Resources/lit_spheres/dessin/ex2_2_carter.png.meta +++ b/Assets/Resources/lit_spheres/dessin/ex2_2_carter.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/exercise2.jpg.meta b/Assets/Resources/lit_spheres/dessin/exercise2.jpg.meta index 1a949285..794cdb49 100644 --- a/Assets/Resources/lit_spheres/dessin/exercise2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/exercise2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/eye2.jpg.meta b/Assets/Resources/lit_spheres/dessin/eye2.jpg.meta index d985d5e3..dd3a964d 100644 --- a/Assets/Resources/lit_spheres/dessin/eye2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/eye2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/fig14-charcoal-sphere.jpg.meta b/Assets/Resources/lit_spheres/dessin/fig14-charcoal-sphere.jpg.meta index 03166f27..addcc93a 100644 --- a/Assets/Resources/lit_spheres/dessin/fig14-charcoal-sphere.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/fig14-charcoal-sphere.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/georgetownatelier_sphere_posterized.jpg.meta b/Assets/Resources/lit_spheres/dessin/georgetownatelier_sphere_posterized.jpg.meta index 6b6c84d6..f9d31f22 100644 --- a/Assets/Resources/lit_spheres/dessin/georgetownatelier_sphere_posterized.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/georgetownatelier_sphere_posterized.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/gray.png.meta b/Assets/Resources/lit_spheres/dessin/gray.png.meta index 240846f8..6500f29e 100644 --- a/Assets/Resources/lit_spheres/dessin/gray.png.meta +++ b/Assets/Resources/lit_spheres/dessin/gray.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/hand_with_reflecting_sphere.jpg.meta b/Assets/Resources/lit_spheres/dessin/hand_with_reflecting_sphere.jpg.meta index fd954a58..4d7490d2 100644 --- a/Assets/Resources/lit_spheres/dessin/hand_with_reflecting_sphere.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/hand_with_reflecting_sphere.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/hayward_sphere.png.meta b/Assets/Resources/lit_spheres/dessin/hayward_sphere.png.meta index c7cd83dd..bc22a008 100644 --- a/Assets/Resources/lit_spheres/dessin/hayward_sphere.png.meta +++ b/Assets/Resources/lit_spheres/dessin/hayward_sphere.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 0 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee.png.meta b/Assets/Resources/lit_spheres/dessin/how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee.png.meta index 18583ea3..e1dd8c36 100644 --- a/Assets/Resources/lit_spheres/dessin/how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee.png.meta +++ b/Assets/Resources/lit_spheres/dessin/how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 128 + maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/hqdefault.jpg.meta b/Assets/Resources/lit_spheres/dessin/hqdefault.jpg.meta index fecaf8be..f0c3b5c6 100644 --- a/Assets/Resources/lit_spheres/dessin/hqdefault.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/hqdefault.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/images-7.jpeg.meta b/Assets/Resources/lit_spheres/dessin/images-7.jpeg.meta index fdb86107..c9c74ebe 100644 --- a/Assets/Resources/lit_spheres/dessin/images-7.jpeg.meta +++ b/Assets/Resources/lit_spheres/dessin/images-7.jpeg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 128 + maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/inks.png.meta b/Assets/Resources/lit_spheres/dessin/inks.png.meta index 988cc292..2e60d3ef 100644 --- a/Assets/Resources/lit_spheres/dessin/inks.png.meta +++ b/Assets/Resources/lit_spheres/dessin/inks.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/melon1.png.meta b/Assets/Resources/lit_spheres/dessin/melon1.png.meta index 4e210c8b..b505bad4 100644 --- a/Assets/Resources/lit_spheres/dessin/melon1.png.meta +++ b/Assets/Resources/lit_spheres/dessin/melon1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/mqdefault.jpg.meta b/Assets/Resources/lit_spheres/dessin/mqdefault.jpg.meta index 4db2b48a..0e4caec0 100644 --- a/Assets/Resources/lit_spheres/dessin/mqdefault.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/mqdefault.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/nancy_sphere.png.meta b/Assets/Resources/lit_spheres/dessin/nancy_sphere.png.meta index a61d98f6..8861e5b0 100644 --- a/Assets/Resources/lit_spheres/dessin/nancy_sphere.png.meta +++ b/Assets/Resources/lit_spheres/dessin/nancy_sphere.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/pointillism 2.jpg.meta b/Assets/Resources/lit_spheres/dessin/pointillism 2.jpg.meta index 6cf3f3d6..cf829278 100644 --- a/Assets/Resources/lit_spheres/dessin/pointillism 2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/pointillism 2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/pointillism 3.jpg.meta b/Assets/Resources/lit_spheres/dessin/pointillism 3.jpg.meta index 93ac55d0..0763a023 100644 --- a/Assets/Resources/lit_spheres/dessin/pointillism 3.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/pointillism 3.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/rZ0eX.png.meta b/Assets/Resources/lit_spheres/dessin/rZ0eX.png.meta index 364ab596..6c6c6437 100644 --- a/Assets/Resources/lit_spheres/dessin/rZ0eX.png.meta +++ b/Assets/Resources/lit_spheres/dessin/rZ0eX.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/shaded-sphere-1.jpg.meta b/Assets/Resources/lit_spheres/dessin/shaded-sphere-1.jpg.meta index 835853d8..08620b7b 100644 --- a/Assets/Resources/lit_spheres/dessin/shaded-sphere-1.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/shaded-sphere-1.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/source.jpg.meta b/Assets/Resources/lit_spheres/dessin/source.jpg.meta index b40f9f8c..629e3d99 100644 --- a/Assets/Resources/lit_spheres/dessin/source.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/source.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sph_draw_MC.png.meta b/Assets/Resources/lit_spheres/dessin/sph_draw_MC.png.meta index bbedcc7b..18250bb5 100644 --- a/Assets/Resources/lit_spheres/dessin/sph_draw_MC.png.meta +++ b/Assets/Resources/lit_spheres/dessin/sph_draw_MC.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-1j.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere-1j.jpg.meta index 66b1e8df..da63c654 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-1j.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-1j.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-1p.png.meta b/Assets/Resources/lit_spheres/dessin/sphere-1p.png.meta index e3d3d901..40f033f9 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-1p.png.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-1p.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-2j.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere-2j.jpg.meta index 5d8cd13f..3626e4bd 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-2j.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-2j.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-2p.png.meta b/Assets/Resources/lit_spheres/dessin/sphere-2p.png.meta index edc8c4cd..b82efe00 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-2p.png.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-2p.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-_tutorial_6.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere-_tutorial_6.jpg.meta index 2598fecf..b4ac7972 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-_tutorial_6.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-_tutorial_6.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-drawingj1.jpeg.meta b/Assets/Resources/lit_spheres/dessin/sphere-drawingj1.jpeg.meta index a4157d38..5764a531 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-drawingj1.jpeg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-drawingj1.jpeg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere-exercise-3.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere-exercise-3.jpg.meta index 076f7d41..6ab4823d 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere-exercise-3.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere-exercise-3.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere05.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere05.jpg.meta index 676a1c38..aa47be2a 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere05.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere05.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere1_1.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere1_1.jpg.meta index daf6abb5..36486c01 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere1_1.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere1_1.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere1copy.png.meta b/Assets/Resources/lit_spheres/dessin/sphere1copy.png.meta index 4ad9e249..d582617d 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere1copy.png.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere1copy.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere2-1.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere2-1.jpg.meta index 2612855a..3fcd1c11 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere2-1.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere2-1.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere2copykw6.jpg.meta b/Assets/Resources/lit_spheres/dessin/sphere2copykw6.jpg.meta index be1d46db..f80f4cda 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere2copykw6.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere2copykw6.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere2p.png.meta b/Assets/Resources/lit_spheres/dessin/sphere2p.png.meta index 5fec7abe..2db090a7 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere2p.png.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere2p.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/sphere_1_mth.png.meta b/Assets/Resources/lit_spheres/dessin/sphere_1_mth.png.meta index 09160dbe..c817af98 100644 --- a/Assets/Resources/lit_spheres/dessin/sphere_1_mth.png.meta +++ b/Assets/Resources/lit_spheres/dessin/sphere_1_mth.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/spheregif.png.meta b/Assets/Resources/lit_spheres/dessin/spheregif.png.meta index 69e8bae8..c9aa7417 100644 --- a/Assets/Resources/lit_spheres/dessin/spheregif.png.meta +++ b/Assets/Resources/lit_spheres/dessin/spheregif.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/spheregif2.png.meta b/Assets/Resources/lit_spheres/dessin/spheregif2.png.meta index 2586e30a..dcdd205e 100644 --- a/Assets/Resources/lit_spheres/dessin/spheregif2.png.meta +++ b/Assets/Resources/lit_spheres/dessin/spheregif2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 3 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/spherej.jpg.meta b/Assets/Resources/lit_spheres/dessin/spherej.jpg.meta index e1c55255..23d4446b 100644 --- a/Assets/Resources/lit_spheres/dessin/spherej.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/spherej.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/spherewhatches.png.meta b/Assets/Resources/lit_spheres/dessin/spherewhatches.png.meta index 4a128937..d0e733fc 100644 --- a/Assets/Resources/lit_spheres/dessin/spherewhatches.png.meta +++ b/Assets/Resources/lit_spheres/dessin/spherewhatches.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/starter sphere240 3.jpg.meta b/Assets/Resources/lit_spheres/dessin/starter sphere240 3.jpg.meta index bae48c95..cf9c1368 100644 --- a/Assets/Resources/lit_spheres/dessin/starter sphere240 3.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/starter sphere240 3.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/starter sphere240.jpg.meta b/Assets/Resources/lit_spheres/dessin/starter sphere240.jpg.meta index ee533de5..926b9514 100644 --- a/Assets/Resources/lit_spheres/dessin/starter sphere240.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/starter sphere240.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/tYIlA.jpg.meta b/Assets/Resources/lit_spheres/dessin/tYIlA.jpg.meta index 1d53c09c..02a9978a 100644 --- a/Assets/Resources/lit_spheres/dessin/tYIlA.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/tYIlA.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/toon.jpg.meta b/Assets/Resources/lit_spheres/dessin/toon.jpg.meta index 392a3b38..a18107a3 100644 --- a/Assets/Resources/lit_spheres/dessin/toon.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/toon.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 - textureFormat: -3 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/toon2.jpg.meta b/Assets/Resources/lit_spheres/dessin/toon2.jpg.meta index d09c99e9..096d4aa2 100644 --- a/Assets/Resources/lit_spheres/dessin/toon2.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/toon2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/tumblr_lsyq66Y15D1r0o2eb.png.meta b/Assets/Resources/lit_spheres/dessin/tumblr_lsyq66Y15D1r0o2eb.png.meta index e8b5942f..9d2a572b 100644 --- a/Assets/Resources/lit_spheres/dessin/tumblr_lsyq66Y15D1r0o2eb.png.meta +++ b/Assets/Resources/lit_spheres/dessin/tumblr_lsyq66Y15D1r0o2eb.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/dessin/zbVZE.jpg.meta b/Assets/Resources/lit_spheres/dessin/zbVZE.jpg.meta index a03b901b..37cf0716 100644 --- a/Assets/Resources/lit_spheres/dessin/zbVZE.jpg.meta +++ b/Assets/Resources/lit_spheres/dessin/zbVZE.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 0 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/divers/LitSphere_Example1.jpg.meta b/Assets/Resources/lit_spheres/divers/LitSphere_Example1.jpg.meta index 4c05b6a9..0525376f 100644 --- a/Assets/Resources/lit_spheres/divers/LitSphere_Example1.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/LitSphere_Example1.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/binary-sphere-logo.jpg.meta b/Assets/Resources/lit_spheres/divers/binary-sphere-logo.jpg.meta index b467c5a5..74a45a2d 100644 --- a/Assets/Resources/lit_spheres/divers/binary-sphere-logo.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/binary-sphere-logo.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 - textureFormat: -3 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: 2 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/divers/choco.png.meta b/Assets/Resources/lit_spheres/divers/choco.png.meta index 0f2ec9a4..73b85448 100644 --- a/Assets/Resources/lit_spheres/divers/choco.png.meta +++ b/Assets/Resources/lit_spheres/divers/choco.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/daphz0.png.meta b/Assets/Resources/lit_spheres/divers/daphz0.png.meta index b6ab21a5..69720186 100644 --- a/Assets/Resources/lit_spheres/divers/daphz0.png.meta +++ b/Assets/Resources/lit_spheres/divers/daphz0.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/divers/daphz05.png.meta b/Assets/Resources/lit_spheres/divers/daphz05.png.meta index 85de2d61..f4d1d5ab 100644 --- a/Assets/Resources/lit_spheres/divers/daphz05.png.meta +++ b/Assets/Resources/lit_spheres/divers/daphz05.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/divers/daphz1.jpg.meta b/Assets/Resources/lit_spheres/divers/daphz1.jpg.meta index 41555836..7008a95e 100644 --- a/Assets/Resources/lit_spheres/divers/daphz1.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/daphz1.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/daphz2.jpg.meta b/Assets/Resources/lit_spheres/divers/daphz2.jpg.meta index b758443e..58f5f8ee 100644 --- a/Assets/Resources/lit_spheres/divers/daphz2.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/daphz2.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/daphz3.jpg.meta b/Assets/Resources/lit_spheres/divers/daphz3.jpg.meta index baa400ec..5b3f61a0 100644 --- a/Assets/Resources/lit_spheres/divers/daphz3.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/daphz3.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/draw2.png.meta b/Assets/Resources/lit_spheres/divers/draw2.png.meta index 840bcd5c..3783ec1e 100644 --- a/Assets/Resources/lit_spheres/divers/draw2.png.meta +++ b/Assets/Resources/lit_spheres/divers/draw2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/divers/email.png.meta b/Assets/Resources/lit_spheres/divers/email.png.meta index 6d127c2b..55f05c1d 100644 --- a/Assets/Resources/lit_spheres/divers/email.png.meta +++ b/Assets/Resources/lit_spheres/divers/email.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/eye3.png.meta b/Assets/Resources/lit_spheres/divers/eye3.png.meta index 8e46ecb1..8f1536f4 100644 --- a/Assets/Resources/lit_spheres/divers/eye3.png.meta +++ b/Assets/Resources/lit_spheres/divers/eye3.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/eye3gray.png.meta b/Assets/Resources/lit_spheres/divers/eye3gray.png.meta index af21f41d..ffdd5d59 100644 --- a/Assets/Resources/lit_spheres/divers/eye3gray.png.meta +++ b/Assets/Resources/lit_spheres/divers/eye3gray.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/eye4.png.meta b/Assets/Resources/lit_spheres/divers/eye4.png.meta index dfa1961a..80e3d7f7 100644 --- a/Assets/Resources/lit_spheres/divers/eye4.png.meta +++ b/Assets/Resources/lit_spheres/divers/eye4.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/eyes2.png.meta b/Assets/Resources/lit_spheres/divers/eyes2.png.meta index 2e4e7a03..38af6244 100644 --- a/Assets/Resources/lit_spheres/divers/eyes2.png.meta +++ b/Assets/Resources/lit_spheres/divers/eyes2.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/eyes2gray.png.meta b/Assets/Resources/lit_spheres/divers/eyes2gray.png.meta index 9d434a06..fc73422d 100644 --- a/Assets/Resources/lit_spheres/divers/eyes2gray.png.meta +++ b/Assets/Resources/lit_spheres/divers/eyes2gray.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/eyes5.png.meta b/Assets/Resources/lit_spheres/divers/eyes5.png.meta index 53e420d7..6eba0cb8 100644 --- a/Assets/Resources/lit_spheres/divers/eyes5.png.meta +++ b/Assets/Resources/lit_spheres/divers/eyes5.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/gooch.jpg.meta b/Assets/Resources/lit_spheres/divers/gooch.jpg.meta index de4a176a..179b227d 100644 --- a/Assets/Resources/lit_spheres/divers/gooch.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/gooch.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/hexa.png.meta b/Assets/Resources/lit_spheres/divers/hexa.png.meta index 5ecc562c..7c30e9aa 100644 --- a/Assets/Resources/lit_spheres/divers/hexa.png.meta +++ b/Assets/Resources/lit_spheres/divers/hexa.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 - nPOTScale: 1 + wrapMode: 0 + nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/hyperballparticle4.png.meta b/Assets/Resources/lit_spheres/divers/hyperballparticle4.png.meta index 495ed9be..a04e2d39 100644 --- a/Assets/Resources/lit_spheres/divers/hyperballparticle4.png.meta +++ b/Assets/Resources/lit_spheres/divers/hyperballparticle4.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/hyperballparticlegray.png.meta b/Assets/Resources/lit_spheres/divers/hyperballparticlegray.png.meta index 6e3295f3..7bc40c5b 100644 --- a/Assets/Resources/lit_spheres/divers/hyperballparticlegray.png.meta +++ b/Assets/Resources/lit_spheres/divers/hyperballparticlegray.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/inks2.png.meta b/Assets/Resources/lit_spheres/divers/inks2.png.meta index 6c9b971c..418bac46 100644 --- a/Assets/Resources/lit_spheres/divers/inks2.png.meta +++ b/Assets/Resources/lit_spheres/divers/inks2.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/matcap_2.png.meta b/Assets/Resources/lit_spheres/divers/matcap_2.png.meta index b17774ad..244fc329 100644 --- a/Assets/Resources/lit_spheres/divers/matcap_2.png.meta +++ b/Assets/Resources/lit_spheres/divers/matcap_2.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/material37.png.meta b/Assets/Resources/lit_spheres/divers/material37.png.meta index 69b5bee8..d7af5413 100644 --- a/Assets/Resources/lit_spheres/divers/material37.png.meta +++ b/Assets/Resources/lit_spheres/divers/material37.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/noise.png.meta b/Assets/Resources/lit_spheres/divers/noise.png.meta index efe99e5e..b3e8c69e 100644 --- a/Assets/Resources/lit_spheres/divers/noise.png.meta +++ b/Assets/Resources/lit_spheres/divers/noise.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/round.png.meta b/Assets/Resources/lit_spheres/divers/round.png.meta index 7199d113..232a5f58 100644 --- a/Assets/Resources/lit_spheres/divers/round.png.meta +++ b/Assets/Resources/lit_spheres/divers/round.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/round1.png.meta b/Assets/Resources/lit_spheres/divers/round1.png.meta index 9e41bd0a..1b0e6ec1 100644 --- a/Assets/Resources/lit_spheres/divers/round1.png.meta +++ b/Assets/Resources/lit_spheres/divers/round1.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/round2.png.meta b/Assets/Resources/lit_spheres/divers/round2.png.meta index 12fc74c4..5ec531c9 100644 --- a/Assets/Resources/lit_spheres/divers/round2.png.meta +++ b/Assets/Resources/lit_spheres/divers/round2.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/round_alpha.png.meta b/Assets/Resources/lit_spheres/divers/round_alpha.png.meta index 08767806..527be12f 100644 --- a/Assets/Resources/lit_spheres/divers/round_alpha.png.meta +++ b/Assets/Resources/lit_spheres/divers/round_alpha.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/roundlight.png.meta b/Assets/Resources/lit_spheres/divers/roundlight.png.meta index 11b95444..50e1d02e 100644 --- a/Assets/Resources/lit_spheres/divers/roundlight.png.meta +++ b/Assets/Resources/lit_spheres/divers/roundlight.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/truc.jpg.meta b/Assets/Resources/lit_spheres/divers/truc.jpg.meta index 79ac5068..08664063 100644 --- a/Assets/Resources/lit_spheres/divers/truc.jpg.meta +++ b/Assets/Resources/lit_spheres/divers/truc.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/divers/vertical1.png.meta b/Assets/Resources/lit_spheres/divers/vertical1.png.meta index c0890535..8c4fa305 100644 --- a/Assets/Resources/lit_spheres/divers/vertical1.png.meta +++ b/Assets/Resources/lit_spheres/divers/vertical1.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/ballon.png.meta b/Assets/Resources/lit_spheres/fun/ballon.png.meta index bff24410..91c60bc3 100644 --- a/Assets/Resources/lit_spheres/fun/ballon.png.meta +++ b/Assets/Resources/lit_spheres/fun/ballon.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/china1.png.meta b/Assets/Resources/lit_spheres/fun/china1.png.meta index 73e36944..54162aff 100644 --- a/Assets/Resources/lit_spheres/fun/china1.png.meta +++ b/Assets/Resources/lit_spheres/fun/china1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/china2.png.meta b/Assets/Resources/lit_spheres/fun/china2.png.meta index 38e7f198..0dc9abfa 100644 --- a/Assets/Resources/lit_spheres/fun/china2.png.meta +++ b/Assets/Resources/lit_spheres/fun/china2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/euro1.png.meta b/Assets/Resources/lit_spheres/fun/euro1.png.meta index 1e42d855..c25f8799 100644 --- a/Assets/Resources/lit_spheres/fun/euro1.png.meta +++ b/Assets/Resources/lit_spheres/fun/euro1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/explode1.png.meta b/Assets/Resources/lit_spheres/fun/explode1.png.meta index 01641771..e8070ed5 100644 --- a/Assets/Resources/lit_spheres/fun/explode1.png.meta +++ b/Assets/Resources/lit_spheres/fun/explode1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/head1.png.meta b/Assets/Resources/lit_spheres/fun/head1.png.meta index 10fd05bc..ad8a6ded 100644 --- a/Assets/Resources/lit_spheres/fun/head1.png.meta +++ b/Assets/Resources/lit_spheres/fun/head1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 2 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/head2.png.meta b/Assets/Resources/lit_spheres/fun/head2.png.meta index 694d525b..24c927ac 100644 --- a/Assets/Resources/lit_spheres/fun/head2.png.meta +++ b/Assets/Resources/lit_spheres/fun/head2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 2 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/heart1.png.meta b/Assets/Resources/lit_spheres/fun/heart1.png.meta index 7849cc5e..e378e306 100644 --- a/Assets/Resources/lit_spheres/fun/heart1.png.meta +++ b/Assets/Resources/lit_spheres/fun/heart1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/pig1.png.meta b/Assets/Resources/lit_spheres/fun/pig1.png.meta index 8be615d4..98aaadcf 100644 --- a/Assets/Resources/lit_spheres/fun/pig1.png.meta +++ b/Assets/Resources/lit_spheres/fun/pig1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/pumpkin1.png.meta b/Assets/Resources/lit_spheres/fun/pumpkin1.png.meta index 0bf77b99..3c90bdaa 100644 --- a/Assets/Resources/lit_spheres/fun/pumpkin1.png.meta +++ b/Assets/Resources/lit_spheres/fun/pumpkin1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/skull1.png.meta b/Assets/Resources/lit_spheres/fun/skull1.png.meta index d0acb60a..8bbdb8f9 100644 --- a/Assets/Resources/lit_spheres/fun/skull1.png.meta +++ b/Assets/Resources/lit_spheres/fun/skull1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/skull2.png.meta b/Assets/Resources/lit_spheres/fun/skull2.png.meta index 5ce3f77c..bda66416 100644 --- a/Assets/Resources/lit_spheres/fun/skull2.png.meta +++ b/Assets/Resources/lit_spheres/fun/skull2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/fun/skull3.png.meta b/Assets/Resources/lit_spheres/fun/skull3.png.meta index 18e06f06..81481740 100644 --- a/Assets/Resources/lit_spheres/fun/skull3.png.meta +++ b/Assets/Resources/lit_spheres/fun/skull3.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 wrapMode: 1 - nPOTScale: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/glass/glass.png.meta b/Assets/Resources/lit_spheres/glass/glass.png.meta index f18e1ffb..fbb94e51 100644 --- a/Assets/Resources/lit_spheres/glass/glass.png.meta +++ b/Assets/Resources/lit_spheres/glass/glass.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/glass/glass2.jpg.meta b/Assets/Resources/lit_spheres/glass/glass2.jpg.meta index b1812f1c..ba3043ad 100644 --- a/Assets/Resources/lit_spheres/glass/glass2.jpg.meta +++ b/Assets/Resources/lit_spheres/glass/glass2.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/glass/glassbw.jpg.meta b/Assets/Resources/lit_spheres/glass/glassbw.jpg.meta index 65f458fa..cb21b892 100644 --- a/Assets/Resources/lit_spheres/glass/glassbw.jpg.meta +++ b/Assets/Resources/lit_spheres/glass/glassbw.jpg.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/metal/bille-en-acier-359590.jpg b/Assets/Resources/lit_spheres/metal/bille-en-acier-359590.jpg index d40de887f3cec8c0b6d0fdf726c3c1a34edde115..3553f340476135b8299b1c2d45f0e4e2ec4b5729 100644 GIT binary patch literal 25915 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 bpz0c33a6>=st;1(fjPLvv@u6Vf`9+nLS>Vl literal 21645 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 jatIN<5dN2jz0ZH)jNtmg~shI!Ia^DLe#|N|k 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 diff --git a/Assets/Resources/lit_spheres/organic/anemone.jpg.meta b/Assets/Resources/lit_spheres/organic/anemone.jpg.meta index 8afd1cde..a35dc77d 100644 --- a/Assets/Resources/lit_spheres/organic/anemone.jpg.meta +++ b/Assets/Resources/lit_spheres/organic/anemone.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 3 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/blood2.png.meta b/Assets/Resources/lit_spheres/organic/blood2.png.meta index 663da265..3daf0336 100644 --- a/Assets/Resources/lit_spheres/organic/blood2.png.meta +++ b/Assets/Resources/lit_spheres/organic/blood2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 - textureFormat: -3 + seamlessCubemap: 0 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/bone.png.meta b/Assets/Resources/lit_spheres/organic/bone.png.meta index 8d107de9..8cc88d8c 100644 --- a/Assets/Resources/lit_spheres/organic/bone.png.meta +++ b/Assets/Resources/lit_spheres/organic/bone.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 - textureFormat: -3 + seamlessCubemap: 0 + textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/leaves1.png.meta b/Assets/Resources/lit_spheres/organic/leaves1.png.meta index 647c3f76..cb6f8e2b 100644 --- a/Assets/Resources/lit_spheres/organic/leaves1.png.meta +++ b/Assets/Resources/lit_spheres/organic/leaves1.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/nobs1.png.meta b/Assets/Resources/lit_spheres/organic/nobs1.png.meta index da2ed1b6..c52d5447 100644 --- a/Assets/Resources/lit_spheres/organic/nobs1.png.meta +++ b/Assets/Resources/lit_spheres/organic/nobs1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 2 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/nobs2.png.meta b/Assets/Resources/lit_spheres/organic/nobs2.png.meta index 342e8e95..eba55d97 100644 --- a/Assets/Resources/lit_spheres/organic/nobs2.png.meta +++ b/Assets/Resources/lit_spheres/organic/nobs2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/skin.png.meta b/Assets/Resources/lit_spheres/organic/skin.png.meta index 9aa77fe2..4003f3a9 100644 --- a/Assets/Resources/lit_spheres/organic/skin.png.meta +++ b/Assets/Resources/lit_spheres/organic/skin.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/organic/spike1.png.meta b/Assets/Resources/lit_spheres/organic/spike1.png.meta index e794be2a..659146fc 100644 --- a/Assets/Resources/lit_spheres/organic/spike1.png.meta +++ b/Assets/Resources/lit_spheres/organic/spike1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/spike2.png.meta b/Assets/Resources/lit_spheres/organic/spike2.png.meta index 89d1c0ca..ad72cb9d 100644 --- a/Assets/Resources/lit_spheres/organic/spike2.png.meta +++ b/Assets/Resources/lit_spheres/organic/spike2.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/splinter1.png.meta b/Assets/Resources/lit_spheres/organic/splinter1.png.meta index 6c39d2f3..df0bd00f 100644 --- a/Assets/Resources/lit_spheres/organic/splinter1.png.meta +++ b/Assets/Resources/lit_spheres/organic/splinter1.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/vessel.png.meta b/Assets/Resources/lit_spheres/organic/vessel.png.meta index 30d6d3f7..e003ce53 100644 --- a/Assets/Resources/lit_spheres/organic/vessel.png.meta +++ b/Assets/Resources/lit_spheres/organic/vessel.png.meta @@ -4,7 +4,7 @@ TextureImporter: serializedVersion: 2 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 linearTexture: 0 correctGamma: 0 fadeOut: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: -1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: -1 + wrapMode: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: -1 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/organic/wool1.png.meta b/Assets/Resources/lit_spheres/organic/wool1.png.meta index 5194365c..fcf679d9 100644 --- a/Assets/Resources/lit_spheres/organic/wool1.png.meta +++ b/Assets/Resources/lit_spheres/organic/wool1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,18 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Resources/lit_spheres/psurftex/1396091264285309.jpg.meta b/Assets/Resources/lit_spheres/psurftex/1396091264285309.jpg.meta index dad6f2ce..8b051b96 100644 --- a/Assets/Resources/lit_spheres/psurftex/1396091264285309.jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/1396091264285309.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/2-photos-sphere 2.jpg.meta b/Assets/Resources/lit_spheres/psurftex/2-photos-sphere 2.jpg.meta index c6d06c11..db645456 100644 --- a/Assets/Resources/lit_spheres/psurftex/2-photos-sphere 2.jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/2-photos-sphere 2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/2-photos-sphere.jpg.meta b/Assets/Resources/lit_spheres/psurftex/2-photos-sphere.jpg.meta index 02901537..43f36055 100644 --- a/Assets/Resources/lit_spheres/psurftex/2-photos-sphere.jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/2-photos-sphere.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/basic_shapes_monochrome_oil_painting-(0).jpg.meta b/Assets/Resources/lit_spheres/psurftex/basic_shapes_monochrome_oil_painting-(0).jpg.meta index ba913dc5..cfe2e264 100644 --- a/Assets/Resources/lit_spheres/psurftex/basic_shapes_monochrome_oil_painting-(0).jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/basic_shapes_monochrome_oil_painting-(0).jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/shading-sphere-photo-005.JPG.meta b/Assets/Resources/lit_spheres/psurftex/shading-sphere-photo-005.JPG.meta index 79aab636..8d51cdb8 100644 --- a/Assets/Resources/lit_spheres/psurftex/shading-sphere-photo-005.JPG.meta +++ b/Assets/Resources/lit_spheres/psurftex/shading-sphere-photo-005.JPG.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/silvery2.png.meta b/Assets/Resources/lit_spheres/psurftex/silvery2.png.meta index 3fb0f948..3348f957 100644 --- a/Assets/Resources/lit_spheres/psurftex/silvery2.png.meta +++ b/Assets/Resources/lit_spheres/psurftex/silvery2.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/sphere-drawing-reference.jpg.meta b/Assets/Resources/lit_spheres/psurftex/sphere-drawing-reference.jpg.meta index e4020318..737a3f40 100644 --- a/Assets/Resources/lit_spheres/psurftex/sphere-drawing-reference.jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/sphere-drawing-reference.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/starter sphere240 2.jpg.meta b/Assets/Resources/lit_spheres/psurftex/starter sphere240 2.jpg.meta index ce012ca2..7ff3b4d8 100644 --- a/Assets/Resources/lit_spheres/psurftex/starter sphere240 2.jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/starter sphere240 2.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/psurftex/thumbnail-140x140-ehow-images-a08-49-it-draw-planets-800x800.jpg.meta b/Assets/Resources/lit_spheres/psurftex/thumbnail-140x140-ehow-images-a08-49-it-draw-planets-800x800.jpg.meta index 645dd25a..3f90bb54 100644 --- a/Assets/Resources/lit_spheres/psurftex/thumbnail-140x140-ehow-images-a08-49-it-draw-planets-800x800.jpg.meta +++ b/Assets/Resources/lit_spheres/psurftex/thumbnail-140x140-ehow-images-a08-49-it-draw-planets-800x800.jpg.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/wood/sph_orange_MC.png.meta b/Assets/Resources/lit_spheres/wood/sph_orange_MC.png.meta index 555e0881..9b0f9d85 100644 --- a/Assets/Resources/lit_spheres/wood/sph_orange_MC.png.meta +++ b/Assets/Resources/lit_spheres/wood/sph_orange_MC.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 - nPOTScale: 0 + wrapMode: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/lit_spheres/wood/wood1.png.meta b/Assets/Resources/lit_spheres/wood/wood1.png.meta index 8bd789b0..74f0b8bb 100644 --- a/Assets/Resources/lit_spheres/wood/wood1.png.meta +++ b/Assets/Resources/lit_spheres/wood/wood1.png.meta @@ -5,7 +5,7 @@ TextureImporter: mipmaps: mipMapMode: 0 enableMipMap: 0 - linearTexture: 1 + linearTexture: 0 correctGamma: 0 fadeOut: 0 borderMipMap: 0 @@ -16,20 +16,20 @@ TextureImporter: externalNormalMap: 0 heightScale: .25 normalMapFilter: 0 - isReadable: 0 + isReadable: 1 grayScaleToAlpha: 0 generateCubemap: 0 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: - filterMode: -1 - aniso: 1 + filterMode: 1 + aniso: 0 mipBias: -1 - wrapMode: 1 + wrapMode: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - textureType: 2 + textureType: 5 buildTargetSettings: [] userData: diff --git a/Assets/Resources/particlein1.prefab b/Assets/Resources/particlein1.prefab index bc4e9ca4e67a1ffc8192af1bb91e573858b19dca..bdca70dfbec82b69aead09d79cfe1546ecc3725d 100644 GIT binary patch literal 8960 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 a-@ftstv~(Y?Vrq_{`2FH!hO%bL;V}t m_atoms = new List(); + private string m_residue = "All"; + private string m_chain = "All"; public bool enabled { @@ -96,35 +107,51 @@ public bool enabled private ColorObject m_colorObj; public ColorObject color { - get + get { return m_colorObj; } - set + set { m_colorObj = value; } - } + } - public ColorPicker(int xstart,int ystart,int width, int height, ColorObject colorObj, string title="Color Picker", int caller=-1) + public ColorPicker(int xstart,int ystart,int width, int height, + ColorObject colorObj, List atoms, string residue = "All", string chain = "All", + string title="Color Picker", int caller=-1) { m_colorObj = colorObj; + m_atoms = atoms; + m_residue = residue; + m_chain = chain; + m_r_value = (int)(colorObj.color.r * 255f); + m_g_value = (int)(colorObj.color.g * 255f); + m_b_value = (int)(colorObj.color.b * 255f); m_rect = new Rect(xstart,ystart,width,height); - m_aTexture = (Texture2D)Resources.Load("EnergyGrayColor2"); + m_aTexture = (Texture2D)Resources.Load("ImprovedColorPicker"); m_title=title; this.enabled = true; - m_activeArea = new Rect(m_rect.x + m_text_area.y, m_rect.y + m_text_area.y, m_text_area.width, m_text_area.height); + m_activeArea = new Rect(m_rect.x + m_text_area.x, m_rect.y + m_text_area.y, m_text_area.width, m_text_area.height); callId = caller; } - public ColorPicker(Rect r, ColorObject colorObj, string title="Color Picker", int caller=-1) + public ColorPicker(Rect r, + ColorObject colorObj, List atoms, string residue = "All", string chain = "All", + string title="Color Picker", int caller=-1) { m_colorObj = colorObj; + m_atoms = atoms; + m_residue = residue; + m_chain = chain; + m_r_value = (int)(colorObj.color.r * 255f); + m_g_value = (int)(colorObj.color.g * 255f); + m_b_value = (int)(colorObj.color.b * 255f); m_rect = r; - m_aTexture = (Texture2D)Resources.Load("EnergyGrayColor2"); + m_aTexture = (Texture2D)Resources.Load("ImprovedColorPicker"); m_title=title; this.enabled = true; - m_activeArea = new Rect(m_rect.x + m_text_area.y, m_rect.y + m_text_area.y, m_text_area.width, m_text_area.height); + m_activeArea = new Rect(m_rect.x + m_text_area.x, m_rect.y + m_text_area.y, m_text_area.width, m_text_area.height); callId = caller; } @@ -138,26 +165,61 @@ public void OnGUI() { if(enabled) { + GUI.Window(60, m_rect, loadColor, m_title); + GUI.DragWindow(); Vector3 mousePos = Input.mousePosition; mousePos.y = Screen.height - mousePos.y; - if(m_activeArea.Contains(mousePos)&& Input.GetMouseButton(0)) + if(m_activeArea.Contains(mousePos) && Input.GetMouseButton(0) && GUIUtility.hotControl == 0) { - //Debug.Log("test4"); - int X = (int)(mousePos.x-m_rect.x)-5; - int Y = (int)(m_text_area.height)-((int)(mousePos.y-m_rect.y)-(int)(m_text_area.y)); - - m_colorObj.color = m_aTexture.GetPixel(X,Y); - // Debug.Log("Color: "+m_color); + int X = (int)((mousePos.x - m_activeArea.x) / m_activeArea.width * m_aTexture.width); + int Y = (int)((mousePos.y - m_activeArea.y) / m_activeArea.height * m_aTexture.height); +// Debug.Log(X + " " + Y + " " + mousePos.x + " " + mousePos.y); + m_r_value = (int)(m_aTexture.GetPixel(X,-Y).r * 255); + m_g_value = (int)(m_aTexture.GetPixel(X,-Y).g * 255); + m_b_value = (int)(m_aTexture.GetPixel(X,-Y).b * 255); +// Debug.Log("Color: "+m_color); + } + if(m_r_value < 0) + m_r_value = 0; + if(m_r_value > 255) + m_r_value = 255; + if(m_g_value < 0) + m_g_value = 0; + if(m_g_value > 255) + m_g_value = 255; + if(m_b_value < 0) + m_b_value = 0; + if(m_b_value > 255) + m_b_value = 255; + m_colorObj.color = new Color((float)m_r_value/255f, (float)m_g_value/255f, (float)m_b_value/255f, 1f); + + if(m_atoms != null){ + GenericManager manager = Molecule.View.DisplayMolecule.GetManagers()[0]; + if(!UI.GUIMoleculeController.toggle_NA_CLICK){ + manager.SetColor(m_colorObj.color, m_atoms, m_residue, m_chain); + } + else{ + foreach(GameObject obj in Camera.main.GetComponent().objList){ + manager.SetColor(m_colorObj.color, (int)obj.GetComponent().number); + } + } } + } } public void loadColor(int a){ -// Debug.Log("test3"); if(GUI.Button(m_close_area, "Close")) - enabled = false; + UI.GUIMoleculeController.m_colorPicker = null; + string temp; + temp = GUI.TextField(m_r_area, m_r_value.ToString()); + int.TryParse(temp, out m_r_value); + temp = GUI.TextField(m_g_area, m_g_value.ToString()); + int.TryParse(temp, out m_g_value); + temp = GUI.TextField(m_b_area, m_b_value.ToString()); + int.TryParse(temp, out m_b_value); GUI.DrawTexture(m_text_area, m_aTexture, ScaleMode.ScaleToFit, true, 0F); if (Event.current.type == EventType.Repaint) MoleculeModel.newtooltip = GUI.tooltip; diff --git a/Assets/Scripts/DisplayControl/DMatrix.cs b/Assets/Scripts/DisplayControl/DMatrix.cs index d2c5ace3..7a0f002c 100755 --- a/Assets/Scripts/DisplayControl/DMatrix.cs +++ b/Assets/Scripts/DisplayControl/DMatrix.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: DMatrix.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: DMatrix.cs 298 2013-06-14 10:10:28Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -68,43 +68,28 @@ namespace DisplayControl using UnityEngine; using System.Collections; - public class DMatrix - { + public class DMatrix { //float [,]r=new float[4,4]; - public DMatrix() - { - - } + public DMatrix() {} - public static float[,] Multiply(float [,]r1,float [,]r2) - { + public static float[,] Multiply(float [,]r1,float [,]r2) { float[,] matrix=new float[4,4]; float[,] tR2=Transpose(r2); for(int i=0;i<4;i++) - { //matrix[i/4,i%4]=0; for(int j=0;j<4;j++) - { for(int k=0;k<4;k++) - { matrix[i,j]+=r1[i,k]*tR2[j,k]; - } - } - } return matrix; } - public static float[,] CreateMatrix( Vector3 v) - { + public static float[,] CreateMatrix( Vector3 v) { float[,] matrix=new float[4,4]; for(int i=0;i<4;i++) - { for(int j=0;j<4;j++) - { matrix[i,j]=0; - } - } + matrix[0,0]=v.x; matrix[0,1]=v.y; matrix[0,2]=v.z; @@ -112,8 +97,7 @@ public DMatrix() return matrix; } - public static float[,] initMatrixZ(float a,float b) - { + public static float[,] initMatrixZ(float a,float b) { float[,] matrix=new float[4,4]; matrix[0,0]=b; matrix[0,1]=a; @@ -124,8 +108,7 @@ public DMatrix() return matrix; } - public static float[,] initMatrixX(float a,float b) - { + public static float[,] initMatrixX(float a,float b) { float[,] matrix=new float[4,4]; matrix[0,0]=1; matrix[1,1]=a; @@ -136,8 +119,7 @@ public DMatrix() return matrix; } - public static void RotationMatrix(Vector3 v, Vector3 v1, Vector3 v2,float angle)// - { + public static void RotationMatrix(Vector3 v, Vector3 v1, Vector3 v2,float angle) { //float [,]mV=CreateMatrix( v); float [,]mV1=CreateMatrix(v1); float [,]mV2=CreateMatrix( v2); @@ -164,18 +146,14 @@ public static void RotationMatrix(Vector3 v, Vector3 v1, Vector3 v2,float angle) v2.x=mV2[0,0]; v2.y=mV2[0,1]; v2.z=mV2[0,2]; - } - public static float[,] Transpose(float [,] m) - { + + public static float[,] Transpose(float [,] m) { float[,] matrix=new float[4,4]; for(int i=0;i<4;i++) - { for(int j=0;j<4;j++) - { matrix[i,j]=m[j,i]; - } - } + return matrix; } } diff --git a/Assets/Scripts/Molecule/Control/ControlMolecule.cs b/Assets/Scripts/Molecule/Control/ControlMolecule.cs index be35e9c1..398eb3db 100755 --- a/Assets/Scripts/Molecule/Control/ControlMolecule.cs +++ b/Assets/Scripts/Molecule/Control/ControlMolecule.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ControlMolecule.cs 224 2013-04-06 23:00:34Z baaden $ +/// $Id: ControlMolecule.cs 660 2014-08-26 13:46:34Z sebastien $ /// /// References : /// If you use this code, please cite the following reference : @@ -62,236 +62,617 @@ /// using HyperBalls, a unified algorithm for balls, sticks and hyperboloids", /// J. Comput. Chem., 2011, 32, 2924 /// +using System.Text; -namespace Molecule.Control -{ +namespace Molecule.Control { using UnityEngine; using System.Collections; + using System.Collections.Generic; + using System.IO; using Molecule.Model; - public class ControlMolecule - { + using ParseData.ParsePDB; + using UI; - public ControlMolecule() - { + public class ControlMolecule { + + public ControlMolecule() {} + + public static void CreateMolecule(TextReader sr) { + List alist = new List(); + List calist = new List(); + + List BFactorList = new List(); + + List resnamelist = new List(); + List atomsNameList = new List(); + List caChainlist = new List(); + + List typelist = new List(); + List chainlist = new List(); + + List colorList = new List(); + + List sshelixlist = new List (); + List sssheetlist = new List (); + + RequestPDB.ReadPDB(sr, alist, calist, BFactorList, resnamelist, atomsNameList, caChainlist, typelist, chainlist, colorList, sshelixlist, sssheetlist); + + BuildMoleculeComponents(); + CreateSplines(); + CreateResidues(); + CreateResiduesSugar2(); + + if(UIData.loadHireRNA) + { + BuildHireRnaHydrogenBondsStructures(); + } + + if(GUIDisplay.pdbID == "3EI0") + UIData.isGLIC = true; + UIData.isParticlesInitialized = false ; // new file, new particle system needed + MoleculeModel.networkLoaded = false ; // protein loaded, network removed if present } + public static void CreateResidues() { + List alist = MoleculeModel.atomsLocationlist; + List resNames = MoleculeModel.atomsResnamelist; + List aNamesList = MoleculeModel.atomsNamelist; + List residueIds = MoleculeModel.residueIds; + + List resNamesPerResidue = new List(); + List residues = new List(); + List> residueDictList = new List>(); + Dictionary residueDict = new Dictionary(); + + string currRes = ""; + string prevRes = ""; + float nbAtoms = 0f; + Vector3 currAtomSum = Vector3.zero; + Vector3 currAtom = Vector3.zero; + + int currResId = int.MinValue+1; + int prevResId = int.MinValue+1; + + Vector3 testVector = Vector3.zero; + + + + int index=0; + for(int i=0; i 0){ + residueDictList.Add(residueDict); + } + residueDict = new Dictionary(); + index++; + + } + prevResId = currResId; + + // We flip the x-coordinates because Unity is right-handed + currAtom = new Vector3(-alist[i][0], alist[i][1], alist[i][2]);// - MoleculeModel.Offset; + currAtomSum += currAtom; + //Debug.Log(aNamesList[i] + ": " + currAtom.ToString()); + //Debug.Log(currResId.ToString() + " :: " + prevResId.ToString()); + // Sometimes there are multiple conformations for a residue in a PDB + // therefore multiple atoms of the same type. That generates collisions + // in the dictionary. C# doesn't like that. + if(!residueDict.TryGetValue(aNamesList[i], out testVector)){ + residueDict.Add(aNamesList[i], currAtom); + } + nbAtoms +=1f; + + + } + MoleculeModel.residueDictionaries = residueDictList; + + /* + for(int i=0; i alist = MoleculeModel.atomsLocationlist; + List aNamesList = MoleculeModel.atomsNamelist; + List residueIds = MoleculeModel.residueIds; + + + List> residueDictList = new List>(); + Dictionary residueDict = new Dictionary(); + + Vector3 currAtom; + Vector3 testVector; + + for (int i = 0 ; i 0){ + residueDictList.Add(residueDict); + } + residueDict = new Dictionary(); + } + + currAtom = new Vector3(-alist[i][0], alist[i][1], alist[i][2]); + + if(!residueDict.TryGetValue(aNamesList[i], out testVector)){ + residueDict.Add(aNamesList[i], currAtom); + } + } + + MoleculeModel.residueDictionariesSugar = residueDictList; + + } - public static ArrayList CreateBondsList(ArrayList atomsLocationlist,ArrayList atomsTypelist) + /// + /// Checks whether the loaded PDB file follows the HiRE-RNA coarse-grain model or not. + /// + public static void CheckHiRERNAModel() { - //int k=0; - //string clubs=""; - + Debug.Log("CheckHiRERNAModel"); + if (MoleculeModel.atomsNamelist.Exists(x => x == "C1" || x == "G1" || x == "G2" || x == "U1" || x == "A1" || x == "A2")) + { + UIData.ffType = UIData.FFType.HiRERNA; + UIData.loadHireRNA = true; + } + Debug.Log (UIData.loadHireRNA); + } - ArrayList bond=new ArrayList(); - for(int i=0;i entry in MoleculeModel.residues) { -// Debug.Log("atomsLocationlist:"+"x:"+(atomsLocationlist[i] as float[])[0]+"|y:"+(atomsLocationlist[i] as float[])[1]+"|z:"+(atomsLocationlist[i] as float[])[2]); - float [] atom0=atomsLocationlist[i] as float[]; - string atomtype0=(atomsTypelist[i] as AtomModel).type; - float x0=atom0[0]; - float y0=atom0[1]; - float z0=atom0[2]; -// Debug.Log("x0="+x0+"y0="+y0+"z0="+z0); - for(int j=1;j<80;j++) + int nbOfAtoms = entry.Value.Count; + int i = 0; + while (i != nbOfAtoms) { - if(i+j + /// Builds the molecule's components. + /// This is called after reading a PDB. It fills everything that always needs to be filled in MoleculeModel. + /// + public static void BuildMoleculeComponents() { + List alist = MoleculeModel.atomsLocationlist; + List alistSugar = MoleculeModel.atomsSugarLocationlist; + List calist = MoleculeModel.CatomsLocationlist; + + Vector3 minPoint= new Vector3(float.MaxValue,float.MaxValue,float.MaxValue); + Vector3 maxPoint= new Vector3(float.MinValue,float.MinValue,float.MinValue); + Vector3 bary = Vector3.zero; + + for(int i=0; i + /// Creates the carbon alpha splines. + /// + /// + /// List of atoms. + /// + /// + /// List of Carbon Alpha atoms. + /// + /// + /// List of carbon alpha chain. + /// + /// + /// The type of each atom. + /// + public static void CreateSplines() { + List alist = MoleculeModel.atomsLocationlist; + List calist = MoleculeModel.CatomsLocationlist; + List caChainlist = MoleculeModel.CaSplineChainList; + List atomsNameList = MoleculeModel.atomsNamelist; + List typelist = MoleculeModel.atomsTypelist; + + // Trace interpolation from C-alpha positions + // Only if there are more than 2 C-alpha + if(calist.Count > 2) { + + MoleculeModel.backupCaSplineChainList = caChainlist; + MoleculeModel.backupCatomsLocationlist = calist; + calist = new List(MoleculeModel.backupCatomsLocationlist); + caChainlist = new List(MoleculeModel.backupCaSplineChainList); + /* + int j = 0; + for(int i=1;i(); + + for(int k=0; k CreateBondsList(List atomsLocationlist, List atomsTypelist) { + List bond=new List(); + int test=0; + for(int i=0;i CreateBondsEPList(List atomsLocationlist, List atomsTypelist) { + List bond=new List(); + List h_already_in=new List(); // T.T. to not link a hydrogen 2 times - for(int i=0;i(j); + } + }else if (atomtype1=="H"){ + if (!h_already_in.Contains(j)){ + int [] atomsIds = {i,j}; + bond.Add(atomsIds); + h_already_in.Add(j); + + if (MoleculeModel.bondEPDict.ContainsKey(i)) + MoleculeModel.bondEPDict[i].Add (j); + else + MoleculeModel.bondEPDict[i]=new List(j); + } + } + else{ + int [] atomsIds = {i,j}; bond.Add(atomsIds); + + if (MoleculeModel.bondEPDict.ContainsKey(i)) + MoleculeModel.bondEPDict[i].Add (j); + else + MoleculeModel.bondEPDict[i]=new List(j); } + } - - + //} } } - Debug.Log("bond.Count:"+bond.Count); + //In the case where we want to calculate bonds, and then add other bond inside the PDB. + if (UIData.connectivity_PDB && UIData.connectivity_calc){ + for (int i=0; i + /// Creates a bond list for the carbon alpha splines. + /// + /// + /// List of string. The chain of each carbon alpha. + /// + /// + /// List of bonds to create. + /// + public static List CreateBondsCAList(List caChainlist) { + List bond=new List(); - for(int i=1; i entry in MoleculeModel.residues) + { + int atomId = (int)entry.Value[0]; + sequence[i] = MoleculeModel.atomsResnamelist[atomId][0]; + i++; + } + return sequence.ToString(); + } - - public static ArrayList CreateBondsList_HiRERNA(ArrayList atomnames) - { + public static List CreateBondsList_HiRERNA(List atomnames) { //We suppose the names are ordered as this: //P O5* C5* CA CY b1 [b2] - ArrayList bonds = new ArrayList(); + List bonds = new List(); int N = atomnames.Count; int k; // int[] bond; - for(int i=0; i=0 && k>=i-5 && (atomnames[k] as string)!="CA"; --k); + for(k=i; k>=0 && k>=i-5 && (atomnames[k])!="CA"; --k); if(k>=0 && k>=i-5) bonds.Add(new int[] {i,k}); //Forward search for "O5*" - if(atomnames[i+1] as string == "O5*") + if(atomnames[i+1] == "O5*") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "O5* missing"); } - else if(a1 == "O5*") - { + else if(a1 == "O5*") { //Forward search for "C5*" - if(atomnames[i+1] as string == "C5*") + if(atomnames[i+1] == "C5*") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "C5* missing"); } - else if(a1 == "C5*") - { + else if(a1 == "C5*") { //Forward search for "CA" - if(atomnames[i+1] as string == "CA") + if(atomnames[i+1] == "CA") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "CA missing"); } - else if(a1 == "CA") - { + else if(a1 == "CA") { //Forward search for "CY" - if(atomnames[i+1] as string == "CY") + if(atomnames[i+1] == "CY") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "CY missing"); } - else if(a1 == "CY") - { + else if(a1 == "CY") { //Forward search for G1, A1, U1 or C1 - string a2 = atomnames[i+1] as string; + string a2 = atomnames[i+1]; if(a2 == "G1" || a2 == "A1" || a2 == "U1" || a2 == "C1") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "b1 missing"); } - else if(a1 == "G1") - { + else if(a1 == "G1") { //Forward search for "G2" - if(atomnames[i+1] as string == "G2") + if(atomnames[i+1] == "G2") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "G2 missing"); } - else if(a1 == "A1") - { + else if(a1 == "A1") { //Forward search for "A2" - if(atomnames[i+1] as string == "A2") + if(atomnames[i+1] == "A2") bonds.Add(new int[] {i,i+1}); else Debug.Log("Atom "+ (i+1) as string + "A2 missing"); @@ -301,24 +682,21 @@ public static ArrayList CreateBondsList_HiRERNA(ArrayList atomnames) return bonds; } - - public static ArrayList CreateBondsCSList(ArrayList atomsLocationlist) - { + + // not the atomsLocationList from MoleculeModel + public static List CreateBondsCSList(List atomsLocationlist) { //int k=0; //string clubs=""; - ArrayList bond=new ArrayList(); + List bond=new List(); // Debug.Log("atomsLocationlist.Count " + atomsLocationlist.Count); // Debug.Log("atomsTypelist.Count " + atomsTypelist.Count); - - Debug.Log("atomsLocationlist.Count:"+atomsLocationlist.Count); // int[] ary = (int[])((MoleculeModel.CSidList).ToArray(typeof(int))); - for(int i=0;i + /// The coordinates of each atom. List of float[3]. + /// + public static List atomsLocationlist = new List(); + + /// + /// The coordinates of each atom, simulated through MDDriver. List of float[3]. + /// + public static List atomsMDDriverLocationlist; + + /// + /// The coordinates of each Carbon alpha. List of float[3]. + /// + public static List CatomsLocationlist = new List(); + + /// + /// Backup of the coordinates of each Carbon alpha. List of float[3]. + /// + public static List backupCatomsLocationlist = new List(); + + /// + /// The coordinates of each Carbon alpha in the CA-Spline. List of float[3]. + /// + public static List CaSplineList = new List(); + + /// + /// The type of each atom. List of AtomModel. + /// + public static List atomsTypelist = new List(); + + /// + /// The name of each atom. E.g.: O, N, C, H1, H2, etc. List of strings. + /// + public static List atomsNamelist = new List(); + + + /// + /// The number of each atoms (in the PDB file) + /// + public static List atomsNumberList = new List(); + + public static List atomsSugarNamelist = new List(); + public static List atomsSugarResnamelist = new List(); + public static List sugarResname = new List {"ABE","ACE","ALT","API","ARA","DHA","FRU","FUC","GAL", + "GLC","GUL","IDO","DKN","KDO","MAN","NEG","RHA","RIB","SIA","TAG","TAL","XYL", + "GLA","FUL","GLB","NAG","NDG","BMA","MMA","A2G","AAL","BGC"}; + public static List atomsSugarLocationlist = new List(); + public static List resSugarChainList = new List(); + public static List bondEPSugarList = new List(); // Not sure of what EP means btw + public static List atomsSugarTypelist = new List(); + public static List sortedResIndexByListSugar = new List(); + + public static List BondListFromPDB = new List(); + + public static List atomHetTypeList = new List(); + + + /// + /// List of the names existing in the molecule. + /// + public static List existingName = new List(); + + /// + /// The name of the residue to which each atom belongs. E.g.: ALA, LEU, ASP, etc. List of strings. + /// + public static List atomsResnamelist = new List(); + + /// + /// List of the residues existing in the molecule. + /// + public static List existingRes = new List(); + + /// + /// The residue identifiers. One per atom. + /// + public static List residueIds = new List(); + + /// + /// The residues. Keys: residue IDs. Values: list of atoms IDs. + /// + public static Dictionary residues = new Dictionary(); + + /// + /// The chain of each atom. + /// + public static List atomsChainList = new List(); + + /// + /// The chain of each residue (only work if residues are numbered by chain). + /// + public static List resChainList = new List(); + + /// + /// The chain of each residue. + /// + public static List resChainList2 = new List(); + + /// + /// First residue number in pdb. + /// + public static int firstresnb = new int(); + + /// + /// List of the chains existing in the molecule. + /// + public static List existingChain = new List(); + + /// + /// The color of each atom. + /// + public static List atomsColorList = new List(); + + public static List atomsLocalScaleList = new List(); + + /// + /// Terminal residue number of each subunits. + /// + public static List splits = new List(); + + /// + /// Not used anymore. + /// The bonds between atoms. Each element of this list is an int[2] where: + /// int[0] is the index of the first atom, + /// int[1] is the second one. + /// + public static List bondList = new List(); + + /// + /// The bonds between atoms. Each element of this list is an int[2] where: + /// int[0] is the index of the first atom, + /// int[1] is the second one. + /// + public static List bondEPList = new List(); // Not sure of what EP means btw + + /// + /// Dictionary of every bounded atoms (which atoms whith which atoms). + /// + public static Dictionary> bondEPDict= new Dictionary>(); + + public static List CSidList = new List(); // List of IDs for networks, or something like that. + public static List CSSGDList = new List(); // Dunno + public static List CSRadiusList = new List(); // Mystery too. + public static List CSColorList = new List(); // List of colors, I guess. Probably for networks. + public static List CSLabelList = new List(); // And of labels. + + public static List> FieldLineList= null; + //public static ArrayList FieldLineDist= null;// Field lines distance arrays // Apparently not used anywhere + + //public static ArrayList CaSplineList=new ArrayList(); + + /// + /// The bonds between carbon alpha in the CA-Spline. Each element of this list is an int[2] where: + /// int[0] is the index of the first CA, + /// int[1] is the second one. + /// + public static List bondCAList=new List(); - public static ArrayList atomsTypelist=new ArrayList(); //Type of each atom - public static ArrayList atomsNamelist=new ArrayList(); //Name of each atom - public static ArrayList atomsResnamelist=new ArrayList(); //Residue name of each atom + /// + /// Type of each carbon alpha in the CA-Spline. List of AtomModel. + /// + public static List CaSplineTypeList = new List(); + + /// + /// The chain of each carbon alpha in the CA-Spline. + /// + public static List CaSplineChainList = new List(); + + /// + /// Sometimes inside pdbs lists are not sorted, and residues mixed + /// So I had to create this list to sort residues index by chain ID. + /// + public static List sortedResIndexByList = new List(); + + /// + /// Backup CaSplineChainList (chain of each carbon alpha in the CA-Spline). + /// Used in ReSpline and BfactorRep + /// + public static List backupCaSplineChainList = new List(); + + /// + /// Bfactor of each atom. + /// + public static List BFactorList = new List(); - public static ArrayList bondList=new ArrayList();//The list of the bond by position and rotation. - public static ArrayList bondEPList=new ArrayList();//The list of the bond by the position of the two atoms. - public static ArrayList CSidList=new ArrayList(); + /// + /// The atoms per ellipsoids per residue for HiRERNA rendering + /// Key is the residue id + /// Value is an array of atom ids (3 in any case) parameterizing the ellipsoid + /// + public static Dictionary atomsForEllipsoidsPerResidue = new Dictionary(); - public static ArrayList CSSGDList=new ArrayList(); - public static ArrayList CSRadiusList=new ArrayList(); - public static ArrayList CSColorList=new ArrayList(); - public static ArrayList CSLabelList=new ArrayList(); + public static Dictionary atomsForEllipsoidsOrientationPerResidue = new Dictionary(); - public static ArrayList FieldLineList= null; - public static ArrayList FieldLineDist= null;// Field lines distance arrays + /// + /// The index (in tables) of the base extremity. + /// + public static List baseIdx = new List(); - public static ArrayList CaSplineList=new ArrayList(); + /// + /// RNA Scale parameters + /// + public static List scale_RNA = new List(); - public static ArrayList bondCAList=new ArrayList(); + /// + /// Contiguous (really?) list of ellipsoids + /// + public static List ellipsoids = new List(); - public static ArrayList CaSplineTypeList=new ArrayList(); - public static ArrayList CaSplineChainList=new ArrayList(); - public static ArrayList BFactorList=new ArrayList(); + /// + /// The ellipsoids per residue. + /// + public static Dictionary ellipsoidsPerResidue = new Dictionary(); + + public static List bondsForReplacedAtoms = new List(); + + public static List> residueDictionaries; + public static List> residueDictionariesSugar; + + /// + /// List of informations about each helix (extract from the pdb) + /// float[0] is the first residue of each helix + /// float[1] is the last residue of each helix + /// float[2] the length of each helix + /// float[3] the class of each helix + /// + public static List ssHelixList = new List (); + + /// + /// First and last residue of each strand (extract from the pdb) + /// float[0] is the first residue of each strand + /// float[1] is the last residue of each strand + /// + public static List ssStrandList = new List (); + /// + /// The helix chain list (extract from the pdb). + /// + public static List helixChainList = new List() ; + + /// + /// The strand chain list (extract from the pdb). + /// + public static List strandChainList = new List (); + public static Vector3 target=new Vector3(0f,0f,0f);// - public static Vector3 cameraLocation=new Vector3(0f,0f,0f);// + public static Vector3 cameraLocation=new Vector3(10f,10f,10f);// + /// + /// The offset for the molecule. The original barycenter of the molecule + this = (0,0,0). Vector3. + /// Also used for density grids. + /// public static Vector3 Offset=new Vector3(0f,0f,0f); + + /// + /// The barycenter of the molecule. Vector3. + /// public static Vector3 Center=new Vector3(0f,0f,0f); + + /// + /// The "smallest" corner of the bounding box that encloses the molecule. + /// public static Vector3 MinValue= new Vector3(0f,0f,0f); + + /// + /// The "biggest" corner of the bounding box that encloses the molecule. + /// public static Vector3 MaxValue= new Vector3(0f,0f,0f); - - // OLD BASIC COLOR SCHEME -// public static Color oxygenColor=Color.red; -// public static Color carbonColor=Color.green; -// public static Color nitrogenColor=Color.blue; -// public static Color hydrogenColor=Color.white; -// public static Color sulphurColor=Color.yellow; -// //public static string lodineColor="Purple"; -// //public static string chlorineColor="Green"; -// public static Color phosphorusColor=new Color(0.6f,0.3f,0.0f,1f); -// public static Color unknownColor=Color.black; - // NEW PASTEL COLOR THEME - public static Color oxygenColor=new Color(0.827f,0.294f,0.333f,1f); - public static Color carbonColor=new Color(0.282f,0.6f,0.498f,1f); - public static Color nitrogenColor=new Color(0.443f,0.662f,0.882f,1f); - public static Color hydrogenColor=Color.white; - public static Color sulphurColor=new Color(1f,0.839f,0.325f,1f); - public static Color phosphorusColor=new Color(0.960f,0.521f,0.313f,1f); - public static Color unknownColor=Color.black; + // NEW PASTEL COLOR THEME + public static ColorObject oxygenColor = new ColorObject(new Color(0.827f,0.294f,0.333f,1f)); + public static ColorObject carbonColor = new ColorObject(new Color(0.282f,0.6f,0.498f,1f)); + public static ColorObject nitrogenColor = new ColorObject(new Color(0.443f,0.662f,0.882f,1f)); + public static ColorObject hydrogenColor = new ColorObject(Color.white); + public static ColorObject sulphurColor = new ColorObject(new Color(1f,0.839f,0.325f,1f)); + public static ColorObject phosphorusColor = new ColorObject(new Color(0.960f,0.521f,0.313f,1f)); + public static ColorObject unknownColor = new ColorObject(Color.black); +// public static ColorObject selectionColor = new ColorObject(Color.red); +// public static ColorObject residueColor = new ColorObject(Color.white); + public static Color GetAtomColor(string atomType) { + switch(atomType) { + case "O": return oxygenColor.color; + case "C": return carbonColor.color; + case "N": return nitrogenColor.color; + case "H": return hydrogenColor.color; + case "S": return sulphurColor.color; + case "P": return phosphorusColor.color; + default: return unknownColor.color; + } + } + public static string oxygenNumber="0"; public static string carbonNumber="0"; public static string nitrogenNumber="0"; @@ -137,7 +374,7 @@ public class MoleculeModel public static string unknownNumber="0"; // public static GameObject [] boxes; - +/* public static GameObject[] Oes; public static GameObject[] Ces; public static GameObject[] Nes; @@ -147,9 +384,12 @@ public class MoleculeModel //public static GameObject[] Cles; public static GameObject[] Pes; public static GameObject[] NOes; +*/ - public static GameObject[] clubs; + public static Dictionary atomsByChar = new Dictionary(); + public static ArrayList atoms = new ArrayList(); + public static GameObject[] clubs; //public static float []atomsScaleList={1.72f,1.6f,1.32f,2.08f,2.6f,1f};//c\n\o\s\p\n @@ -178,24 +418,27 @@ public class MoleculeModel public static string FPS=""; - - public static ArrayList atoms = new ArrayList(); - public static Particle[] p; public static Particle[] fieldlinep; public static string newtooltip; - public static bool FieldLineFileExist=false; + public static bool fieldLineFileExists=false; + + public static bool dxFileExists = false ; // true if a DX file was found + + public static bool surfaceFileExists=false; + + public static bool useHetatmForSurface = false; + + public static bool useSugarForSurface = false; - public static bool SurfaceFileExist=false; + + public static bool networkLoaded = false; // set to true when a network is present public static Vector3[] vertices; - public MoleculeModel() - { - - } + public MoleculeModel() {} } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomCubeStyle.cs b/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomCubeStyle.cs index 2b9ab2a1..5d11e318 100755 --- a/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomCubeStyle.cs +++ b/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomCubeStyle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: AtomCubeStyle.cs 239 2013-04-07 19:31:48Z baaden $ +/// $Id: AtomCubeStyle.cs 604 2014-07-18 13:00:14Z sebastien $ /// /// References : /// If you use this code, please cite the following reference : @@ -64,445 +64,126 @@ /// -namespace Molecule.View.DisplayAtom -{ +namespace Molecule.View.DisplayAtom { using System; using UnityEngine; using System.Collections; + using System.Collections.Generic; using Molecule.Model; using Config; using UI; using Molecule.Control; using System.Globalization; - public class AtomCubeStyle : IAtomStyle - { + public class AtomCubeStyle : IAtomStyle { private float[] scale=new float[7]; public static ArrayList atomOrderList; public static ArrayList atomOrderListArray; - //int atomindex=0;//It's for Cumulative of order by type, but it's unuseful for particleball now, because of the Axis order of particleball. - private static int UnityParticleLimit=16250; - private static int blockbegincount=10000; public static GameObject AtomCubeParent = new GameObject("AtomCubeParent"); private UIData.AtomType atomtype; + //private GameObject[] hyperballs; - public AtomCubeStyle() - { + public AtomCubeStyle() { if(UIData.secondarystruct) - { MoleculeModel.p = new Particle[MoleculeModel.CaSplineList.Count]; - } else - { MoleculeModel.p = new Particle[MoleculeModel.atomsLocationlist.Count]; - } + scale[0]=(MoleculeModel.carbonScale)/100; scale[1]=(MoleculeModel.nitrogenScale)/100; scale[2]=(MoleculeModel.oxygenScale)/100; scale[3]=(MoleculeModel.sulphurScale)/100; scale[4]=(MoleculeModel.phosphorusScale)/100; scale[5]=(MoleculeModel.hydrogenScale)/100; - scale[6]=(MoleculeModel.unknownScale)/100; - + scale[6]=(MoleculeModel.unknownScale)/100; } //Create atoms according to type. Particles are created only once except if display is forced - public void DisplayAtoms(UIData.AtomType type_atom, bool force_display = false) - { - if(type_atom != UIData.AtomType.particleball || !UIData.isParticlesInitialized ||force_display) - { - if(AtomCubeParent == null) - AtomCubeParent = new GameObject("AtomCubeParent"); - if(MoleculeModel.atoms != null) - { - MoleculeModel.atoms.Clear(); - MoleculeModel.atoms=null; - } - MoleculeModel.atoms=new ArrayList(); - - Debug.Log("DisplayAtoms :: ***clear MolecularModel**** " ); - - atomtype = type_atom; - - DisplayAtomMethodByCube(); - UIData.isParticlesInitialized = true; + public void DisplayAtoms (UIData.AtomType type_atom, bool force_display = false) { + if(type_atom != UIData.AtomType.particleball || !UIData.isParticlesInitialized ||force_display) { + //if(!UIData.isCubeLoaded){ + if(AtomCubeParent == null) + AtomCubeParent = new GameObject("AtomCubeParent"); + + if(MoleculeModel.atoms != null) { + MoleculeModel.atoms.Clear(); + MoleculeModel.atoms=null; + } + + MoleculeModel.atoms=new ArrayList(); + Debug.Log("DisplayAtoms :: ***clear MolecularModel**** " ); + atomtype = type_atom; + DisplayAtomMethodByCube(); + UIData.isParticlesInitialized = true; + if(UIData.atomtype == UIData.AtomType.cube) + UIData.isCubeLoaded = true; + else if(UIData.atomtype == UIData.AtomType.hyperball) + UIData.isHBallLoaded = true; + //} } } - private void DisplayAtomMethodByCube() - { - // ArrayList atomListByType; - if(atomtype==UIData.AtomType.particleball) - { + private void DisplayAtomMethodByCube() { +// ArrayList atomListByType; + if(atomtype==UIData.AtomType.particleball) { ArrayList atomListByAxisOrder; + ArrayList atomListByType; - //just for particleball' hyperstick/////////////////////////////////////////////////////////////////////////////// - // if(UIData.openAllMenu) - { - ArrayList atomListByType; - if(UIData.secondarystruct) - { - atomListByType=AtomListByType(MoleculeModel.CaSplineList,MoleculeModel.CaSplineTypeList); - } - else - { - atomListByType=AtomListByType(MoleculeModel.atomsLocationlist,MoleculeModel.atomsTypelist); - } - for(int iType=0; iType(); combineComp.GoOn(); + } else if (atomtype==UIData.AtomType.particleball||atomtype==UIData.AtomType.particleballalphablend) { + Debug.Log("This is the particle system we actually use."); + GameObject shurikenParticleManagerObj = GameObject.FindGameObjectWithTag("ShurikenParticleManager"); + ShurikenParticleManager shManager = shurikenParticleManagerObj.GetComponent(); + shManager.Init(); } - else if(atomtype==UIData.AtomType.particleball||atomtype==UIData.AtomType.particleballalphablend) - { - string particlemanagername; - if(atomtype==UIData.AtomType.particleball) - { - particlemanagername="ParticleManager"; - } - else - { - particlemanagername="ParticleManagerAlphaBlend"; - } - - if(MoleculeModel.atomsnumber>blockbegincount) - { - //depart the molecule particle system into 64 blocks////////////////////////////////////////////////////////////////////////////// - - Vector3 minPoint=Vector3.zero; - Vector3 maxPoint=Vector3.zero; - - int Particlecount=MoleculeModel.p.Length; - for(int i=0; i=minPoint.x)&&(MoleculeModel.p[i].position.x<=minPoint.x+AxisBlockLength.x)) - { - xid=1; - xcenter=minPoint.x+0.5f*AxisBlockLength.x; - } - else if((MoleculeModel.p[i].position.x>minPoint.x+AxisBlockLength.x)&&(MoleculeModel.p[i].position.x<=minPoint.x+2*AxisBlockLength.x)) - { - xid=2; - xcenter=minPoint.x+1.5f*AxisBlockLength.x; - } - else if((MoleculeModel.p[i].position.x>minPoint.x+2*AxisBlockLength.x)&&(MoleculeModel.p[i].position.x<=minPoint.x+3*AxisBlockLength.x)) - { - xid=3; - xcenter=minPoint.x+2.5f*AxisBlockLength.x; - } - else if((MoleculeModel.p[i].position.x>minPoint.x+3*AxisBlockLength.x)&&(MoleculeModel.p[i].position.x<=maxPoint.x)) - { - xid=4; - xcenter=minPoint.x+3.5f*AxisBlockLength.x; - } - else - { - Debug.Log("X axis span is wrong"); - } - - - if((MoleculeModel.p[i].position.y>=minPoint.y)&&(MoleculeModel.p[i].position.y<=minPoint.y+AxisBlockLength.y)) - { - yid=1; - ycenter=minPoint.y+0.5f*AxisBlockLength.y; - } - else if((MoleculeModel.p[i].position.y>minPoint.y+AxisBlockLength.y)&&(MoleculeModel.p[i].position.y<=minPoint.y+2*AxisBlockLength.y)) - { - yid=2; - ycenter=minPoint.y+1.5f*AxisBlockLength.y; - } - else if((MoleculeModel.p[i].position.y>minPoint.y+2*AxisBlockLength.y)&&(MoleculeModel.p[i].position.y<=minPoint.y+3*AxisBlockLength.y)) - { - yid=3; - ycenter=minPoint.y+2.5f*AxisBlockLength.y; - } - else if((MoleculeModel.p[i].position.y>minPoint.y+3*AxisBlockLength.y)&&(MoleculeModel.p[i].position.y<=maxPoint.y)) - { - yid=4; - ycenter=minPoint.y+3.5f*AxisBlockLength.y; - } - else - { - Debug.Log("Y axis span is wrong"); - } - - - if((MoleculeModel.p[i].position.z>=minPoint.z)&&(MoleculeModel.p[i].position.z<=minPoint.y+AxisBlockLength.z)) - { - zid=1; - zcenter=minPoint.z+0.5f*AxisBlockLength.z; - } - else if((MoleculeModel.p[i].position.z>minPoint.z+AxisBlockLength.z)&&(MoleculeModel.p[i].position.z<=minPoint.z+2*AxisBlockLength.z)) - { - zid=2; - zcenter=minPoint.z+1.5f*AxisBlockLength.z; - } - else if((MoleculeModel.p[i].position.z>minPoint.z+2*AxisBlockLength.z)&&(MoleculeModel.p[i].position.z<=minPoint.z+3*AxisBlockLength.z)) - { - zid=3; - zcenter=minPoint.z+2.5f*AxisBlockLength.z; - } - else if((MoleculeModel.p[i].position.z>minPoint.z+3*AxisBlockLength.z)&&(MoleculeModel.p[i].position.z<=maxPoint.z)) - { - zid=4; - zcenter=minPoint.z+3.5f*AxisBlockLength.z; - } - else - { - // Debug.Log("Z axis span is wrong"); - } - xscale=AxisBlockLength.x; - yscale=AxisBlockLength.y; - zscale=AxisBlockLength.z; - - // Debug.Log("16*(zid-1)+4*(yid-1)+xid-1:"+(16*(zid-1)+4*(yid-1)+xid-1)); - - if(AxisBlock[16*(zid-1)+4*(yid-1)+xid-1]==null)AxisBlock[16*(zid-1)+4*(yid-1)+xid-1]=new ArrayList(); - AxisBlock[16*(zid-1)+4*(yid-1)+xid-1].Add(MoleculeModel.p[i]); - - if(BlockCenter[16*(zid-1)+4*(yid-1)+xid-1]==null)BlockCenter[16*(zid-1)+4*(yid-1)+xid-1]=new ArrayList(); - BlockCenter[16*(zid-1)+4*(yid-1)+xid-1].Add(new Vector3(xcenter,ycenter,zcenter)); - - if(BlockScale[16*(zid-1)+4*(yid-1)+xid-1]==null)BlockScale[16*(zid-1)+4*(yid-1)+xid-1]=new ArrayList(); - BlockScale[16*(zid-1)+4*(yid-1)+xid-1].Add(new Vector3(xscale,yscale,zscale)); - } - - int groupcount=AxisBlock.Length; - Debug.Log("groupcount:"+groupcount); - for(int i=0;i(); - - GameObject ParticleManager2=GameObject.Find(particlemanagername); - ParticleEffect particleeffect2=ParticleManager2.transform.GetComponent(); - - particleeffect.particleEffect = particleeffect2.particleEffect; - Particle[] p; - // Debug.Log("i:"+i); - // Debug.Log("AxisBlock[i].Count:"+AxisBlock[i].Count); - particleeffect.atomcount=AxisBlock[i].Count; - - p = new Particle[particleeffect.atomcount]; - for(int j=0;j=1) - { - for(int i=0;i(); - - GameObject ParticleManager2=GameObject.Find(particlemanagername); - ParticleEffect particleeffect2=ParticleManager2.transform.GetComponent(); - - particleeffect.particleEffect = particleeffect2.particleEffect; - Particle[] p; - if(i==groupcount) - { - if(UIData.secondarystruct) - { - particleeffect.atomcount=MoleculeModel.CaSplineList.Count-particlelimit*i; - } - else - { - particleeffect.atomcount=MoleculeModel.atomsLocationlist.Count-particlelimit*i; - } - } - else - { - particleeffect.atomcount=particlelimit; - } - - p = new Particle[particleeffect.atomcount]; - for(int j=0;j(); - if(UIData.secondarystruct) - { - particleeffect.atomcount=MoleculeModel.CaSplineList.Count; - } - else - { - particleeffect.atomcount=MoleculeModel.atomsLocationlist.Count; - } - particleeffect.p=MoleculeModel.p; - // particleeffect.radiuschange=true; - particleeffect.SpawnEffect (); - } - /////16250 atoms every particle system////////////////////////////////////////////////////////////////////////////// - } - - } - } - - - public static Color HexToColor(string hexColor) - { + public static Color HexToColor(string hexColor) { //Remove # if present if (hexColor.IndexOf('#') != -1) hexColor = hexColor.Replace("#", ""); @@ -511,15 +192,12 @@ public static Color HexToColor(string hexColor) int green = 0; int blue = 0; - if (hexColor.Length == 6) - { + if (hexColor.Length == 6) { //#RRGGBB red = int.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier); green = int.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier); blue = int.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier); - } - else if (hexColor.Length == 3) - { + } else if (hexColor.Length == 3) { //#RGB red = int.Parse(hexColor[0].ToString() + hexColor[0].ToString(), NumberStyles.AllowHexSpecifier); green = int.Parse(hexColor[1].ToString() + hexColor[1].ToString(), NumberStyles.AllowHexSpecifier); @@ -527,58 +205,43 @@ public static Color HexToColor(string hexColor) } Color hexcolor= new Color(red/255f,green/255f,blue/255f); - - return hexcolor; } - - - private ArrayList AtomListByAxisOrder(ArrayList alist) - { +// private ArrayList AtomListByAxisOrder(ArrayList alist) + public ArrayList AtomListByAxisOrder(IList alist) { Debug.Log("Entering :: AtomListByAxisOrder"); ArrayList atomListByOrder=new ArrayList(); - for(int i=0;i(); + Debug.Log("HBall Manager INIT OUTSIDE"); + hbManager.Init(); + } + else { + GameObject cubeManagerObj = GameObject.FindGameObjectWithTag("CubeManager"); + CubeManager cubeManager = cubeManagerObj.GetComponent(); + Debug.Log("Cube Manager INIT OUTSIDE"); + cubeManager.Init(); + } } //iType : Atom category - private void DisplayAtomCube(ArrayList atomsLocation,int iType) - { + private void DisplayAtomCube(ArrayList atomsLocation,int iType) { Color c = new Color(); Vector3 v = new Vector3(); // int atom1number = 0; // int atom2number = 0; - if(UI.GUIDisplay.file_extension=="xgmml") - { - // atom1number=AtomCubeStyle.atomOrderList.IndexOf(oratom1number); - // atom2number=AtomCubeStyle.atomOrderList.IndexOf(oratom2number); - - - } - else - { - switch(iType) - { - case 0:c= (MoleculeModel.carbonColor);v=new Vector3(1.7f*scale[0],1.7f*scale[0],1.7f*scale[0]);break;//c - case 1:c= (MoleculeModel.nitrogenColor);v=new Vector3(1.55f*scale[1],1.55f*scale[1],1.55f*scale[1]);break;//n - case 2:c= (MoleculeModel.oxygenColor);v=new Vector3(1.52f*scale[2],1.52f*scale[2],1.52f*scale[2]);break;//o - case 3:c= (MoleculeModel.sulphurColor);v=new Vector3(2.27f*scale[3],2.27f*scale[3],2.27f*scale[3]);break;//s - case 4:c= (MoleculeModel.phosphorusColor);v=new Vector3(1.18f*scale[4],1.18f*scale[4],1.18f*scale[4]);break;//p - case 5:c= (MoleculeModel.hydrogenColor);v=new Vector3(1.2f*scale[5],1.2f*scale[5],1.2f*scale[5]);break;//h - - default:c= (MoleculeModel.unknownColor);v=new Vector3(1.0f*scale[6],1.0f*scale[6],1.0f*scale[6]);break;//unknown - + if(UI.GUIDisplay.file_extension=="xgmml") { +// atom1number=AtomCubeStyle.atomOrderList.IndexOf(oratom1number); +// atom2number=AtomCubeStyle.atomOrderList.IndexOf(oratom2number); + } + else { + switch(iType) { + case 0:c= (MoleculeModel.carbonColor.color);v=new Vector3(1.7f*scale[0],1.7f*scale[0],1.7f*scale[0]);break;//c + case 1:c= (MoleculeModel.nitrogenColor.color);v=new Vector3(1.55f*scale[1],1.55f*scale[1],1.55f*scale[1]);break;//n + case 2:c= (MoleculeModel.oxygenColor.color);v=new Vector3(1.52f*scale[2],1.52f*scale[2],1.52f*scale[2]);break;//o + case 3:c= (MoleculeModel.sulphurColor.color);v=new Vector3(2.27f*scale[3],2.27f*scale[3],2.27f*scale[3]);break;//s + case 4:c= (MoleculeModel.phosphorusColor.color);v=new Vector3(1.18f*scale[4],1.18f*scale[4],1.18f*scale[4]);break;//p + case 5:c= (MoleculeModel.hydrogenColor.color);v=new Vector3(1.2f*scale[5],1.2f*scale[5],1.2f*scale[5]);break;//h + default:c= (MoleculeModel.unknownColor.color);v=new Vector3(1.0f*scale[6],1.0f*scale[6],1.0f*scale[6]);break;//unknown } } - int Number=atomsLocation.Count; - - for(int k=0;k().xgmml=true; Atom.GetComponent().z=(float)(fLocation[2]); - } } - else - { + else { Atom.AddComponent("BallUpdateCube"); BallUpdateCube comp1 = Atom.GetComponent(); comp1.SetRayonFactor(atomModel.scale/100); - // comp1.rayon = atomModel.radius; - // comp1.SetRayonFactor(atomModel.scale/100); - // comp1.number = iAtom; - // comp1.enabled = true; } BallUpdate comp = Atom.GetComponent(); +// Debug.Log ("%%%%%%%%%%%%%%%%%%%%% Creating Atom"); +// Debug.Log (iAtom); comp.rayon = atomModel.radius; comp.atomcolor = atomModel.baseColor; comp.number = iAtom; - comp.oldrayonFactor = atomModel.scale/100; //Why division by 100 ??? +// Debug.Log (comp.number); + comp.oldrayonFactor = atomModel.scale/100; // Why division by 100 ??? - if(UI.GUIDisplay.file_extension=="xgmml") - { + if(UI.GUIDisplay.file_extension=="xgmml") { comp.rayon = ((MoleculeModel.CSRadiusList[iAtom]) as float[])[0]; comp.atomcolor = HexToColor((MoleculeModel.CSColorList[iAtom] as string[])[0]); } @@ -802,23 +452,20 @@ private void CreateAtomHB(int iAtom, ArrayList coordinates, ArrayList atomModels // Projector proj = Atom.AddComponent(); Atom.AddComponent(); - - comp.enabled = true; - + comp.enabled = true; + comp.isSplineNode = UIData.secondarystruct; Atom.tag = atomModel.type; if(atomtype==UIData.AtomType.particleball) - { Atom.renderer.enabled = false; - } + + BoxCollider collider = Atom.collider as BoxCollider; + float newSize = comp.rayon * 60 / 100; + collider.size = new Vector3(newSize,newSize,newSize); } - - - - - private ArrayList AtomListByType(ArrayList alist,ArrayList typelist) - { +// private ArrayList AtomListByType(ArrayList alist, ArrayList typelist) + private ArrayList AtomListByType(IList alist, IList typelist) { ArrayList atomListByType=new ArrayList(); ArrayList CList=new ArrayList(); @@ -836,62 +483,55 @@ private ArrayList AtomListByType(ArrayList alist,ArrayList typelist) ArrayList POrderList=new ArrayList(); ArrayList HOrderList=new ArrayList(); ArrayList NOOrderList=new ArrayList(); - if(atomOrderList!=null) - { + if(atomOrderList!=null) { atomOrderList.Clear(); atomOrderList=null; - } - if(atomOrderListArray!=null) - { + if(atomOrderListArray!=null) { atomOrderListArray.Clear(); atomOrderListArray=null; - } atomOrderList=new ArrayList(); atomOrderListArray=new ArrayList(); - - for(int i=0;i(); + Atom.rigidbody.isKinematic = true; + Debug.Log("Atom collider?"); + Debug.Log(Atom.collider.ToString()); + GameObject.DestroyObject(Atom.collider); +*/ float[] fLocation=atomLocationalist[iAtom] as float[]; Vector3 location=new Vector3(fLocation[0],fLocation[1],fLocation[2]); + Atom.transform.Translate(location); Atom.renderer.material.SetColor("_Color",c); - Atom.transform.parent = AtomCubeParent.transform; +// Atom.transform.parent = AtomCubeParent.transform; +// Debug.Log(Atom.collider.ToString()); MoleculeModel.atoms.Add(Atom); - - if(atomtype==UIData.AtomType.hyperball) - { + + BallUpdate script; + if(atomtype==UIData.AtomType.hyperball) { RuntimePlatform platform = Application.platform; - switch(platform) - { + switch(platform) { case RuntimePlatform.WindowsPlayer: case RuntimePlatform.WindowsWebPlayer: case RuntimePlatform.WindowsEditor: - Atom.renderer.material.shader=Shader.Find("FvNano/Ball HyperBalls D3D"); + Atom.renderer.material.shader=Shader.Find("FvNano/Ball HyperBalls OpenGL"); break; default : Atom.renderer.material.shader=Shader.Find("FvNano/Ball HyperBalls OpenGL"); @@ -962,49 +609,40 @@ private void CreateAtomHB(int iType,int iAtom , ArrayList atomLocationalist,Colo Atom.AddComponent("BallUpdateHB"); BallUpdateHB comp = Atom.GetComponent(); + script = comp; comp.rayon=(float)(v[0]); comp.atomcolor=c; comp.number=order; comp.z=(float)(fLocation[2]); // Projector proj = Atom.AddComponent(); Atom.AddComponent(); - if(UI.GUIDisplay.file_extension=="xgmml")comp.xgmml=true; +// if(UI.GUIDisplay.file_extension=="xgmml")comp.xgmml=true; comp.enabled = true; - switch(iType) - { + switch(iType) { case 0: - // comp.rayonFactor=(MoleculeModel.carbonScale)/100;break; comp.oldrayonFactor=(MoleculeModel.carbonScale)/100;break; case 1: - // comp.rayonFactor=(MoleculeModel.nitrogenScale)/100;break; comp.oldrayonFactor=(MoleculeModel.nitrogenScale)/100;break; case 2: - // comp.rayonFactor=(MoleculeModel.oxygenScale)/100;break; comp.oldrayonFactor=(MoleculeModel.oxygenScale)/100;break; case 3: - // comp.rayonFactor=(MoleculeModel.sulphurScale)/100;break; comp.oldrayonFactor=(MoleculeModel.sulphurScale)/100;break; case 4: - // comp.rayonFactor=(MoleculeModel.phosphorusScale)/100;break; comp.oldrayonFactor=(MoleculeModel.phosphorusScale)/100;break; case 5: - // comp.rayonFactor=(MoleculeModel.hydrogenScale)/100;break; comp.oldrayonFactor=(MoleculeModel.hydrogenScale)/100;break; default: - // comp.rayonFactor=1.0f;break; comp.oldrayonFactor=2.0f;break; - - } + } } - else - { + else { Atom.AddComponent("BallUpdateCube"); BallUpdateCube comp1 = Atom.GetComponent(); - // comp1.rayon = Atom.transform.localScale.x*2; + script = comp1; +// comp1.rayon = Atom.transform.localScale.x*2; comp1.rayon = (float)(v[0])*2; float rayonfactor; - switch(iType) - { + switch(iType) { case 0: rayonfactor=(MoleculeModel.carbonScale)/100;break; case 1: @@ -1019,16 +657,13 @@ private void CreateAtomHB(int iType,int iAtom , ArrayList atomLocationalist,Colo rayonfactor=(MoleculeModel.hydrogenScale)/100;break; default: rayonfactor=1.0f;break; - } - comp1.SetRayonFactor(rayonfactor); comp1.number=order; comp1.enabled = true; } - switch(iType) - { + switch(iType) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; @@ -1036,21 +671,16 @@ private void CreateAtomHB(int iType,int iAtom , ArrayList atomLocationalist,Colo case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; default:Atom.tag="X";break; - } if(atomtype==UIData.AtomType.particleball) - { Atom.renderer.enabled = false; - // Atom.active = false; - } - - + BoxCollider collider = Atom.collider as BoxCollider; + float newSize = script.rayon * 60 / 100; + collider.size = new Vector3(newSize,newSize,newSize); } - private void CreateAtomRC(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { - + private void CreateAtomRC(int type, int start, int end, ArrayList atomLocationalist, Color c, Vector3 v, int order) { GameObject Atom; Atom=GameObject.CreatePrimitive(PrimitiveType.Cube); float[] fLocation=atomLocationalist[start] as float[]; @@ -1065,8 +695,7 @@ private void CreateAtomRC(int type,int start ,int end,ArrayList atomLocationalis comp.atomcolor=c; comp.number=order; comp.enabled = true; - switch(type) - { + switch(type) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; @@ -1074,23 +703,15 @@ private void CreateAtomRC(int type,int start ,int end,ArrayList atomLocationalis case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; default:Atom.tag="X";break; - } - } - private void CreateAtomRCBB(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { - + private void CreateAtomRCBB(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) { GameObject Atom; if(UIData.toggleClip) - { Atom=Clip4RayCasting.CreateClip(); - } else - { Atom=GameObject.CreatePrimitive(PrimitiveType.Plane); - } float[] fLocation=atomLocationalist[start] as float[]; Vector3 location=new Vector3(fLocation[0],fLocation[1],fLocation[2]); @@ -1107,29 +728,23 @@ private void CreateAtomRCBB(int type,int start ,int end,ArrayList atomLocational comp.atomcolor=c; comp.number=order; comp.enabled = true; - switch(type) - { + switch(type) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; case 3:Atom.tag="S";break; case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; - default:Atom.tag="X";break; - + default:Atom.tag="X";break; } } - private void CreateAtomHBBB(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { + + private void CreateAtomHBBB(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) { GameObject Atom; if(UIData.toggleClip) - { Atom=Clip4RayCasting.CreateClip(); - } else - { Atom=GameObject.CreatePrimitive(PrimitiveType.Plane); - } float[] fLocation=atomLocationalist[start] as float[]; Vector3 location=new Vector3(fLocation[0],fLocation[1],fLocation[2]); @@ -1144,13 +759,11 @@ private void CreateAtomHBBB(int type,int start ,int end,ArrayList atomLocational BallUpdateHB comp = Atom.GetComponent(); comp.rayon=(float)(v[0]); comp.atomcolor=c; - // Debug.Log(start+"/"+c); +// Debug.Log(start+"/"+c); comp.number=order; comp.enabled = true; - switch(type) - { - + switch(type) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; @@ -1158,35 +771,29 @@ private void CreateAtomHBBB(int type,int start ,int end,ArrayList atomLocational case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; default:Atom.tag="X";break; - } } - private void CreateAtomRCSprite(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { + private void CreateAtomRCSprite(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) { LinkedSpriteManager linkedSpriteManager=null; GameObject SpriteManager; - if(!GameObject.Find("SpriteManager")) - { + if(!GameObject.Find("SpriteManager")) { SpriteManager=new GameObject(); SpriteManager.name="SpriteManager"; } else - { SpriteManager=GameObject.Find("SpriteManager"); - } + SpriteManager.GetComponent ().enabled=true; - if(SpriteManager.GetComponent ()==null) - { + if(SpriteManager.GetComponent ()==null) { SpriteManager.AddComponent("LinkedSpriteManager"); linkedSpriteManager= (LinkedSpriteManager)Component.FindObjectOfType(typeof(LinkedSpriteManager)); Material mat = Resources.Load("Materials/hyperballshader", typeof(Material)) as Material; linkedSpriteManager.material=mat; linkedSpriteManager.allocBlockSize=atomLocationalist.Count; } - else - { + else { linkedSpriteManager= (LinkedSpriteManager)Component.FindObjectOfType(typeof(LinkedSpriteManager)); linkedSpriteManager.allocBlockSize=atomLocationalist.Count; linkedSpriteManager.enabled=true; @@ -1204,14 +811,8 @@ private void CreateAtomRCSprite(int type,int start ,int end,ArrayList atomLocati comp.atomcolor=c; comp.number=order; comp.enabled = true; - linkedSpriteManager.AddSprite(Atom, - 1f,1f, - 0,0, - 256,256, - true - ); - switch(type) - { + linkedSpriteManager.AddSprite(Atom, 1f, 1f, 0, 0, 256, 256, true); + switch(type) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; @@ -1219,24 +820,17 @@ private void CreateAtomRCSprite(int type,int start ,int end,ArrayList atomLocati case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; default:Atom.tag="X";break; - - } - + } } - - private void CreateAtomMtHyperBall(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { + private void CreateAtomMtHyperBall(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) { GameObject Atom; - if(!GameObject.Find("MultiHBCube")) - { + if(!GameObject.Find("MultiHBCube")) { Atom=GameObject.CreatePrimitive(PrimitiveType.Cube); Atom.name="MultiHBCube"; } else - { Atom=GameObject.Find("MultiHBCube"); - } float[] fLocation=atomLocationalist[start] as float[]; Vector3 location=new Vector3(fLocation[0],fLocation[1],fLocation[2]); Material newMat = new Material(Shader.Find("FvNano/Ball HyperBalls OpenGL")); @@ -1249,8 +843,7 @@ private void CreateAtomMtHyperBall(int type,int start ,int end,ArrayList atomLoc Material[] array = new Material[materialArray.Count]; materialArray.CopyTo( array ); Atom.transform.renderer.materials = array; - switch(type) - { + switch(type) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; @@ -1258,32 +851,23 @@ private void CreateAtomMtHyperBall(int type,int start ,int end,ArrayList atomLoc case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; default:Atom.tag="X";break; - } - + } } - private void CreateCombineMeshHyperBall(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { + private void CreateCombineMeshHyperBall(int type,int start ,int end,ArrayList atomLocationalist,Color c,Vector3 v,int order) { GameObject SpriteManager; - if(!GameObject.Find("SpriteManager")) - { + if(!GameObject.Find("SpriteManager")) { SpriteManager=GameObject.CreatePrimitive(PrimitiveType.Cube); SpriteManager.name="SpriteManager"; } else - { SpriteManager=GameObject.Find("SpriteManager"); - } GameObject Atom; if(UIData.toggleClip) - { Atom=Clip4RayCasting.CreateClip(); - } else - { Atom=GameObject.CreatePrimitive(PrimitiveType.Plane); - } Atom.transform.parent=SpriteManager.transform; float[] fLocation=atomLocationalist[start] as float[]; @@ -1300,8 +884,7 @@ private void CreateCombineMeshHyperBall(int type,int start ,int end,ArrayList at comp.atomcolor=c; comp.number=order; comp.enabled = true; - switch(type) - { + switch(type) { case 0:Atom.tag="C";break; case 1:Atom.tag="N";break; case 2:Atom.tag="O";break; @@ -1309,23 +892,17 @@ private void CreateCombineMeshHyperBall(int type,int start ,int end,ArrayList at case 4:Atom.tag="P";break; case 5:Atom.tag="H";break; default:Atom.tag="X";break; - } + } } - private void CreateParticleBall(int type,int start,ArrayList atomLocationalist,Color c,Vector3 v,int order) - { - // Debug.Log("CreateParticleBall"+start); + + private void CreateParticleBall(int type,int start,ArrayList atomLocationalist,Color c,Vector3 v,int order) { +// Debug.Log("CreateParticleBall"+start); float[] fLocation=atomLocationalist[start] as float[]; Vector3 location=new Vector3(fLocation[0],fLocation[1],fLocation[2]); MoleculeModel.p[start].position=location; MoleculeModel.p[start].size=(float)(v[0]); MoleculeModel.p[start].color=c; - MoleculeModel.p[start].energy=1000; - // MoleculeModel.p[atomindex+start].position=location; - // MoleculeModel.p[atomindex+start].size=(float)(v[0]); - // MoleculeModel.p[atomindex+start].color=c; - // MoleculeModel.p[atomindex+start].energy=1000; + MoleculeModel.p[start].energy=1000; } - } - } diff --git a/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomSphereStyle.cs b/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomSphereStyle.cs index 7b813175..f48f8567 100755 --- a/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomSphereStyle.cs +++ b/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/AtomSphereStyle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: AtomSphereStyle.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: AtomSphereStyle.cs 387 2014-04-02 08:21:11Z roudier $ /// /// References : /// If you use this code, please cite the following reference : @@ -90,26 +90,36 @@ public void DisplayAtoms(UIData.AtomType type_atom, bool force_display = false) { if(type_atom != UIData.AtomType.particleball || !UIData.isParticlesInitialized ||force_display) { - if(MoleculeModel.atoms != null) - { - MoleculeModel.atoms.Clear(); - MoleculeModel.atoms=null; - } - MoleculeModel.atoms=new ArrayList(); - - atomtype = type_atom; - - if(atomtype==UIData.AtomType.sphere) - { - if(UIData.secondarystruct) - DisplayAtomMethodBySphere(MoleculeModel.CaSplineList, MoleculeModel.CaSplineTypeList); - else - DisplayAtomMethodBySphere(MoleculeModel.atomsLocationlist, MoleculeModel.atomsTypelist); - } + //if(!UIData.isSphereLoaded){ + if(AtomCubeParent == null) + AtomCubeParent = new GameObject("AtomCubeParent"); + + if(MoleculeModel.atoms != null) + { + MoleculeModel.atoms.Clear(); + MoleculeModel.atoms=null; + } + MoleculeModel.atoms=new ArrayList(); + + atomtype = type_atom; + + if(atomtype==UIData.AtomType.sphere) + { + + if(UIData.secondarystruct){ + DisplayAtomMethodBySphere(MoleculeModel.CaSplineList, MoleculeModel.CaSplineTypeList);} + else + DisplayAtomMethodBySphere(MoleculeModel.atomsLocationlist, MoleculeModel.atomsTypelist); + } + GameObject sphereManagerObj = GameObject.FindGameObjectWithTag("SphereManager"); + SphereManager sphereManager = sphereManagerObj.GetComponent(); + sphereManager.Init(); + UIData.isSphereLoaded = true; + //} } } - public void DisplayAtomMethodBySphere(ArrayList alist, ArrayList typelist) + private void DisplayAtomMethodBySphere(IList alist, IList typelist) // used to be public { Vector3 vl=new Vector3(); MoleculeModel.atomsnumber=alist.Count; @@ -120,13 +130,13 @@ public void DisplayAtomMethodBySphere(ArrayList alist, ArrayList typelist) GameObject o; float [] a=alist[i] as float[]; - AtomModel aModel= (typelist[i] as AtomModel); + AtomModel aModel = (AtomModel)typelist[i]; vl.x=a[0]; vl.y=a[1]; vl.z=a[2]; BallUpdateSphere comp1; - // o=(GameObject)MonoBehaviour.Instantiate(Resources.Load(aModel.type),vl,new Quaternion(0f,0f,0f,0f)); +// o=(GameObject)MonoBehaviour.Instantiate(Resources.Load(aModel.type),vl,new Quaternion(0f,0f,0f,0f)); o = GameObject.CreatePrimitive(PrimitiveType.Sphere); o.transform.position = vl; MoleculeModel.atoms.Add(o); @@ -135,10 +145,13 @@ public void DisplayAtomMethodBySphere(ArrayList alist, ArrayList typelist) comp1.rayon = aModel.radius*2; comp1.number=i; comp1.enabled = true; - o.transform.renderer.materials[0].SetColor("_Color", aModel.baseColor); + comp1.atomcolor = aModel.baseColor; // Why is this suddenly necessary??? + o.transform.renderer.material.SetColor("_Color", aModel.baseColor); +// Debug.Log(o.transform.renderer.material.GetColor("_Color").ToString()); comp1.SetRayonFactor(aModel.scale/100); o.tag=aModel.type; } + } diff --git a/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/FieldLineStyle.cs b/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/FieldLineStyle.cs index 38361db1..5483ee29 100644 --- a/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/FieldLineStyle.cs +++ b/Assets/Scripts/Molecule/View/DisplayAtom/AtomStyle/FieldLineStyle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: FieldLineStyle.cs 227 2013-04-07 15:21:09Z baaden $ +/// $Id: FieldLineStyle.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -66,6 +66,7 @@ using System; using UnityEngine; using System.Collections; +using System.Collections.Generic; using Molecule.Model; using Config; using UI; @@ -81,7 +82,7 @@ public FieldLineStyle() public static void DisplayFieldLine() { - if (MoleculeModel.FieldLineFileExist) { + if (MoleculeModel.fieldLineFileExists) { Color c1 = Color.white; Debug.Log("Entering :: DisplayFieldLine"); @@ -93,7 +94,7 @@ public static void DisplayFieldLine() Vector3 curent = new Vector3(0,0,0); for(int i=0;i)MoleculeModel.FieldLineList[i]).Count;j++) +// for(j=0;j<1;j++) { - Vector3 location=new Vector3(((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]).x,((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]).y,((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]).z); - - // // ligne qui grandissent avec le renderer - // lineRenderer.SetPosition(j, location); +// Vector3 location=new Vector3(((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]).x,((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]).y,((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]).z); + Vector3 location=new Vector3( ((MoleculeModel.FieldLineList[i])[j]).x, + ((MoleculeModel.FieldLineList[i])[j]).y, + ((MoleculeModel.FieldLineList[i])[j]).z); - // // ligne homogène - if (j==0){ lineRenderer.SetPosition(j, location); nbPoint +=1; @@ -146,16 +144,18 @@ public static void DisplayFieldLine() } - if( j>0){ - float dist = Vector3.Distance (((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]), ((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j-1])); + if(j>0){ +// float dist = Vector3.Distance (((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j]), ((Vector3)((ArrayList)MoleculeModel.FieldLineList[i])[j-1])); + float dist = Vector3.Distance ( ((MoleculeModel.FieldLineList[i])[j]), + ((MoleculeModel.FieldLineList[i])[j-1]) ); disttot += dist; - // Debug.Log("dist: " + dist + " disttot:" + disttot); - //leng[j] = leng[j-1] + dist; +// Debug.Log("dist: " + dist + " disttot:" + disttot); +// leng[j] = leng[j-1] + dist; if(disttot>1){ xdif = location[0] - locationbegin[0]; //Debug.Log("xdiff: " + xdif); ydif = location[1] - locationbegin[1]; //Debug.Log("ydiff: " + ydif); zdif = location[2] - locationbegin[2]; //Debug.Log("zdiff: " + zdif); - // Debug.Log("longueur "+disttot +" " + (int)disttot); +// Debug.Log("longueur "+disttot +" " + (int)disttot); if(disttot-(int)disttot <0.5) nbsegment = 2*(int)disttot; @@ -163,16 +163,16 @@ public static void DisplayFieldLine() nbsegment = 2 *(int)disttot+1; int k; - // Debug.Log("Begin "+locationbegin); +// Debug.Log("Begin "+locationbegin); curent = locationbegin; for (k=0; k -1; atomcolor=renderer.material.GetColor("_Color"); } - - void Update (){ - - if(oldatomcolor!=atomcolor) - { - renderer.material.SetColor("_Color", atomcolor); - oldatomcolor=atomcolor; - - } - - if((oldradiusFactor!=radiusFactor)||(oldrayonFactor!=rayonFactor)) - { - - this.transform.localScale = new Vector3(rayon*radiusFactor*rayonFactor,rayon*radiusFactor*rayonFactor,rayon*radiusFactor*rayonFactor); - oldradiusFactor=radiusFactor; - oldrayonFactor=rayonFactor; - - } - - if(UIData.atomtype != UIData.AtomType.cube) - { - renderer.enabled = false; - return; - } - else - renderer.enabled = true; - // renderer.material.SetFloat("_Rayon",rayon*radiusFactor); - // renderer.material.SetColor("_Color", atomcolor); - - } - } \ No newline at end of file diff --git a/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateHB.cs b/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateHB.cs index caf26aa3..a119d802 100755 --- a/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateHB.cs +++ b/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateHB.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BallUpdateHB.cs 247 2013-04-07 20:38:19Z baaden $ +/// $Id: BallUpdateHB.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -75,21 +75,22 @@ public class BallUpdateHB : BallUpdate { // Only check for d3d once public float z=0.0f; - public static float depthfactor = 1.0f; - public static bool hide = false; +// public static float depthfactor = 1.0f; + public static bool hide = false; - public bool xgmml=false; +// public bool xgmml=false; public static float maxV = 0; public static float drag=0.6f; public static float spring=5; public static Color EnergyGrayColor=Color.black; + public bool hasMouseOverMolecule = false; - private float olddepthfactor = 2.0f; +// private float olddepthfactor = 2.0f; - // public long number=0; +// public long number=0; // private bool d3d= false; @@ -103,10 +104,28 @@ public class BallUpdateHB : BallUpdate { public static void SetTexture(Texture text){ text2D = text; } - - public static void SetTexture(string resource_name){ + +/* + public static void SetTexture(string resource_name) + { + Debug.Log("BallUpdateHB: SetTexture()"); texture = resource_name; text2D = (Texture)Resources.Load(texture); + BallUpdateHB[] hyperBalls = Object.FindObjectsOfType(typeof(BallUpdateHB)) as BallUpdateHB[]; + foreach(BallUpdateHB hb in hyperBalls){ + hb.renderer.material.SetTexture("_MatCap", text2D); + } + } +*/ + + public static void ResetColors() + { + BallUpdateHB[] hyperBalls = Object.FindObjectsOfType(typeof(BallUpdateHB)) as BallUpdateHB[]; + foreach(BallUpdateHB hb in hyperBalls) + { + hb.renderer.material.SetColor("_Color", hb.atomcolor); + } + resetColors = false; } public static Color HexToColor(string hexColor) @@ -143,8 +162,9 @@ public static Color HexToColor(string hexColor) void Start (){ // d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; atomcolor=renderer.material.GetColor("_Color"); - //atomcolor = new Color(0.5f,0.5f,0.5f); +// atomcolor = new Color(0.5f,0.5f,0.5f); renderer.material.SetFloat("_Cut", 0f); + renderer.material.SetTexture("_MatCap", text2D); } public override void SetRayonFactor(float rf) @@ -162,11 +182,11 @@ public override float GetRealRadius() { return rayon*radiusFactor*2.0f; } - + +/* void Update (){ if(independant) return; - renderer.material.SetTexture("_MatCap",text2D); // if(cut == 1f) // { @@ -177,49 +197,51 @@ void Update (){ // if(cut == 0f && renderer.material.GetFloat("_Cut") == 1f) // renderer.material.SetFloat("_Cut", cut); - if(!rigidbody) + //if(!rigidbody) + if(!GUIMoleculeController.toggle_NA_INTERACTIVE) { - if(oldatomcolor!=atomcolor) - { - renderer.material.SetColor("_Color", atomcolor); - oldatomcolor=atomcolor; - - } + //if(resetColors) + // ResetColors(); + if(oldradiusFactor!=radiusFactor) { renderer.material.SetFloat("_Rayon",rayon*radiusFactor); oldradiusFactor=radiusFactor; } - if(olddepthfactor!=depthfactor) - { - olddepthfactor=depthfactor; - } + - if(xgmml) + if(xgmml) // move this { if(xgmml)this.transform.localPosition = new Vector3(this.transform.localPosition.x,this.transform.localPosition.y,z*depthfactor); - } + //renderer.material.SetVector("_Rotation",MoleculeModel.Center); } - + + if(GUIMoleculeController.toggle_NA_INTERACTIVE) { if(!GetComponent()) { - gameObject.AddComponent(); + gameObject.AddComponent(); + hasMouseOverMolecule = true; } } else { - if(GetComponent()) + //if(GetComponent()) + if(hasMouseOverMolecule) { - Destroy(GetComponent()); + Destroy(GetComponent()); + hasMouseOverMolecule = false; } } + - if(rigidbody) + //if(rigidbody) + + if(GUIMoleculeController.toggle_NA_INTERACTIVE) { GetComponent().drag=drag; @@ -243,13 +265,9 @@ void Update (){ // oldatomcolor = Color.black; // olddepthfactor = 2.0f; } - - if(UIData.atomtype != UIData.AtomType.hyperball) - { - renderer.enabled = false; - } - else - renderer.enabled = true; + + renderer.enabled = (UIData.atomtype == UIData.AtomType.hyperball); } +*/ } \ No newline at end of file diff --git a/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateRC.cs b/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateRC.cs index 579c0e3a..c05f31a8 100755 --- a/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateRC.cs +++ b/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateRC.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BallUpdateRC.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: BallUpdateRC.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -71,12 +71,11 @@ public class BallUpdateRC : BallUpdate { // Only check for d3d once public static float maxV = 0; - // public long number=0; +// public long number=0; void Start (){ atomcolor=renderer.material.GetColor("_Color"); - } void Update () @@ -89,10 +88,10 @@ void Update () if(!rigidbody) { - if(oldradiusFactor!=radiusFactor) + if(oldRadiusFactor!=radiusFactor) { renderer.material.SetFloat("_Rayon",rayon*radiusFactor); - oldradiusFactor=radiusFactor; + oldRadiusFactor=radiusFactor; } if(oldatomcolor!=atomcolor) { diff --git a/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateSphere.cs b/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateSphere.cs index 0fc95086..badba713 100755 --- a/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateSphere.cs +++ b/Assets/Scripts/Molecule/View/DisplayAtom/BallUpdate/BallUpdateSphere.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BallUpdateSphere.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: BallUpdateSphere.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -69,7 +69,7 @@ -public class BallUpdateSphere : BallUpdate { +public class BallUpdateSphere : BallUpdate { // Only check for d3d once @@ -77,10 +77,18 @@ public class BallUpdateSphere : BallUpdate { // private bool d3d= false; void Start (){ -// d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; +/* + d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; + // Can be used for transparent spheres. Might be useful? + renderer.material.shader = Shader.Find("Transparent/Zsorted"); + Color tmp = renderer.material.GetColor("_Color"); + tmp.a = 0.5f; + renderer.material.color = tmp; +*/ atomcolor=renderer.material.GetColor("_Color"); } - + +/* void Update (){ if(oldatomcolor!=atomcolor) @@ -91,11 +99,9 @@ void Update (){ if((oldradiusFactor!=radiusFactor)||(oldrayonFactor!=rayonFactor)) { - this.transform.localScale = new Vector3(rayon*radiusFactor*rayonFactor,rayon*radiusFactor*rayonFactor,rayon*radiusFactor*rayonFactor); oldradiusFactor=radiusFactor; oldrayonFactor=rayonFactor; - } if(UIData.atomtype != UIData.AtomType.sphere) @@ -107,7 +113,7 @@ void Update (){ renderer.enabled = true; // renderer.material.SetFloat("_Rayon",rayon*radiusFactor); // renderer.material.SetColor("_Color", atomcolor); - } +*/ } \ No newline at end of file diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondCubeStyle.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondCubeStyle.cs index 7165e03d..d80913b0 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondCubeStyle.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondCubeStyle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BondCubeStyle.cs 239 2013-04-07 19:31:48Z baaden $ +/// $Id: BondCubeStyle.cs 540 2014-06-05 13:23:54Z sebastien $ /// /// References : /// If you use this code, please cite the following reference : @@ -64,118 +64,124 @@ /// -namespace Molecule.View.DisplayBond -{ - +namespace Molecule.View.DisplayBond { using UnityEngine; using System.Collections; + using System.Collections.Generic; using Molecule.Model; using Molecule.Control; using Config; using UI; using Molecule.View.DisplayAtom; - public class BondCubeStyle:IBondStyle - { + public class BondCubeStyle:IBondStyle { public int number=1; - public ArrayList bondList; - public ArrayList bondEPList; + public List bondList; + public List bondEPList; - public GameObject BondCubeParent = new GameObject("BondCubeParent"); + public static GameObject BondCubeParent = new GameObject("BondCubeParent"); - public BondCubeStyle() - { + public BondCubeStyle() { number=FunctionConfig.number; } - - public void DisplayBonds() - { - - if(UIData.bondtype==UIData.BondType.cube) - { - bondList=MoleculeModel.bondList; + public void DisplayBonds() { + if(UIData.bondtype==UIData.BondType.cube) { + bondList=MoleculeModel.bondEPList; MoleculeModel.bondsnumber=bondList.Count; if(UIData.secondarystruct) - { bondEPList=MoleculeModel.bondCAList; - } else - { bondEPList=MoleculeModel.bondEPList; - } int Number=bondEPList.Count/number; Debug.Log("DisplayBonds??bondList.Count " + bondList.Count); for(int i=0;i(); + cbManager.Init(); + + // HERE COMES THE BONDMANAGER } - else if(UIData.bondtype==UIData.BondType.hyperstick) - { + else if(UIData.bondtype==UIData.BondType.hyperstick) { if(UIData.secondarystruct) - { bondEPList=MoleculeModel.bondCAList; - } else - { bondEPList=MoleculeModel.bondEPList; - } Debug.Log("Bonds?? bondEPList.Count :: " + bondEPList.Count); int Number=bondEPList.Count/number; for(int i=0;i(); + hsManager.Init(); + +// GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); +// HBallManager hbManager = hbManagerObj.GetComponent(); +// hbManager.findBonds(); +// if (UIData.atomtype == UIData.AtomType.hyperball) +// { +// if (hbManager.ellipsoidViewEnabled() == true) +// { +// Debug.Log ("+++++++++BONDCUBESTULE - Ellipsoid View enabled"); +// hbManager.RenderEllipsoids(); +// } +// else { +// Debug.Log ("+++++++++BONDCUBESTULE - Ellipsoid View disabled"); +// hbManager.RenderAtoms(); +// } +// } } - else if(UIData.bondtype==UIData.BondType.bbhyperstick) - { + else if(UIData.bondtype==UIData.BondType.bbhyperstick) { if(UIData.secondarystruct) - { bondEPList=MoleculeModel.bondCAList; - } else - { bondEPList=MoleculeModel.bondEPList; - } Debug.Log("DisplayBonds??bondEPList.Count " + bondEPList.Count); int Number=bondEPList.Count/number; for(int i=0;i(); - comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; - comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + //Debug.Log("BOND : " + atomsIds[0] + " - " + atomsIds[1]); + //comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; + //comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + + if(UI.UIData.atomtype == UI.UIData.AtomType.particleball){ + comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; + comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + } + else{ + GenericManager manager = Molecule.View.DisplayMolecule.GetManagers()[0]; + comp.atompointer1 = manager.GetBall(Molecule.Model.MoleculeModel.atoms.Count - 1 - atomsIds[0]); + comp.atompointer2 = manager.GetBall(Molecule.Model.MoleculeModel.atoms.Count - 1 - atomsIds[1]); + } + comp.enabled = true; - Stick.renderer.material.SetFloat("_Shrink", 0.01f); + Stick.renderer.material.SetFloat("_Shrink", StickUpdate.shrink); Stick.tag="Club"; Stick.collider.enabled = false; Stick.transform.position = comp.atompointer1.transform.position; @@ -184,26 +190,35 @@ private void CreateCylinderByShader(int start) //Cubes - private void CreateCylinder(int i) - { - -// GameObject cylinder; -// MeshFilter filter; -// Mesh cylinderMesh; -// cylinder=GameObject.CreatePrimitive(PrimitiveType.Cube); -// filter=cylinder.GetComponent(); -// cylinderMesh=filter.mesh; -// filter.mesh=new Mesh(); -// CombineInstance []instances=new CombineInstance[end-start]; - + private void CreateCylinder(int i) { +/* GameObject cylinder; + MeshFilter filter; + Mesh cylinderMesh; + cylinder=GameObject.CreatePrimitive(PrimitiveType.Cube); + filter=cylinder.GetComponent(); + cylinderMesh=filter.mesh; + filter.mesh=new Mesh(); + CombineInstance []instances=new CombineInstance[end-start]; +*/ int[] atomsIds = bondEPList[i] as int[]; GameObject o=GameObject.CreatePrimitive(PrimitiveType.Cube); o.renderer.material=(Material)Resources.Load("Materials/CubeBoneMaterial"); BondCubeUpdate comp = o.AddComponent(); - comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; - comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; - // o.transform.position = location[0]; - // o.transform.LookAt(location[1]); + //comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; + //comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + + if(UI.UIData.atomtype == UI.UIData.AtomType.particleball){ + comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; + comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + } + else{ + GenericManager manager = Molecule.View.DisplayMolecule.GetManagers()[0]; + comp.atompointer1 = manager.GetBall(Molecule.Model.MoleculeModel.atoms.Count - 1 - atomsIds[0]); + comp.atompointer2 = manager.GetBall(Molecule.Model.MoleculeModel.atoms.Count - 1 - atomsIds[1]); + } + +// o.transform.position = location[0]; +// o.transform.LookAt(location[1]); o.transform.localScale=new Vector3(0.1f,0.1f,1f); o.tag="Club"; o.transform.parent = BondCubeParent.transform; @@ -211,19 +226,12 @@ private void CreateCylinder(int i) //Billboard hypersticks - private void CreateBBCylinderByShader(int i) - { - - + private void CreateBBCylinderByShader(int i) { GameObject Stick; if(UIData.toggleClip) - { Stick=Clip4HyperStick.CreateClip(); - } else - { Stick=GameObject.CreatePrimitive(PrimitiveType.Plane); - } int[] atomsIds = bondEPList[i] as int[]; @@ -231,15 +239,14 @@ private void CreateBBCylinderByShader(int i) Stick.AddComponent("CameraFacingBillboard"); Stick.GetComponent().cameraToLookAt = GameObject.Find("Camera").camera; RuntimePlatform platform = Application.platform; - switch(platform) - { + switch(platform) { case RuntimePlatform.WindowsPlayer: case RuntimePlatform.WindowsWebPlayer: case RuntimePlatform.WindowsEditor: - Stick.renderer.material.shader=Shader.Find("FvNano/Stick HyperBalls D3D"); + Stick.renderer.material.shader=Shader.Find("FvNano/Stick HyperBalls 2 OpenGL"); break; default : - Stick.renderer.material.shader=Shader.Find("FvNano/Stick HyperBalls OpenGL"); + Stick.renderer.material.shader=Shader.Find("FvNano/Stick HyperBalls 2 OpenGL"); break; } Stick.AddComponent("StickUpdate"); diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondLineStyle.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondLineStyle.cs index 23d94093..8273f16f 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondLineStyle.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondLineStyle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BondLineStyle.cs 223 2013-04-06 22:32:11Z baaden $ +/// $Id: BondLineStyle.cs 361 2013-08-28 12:55:30Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -69,6 +69,7 @@ namespace Molecule.View.DisplayBond using UnityEngine; using System.Collections; + using System.Collections.Generic; using Molecule.Model; using Molecule.Control; using Config; @@ -79,7 +80,7 @@ public class BondLineStyle:IBondStyle { public int number=1; - public ArrayList bondEPList=new ArrayList(); + public List bondEPList=new List(); public BondLineStyle() { @@ -109,11 +110,13 @@ public void DisplayBonds() { CreateLine(i*number); } - + GameObject lineManagerObj = GameObject.FindGameObjectWithTag("LineManager"); + LineManager lineManager = lineManagerObj.GetComponent(); + lineManager.Init(); } private void CreateLine(int i) { - GameObject Line=new GameObject(); + GameObject Line=new GameObject("Line"); int[] atomsIds = bondEPList[i] as int[]; @@ -124,8 +127,19 @@ private void CreateLine(int i) if(Line.GetComponent()==null) Line.AddComponent("LineUpdate"); LineUpdate comp = Line.GetComponent(); - comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; - comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; +// comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; +// comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + + if(UI.UIData.atomtype == UI.UIData.AtomType.particleball){ + comp.atompointer1=(GameObject)MoleculeModel.atoms[atomsIds[0]]; + comp.atompointer2=(GameObject)MoleculeModel.atoms[atomsIds[1]]; + } + else{ + GenericManager manager = Molecule.View.DisplayMolecule.GetManagers()[0]; + comp.atompointer1 = manager.GetBall(Molecule.Model.MoleculeModel.atoms.Count - 1 - atomsIds[0]); + comp.atompointer2 = manager.GetBall(Molecule.Model.MoleculeModel.atoms.Count - 1 - atomsIds[1]); + } + comp.enabled = true; Line.tag="Club"; } diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondParticleStyle.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondParticleStyle.cs index 4226cd30..a2b9e885 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondParticleStyle.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondStyle/BondParticleStyle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BondParticleStyle.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: BondParticleStyle.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -69,6 +69,7 @@ namespace Molecule.View.DisplayBond using UnityEngine; using System.Collections; + using System.Collections.Generic; using Molecule.Model; using Molecule.Control; using Config; @@ -77,8 +78,8 @@ namespace Molecule.View.DisplayBond public class BondParticleStyle:IBondStyle { public int number=1; - public ArrayList bondList=new ArrayList(); - public ArrayList bondEPList=new ArrayList(); + public List bondList=new List(); + public List bondEPList=new List(); Particle[] p = new Particle[MoleculeModel.bondEPList.Count/FunctionConfig.number]; int bondindex=0; @@ -117,7 +118,8 @@ public void DisplayBonds() } - private void CreateCylinderByParticle(int start, int end) + + private void CreateCylinderByParticle(int start, int end) // Apparently unused function. Would make ParticleSticks. { @@ -126,7 +128,16 @@ private void CreateCylinderByParticle(int start, int end) ParticleManager.transform.GetComponent(); for(int i=start;i bondEPList=new List(); public BondTubeStyle() { @@ -126,8 +127,8 @@ private void CreateTube(int i) TubeUpdate comp = Line.GetComponent(); comp.SetAtoms((GameObject)MoleculeModel.atoms[atomsIds[0]], (GameObject)MoleculeModel.atoms[atomsIds[1]]); - // comp.atompointer1=(GameObject)MoleculeModel.atoms[atom1number]; - // comp.atompointer2=(GameObject)MoleculeModel.atoms[atom2number]; +// comp.atompointer1=(GameObject)MoleculeModel.atoms[atom1number]; +// comp.atompointer2=(GameObject)MoleculeModel.atoms[atom2number]; comp.enabled = true; Line.tag="Club"; diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/BondCubeUpdate.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/BondCubeUpdate.cs index 19a04abc..4695f2c5 100644 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/BondCubeUpdate.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/BondCubeUpdate.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: BondCubeUpdate.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: BondCubeUpdate.cs 350 2013-08-23 13:55:39Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -68,48 +68,108 @@ using UI; public class BondCubeUpdate : MonoBehaviour { + + public static float scale = 1.0f; + public static float radiusFactor = 1.0f; + public GameObject atompointer1=null; + public GameObject atompointer2=null; + public int atomnumber1; + public int atomnumber2; + + public static float oldscale = 1.0f; + public static float width = GUIMoleculeController.bondWidth ; + public static float oldWidth = GUIMoleculeController.bondWidth ; +// private float oldrayon1 = 2.0f; +// private float oldrayon2 = 2.0f; -public static float scale = 1.0f; -public static float radiusFactor = 1.0f; -public GameObject atompointer1=null; -public GameObject atompointer2=null; -public int atomnumber1; -public int atomnumber2; -private float oldscale = 1.0f; -//private float oldrayon1 = 2.0f; -//private float oldrayon2 = 2.0f; - - -// Only check for d3d once -//private bool d3d= false; -void Start (){ -// d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; - -} - -void Update () -{ - if(atompointer1==null||atompointer2==null) - { - DestroyImmediate(this); - } - - if(oldscale!=scale) - { - renderer.material.SetFloat("_Scale",scale); - oldscale=scale; - } - if(UIData.EnableUpdate) - { + //Only check for d3d once +// private bool d3d= false; + void Start () { +// d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; +// Debug.Log("BondCubeUpdate: Start()"); + width = GUIMoleculeController.bondWidth ; + if (atompointer1 != null && atompointer2 != null) { + Vector3 v_dist = atompointer2.transform.position - atompointer1.transform.position ; + float length = v_dist.magnitude ; + Vector3 lscale = new Vector3(transform.localScale.x, transform.localScale.y, length); + this.transform.localScale = lscale ; + } transform.position = (atompointer1.transform.position + atompointer2.transform.position)/2.0f; transform.LookAt(atompointer2.transform.position); - - renderer.material.SetVector("_Pos1", atompointer1.transform.position); - renderer.material.SetVector("_Pos2", atompointer2.transform.position); + + Vector3 pos1 = atompointer1.transform.position; + renderer.material.SetVector("_Pos1", pos1); + + Vector3 pos2 = atompointer2.transform.position; + renderer.material.SetVector("_Pos2", pos2); + + Color32 color1 = atompointer1.renderer.material.GetColor("_Color"); + //Debug.Log(color1.ToString()); renderer.material.SetColor("_Color1", atompointer1.renderer.material.GetColor("_Color")); + + Color32 color2 = atompointer2.renderer.material.GetColor("_Color"); + //Debug.Log(color2.ToString()); renderer.material.SetColor("_Color2", atompointer2.renderer.material.GetColor("_Color")); - }//if(UIData.EnableUpdate) -}//Update() + + Mesh mesh = GetComponent().mesh; + Vector3[] vertices = mesh.vertices; + Color32[] colors = new Color32[vertices.Length]; + float dist1, dist2; + Matrix4x4 localToWorld = transform.localToWorldMatrix; + + Vector3 pos; + for(int i=0; i().mesh = mesh; + renderer.material.shader = Shader.Find("Custom/Ribbons"); + + } + +/* + void Update () + { + if (!lengthAdjusted && atompointer1 != null && atompointer2 != null) { + Vector3 v_dist = atompointer2.transform.position - atompointer1.transform.position ; + float length = v_dist.magnitude ; + Vector3 lscale = new Vector3(transform.localScale.x, transform.localScale.y, length); + this.transform.localScale = lscale ; + lengthAdjusted = true ; + } + if (width != oldWidth) { + Vector3 lscale = new Vector3(width, width, transform.localScale.z); + this.transform.localScale = lscale ; + } + if(atompointer1==null||atompointer2==null) + { + DestroyImmediate(this); + } + + if(oldscale!=scale) + { + renderer.material.SetFloat("_Scale",scale); + oldscale=scale; + } + if(UIData.EnableUpdate) + { + transform.position = (atompointer1.transform.position + atompointer2.transform.position)/2.0f; + transform.LookAt(atompointer2.transform.position); + + renderer.material.SetVector("_Pos1", atompointer1.transform.position); + renderer.material.SetVector("_Pos2", atompointer2.transform.position); + renderer.material.SetColor("_Color1", atompointer1.renderer.material.GetColor("_Color")); + renderer.material.SetColor("_Color2", atompointer2.renderer.material.GetColor("_Color")); + }//if(UIData.EnableUpdate) + }//Update() +*/ } \ No newline at end of file diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/LineUpdate.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/LineUpdate.cs index 7721fca9..ba82e108 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/LineUpdate.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/LineUpdate.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: LineUpdate.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: LineUpdate.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -69,79 +69,99 @@ public class LineUpdate : MonoBehaviour { -public GameObject atompointer1=null; -public GameObject atompointer2=null; - -public static float scale = 1.0f; - - -private Color oldatomcolor1=Color.black; -//private Color oldatomcolor2=Color.black; - -private Vector3 oldatomposition1=new Vector3(0,0,0); -private Vector3 oldatomposition2=new Vector3(0,0,0); - -private float oldscale = 2.0f; - -private float oldradius1 = 1.0f; -private float oldradius2 = 1.0f; - -// Only check for d3d once -void Start (){ -} - -void Update () -{ - LineRenderer lineRenderer = GetComponent(); - //lineRenderer.SetVertexCount(2); - if(UIData.EnableUpdate) + public GameObject atompointer1=null; + public GameObject atompointer2=null; + + public static float scale = 1.0f; + + + public Color oldatomcolor1=Color.black; +// private Color oldatomcolor2=Color.black; + +// private Vector3 oldatomposition1=new Vector3(0,0,0); +// private Vector3 oldatomposition2=new Vector3(0,0,0); + + public float oldscale = 2.0f; + + public float oldradius1 = 1.0f; + public float oldradius2 = 1.0f; + + public static float width = GUIMoleculeController.bondWidth ; + public static float oldWidth = GUIMoleculeController.bondWidth ; + + public LineRenderer lineRenderer; + + // Only check for d3d once + void Start () + { + lineRenderer = GetComponent(); + lineRenderer.SetPosition(0, atompointer1.transform.position); + lineRenderer.SetPosition(1, atompointer2.transform.position); + lineRenderer.SetWidth(width, width); +// oldatomposition1=atompointer1.transform.position; +// oldatomposition2=atompointer2.transform.position; + } + + +/* + void Update () { - if((oldatomcolor1!=atompointer1.renderer.material.GetColor("_Color"))||(oldatomcolor1!=atompointer2.renderer.material.GetColor("_Color"))) - { - lineRenderer.SetColors(atompointer1.renderer.material.GetColor("_Color"), atompointer2.renderer.material.GetColor("_Color")); + //lineRenderer.SetVertexCount(2); + if(UIData.EnableUpdate) + { + if((oldatomcolor1!=atompointer1.renderer.material.GetColor("_Color"))||(oldatomcolor1!=atompointer2.renderer.material.GetColor("_Color"))) + { + lineRenderer.SetColors(atompointer1.renderer.material.GetColor("_Color"), atompointer2.renderer.material.GetColor("_Color")); + + oldatomcolor1=atompointer1.renderer.material.GetColor("_Color"); + // oldatomcolor2=atompointer2.renderer.material.GetColor("_Color"); + } + if((oldatomposition1!=atompointer1.transform.position)||(oldatomposition2!=atompointer2.transform.position)) + { + lineRenderer.SetPosition(0, atompointer1.transform.position); + lineRenderer.SetPosition(1, atompointer2.transform.position); + oldatomposition1=atompointer1.transform.position; + oldatomposition2=atompointer2.transform.position; + } - oldatomcolor1=atompointer1.renderer.material.GetColor("_Color"); -// oldatomcolor2=atompointer2.renderer.material.GetColor("_Color"); - } - if((oldatomposition1!=atompointer1.transform.position)||(oldatomposition2!=atompointer2.transform.position)) - { - lineRenderer.SetPosition(0, atompointer1.transform.position); - lineRenderer.SetPosition(1, atompointer2.transform.position); - oldatomposition1=atompointer1.transform.position; - oldatomposition2=atompointer2.transform.position; - } - - if(oldscale!=scale) - { - if(atompointer1.renderer.material.HasProperty("_Rayon")&&atompointer2.renderer.material.HasProperty("_Rayon")) - lineRenderer.SetWidth( scale*atompointer1.renderer.material.GetFloat("_Rayon"), - scale*atompointer2.renderer.material.GetFloat("_Rayon")); - else - lineRenderer.SetWidth( scale*atompointer1.transform.lossyScale.x/2, - scale*atompointer2.transform.lossyScale.x/2); - oldscale=scale; - } - - if(atompointer1.renderer.material.HasProperty("_Rayon") && atompointer2.renderer.material.HasProperty("_Rayon")) - { - if((oldradius1!=atompointer1.renderer.material.GetFloat("_Rayon"))||(oldradius2!=atompointer2.renderer.material.GetFloat("_Rayon"))) + if(oldscale!=scale) { - lineRenderer.SetWidth( scale*atompointer1.renderer.material.GetFloat("_Rayon"), - scale*atompointer2.renderer.material.GetFloat("_Rayon")); - oldradius1=atompointer1.renderer.material.GetFloat("_Rayon"); - oldradius2=atompointer2.renderer.material.GetFloat("_Rayon"); + if(atompointer1.renderer.material.HasProperty("_Rayon")&&atompointer2.renderer.material.HasProperty("_Rayon")) + lineRenderer.SetWidth( scale*atompointer1.renderer.material.GetFloat("_Rayon"), + scale*atompointer2.renderer.material.GetFloat("_Rayon")); + else + lineRenderer.SetWidth( scale*atompointer1.transform.lossyScale.x/2, + scale*atompointer2.transform.lossyScale.x/2); + oldscale=scale; } - } - else - { - if((oldradius1!=atompointer1.transform.lossyScale.x/2)||(oldradius2!=atompointer2.transform.lossyScale.x/2)) + + if(atompointer1.renderer.material.HasProperty("_Rayon") && atompointer2.renderer.material.HasProperty("_Rayon")) + { + if((oldradius1!=atompointer1.renderer.material.GetFloat("_Rayon"))||(oldradius2!=atompointer2.renderer.material.GetFloat("_Rayon"))) + { + lineRenderer.SetWidth( scale*atompointer1.renderer.material.GetFloat("_Rayon"), + scale*atompointer2.renderer.material.GetFloat("_Rayon")); + oldradius1=atompointer1.renderer.material.GetFloat("_Rayon"); + oldradius2=atompointer2.renderer.material.GetFloat("_Rayon"); + } + } + else { - lineRenderer.SetWidth( scale*atompointer1.transform.lossyScale.x/2, - scale*atompointer2.transform.lossyScale.x/2); - oldradius1=atompointer1.transform.lossyScale.x/2; - oldradius2=atompointer2.transform.lossyScale.x/2; + + width = GUIMoleculeController.bondWidth ; + if (width != oldWidth) { + lineRenderer.SetWidth(width, width); + } + + if((oldradius1!=atompointer1.transform.lossyScale.x/2)||(oldradius2!=atompointer2.transform.lossyScale.x/2)) + { + lineRenderer.SetWidth( scale*atompointer1.transform.lossyScale.x/2, + scale*atompointer2.transform.lossyScale.x/2); + oldradius1=atompointer1.transform.lossyScale.x/2; + oldradius2=atompointer2.transform.lossyScale.x/2; + } } - } + } } -} +*/ } \ No newline at end of file diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdate.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdate.cs index 025d8aa2..8d031923 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdate.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdate.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: StickUpdate.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: StickUpdate.cs 346 2013-08-19 18:14:34Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -68,88 +68,136 @@ using UI; public class StickUpdate : MonoBehaviour { - -public static float shrink = 0.01f; -public static float scale = 1.0f; -public static float radiusFactor = 1.0f; -public GameObject atompointer1=null; -public GameObject atompointer2=null; -public int atomnumber1; -public int atomnumber2; - -private float oldshrink = 0.01f; -private float oldscale = 1.0f; -private float oldrayon1 = 2.0f; -private float oldrayon2 = 2.0f; - -public ParticleEmitter emitter; - -public bool independant = false; - - -// Only check for d3d once -//private bool d3d= false; -void Start (){ -// d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; - -} - -void Update () -{ - if(independant) - return; - - if(atompointer1==null||atompointer2==null) + + public static bool resetColors = false; + + public static float shrink = 0.01f; + public static float oldshrink = 0.01f; + + public static float scale = 1.0f; + public static float oldscale = 1.0f; + + public static float radiusFactor = 1.0f; + public GameObject atompointer1=null; + public GameObject atompointer2=null; + public int atomnumber1; + public int atomnumber2; + + + + public float oldrayon1 = 2.0f; + public float oldrayon2 = 2.0f; + + public ParticleEmitter emitter; + + public bool independant = false; + +/* + public static void SetTexture() { - DestroyImmediate(this); - } - if(oldshrink!=shrink) - { - renderer.material.SetFloat("_Shrink",shrink); - oldshrink=shrink; + StickUpdate[] stickUpdates = Object.FindObjectsOfType(typeof(StickUpdate)) as StickUpdate[]; + foreach(StickUpdate stu in stickUpdates) + { + stu.renderer.material.SetTexture("_MatCap", BallUpdateHB.text2D); + } } - if(oldscale!=scale) - { - renderer.material.SetFloat("_Scale",scale); - oldscale=scale; +*/ + + public static void ResetColors() { + StickUpdate[] stickUpdates = Object.FindObjectsOfType(typeof(StickUpdate)) as StickUpdate[]; + foreach(StickUpdate stu in stickUpdates) { + stu.renderer.material.SetColor("_Color", stu.atompointer1.renderer.material.GetColor("_Color")); + stu.renderer.material.SetColor("_Color2", stu.atompointer2.renderer.material.GetColor("_Color")); + } + resetColors = false; } - if(UIData.EnableUpdate) - { - renderer.material.SetTexture("_MatCap",BallUpdateHB.text2D); - renderer.material.SetVector("_TexPos1", atompointer1.transform.position); - transform.position = atompointer1.transform.position; - renderer.material.SetVector("_TexPos2", atompointer2.transform.position); + + // Only check for d3d once +// private bool d3d= false; + void Start (){ +// d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; renderer.material.SetColor("_Color", atompointer1.renderer.material.GetColor("_Color")); renderer.material.SetColor("_Color2", atompointer2.renderer.material.GetColor("_Color")); - //If atoms are hyperballs - if(atompointer1.renderer.material.HasProperty("_Rayon") && atompointer2.renderer.material.HasProperty("_Rayon")) + renderer.material.SetVector("_TexPos1", atompointer1.transform.position); + transform.position = atompointer1.transform.position; + renderer.material.SetVector("_TexPos2", atompointer2.transform.position); +// renderer.material.SetTexture("_MatCap",BallUpdateHB.text2D); + if(UIData.atomtype == UIData.AtomType.hyperball) { + renderer.material.SetTexture("_MatCap", atompointer1.renderer.material.GetTexture("_MatCap")); + renderer.material.SetTexture("_MatCap2", atompointer2.renderer.material.GetTexture("_MatCap")); + } + else { + renderer.material.SetTexture("_MatCap", (Texture)Resources.Load("lit_spheres/divers/daphz05")); + renderer.material.SetTexture("_MatCap2", (Texture)Resources.Load("lit_spheres/divers/daphz05")); + } + } + +/* + void Update () + { + if(independant) + return; + + if(atompointer1==null||atompointer2==null) { - if(oldrayon1!=atompointer1.renderer.material.GetFloat("_Rayon")) + DestroyImmediate(this); + } + + + if(UIData.EnableUpdate) + { + if(oldshrink!=shrink) { - renderer.material.SetFloat("_Rayon1",atompointer1.renderer.material.GetFloat("_Rayon")); - oldrayon1=atompointer1.renderer.material.GetFloat("_Rayon"); + renderer.material.SetFloat("_Shrink",shrink); + oldshrink=shrink; } - if(oldrayon2!=atompointer2.renderer.material.GetFloat("_Rayon")) + if(oldscale!=scale) { - if(atompointer2.renderer.material.HasProperty("_Rayon")) - renderer.material.SetFloat("_Rayon2",atompointer2.renderer.material.GetFloat("_Rayon")); - oldrayon2=atompointer2.renderer.material.GetFloat("_Rayon"); + renderer.material.SetFloat("_Scale",scale); + oldscale=scale; } - } - else - { - if(oldrayon1!=atompointer1.transform.lossyScale.x/2) - { - renderer.material.SetFloat("_Rayon1",atompointer1.transform.lossyScale.x/2); - oldrayon1=atompointer1.transform.lossyScale.x/2; + //if(resetColors) + // ResetColors(); + + if(GUIMoleculeController.toggle_NA_INTERACTIVE) + { + renderer.material.SetVector("_TexPos1", atompointer1.transform.position); + transform.position = atompointer1.transform.position; + renderer.material.SetVector("_TexPos2", atompointer2.transform.position); } - if(oldrayon2!=atompointer2.transform.lossyScale.x/2) + + //If atoms are hyperballs + //if(atompointer1.renderer.material.HasProperty("_Rayon") && atompointer2.renderer.material.HasProperty("_Rayon")) + + if(UIData.atomtype == UIData.AtomType.hyperball) + { + if(oldrayon1!=atompointer1.renderer.material.GetFloat("_Rayon")) + { + renderer.material.SetFloat("_Rayon1",atompointer1.renderer.material.GetFloat("_Rayon")); + oldrayon1=atompointer1.renderer.material.GetFloat("_Rayon"); + } + if(oldrayon2!=atompointer2.renderer.material.GetFloat("_Rayon")) + { + if(atompointer2.renderer.material.HasProperty("_Rayon")) // ???? + renderer.material.SetFloat("_Rayon2",atompointer2.renderer.material.GetFloat("_Rayon")); + oldrayon2=atompointer2.renderer.material.GetFloat("_Rayon"); + } + } + else { - renderer.material.SetFloat("_Rayon2",atompointer2.transform.lossyScale.x/2); - oldrayon2=atompointer2.transform.lossyScale.x/2; + if(oldrayon1!=atompointer1.transform.lossyScale.x/2) + { + renderer.material.SetFloat("_Rayon1",atompointer1.transform.lossyScale.x/2); + oldrayon1=atompointer1.transform.lossyScale.x/2; + } + if(oldrayon2!=atompointer2.transform.lossyScale.x/2) + { + renderer.material.SetFloat("_Rayon2",atompointer2.transform.lossyScale.x/2); + oldrayon2=atompointer2.transform.lossyScale.x/2; + } } } - }//if(UIData.EnableUpdate) -}//Update() + } +*/ } \ No newline at end of file diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdateParticle.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdateParticle.cs index 0f3f3c6b..0abf849e 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdateParticle.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/StickUpdateParticle.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: StickUpdateParticle.cs 223 2013-04-06 22:32:11Z baaden $ +/// $Id: StickUpdateParticle.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -68,64 +68,63 @@ using UI; public class StickUpdateParticle : MonoBehaviour { -public static float shrink = 0.01f; -public static float scale = 1.0f; -public static float radiusFactor = 1.0f; -public GameObject atompointer1=null; -public GameObject atompointer2=null; - - -// Only check for d3d once -private bool d3d= false; -void Start (){ - d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; -} - -void Update () -{ - renderer.material.SetFloat("_Shrink",shrink); - renderer.material.SetFloat("_Scale",scale); - if(UIData.EnableUpdate) - { - renderer.material.SetVector("_TexPos1", atompointer1.transform.position); - renderer.material.SetVector("_TexPos2", atompointer2.transform.position); - renderer.material.SetColor("_Color", atompointer1.renderer.material.GetColor("_Color")); - renderer.material.SetColor("_Color2", atompointer2.renderer.material.GetColor("_Color")); + public static float shrink = 0.01f; + public static float scale = 1.0f; + public static float radiusFactor = 1.0f; + public GameObject atompointer1=null; + public GameObject atompointer2=null; - if(UIData.isSphereToCube==true) - { - if(UIData.atomtype==UIData.AtomType.hyperball||UIData.atomtype==UIData.AtomType.raycasting||UIData.atomtype==UIData.AtomType.rcbillboard||UIData.atomtype==UIData.AtomType.hbbillboard) + + // Only check for d3d once + private bool d3d= false; + void Start (){ + d3d = SystemInfo.graphicsDeviceVersion.IndexOf("Direct3D") > -1; + } + + void Update () + { + renderer.material.SetFloat("_Shrink",shrink); + renderer.material.SetFloat("_Scale",scale); + if(UIData.EnableUpdate) + { + renderer.material.SetVector("_TexPos1", atompointer1.transform.position); + renderer.material.SetVector("_TexPos2", atompointer2.transform.position); + renderer.material.SetColor("_Color", atompointer1.renderer.material.GetColor("_Color")); + renderer.material.SetColor("_Color2", atompointer2.renderer.material.GetColor("_Color")); + + if(UIData.isSphereToCube==true) { - if(atompointer1.renderer.material.HasProperty("_Rayon")) - renderer.material.SetFloat("_Rayon1",atompointer1.renderer.material.GetFloat("_Rayon")); - if(atompointer2.renderer.material.HasProperty("_Rayon")) - renderer.material.SetFloat("_Rayon2",atompointer2.renderer.material.GetFloat("_Rayon")); + if(UIData.atomtype==UIData.AtomType.hyperball||UIData.atomtype==UIData.AtomType.raycasting||UIData.atomtype==UIData.AtomType.rcbillboard||UIData.atomtype==UIData.AtomType.hbbillboard) + { + if(atompointer1.renderer.material.HasProperty("_Rayon")) + renderer.material.SetFloat("_Rayon1",atompointer1.renderer.material.GetFloat("_Rayon")); + if(atompointer2.renderer.material.HasProperty("_Rayon")) + renderer.material.SetFloat("_Rayon2",atompointer2.renderer.material.GetFloat("_Rayon")); + } + else if(UIData.atomtype==UIData.AtomType.cube) + { + renderer.material.SetFloat("_Rayon1",atompointer1.transform.lossyScale.x/2); + renderer.material.SetFloat("_Rayon2",atompointer2.transform.lossyScale.x/2); + } } - else if(UIData.atomtype==UIData.AtomType.cube) + else { renderer.material.SetFloat("_Rayon1",atompointer1.transform.lossyScale.x/2); renderer.material.SetFloat("_Rayon2",atompointer2.transform.lossyScale.x/2); + } - } - else + } + Matrix4x4 P = Camera.main.projectionMatrix; + if (d3d) { - renderer.material.SetFloat("_Rayon1",atompointer1.transform.lossyScale.x/2); - renderer.material.SetFloat("_Rayon2",atompointer2.transform.lossyScale.x/2); - + Debug.Log("d3d"); + + // Invert Y for rendering to a render texture + for ( int i = 0; i < 4; i++) { P[1,i] = -P[1,i]; } + // Scale and bias from OpenGL -> D3D depth range + for ( int i = 0; i < 4; i++) { P[2,i] = P[2,i]*0.5f + P[3,i]*0.5f;} } -//} - } - Matrix4x4 P = Camera.main.projectionMatrix; - if (d3d) - { - Debug.Log("d3d"); - - // Invert Y for rendering to a render texture - for ( int i = 0; i < 4; i++) { P[1,i] = -P[1,i]; } - // Scale and bias from OpenGL -> D3D depth range - for ( int i = 0; i < 4; i++) { P[2,i] = P[2,i]*0.5f + P[3,i]*0.5f;} + Matrix4x4 MVP = P*Camera.main.worldToCameraMatrix*transform.localToWorldMatrix; + renderer.material.SetMatrix ("_matMVPI", MVP.inverse); } - Matrix4x4 MVP = P*Camera.main.worldToCameraMatrix*transform.localToWorldMatrix; - renderer.material.SetMatrix ("_matMVPI", MVP.inverse); -} } diff --git a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/TubeUpdate.cs b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/TubeUpdate.cs index e7c11c7c..00669cd4 100755 --- a/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/TubeUpdate.cs +++ b/Assets/Scripts/Molecule/View/DisplayBond/BondUpdate/TubeUpdate.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: TubeUpdate.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: TubeUpdate.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -90,6 +90,7 @@ public void SetAtoms(GameObject atom1, GameObject atom2) } // Update is called once per frame +/* void Update () { if(UIData.EnableUpdate) { @@ -100,4 +101,5 @@ void Update () { // tubeRenderer.SetPoints ( points , 0.1f , Color.yellow ); } } +*/ } diff --git a/Assets/Scripts/Molecule/View/DisplayMolecule.cs b/Assets/Scripts/Molecule/View/DisplayMolecule.cs index 2e5a7b67..db26ea5d 100755 --- a/Assets/Scripts/Molecule/View/DisplayMolecule.cs +++ b/Assets/Scripts/Molecule/View/DisplayMolecule.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: DisplayMolecule.cs 227 2013-04-07 15:21:09Z baaden $ +/// $Id: DisplayMolecule.cs 672 2014-10-02 08:13:56Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -63,10 +63,10 @@ /// J. Comput. Chem., 2011, 32, 2924 /// -namespace Molecule.View -{ +namespace Molecule.View { using UnityEngine; using System.Collections; + using System.Collections.Generic; using Config; using Molecule.Model; using Molecule.Control; @@ -75,554 +75,512 @@ namespace Molecule.View using UI; - public class DisplayMolecule - { - public static void ResetDisplay() - { + public class DisplayMolecule { + + public static void ResetDisplay() { DestroyObject(); IAtomStyle displayAtom; - //In case we changed the color of the atoms, - //we destroy the "permanent" particles and create new ones with the new colors - if(UIData.isConfirm || UIData.changeStructure) - { - DestroyParticles(); + // In case we changed the color of the atoms, + // we destroy the "permanent" particles and create new ones with the new colors + if(UIData.isConfirm || UIData.changeStructure) { +// DestroyParticles(); displayAtom = new AtomCubeStyle(); - displayAtom.DisplayAtoms(UIData.AtomType.particleball,true); + displayAtom.DisplayAtoms(UIData.atomtype, true); +// displayAtom.DisplayAtoms(UIData.AtomType.particleball,true); } - displayAtom=new AtomCubeStyle(); + displayAtom.DisplayAtoms(UIData.atomtype); Debug.Log(UIData.atomtype); - if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) - { + // This fixes a nasty bug that made carbon alpha chains/entire molecules disappear when switching between the two in sphere mode + if(UIData.atomtype == UIData.AtomType.sphere) { + UIData.isCubeToSphere = true; + UIData.isSphereToCube = false; + } else if (UIData.atomtype == UIData.AtomType.cube) { + UIData.isCubeToSphere = false ; + UIData.isSphereToCube = true ; + } + + if (UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) { IBondStyle displayBond=new BondCubeStyle(); displayBond.DisplayBonds(); - - } - else if(UIData.bondtype==UIData.BondType.line) - { + } else if (UIData.bondtype==UIData.BondType.line) { IBondStyle displayBond=new BondLineStyle(); displayBond.DisplayBonds(); - - } - else if(UIData.bondtype==UIData.BondType.tubestick) - { + } else if (UIData.bondtype==UIData.BondType.tubestick) { IBondStyle displayBond=new BondTubeStyle(); displayBond.DisplayBonds(); - - } - else if(UIData.bondtype==UIData.BondType.particlestick) - { + } else if (UIData.bondtype==UIData.BondType.particlestick) { IBondStyle displayBond=new BondParticleStyle(); displayBond.DisplayBonds(); - } - CreatGameObjectArray(); } - public static void AmendDisplay() - { - - Change(MoleculeModel.Ces,0); - Change(MoleculeModel.Nes,1); - Change(MoleculeModel.Oes,2); - Change(MoleculeModel.Ses,3); - Change(MoleculeModel.Pes,4); - Change(MoleculeModel.Hes,5); - - Change(MoleculeModel.NOes,6); - + /// + /// Gets the list of active managers based on the atom type provided and based on the bond type in UIData. + /// + /// + /// The list of managers. A List object that should contains the "atom" manager in position 0 and the "bond" manager in position 1 (if there is one). + /// + public static List GetManagers() { + UIData.AtomType aType = UIData.atomtype; + List managerList = new List(); + if(aType == UIData.AtomType.hyperball) { //|| UIData.bondtype == UIData.BondType.hyperstick) { + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + managerList.Add(hbManager); + }else if (aType == UIData.AtomType.sphere) { + GameObject spManagerObj = GameObject.FindGameObjectWithTag("SphereManager"); + SphereManager spManager = spManagerObj.GetComponent(); + managerList.Add(spManager); + } else if (aType == UIData.AtomType.cube) { + GameObject cubeManagerObj = GameObject.FindGameObjectWithTag("CubeManager"); + CubeManager cubeManager = cubeManagerObj.GetComponent(); + managerList.Add(cubeManager); + } else if (aType == UIData.AtomType.particleball) { + GameObject psObj = GameObject.FindGameObjectWithTag("ShurikenParticleManager"); + ShurikenParticleManager shManager = psObj.GetComponent(); + managerList.Add(shManager); + } + if (UIData.bondtype == UIData.BondType.line) { + GameObject lineManagerObj = GameObject.FindGameObjectWithTag("LineManager"); + LineManager lineManager = lineManagerObj.GetComponent(); + managerList.Add(lineManager); + } else if (UIData.bondtype == UIData.BondType.cube) { + GameObject cubeBondManagerObj = GameObject.FindGameObjectWithTag("CubeBondManager"); + CubeBondManager cubeBondManager = cubeBondManagerObj.GetComponent(); + managerList.Add(cubeBondManager); + } else if (UIData.bondtype == UIData.BondType.hyperstick) { + GameObject hStickManagerObj = GameObject.FindGameObjectWithTag("HStickManager"); + HStickManager hStickManager = hStickManagerObj.GetComponent(); + managerList.Add(hStickManager); + } + return managerList; } - - public static void HideAtoms() - { - ParticleEffect.radiusFactor = 0; - if(MoleculeModel.clubs!=null) - { - foreach(GameObject box in MoleculeModel.clubs) - { - box.renderer.enabled = false; - } - } + + public static void ToggleDistanceCueing(bool enabling) { + List managers = GetManagers(); + foreach(GenericManager manager in managers) + manager.ToggleDistanceCueing(enabling); + } + + public static void DestroyAtomsAndBonds() { + List managers = GetManagers(); + foreach(GenericManager manager in managers) + manager.DestroyAll(); + } + + public static void InitManagers() { + List managers = GetManagers(); + foreach(GenericManager manager in managers) + manager.Init(); } - public static void ShowAtoms() - { - if(UIData.atomtype==UIData.AtomType.particleball) - ParticleEffect.radiusFactor = GUIMoleculeController.rayon; + public static void HideAtoms() { + List managers = GetManagers(); + foreach(GenericManager manager in managers) + manager.DisableRenderers(); + } - if(MoleculeModel.clubs!=null) - { - foreach(GameObject box in MoleculeModel.clubs) - { - box.renderer.enabled = true; - } - } + public static void ShowAtoms() { + List managers = GetManagers(); + foreach(GenericManager manager in managers) + manager.EnableRenderers(); } - public static void ToParticle() - { - if(UIData.atomtype!=UIData.AtomType.particleball) - { - UIData.atomtype=UIData.AtomType.particleball; - //UIData.resetDisplay=true; + public static void ToParticle() { // Actually buggy with hyperstick since they don't use "enable/disable renderer" but are destroyed and recreated + if(UIData.atomtype!=UIData.AtomType.particleball) { + UIData.atomtype = UIData.AtomType.particleball; + UIData.bondtype = UIData.BondType.nobond ; + UIData.resetBondDisplay = true; + UIData.resetDisplay=true; UIData.isCubeToSphere=false; UIData.isSphereToCube=true; - ParticleEffect.radiusFactor = GUIMoleculeController.rayon; - - if(MoleculeModel.clubs!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.clubs) - { - box.renderer.enabled = false; - } - } - if(MoleculeModel.atoms!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.atoms) - { - box.renderer.enabled = false; - } - } +// ParticleEffect.radiusFactor = GUIMoleculeController.rayon; + ShurikenParticleManager.radiusFactor = BallUpdate.radiusFactor; + GameObject npmObject = GameObject.FindGameObjectWithTag("ShurikenParticleManager"); + ShurikenParticleManager shManager = npmObject.GetComponent(); + shManager.enabled = true; + shManager.pSystem.renderer.enabled = true; Debug.Log("ToParticle()" ); } - } - public static void ToNotParticle(UIData.AtomType previous_type) - { - if(previous_type != UIData.AtomType.noatom && UIData.atomtype != previous_type) - { - - UIData.atomtype = previous_type; - //UIData.resetDisplay=true; - UIData.isCubeToSphere=false; - UIData.isSphereToCube=true; - - ParticleEffect.radiusFactor = 0; - - if(MoleculeModel.clubs!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.clubs) - { - box.renderer.enabled = true; - } + public static void ToNotParticle(UIData.AtomType previousType, UIData.BondType previousBondType) { + if(previousType != UIData.AtomType.noatom && UIData.atomtype != previousType) { + GameObject shObject = GameObject.FindGameObjectWithTag("ShurikenParticleManager"); + ShurikenParticleManager shManager = shObject.GetComponent(); + shManager.pSystem.renderer.enabled = false; + shManager.enabled = false; + + UIData.atomtype = previousType; + UIData.bondtype = previousBondType; + UIData.resetBondDisplay = true ; + UIData.resetDisplay=true; + if(UIData.atomtype == UIData.AtomType.sphere){ + UIData.isCubeToSphere=true; + UIData.isSphereToCube=false; } - if(MoleculeModel.atoms!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.atoms) - { - box.renderer.enabled = true; - } + else{ + UIData.isCubeToSphere=false; + UIData.isSphereToCube=true; } + if(UIData.atomtype == UIData.AtomType.hyperball) { + GameObject hbmObject = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbmObject.GetComponent(); + BallUpdate.resetRadii = true; + hbManager.EnableRenderers(); + hbManager.enabled = true; + } + Debug.Log("ToHyperBall()" ); + Debug.Log(UIData.atomtype.ToString()); + Debug.Log(UIData.bondtype.ToString()); } } - public static void CubeToSphere() - { + public static void CubeToSphere() { UIData.resetDisplay=false; - DestroyObject(); -// Debug.Log("111111111111111111111111111111111111111 " ); - - IAtomStyle displayAtom=new AtomSphereStyle(); - displayAtom.DisplayAtoms(UIData.atomtype); -// Debug.Log("22222222222222222222222222222222222222 " ); +// DestroyObject(); + HideObject(); + if(UIData.atomtype == UIData.AtomType.sphere){ + GameObject spmObject = GameObject.FindGameObjectWithTag("SphereManager"); + SphereManager spManager = spmObject.GetComponent(); + spManager.EnableRenderers(); + } - if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) - { + if(!UIData.isSphereLoaded){ + IAtomStyle displayAtom; + + Debug.Log("UIData.atomtype :: "+UIData.atomtype); + displayAtom = new AtomSphereStyle(); + displayAtom.DisplayAtoms(UIData.atomtype); + } + + if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) { IBondStyle displayBond=new BondCubeStyle(); displayBond.DisplayBonds(); } - else if(UIData.bondtype==UIData.BondType.line) - { + else if(UIData.bondtype==UIData.BondType.line) { IBondStyle displayBond=new BondLineStyle(); displayBond.DisplayBonds(); } - else if(UIData.bondtype==UIData.BondType.tubestick) - { + else if(UIData.bondtype==UIData.BondType.tubestick) { IBondStyle displayBond=new BondTubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.particlestick) - { + else if(UIData.bondtype==UIData.BondType.particlestick) { IBondStyle displayBond=new BondParticleStyle(); displayBond.DisplayBonds(); - } CreatGameObjectArray(); + BallUpdate.resetRadii = true; + //BallUpdate.resetColors = true; + Debug.Log("Exiting :: CubeToSphere"); } - public static void SphereToCube() - { + public static void SphereToCube() { UIData.resetDisplay=false; - DestroyObject(); - IAtomStyle displayAtom; +// DestroyObject(); + HideObject(); + if(UIData.atomtype == UIData.AtomType.cube){ + GameObject cbmObject = GameObject.FindGameObjectWithTag("CubeManager"); + CubeManager cbManager = cbmObject.GetComponent(); + cbManager.EnableRenderers(); + + if(!UIData.isCubeLoaded){ + IAtomStyle displayAtom; - Debug.Log("UIData.atomtype :: "+UIData.atomtype); - displayAtom = new AtomCubeStyle(); - displayAtom.DisplayAtoms(UIData.atomtype); + Debug.Log("UIData.atomtype :: "+UIData.atomtype); + displayAtom = new AtomCubeStyle(); + displayAtom.DisplayAtoms(UIData.atomtype); + } + } + else if(UIData.atomtype == UIData.AtomType.hyperball){ + GameObject hbmObject = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbmObject.GetComponent(); + hbManager.EnableRenderers(); + + if(!UIData.isHBallLoaded){ + IAtomStyle displayAtom; + + Debug.Log("UIData.atomtype :: "+UIData.atomtype); + displayAtom = new AtomCubeStyle(); + displayAtom.DisplayAtoms(UIData.atomtype); + } + } - if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) - { + + if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) { IBondStyle displayBond=new BondCubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.line) - { + else if(UIData.bondtype==UIData.BondType.line) { IBondStyle displayBond=new BondLineStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.tubestick) - { + else if(UIData.bondtype==UIData.BondType.tubestick) { IBondStyle displayBond=new BondTubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.particlestick) - { + else if(UIData.bondtype==UIData.BondType.particlestick) { IBondStyle displayBond=new BondParticleStyle(); displayBond.DisplayBonds(); - } CreatGameObjectArray(); + BallUpdate.resetRadii = true; + //BallUpdate.resetColors = true; Debug.Log("Exiting :: SphereToCube"); - } - public static void ResetBondDisplay() - { + public static void ResetBondDisplay() { UIData.resetBondDisplay=false; DestroyBondObject(); - if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) - { + if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) { IBondStyle displayBond=new BondCubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.line) - { + else if(UIData.bondtype==UIData.BondType.line) { IBondStyle displayBond=new BondLineStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.tubestick) - { + else if(UIData.bondtype==UIData.BondType.tubestick) { IBondStyle displayBond=new BondTubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.particlestick) - { + else if(UIData.bondtype==UIData.BondType.particlestick) { IBondStyle displayBond=new BondParticleStyle(); displayBond.DisplayBonds(); - - } - else if(UIData.bondtype==UIData.BondType.nobond) - { - } - CreatBondGameObjectArray(); - - } - - private static void Change(GameObject[] oes,int type) - { - foreach(GameObject o in oes) +// else if(UIData.bondtype==UIData.BondType.nobond) {} + CreatBondGameObjectArray(); + + if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) { - BallUpdate comp = o.GetComponent(); - switch(type) - { - case 0: - comp.atomcolor = MoleculeModel.carbonColor; - comp.SetRayonFactor((MoleculeModel.carbonScale)/100); - break; - case 1: - comp.atomcolor = MoleculeModel.nitrogenColor; - comp.SetRayonFactor((MoleculeModel.nitrogenScale)/100); - - break; - case 2: - comp.atomcolor = MoleculeModel.oxygenColor; - comp.SetRayonFactor((MoleculeModel.oxygenScale)/100); - - break; - case 3: - comp.atomcolor = MoleculeModel.sulphurColor; - comp.SetRayonFactor((MoleculeModel.sulphurScale)/100); - - break; - case 4: - comp.atomcolor = MoleculeModel.phosphorusColor; - comp.SetRayonFactor((MoleculeModel.phosphorusScale)/100); - - break; - case 5: - comp.atomcolor = MoleculeModel.hydrogenColor; - comp.SetRayonFactor((MoleculeModel.hydrogenScale)/100); - - break; - case 6: - comp.atomcolor = MoleculeModel.unknownColor; - comp.SetRayonFactor((MoleculeModel.unknownScale)/100); - - break; - default :break; - } - MoleculeModel.p[comp.number].color = comp.atomcolor; + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + hbManager.findBonds(); } - } + - - public static void Display() - { - //UIData.EnableUpdate=false; + public static void Display() { +// UIData.EnableUpdate=false; IAtomStyle displayAtom; - if(UIData.isSphereToCube) - { + if(UIData.isSphereToCube) { displayAtom=new AtomCubeStyle(); + Debug.Log("DisplayMolecule.Display(): New atom cube style"); } - else - { + else { displayAtom=new AtomSphereStyle(); + Debug.Log("DisplayMolecule.Display(): New atom sphere style"); } + Debug.Log("DisplayAtoms here DisplayAtoms here DisplayAtoms here DisplayAtoms here"); displayAtom.DisplayAtoms(UIData.atomtype); - if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) - { + if(UIData.bondtype==UIData.BondType.cube||UIData.bondtype==UIData.BondType.hyperstick||UIData.bondtype==UIData.BondType.bbhyperstick) { IBondStyle displayBond=new BondCubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.line) - { + else if(UIData.bondtype==UIData.BondType.line) { IBondStyle displayBond=new BondLineStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.tubestick) - { + else if(UIData.bondtype==UIData.BondType.tubestick) { IBondStyle displayBond=new BondTubeStyle(); displayBond.DisplayBonds(); - } - else if(UIData.bondtype==UIData.BondType.particlestick) - { + else if(UIData.bondtype==UIData.BondType.particlestick) { IBondStyle displayBond=new BondParticleStyle(); displayBond.DisplayBonds(); - } CreatGameObjectArray(); + CheckResidues(); - + if (GUIMoleculeController.HYPERBALLSDEFAULT){ + GUIMoleculeController.toggle_NA_HBALLSMOOTH = !GUIMoleculeController.toggle_NA_HBALLSMOOTH; + UIData.hballsmoothmode = GUIMoleculeController.toggle_NA_HBALLSMOOTH; + } + UIData.hasMoleculeDisplay=true; - //UIData.EnableUpdate=true; - +// UIData.EnableUpdate=true; } - public static void DisplayFieldLine() - { - //FieldLineStyle fieldlinestyle=new FieldLineStyle(); + public static void DisplayFieldLine() { +// FieldLineStyle fieldlinestyle=new FieldLineStyle(); FieldLineStyle.DisplayFieldLine(); } - private static void CreatGameObjectArray() - { - MoleculeModel.Ces=GameObject.FindGameObjectsWithTag("C"); - MoleculeModel.Nes=GameObject.FindGameObjectsWithTag("N"); - MoleculeModel.Oes=GameObject.FindGameObjectsWithTag("O"); - MoleculeModel.Ses=GameObject.FindGameObjectsWithTag("S"); - MoleculeModel.Pes=GameObject.FindGameObjectsWithTag("P"); - MoleculeModel.Hes=GameObject.FindGameObjectsWithTag("H"); - MoleculeModel.NOes=GameObject.FindGameObjectsWithTag("X"); - MoleculeModel.clubs=GameObject.FindGameObjectsWithTag("Club"); - - - // MoleculeModel.boxes=ControlMolecule.SetBoxes(MoleculeModel.Ces,MoleculeModel.Nes,MoleculeModel.Oes, - // MoleculeModel.Ses, MoleculeModel.Pes,MoleculeModel.Hes,MoleculeModel.NOes); + private static void CreatGameObjectArray() { + MoleculeModel.atomsByChar.Clear(); + MoleculeModel.atomsByChar.Add("C", GameObject.FindGameObjectsWithTag("C")); + MoleculeModel.atomsByChar.Add("N", GameObject.FindGameObjectsWithTag("N")); + MoleculeModel.atomsByChar.Add("O", GameObject.FindGameObjectsWithTag("O")); + MoleculeModel.atomsByChar.Add("S", GameObject.FindGameObjectsWithTag("S")); + MoleculeModel.atomsByChar.Add("P", GameObject.FindGameObjectsWithTag("P")); + MoleculeModel.atomsByChar.Add("H", GameObject.FindGameObjectsWithTag("H")); + MoleculeModel.atomsByChar.Add("X", GameObject.FindGameObjectsWithTag("X")); + MoleculeModel.clubs = GameObject.FindGameObjectsWithTag("Club"); + +// MoleculeModel.boxes=ControlMolecule.SetBoxes(MoleculeModel.Ces,MoleculeModel.Nes,MoleculeModel.Oes, +// MoleculeModel.Ses, MoleculeModel.Pes,MoleculeModel.Hes,MoleculeModel.NOes); + } + + private static void CheckResidues() { + if(!UIData.hasResidues) + return; + Debug.Log("Looking for protonated HIS"); // Doesn't handle N-ter and C-ter HIP + for(int i = 0; i < MoleculeModel.atomsResnamelist.Count; i++){ + if(MoleculeModel.atomsResnamelist[i] == "HIS"){ + if(MoleculeModel.residues[MoleculeModel.residueIds[i]].Count == 18){ // 8 H and 10 others in protonated HIS + MoleculeModel.atomsResnamelist[i] = "HIP"; + } + } + } + foreach(string res in MoleculeModel.atomsResnamelist) + if(!MoleculeModel.existingRes.Contains(res)) + MoleculeModel.existingRes.Add(res); + MoleculeModel.existingRes.Sort(); + } - public static void DestroyFieldLine() - { + public static void DestroyFieldLine() { GameObject FieldLineManager=GameObject.Find("FieldLineManager"); FieldLineModel Line=FieldLineManager.transform.GetComponent(); Line.killCurrentEffects(); - MoleculeModel.FieldLineFileExist=false; + MoleculeModel.fieldLineFileExists = false; } - - public static void DestroyObject() - { + + public static void HideObject() { + if(UIData.atomtype != UIData.AtomType.hyperball){ + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + hbManager.DisableRenderers(); + } + if(UIData.atomtype != UIData.AtomType.sphere){ + GameObject spManagerObj = GameObject.FindGameObjectWithTag("SphereManager"); + SphereManager spManager = spManagerObj.GetComponent(); + spManager.DisableRenderers(); + } + if(UIData.atomtype != UIData.AtomType.cube){ + GameObject cbManagerObj = GameObject.FindGameObjectWithTag("CubeManager"); + CubeManager cbManager = cbManagerObj.GetComponent(); + cbManager.DisableRenderers(); + } + + DestroyBondObject(); + } + + public static void DestroyObject() { + + if(MoleculeModel.atomsByChar!=null) { + foreach(string key in MoleculeModel.atomsByChar.Keys) + foreach(GameObject box in MoleculeModel.atomsByChar[key]) + Object.DestroyImmediate(box,true); + } + + DestroyBondObject(); + GameObject SpriteManager; - if(!GameObject.Find("SpriteManager")) - { + if(!GameObject.Find("SpriteManager")) { SpriteManager=new GameObject(); SpriteManager.name="SpriteManager"; } else - { SpriteManager=GameObject.Find("SpriteManager"); - } + SpriteManager.GetComponent ().enabled=false; - if(!UIData.openBound||UIData.atomtype!=UIData.AtomType.particleball)//Disappear the BoxBound; - { + //Disappear the BoxBound; + if(!UIData.openBound||UIData.atomtype!=UIData.AtomType.particleball) { GameObject[] TransparentCube; TransparentCube = GameObject.FindGameObjectsWithTag("TransparentCube"); for(int k=0;k(); - particleeffect.killCurrentEffects(); } - - public static void DestroyBondObject() - { - if(MoleculeModel.clubs!=null)//Will be displayed before the atoms are removed - { + public static void DestroyBondObject() { + //Will be displayed before the atoms are removed + if(MoleculeModel.clubs!=null) { foreach(GameObject box in MoleculeModel.clubs) - { Object.DestroyImmediate(box,true); - } - MoleculeModel.clubs=null; + + //MoleculeModel.clubs=null; } } - - public static void DestroySurfaces() - { + public static void DestroySurfaces() { GameObject [] SurfaceManager = GameObject.FindGameObjectsWithTag("SurfaceManager"); foreach (GameObject Surface in SurfaceManager) Object.Destroy(Surface); } + + public static void DestroyRingBlending() { + GameObject [] PaperChains = GameObject.FindGameObjectsWithTag("RingBlending"); + foreach (GameObject PaperChain in PaperChains) + Object.Destroy(PaperChain); + } + + public static void DestroySugarRibbons() { + GameObject [] SugarRibbons; + SugarRibbons = GameObject.FindGameObjectsWithTag("SugarRibbons_RING_BIG"); + foreach (GameObject SugarRibbon in SugarRibbons) + Object.Destroy(SugarRibbon); + SugarRibbons = GameObject.FindGameObjectsWithTag("SugarRibbons_RING_little"); + foreach (GameObject SugarRibbon in SugarRibbons) + Object.Destroy(SugarRibbon); + SugarRibbons = GameObject.FindGameObjectsWithTag("SugarRibbons_BOND"); + foreach (GameObject SugarRibbon in SugarRibbons) + Object.Destroy(SugarRibbon); + } + - public static void DestroyElectIso() - { + public static void DestroyOxySpheres(){ + GameObject [] oxyspheres = GameObject.FindGameObjectsWithTag("OxySphere"); + foreach (GameObject oxysphere in oxyspheres) + Object.Destroy(oxysphere); + } + + public static void DestroyElectIso() { GameObject [] ElecIso = GameObject.FindGameObjectsWithTag("Elect_iso_positive"); foreach (GameObject Surface in ElecIso) Object.Destroy(Surface); @@ -633,41 +591,37 @@ public static void DestroyElectIso() } - private static void CreatBondGameObjectArray() - { + private static void CreatBondGameObjectArray() { MoleculeModel.clubs=GameObject.FindGameObjectsWithTag("Club"); } - public static void DeleteAllPhysics() - { - /* - if(MoleculeModel.clubs!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.clubs) - { - Object.DestroyImmediate(box,true); + + public static void DeleteAllPhysics() { + UIData.resetInteractive=false; + if(MoleculeModel.atomsByChar!=null) { + foreach(string key in MoleculeModel.atomsByChar.Keys){ + foreach(GameObject box in MoleculeModel.atomsByChar[key]) { + if(box&&box.GetComponent ()) + Object.Destroy (box.GetComponent ()); + if(box&&box.GetComponent ()) + Object.Destroy (box.GetComponent ()); + } } - MoleculeModel.clubs=null; } - */ - UIData.resetInteractive=false; - - if(MoleculeModel.Ces!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Ces) - { + +/* + //Will be displayed before the atoms are removed + if(MoleculeModel.Ces!=null) { + foreach(GameObject box in MoleculeModel.Ces) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); - } } - if(MoleculeModel.Nes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Nes) - { - + //Will be displayed before the atoms are removed + if(MoleculeModel.Nes!=null) { + foreach(GameObject box in MoleculeModel.Nes) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) @@ -675,10 +629,9 @@ public static void DeleteAllPhysics() } } - if(MoleculeModel.Oes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Oes) - { + //Will be displayed before the atoms are removed + if(MoleculeModel.Oes!=null) { + foreach(GameObject box in MoleculeModel.Oes) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) @@ -686,11 +639,9 @@ public static void DeleteAllPhysics() } } - if(MoleculeModel.Ses!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Ses) - { - + //Will be displayed before the atoms are removed + if(MoleculeModel.Ses!=null) { + foreach(GameObject box in MoleculeModel.Ses) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) @@ -698,250 +649,251 @@ public static void DeleteAllPhysics() } } - if(MoleculeModel.Pes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Pes) - { + //Will be displayed before the atoms are removed + if(MoleculeModel.Pes!=null) { + foreach(GameObject box in MoleculeModel.Pes) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); } } - if(MoleculeModel.Hes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Hes) - { + + //Will be displayed before the atoms are removed + if(MoleculeModel.Hes!=null) { + foreach(GameObject box in MoleculeModel.Hes) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); } } - - if(MoleculeModel.NOes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.NOes) - { + + //Will be displayed before the atoms are removed + if(MoleculeModel.NOes!=null) { + foreach(GameObject box in MoleculeModel.NOes) { if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); if(box&&box.GetComponent ()) Object.Destroy (box.GetComponent ()); } } - +*/ } - public static void AddAllPhysics() - { - + + public static void AddAllPhysics() { UIData.resetInteractive=false; // Debug.Log("AddAllPhysics"); - if(MoleculeModel.Ces!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Ces) - { - - if(box&&box.GetComponent ()==null) - { + + if(MoleculeModel.atomsByChar!=null) { + foreach(string key in MoleculeModel.atomsByChar.Keys){ + foreach(GameObject box in MoleculeModel.atomsByChar[key]) { + if(box&&box.GetComponent ()==null) { + box.AddComponent(); + box.rigidbody.useGravity = false; + box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; + box.GetComponent().drag = 0.6f; + } + if(box&&box.GetComponent ()==null) { + box.AddComponent(); + box.GetComponent().spring = 5; + } + } + } + } + +/* + //Will be displayed before the atoms are removed + if(MoleculeModel.Ces!=null) { + foreach(GameObject box in MoleculeModel.Ces) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - if(MoleculeModel.Nes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Nes) - { - - if(box&&box.GetComponent ()==null) - { + //Will be displayed before the atoms are removed + if(MoleculeModel.Nes!=null) { + foreach(GameObject box in MoleculeModel.Nes) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - if(MoleculeModel.Oes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Oes) - { - - if(box&&box.GetComponent ()==null) - { + //Will be displayed before the atoms are removed + if(MoleculeModel.Oes!=null) { + foreach(GameObject box in MoleculeModel.Oes) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - if(MoleculeModel.Ses!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Ses) - { - - if(box&&box.GetComponent ()==null) - { + //Will be displayed before the atoms are removed + if(MoleculeModel.Ses!=null) { + foreach(GameObject box in MoleculeModel.Ses) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - if(MoleculeModel.Pes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Pes) - { - - if(box&&box.GetComponent ()==null) - { + //Will be displayed before the atoms are removed + if(MoleculeModel.Pes!=null) { + foreach(GameObject box in MoleculeModel.Pes) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - if(MoleculeModel.Hes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.Hes) - { - - if(box&&box.GetComponent ()==null) - { + + //Will be displayed before the atoms are removed + if(MoleculeModel.Hes!=null) { + foreach(GameObject box in MoleculeModel.Hes) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - - if(MoleculeModel.NOes!=null)//Will be displayed before the atoms are removed - { - foreach(GameObject box in MoleculeModel.NOes) - { - - if(box&&box.GetComponent ()==null) - { + + //Will be displayed before the atoms are removed + if(MoleculeModel.NOes!=null) { + foreach(GameObject box in MoleculeModel.NOes) { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.rigidbody.useGravity = false; box.rigidbody.interpolation = RigidbodyInterpolation.Interpolate; box.GetComponent().drag = 0.6f; } - if(box&&box.GetComponent ()==null) - { + if(box&&box.GetComponent ()==null) { box.AddComponent(); box.GetComponent().spring = 5; } } } - +*/ } - public static void AddCombineMesh() - { + public static void AddCombineMesh() { UIData.resetMeshcombine=false; GameObject MeshCombineManager; - if(!GameObject.Find("MeshCombineManager")) - { - + if(!GameObject.Find("MeshCombineManager")) { MeshCombineManager=GameObject.CreatePrimitive(PrimitiveType.Cube); MeshCombineManager.name="MeshCombineManager"; - } else - { MeshCombineManager=GameObject.Find("MeshCombineManager"); - } - if(MoleculeModel.Ces!=null)//Will be displayed before the atoms are removed - { + //Will be displayed before the atoms are removed + if(MoleculeModel.atomsByChar["C"]!=null) { + foreach(GameObject Atom in MoleculeModel.atomsByChar["O"]) + Atom.transform.parent=MeshCombineManager.transform; +/* + //Will be displayed before the atoms are removed + if(MoleculeModel.Ces!=null) { foreach(GameObject Atom in MoleculeModel.Oes) - { Atom.transform.parent=MeshCombineManager.transform; - - } +*/ Meshcombine combineComp = MeshCombineManager.GetComponent(); - combineComp.GoOn(); - - + combineComp.GoOn(); } - - } - public static void ClearMemory() - { + public static void ClearMemory() { MoleculeModel.atomsLocationlist=null; MoleculeModel.atomsTypelist=null; MoleculeModel.atomsResnamelist=null; MoleculeModel.CSidList=null; - + //MoleculeModel.sortedResIndexByList = null; + MoleculeModel.CSLabelList=null; MoleculeModel.CSRadiusList=null; MoleculeModel.CSColorList=null; MoleculeModel.CSSGDList=null; MoleculeModel.bondEPList=null; MoleculeModel.bondCAList=null; - MoleculeModel.bondList = null;//The list of the bond by position and rotation. - + MoleculeModel.bondList = null;// The list of the bond by position and rotation. + MoleculeModel.resChainList = new List (); //For theses 3, we add directly on the list, so can't "null" them. + MoleculeModel.resChainList2 =new List (); + MoleculeModel.residues = new Dictionary (); + MoleculeModel.atomsSugarTypelist = new List(); + MoleculeModel.bondEPDict= new Dictionary>(); + MoleculeModel.BondListFromPDB = new List(); + MoleculeModel.bondEPSugarList=new List(); + MoleculeModel.atomsSugarNamelist = new List(); + MoleculeModel.atomsNumberList = new List(); + MoleculeModel.atomHetTypeList = new List(); + MoleculeModel.atomsSugarResnamelist = new List(); + MoleculeModel.atomsSugarLocationlist = new List(); + MoleculeModel.resSugarChainList = new List(); MoleculeModel.CaSplineList=null; MoleculeModel.CaSplineTypeList = null; MoleculeModel.CaSplineChainList = null; - MoleculeModel.CatomsLocationlist = null;//CA atoms coordinates + MoleculeModel.CatomsLocationlist = null;// CA atoms coordinates MoleculeModel.FieldLineList=null; - MoleculeModel.FieldLineDist = null;// Field lines distance arrays - - MoleculeModel.BFactorList = null; - } - - public static void DeleteCombineMesh() - { - +// MoleculeModel.FieldLineDist = null;// Field lines distance arrays + + MoleculeModel.backupCaSplineChainList = new List(); + MoleculeModel.backupCatomsLocationlist = new List(); + MoleculeModel.BFactorList = new List(); + MoleculeModel.ssHelixList = new List(); + MoleculeModel.ssStrandList = new List(); + MoleculeModel.helixChainList = new List() ; + MoleculeModel.strandChainList = new List (); + + MoleculeModel.atomsForEllipsoidsOrientationPerResidue = new Dictionary(); + MoleculeModel.atomsForEllipsoidsPerResidue = new Dictionary(); + MoleculeModel.ellipsoidsPerResidue = new Dictionary(); + MoleculeModel.bondsForReplacedAtoms = new List(); + MoleculeModel.baseIdx = new List(); } - + // ??? + public static void DeleteCombineMesh() {} } - } diff --git a/Assets/Scripts/Molecule/View/Particle/ParticleEffect.cs b/Assets/Scripts/Molecule/View/Particle/ParticleEffect.cs index 671e3848..b923ea6a 100755 --- a/Assets/Scripts/Molecule/View/Particle/ParticleEffect.cs +++ b/Assets/Scripts/Molecule/View/Particle/ParticleEffect.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ParticleEffect.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: ParticleEffect.cs 329 2013-08-06 13:47:40Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -78,7 +78,7 @@ public class ParticleEffect : MonoBehaviour private float radiusFactorold = 1.0f; public int atomcount; - //ArrayList atomLocationalist; +// ArrayList atomLocationalist; public Particle[] p ; public Particle[] pn ; @@ -118,30 +118,27 @@ public void SpawnEffect () { } // pn=p; emitter.particles = pn; + UI.UIData.isParticlesInitialized = true; } void Update() { + if ((p != null) && !UI.UIData.isParticlesInitialized && (UI.UIData.atomtype == UI.UIData.AtomType.particleball) ) + { + SpawnEffect(); + } + // Spin the entire particle effect. - //this.transform.Rotate(this.transform.up * Time.deltaTime * (-turnSpeed), Space.World); +// this.transform.Rotate(this.transform.up * Time.deltaTime * (-turnSpeed), Space.World); if(radiusFactorold!=radiusFactor) { -// radiuschange=false; -// radiuschange=false; if(emitter) { for(int i=0;i(); foreach (ParticleEmitter emitter in emitters) { @@ -176,7 +173,7 @@ public void killCurrentEffects() { this.gameObject.transform.DetachChildren(); // GameObject Particleclone=GameObject.Find("particle(Clone)"); // GameObject Particleclone=GameObject.Find("particlein1(Clone)"); -// + // Destroy(Particleclone); GameObject[] Particleclone; Particleclone = GameObject.FindGameObjectsWithTag("particlein1"); @@ -190,7 +187,6 @@ public void killCurrentEffects() { { Destroy(Particlemanager[k]); } - } } diff --git a/Assets/Scripts/Molecule3D.cs b/Assets/Scripts/Molecule3D.cs index a36e69ad..f679b6f7 100755 --- a/Assets/Scripts/Molecule3D.cs +++ b/Assets/Scripts/Molecule3D.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: Molecule3D.cs 247 2013-04-07 20:38:19Z baaden $ +/// $Id: Molecule3D.cs 672 2014-10-02 08:13:56Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -72,7 +72,7 @@ using ParseData.IParsePDB; using UI; using Molecule.View; -using System.Net.Sockets; +//using System.Net.Sockets; using System.Net; using SocketConnect.UnitySocket; @@ -81,13 +81,12 @@ using Config; using Molecule.Model; using System.IO; -//using BehaveLibrary; -public class Molecule3D:MonoBehaviour -{ - // Use this for initialization +public class Molecule3D:MonoBehaviour { private GameObject molecule; + + private bool fontInitialized = false; public float rotationSpeed = 100.0F; private GameObject[] Boxes; @@ -106,13 +105,8 @@ public class Molecule3D:MonoBehaviour private int fpsCount = 0; private float fpsSum = 0; - -// private float speed=0.0001f; -// private float rangle0=0f; -// private float rangle1=0f; -// private Vector3 vr=new Vector3(0f,0f,0f); private GameObject Target; - private Vector3 Deta; +// private Vector3 Deta; // private string textField=""; // private string id=""; public GUIDisplay gUIDisplay; @@ -126,9 +120,9 @@ public class Molecule3D:MonoBehaviour // private float rotationX=0f; // private float rotationY=0f; // private float rotationZ=0f; - private Vector3 axisX=new Vector3(1,0,0); - private Vector3 axisY=new Vector3(0,1,0); - private Vector3 axisZ=new Vector3(0,0,1); +// private Vector3 axisX=new Vector3(1,0,0); +// private Vector3 axisY=new Vector3(0,1,0); +// private Vector3 axisZ=new Vector3(0,0,1); // private Vector3 newPosition=new Vector3(0,0,0); public float []atomsScaleList={1.72f,1.6f,1.32f,2.08f,2.6f,1.55f,1f}; public ArrayList clubLocationalist=new ArrayList(); @@ -159,26 +153,32 @@ public class Molecule3D:MonoBehaviour private float accum= 0.0f; // FPS accumulated over the interval private float frames= 0; // Frames drawn over the interval private float timeleft; // Left time for current interval + + //T.T DEBUG + public bool fileLoadingFinished=false; // private string FPS=""; //To keep track of the normal type when hiding atoms or in LOD mode private UIData.AtomType previous_AtomType = UIData.AtomType.noatom; - public UIData.AtomType PreviousAtomType - { - get - { + public UIData.AtomType PreviousAtomType { + get { return previous_AtomType; } } + + private UIData.BondType previous_BondType = UIData.BondType.nobond; + public UIData.BondType PreviousBondType { + get { + return previous_BondType; + } + } - void Awake() - { + void Awake() { System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); } - void Start() - { + void Start() { DebugStreamer.message = "Hello world!"; LocCamera=GameObject.Find("Camera"); DebugStreamer.message = "Find Camera"; @@ -186,7 +186,7 @@ void Start() scenecontroller = GameObject.Find("LoadBox"); scenecontroller.AddComponent(); - + gUIDisplay=new GUIDisplay(); DebugStreamer.message = "new GUIDisplay()"; //Init @@ -196,250 +196,236 @@ void Start() //requestPDB.mySkin=mySkin; timeleft = updateInterval; - // AtomModel.InitHiRERNA(); + +// AtomModel.InitHiRERNA(); AtomModel.InitAtomic(); + SendMessage("InitScene",requestPDB,SendMessageOptions.DontRequireReceiver); } - public void Display() - { -// Debug.Log("Display display"); + public void Display() { DisplayMolecule.Display(); DisplayMolecule.DisplayFieldLine(); - Deta=MoleculeModel.target; +// Deta=MoleculeModel.target; isControl=true; GUIMoleculeController.InitMoleculeParameters(); - SetCenter(0); } - public void HideAtoms() - { - if(UIData.atomtype != UIData.AtomType.noatom) - { + public void HideAtoms() { + if(UIData.atomtype != UIData.AtomType.noatom) { + Debug.Log("Hiding all atoms now."); + DisplayMolecule.HideAtoms(); previous_AtomType = UIData.atomtype; UIData.atomtype = UIData.AtomType.noatom; - DisplayMolecule.HideAtoms(); } } - public void ShowAtoms() - { - if(UIData.atomtype == UIData.AtomType.noatom) - { + public void ShowAtoms() { + if(UIData.atomtype == UIData.AtomType.noatom) { UIData.atomtype = previous_AtomType; previous_AtomType = UIData.AtomType.noatom; + DisplayMolecule.ShowAtoms(); } - DisplayMolecule.ShowAtoms(); } - - void OnGUI() - { - + + void OnGUI() { GUI.skin = mySkin; + + if(!fontInitialized) { + Rectangles.SetFontSize(); + fontInitialized = true; + } + if(GUIMoleculeController.m_fileBrowser != null) - { GUIMoleculeController.m_fileBrowser.OnGUI(); - } - - if(gUIDisplay.m_fileBrowser != null) - { + + + + if(gUIDisplay.m_fileBrowser != null) { GUIMoleculeController.FileBrowser_show=true; gUIDisplay.m_fileBrowser.OnGUI(); - }else + } else GUIMoleculeController.FileBrowser_show=false; UIData.EnableUpdate=false; if((!UIData.hiddenUI)&&(!UIData.hiddenUIbutFPS)) - { gUIDisplay.Display(); + + if((!UIData.hiddenUI)&&(UIData.hiddenUIbutFPS)){ + GUIMoleculeController.toggle_INFOS = true; } if(!UIData.hiddenUI) - { - if (GUIMoleculeController.SetAtomScale_show){ - gUIDisplay.SetAtomScale(); - - - } - } - - if(UIData.isConfirm && UIData.hasMoleculeDisplay) - { - // if(UIData.atomtype == UIData.AtomType.particleball) - // { - // DisplayMolecule.ResetDisplay(); - // } - // else - { - DisplayMolecule.AmendDisplay(); - } - UIData.isConfirm=false; - } + if(GUIMoleculeController.showPanelsMenu) + GUIMoleculeController.SetPanels(); + + if(!UIData.hiddenUI) + if (GUIMoleculeController.showResiduesMenu) + GUIMoleculeController.SetResidues(); + + if(!UIData.hiddenUI) + if (GUIMoleculeController.showAtomsExtendedMenu) + GUIMoleculeController.SetAtomsExtended(); + + if(!UIData.hiddenUI) + if (GUIMoleculeController.showChainsMenu) + GUIMoleculeController.SetChains(); - if(UIData.changeStructure) - { + if(UIData.changeStructure) { DisplayMolecule.ResetDisplay(); UIData.changeStructure = false; + UIData.isParticlesInitialized = false; } - if(UIData.isclear) - { + if(UIData.isclear) { DisplayMolecule.DestroyFieldLine(); DisplayMolecule.DestroyObject(); - DisplayMolecule.DestroyParticles(); + DisplayMolecule.DestroyRingBlending(); + DisplayMolecule.DestroySugarRibbons(); + DisplayMolecule.DestroyOxySpheres(); DisplayMolecule.DestroyBondObject(); DisplayMolecule.DestroySurfaces(); DisplayMolecule.DestroyElectIso(); DisplayMolecule.ClearMemory(); - -// id=""; - UIData.isclear=false; + + // ----- Clearing all variables ----- + UIData.isCubeLoaded = false; + UIData.isSphereLoaded = false; + UIData.isHBallLoaded = false; + LoadTypeGUI.buildSurfaceDone = false; + LoadTypeGUI.surfaceTextureDone = false; + LoadTypeGUI.toggle_RING_BLENDING = false; + LoadTypeGUI.toggle_NA_HIDE = false; + LoadTypeGUI.toggle_TWISTER= false; + LoadTypeGUI.toggle_HIDE_HYDROGEN = false; + LoadTypeGUI.toggle_OXYGEN = false; + LoadTypeGUI.ColorationModeBond=0; + LoadTypeGUI.ColorationModeRing=0; UIData.isParticlesInitialized=false; - GUIMoleculeController.rayon = 1.0f; + GUIMoleculeController.globalRadius = 1.0f; UIData.secondarystruct = false; + UIData.atomtype = UIData.AtomType.noatom; + UIData.bondtype = UIData.BondType.nobond; + MoleculeModel.existingName.Clear(); + MoleculeModel.existingRes.Clear(); + MoleculeModel.existingChain.Clear(); +// id=""; + //T.T test debug + Molecule.Model.MoleculeModel.atomsLocalScaleList.Clear(); + RequestPDB.isDone=false; + + UIData.isclear=false; Debug.Log("UIData.isclear"); } - if(UIData.resetDisplay&&UIData.isCubeToSphere) - { + + if(UIData.resetDisplay&&UIData.isCubeToSphere) { DisplayMolecule.CubeToSphere(); Debug.Log ("UIData :: resetDisplay && iscubetoSphere"); } - if(UIData.resetDisplay&&UIData.isSphereToCube) - { + if(UIData.resetDisplay&&UIData.isSphereToCube) { DisplayMolecule.SphereToCube(); Debug.Log ("UIData :: reset display && is spheretocube"); } - if(UIData.resetBondDisplay) - { + if(UIData.resetBondDisplay) { DisplayMolecule.ResetBondDisplay(); - Debug.Log ("UIData :: reset bonddisplay"); + Debug.Log ("UIData :: reset bonddisplay "); } - - if(UIData.isOpenFile) - { - // if(boxes!=null) - // { - // foreach(GameObject box in boxes) - // { - // Destroy(box); - // } - // } - - UIData.isOpenFile = false; - - StartCoroutine(loadFile()); - Display(); + if(UIData.isOpenFile) { + StartCoroutine(loadLoadFile()); } if(UIData.backGroundIs) - { LocCamera.GetComponent().enabled=true; - - - } - else - { LocCamera.GetComponent().enabled=false; - } + UIData.EnableUpdate=true; - if(UIData.interactive&&UIData.resetInteractive) - { + if(UIData.interactive&&UIData.resetInteractive) { DisplayMolecule.AddAllPhysics(); UIData.resetInteractive=false; } - else if(!UIData.interactive&&UIData.resetInteractive) - { + else if(!UIData.interactive && UIData.resetInteractive) { DisplayMolecule.DeleteAllPhysics(); - UIData.resetInteractive=false; + UIData.resetInteractive = false; } - if(UIData.meshcombine) - { + if(UIData.meshcombine) { DisplayMolecule.AddCombineMesh(); UIData.resetMeshcombine=false; } - else if(!UIData.meshcombine) - { + else if(!UIData.meshcombine) { DisplayMolecule.DeleteCombineMesh(); UIData.resetMeshcombine=false; } - if (requestPDB.Loading) - { - - //GUI.Label(new Rect(100, 15, 200, 30), "", "bj"); - //GUI.Label(new Rect(100,15, requestPDB.progress * 200, 30), "", "qj"); - } + /*if (requestPDB.Loading) { + GUI.Label(new Rect(100, 15, 200, 30), "", "bj"); + GUI.Label(new Rect(100,15, requestPDB.progress * 200, 30), "", "qj"); + }*/ // if(GUI.tooltip != "")GUI.Label ( new Rect(180,Screen.height-35,Screen.width-360,20), GUI.tooltip); // if(MoleculeModel.newtooltip != "")GUI.Label ( new Rect(180,Screen.height-35,Screen.width-360,20), MoleculeModel.newtooltip); if(GUI.tooltip != "")GUI.Box ( new Rect(180,Screen.height-55,450,25), GUI.tooltip); if(MoleculeModel.newtooltip != "")GUI.Box ( new Rect(180,Screen.height-55,450,25), MoleculeModel.newtooltip); - + + + } + + //this fonction is used to synchronise the file loading and the Display + //Otherwise Display is execute before the end of the loading. + public IEnumerator loadLoadFile(){ + UIData.isOpenFile = false; + yield return StartCoroutine(loadFile()); + Debug.Log ("T.T ==> BEFORE DISPLAY"); + Display(); } // loading the file in all possibilities - public IEnumerator loadFile() - { + public IEnumerator loadFile() { #if !UNITY_WEBPLAYER { - - // alist=requestPDB.LoadPDBRequest(url,id); // check all format reading by unitymol PDB, XGMML and OBJ - if(UIData.fetchPDBFile) - { + if(UIData.fetchPDBFile) { Debug.Log("pdbServer/pdbID :: "+GUIDisplay.pdbServer + GUIDisplay.pdbID); Debug.Log("proxyServer+proxyPort :: "+GUIDisplay.proxyServer + GUIDisplay.proxyPort); int proxyport = 0; if(GUIDisplay.proxyPort != "") - { proxyport = int.Parse(GUIDisplay.proxyPort); - }else{ + else proxyport = 0; - } - requestPDB.FetchPDB(GUIDisplay.pdbServer, - GUIDisplay.pdbID, - GUIDisplay.proxyServer, - proxyport); + requestPDB.FetchPDB(GUIDisplay.pdbServer, GUIDisplay.pdbID, GUIDisplay.proxyServer, proxyport); } // if we laod a pdb file launch the reading of file else if(GUIDisplay.file_extension=="pdb") - { - requestPDB.LoadPDBRequest(GUIDisplay.file_base_name); - } + requestPDB.LoadPDBRequest(GUIDisplay.file_base_name); // check the format of xgmml - else if(UI.GUIDisplay.file_extension=="xgmml") - { - - StartCoroutine(requestPDB.LoadXGMML("file://"+GUIDisplay.file_base_name+"."+GUIDisplay.file_extension)); - while(!requestPDB.isDone) - { + else if(UI.GUIDisplay.file_extension=="xgmml") { + yield return StartCoroutine(requestPDB.LoadXGMML("file://"+GUIDisplay.file_base_name+"."+GUIDisplay.file_extension)); + while(!RequestPDB.isDone) { Debug.Log(requestPDB.progress); yield return new WaitForEndOfFrame(); } UIData.atomtype=UIData.AtomType.hyperball; UIData.bondtype=UIData.BondType.hyperstick; - GUIMoleculeController.rayon = 0.7f; + GUIMoleculeController.globalRadius = 0.22f; GUIMoleculeController.shrink = 0.0001f; - GUIMoleculeController.linkscale = 0.3f; + GUIMoleculeController.linkScale = 0.70f; SendMessage("Display",SendMessageOptions.DontRequireReceiver); } - else if(UI.GUIDisplay.file_extension=="obj") - { + else if(UI.GUIDisplay.file_extension=="obj") { requestPDB.LoadOBJRequest(GUIDisplay.file_base_name+"."+GUIDisplay.file_extension); - MoleculeModel.SurfaceFileExist=true; + MoleculeModel.surfaceFileExists=true; GUIMoleculeController.modif=true; } // requestPDB.GetTypelist(); @@ -454,121 +440,85 @@ public IEnumerator loadFile() // clubLocationalist=socketPDB.getClubLocation(); // clubRotationList=socketPDB.getClubRotation(); if(UIData.init_molecule != "") - { requestPDB.LoadPDBResource(UIData.init_molecule); - } } #endif //Debug.Log("SDGFSDGSDGDSG"); - GUIMoleculeController.menuAtom_show = true; + GUIMoleculeController.showAtomMenu = true; Camera.main.GetComponent().enabled = false; - yield return null; - - } - + Debug.Log("T.T ==> END OF LOADING"); +} - - // Update is called once per frame - void Update() - { - // DebugStreamer.message = ("Current time is: " + Time.time); - - if (requestPDB.isDone){ + void Update() { + // requestPDB.Loading looks actually useless since progress bar is commented (see below) + /*if (RequestPDB.isDone){ requestPDB.Loading = false; - } + } else{ requestPDB.Loading = true; - } - - - if(isControl&&(!UIData.cameraStop2)) - { - + }*/ + + if(isControl&&(!UIData.cameraStop2)) { // Seems to be true as long as the mouse is in the game window and not on the gui MouseOperate(); KeyOperate(); - SetCenterbySpace(); + //SetCenterbySpace(); HiddenOperate(); OpenMenuOperate(); OpenBoundOperate(); } - if (GUIMoleculeController.toggle_HB_SANIM) - { + + // Always false ? + /*if (GUIMoleculeController.toggle_HB_SANIM) { GUIMoleculeController.shrink += Time.deltaTime * GUIMoleculeController.hb_sanim * GUIMoleculeController.hb_ssign; - if (GUIMoleculeController.shrink > 0.95f ) { GUIMoleculeController.hb_ssign = -1.0f; } - if (GUIMoleculeController.shrink < 0.05f ) { GUIMoleculeController.hb_ssign = 1.0f; } - } - if (GUIMoleculeController.toggle_HB_RANIM) - { - GUIMoleculeController.rayon += Time.deltaTime * GUIMoleculeController.hb_ranim * GUIMoleculeController.hb_rsign; - if (GUIMoleculeController.rayon > 0.95f ) { GUIMoleculeController.hb_rsign = -1.0f; } - if (GUIMoleculeController.rayon < 0.05f ) { GUIMoleculeController.hb_rsign = 1.0f; } - } + if (GUIMoleculeController.shrink > 0.95f ) + GUIMoleculeController.hb_ssign = -1.0f; + if (GUIMoleculeController.shrink < 0.05f ) + GUIMoleculeController.hb_ssign = 1.0f; + }*/ + + // Always false ? + /*if (GUIMoleculeController.toggle_HB_RANIM) { + GUIMoleculeController.globalRadius += Time.deltaTime * GUIMoleculeController.hb_ranim * GUIMoleculeController.hb_rsign; + if (GUIMoleculeController.globalRadius > 0.95f ) + GUIMoleculeController.hb_rsign = -1.0f; + if (GUIMoleculeController.globalRadius < 0.05f ) + GUIMoleculeController.hb_rsign = 1.0f; + }*/ - if(GUIMoleculeController.toggle_HB_TRANS) - { - GUIMoleculeController.transDelta = 25.0f; - } + if(GUIMoleculeController.toggle_HB_TRANS) // Always true ? + GUIMoleculeController.transDelta = 25.0f; else - { - GUIMoleculeController.transDelta = 1.0f; - } + GUIMoleculeController.transDelta = 1.0f; - if (GUIMoleculeController.transCPK_LICORICE) - { - GUIMoleculeController.rayon = transition(GUIMoleculeController.rayon, GUIMoleculeController.newRadius, GUIMoleculeController.deltaRadius); - GUIMoleculeController.linkscale = transition(GUIMoleculeController.linkscale, GUIMoleculeController.newScale, GUIMoleculeController.deltaScale); + if (GUIMoleculeController.transMETAPHOR) { + GUIMoleculeController.globalRadius = transition(GUIMoleculeController.globalRadius, GUIMoleculeController.newGlobalRadius, GUIMoleculeController.deltaRadius); + GUIMoleculeController.linkScale = transition(GUIMoleculeController.linkScale, GUIMoleculeController.newScale, GUIMoleculeController.deltaScale); GUIMoleculeController.shrink = transition(GUIMoleculeController.shrink, GUIMoleculeController.newShrink, GUIMoleculeController.deltaShrink); - if(GUIMoleculeController.rayon == GUIMoleculeController.newRadius && GUIMoleculeController.linkscale == GUIMoleculeController.newScale && GUIMoleculeController.shrink == GUIMoleculeController.newShrink) - GUIMoleculeController.transCPK_LICORICE = false; + if(GUIMoleculeController.globalRadius == GUIMoleculeController.newGlobalRadius && GUIMoleculeController.linkScale == GUIMoleculeController.newScale && GUIMoleculeController.shrink == GUIMoleculeController.newShrink) + GUIMoleculeController.transMETAPHOR = false; } + LineUpdate.scale=GUIMoleculeController.linkScale; - LineUpdate.scale=GUIMoleculeController.linkscale; - - StickUpdate.radiusFactor = GUIMoleculeController.rayon; + StickUpdate.radiusFactor = GUIMoleculeController.globalRadius; StickUpdate.shrink = GUIMoleculeController.shrink; - StickUpdate.scale = GUIMoleculeController.linkscale; - BallUpdateHB.radiusFactor = GUIMoleculeController.rayon; - BallUpdateHB.depthfactor = GUIMoleculeController.depthfactor; - BallUpdateSphere.radiusFactor = GUIMoleculeController.rayon; - BallUpdateCube.radiusFactor = GUIMoleculeController.rayon; - BallUpdateRC.radiusFactor = GUIMoleculeController.rayon; - - - + StickUpdate.scale = GUIMoleculeController.linkScale; + BallUpdateHB.radiusFactor = GUIMoleculeController.globalRadius; +// BallUpdateHB.depthfactor = GUIMoleculeController.depthfactor; + HBallManager.depthFactor = GUIMoleculeController.depthfactor; + HStickManager.depthFactor = GUIMoleculeController.depthfactor; + BallUpdateSphere.radiusFactor = GUIMoleculeController.globalRadius; + BallUpdateCube.radiusFactor = GUIMoleculeController.globalRadius; + BallUpdateRC.radiusFactor = GUIMoleculeController.globalRadius; BallUpdateHB.drag = GUIMoleculeController.drag; BallUpdateHB.spring = GUIMoleculeController.spring; - BallUpdateHB.EnergyGrayColor = GUIMoleculeController.EnergyGrayColor.color; - - //Hiding the particles if not in particle mode. - if(UIData.atomtype == UIData.AtomType.particleball) - ParticleEffect.radiusFactor = GUIMoleculeController.rayon; - else - ParticleEffect.radiusFactor = 0.000001f; - - // if ( GUIMoleculeController.surface_staticcut) - // { - // BallUpdateHB.cut = 1f; - // BallUpdateHB.cutplane = new Vector4(GUIMoleculeController.cutX, - // GUIMoleculeController.cutY, - // GUIMoleculeController.cutZ, - // GUIMoleculeController.depthcut); - // } - - - -// particleeffect.radiuschange=true; - - // movement of fieldline ============================================================================================= - // Send all the paramter to the field line shader - - - // GameObject scenecontroller= GameObject.Find("LoadBox"); + BallUpdateHB.EnergyGrayColor = GUIMoleculeController.EnergyGrayColor.color; + // TODO: This is gross. Should be fixed. GameObject[] FieldLines = GameObject.FindGameObjectsWithTag("FieldLineManager"); foreach (GameObject FieldLine in FieldLines) { LineRenderer curLineRenderer; @@ -578,7 +528,7 @@ void Update() // for benoist video comment next line curLineRenderer.material.SetColor("_Color", GUIMoleculeController.EnergyGrayColor.color); - if (GUIMoleculeController.FieldLineColorGradient) + if (GUIMoleculeController.fieldLineColorGradient) curLineRenderer.material.SetFloat("_colormode", 0f); else curLineRenderer.material.SetFloat("_colormode", 1f); @@ -587,215 +537,80 @@ void Update() curLineRenderer.material.SetFloat("_Density",GUIMoleculeController.density); curLineRenderer.material.SetFloat("_Length", GUIMoleculeController.linelength); curLineRenderer.SetWidth(GUIMoleculeController.linewidth,GUIMoleculeController.linewidth); - curLineRenderer.material.SetFloat("_depthcut", (GUIMoleculeController.depthcut-maxCamera.currentDistance)); - curLineRenderer.material.SetFloat("_adjust",(GUIMoleculeController.adjustFieldLinecut)); + curLineRenderer.material.SetFloat("_depthcut", (GUIMoleculeController.depthCut-maxCamera.currentDistance)); + curLineRenderer.material.SetFloat("_adjust",(GUIMoleculeController.adjustFieldLineCut)); curLineRenderer.material.SetVector("_SurfacePos", FieldLine.transform.position); - - if (GUIMoleculeController.surface_mobilecut) + if (GUIMoleculeController.surfaceMobileCut) curLineRenderer.material.SetFloat("_cut", 2f); - else if ( GUIMoleculeController.surface_staticcut){ + else if ( GUIMoleculeController.surfaceStaticCut){ curLineRenderer.material.SetFloat("_cut", 1f); curLineRenderer.material.SetVector("_cutplane",new Vector4(GUIMoleculeController.cutX, GUIMoleculeController.cutY, GUIMoleculeController.cutZ, - GUIMoleculeController.depthcut)); + GUIMoleculeController.depthCut)); } } -// LineRenderer curLineRenderertemp; - - -//Video with Benoit ============================================================================================= - - // if (Input.GetKey("w") & polop ==0 ){ - // polop=1; - // for (int i=296; i< 305;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=321; i< 460;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=481; i<510 ;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=550; i< 757;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=762; i< 818;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=823; i< 839;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=843; i< 895;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=896; i< 1000;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=1100; i< 1340;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=1376; i< 1431;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - // for (int i=1934; i< 2001;i++){ - // FieldLines[i].SetActiveRecursively(false); - // } - - // FieldLines[239].SetActiveRecursively(true); - // FieldLines[275].SetActiveRecursively(true); - // FieldLines[316].SetActiveRecursively(true); - // FieldLines[384].SetActiveRecursively(true); - // FieldLines[386].SetActiveRecursively(true); - // FieldLines[405].SetActiveRecursively(true); - // FieldLines[411].SetActiveRecursively(true); - // FieldLines[426].SetActiveRecursively(true); - // FieldLines[426].SetActiveRecursively(true); - // FieldLines[433].SetActiveRecursively(true); - // FieldLines[657].SetActiveRecursively(true); - // FieldLines[910].SetActiveRecursively(true); - // FieldLines[1045].SetActiveRecursively(true); - // FieldLines[1096].SetActiveRecursively(true); - // FieldLines[1194].SetActiveRecursively(true); - // FieldLines[1306].SetActiveRecursively(true); - // FieldLines[1336].SetActiveRecursively(true); - // FieldLines[1339].SetActiveRecursively(true); - // FieldLines[1414].SetActiveRecursively(true); - // FieldLines[1440].SetActiveRecursively(true); - // FieldLines[1444].SetActiveRecursively(true); - // } - - // if (Input.GetKey("x")){ - // curLineRenderertemp =FieldLines[161].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[239].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[275].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[316].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[384].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[386].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[405].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[411].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[426].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[433].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[657].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1045].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1096].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1194].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1306].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1336].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1339].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1341].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1414].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1440].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1444].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1534].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1535].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1538].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1609].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1684].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1685].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1763].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1830].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue);curLineRenderertemp =FieldLines[1874].GetComponent(); - // curLineRenderertemp.material.SetColor("_Color",Color.blue); - // } - + GameObject[] Surfaces = GameObject.FindGameObjectsWithTag("SurfaceManager"); - - -// // color and all for benoist ============================================================================================= -// // can be reuse in unitymol classic, butwe have to choose all the color and workd with less than 6 surfaces -// if (MoleculeModel.SurfaceFileExist){ - - // if (Input.GetKey("c") ){ - // Color purple = Color.black; - // Color orange = Color.black; - // Color grey = Color.black; - // Color cyan = Color.white; - // Color yellow = Color.white; - - - // purple.r=251f/255f; purple.b=255f/255f; - // orange.r=255f/255f;orange.g=193f/255f;orange.b=12f/255f; - // grey.r=148f/255f; grey.g= 148f/255f; grey.b=148f/255f; - // cyan.r=108f/255f; - // yellow.b=66f/255f; - // Surfaces[0].renderer.material.SetColor("_Color", cyan); - // Surfaces[1].renderer.material.SetColor("_Color", yellow); - // Surfaces[2].renderer.material.SetColor("_Color", grey); - // Surfaces[3].renderer.material.SetColor("_Color", purple); - // Surfaces[4].renderer.material.SetColor("_Color", orange); - - // } - - // // remove 2 structure of the protein (for benoist) - // if (Input.GetKey("v") & masque == 0){ - // Surfaces[0].SetActiveRecursively(false); - // Surfaces[1].SetActiveRecursively(false); - // masque =1; - // } -// ============================================================================================= -// if (Input.GetKey("n")){ // stop la mise a jour des surface afin de changer la couleur que de certaine surface + foreach (GameObject Surface in Surfaces) { - foreach (GameObject Surface in Surfaces) - { - - if (GUIMoleculeController.SurfaceGrayColor.color != Color.white){ - Surface.renderer.material.SetFloat("_colormode", 1f); - }else - Surface.renderer.material.SetFloat("_colormode", 0f); - - - if (GUIMoleculeController.surface_texture){ - Surface.renderer.material.shader = Shader.Find("Mat Cap Cut"); - Surface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load(GUIMoleculeController.surface_texture_name)); + if ((GUIMoleculeController.surfaceTexture || GUIMoleculeController.externalSurfaceTexture) && !GUIMoleculeController.surfaceTextureDone) { + if(GUIMoleculeController.externalSurfaceTexture){ + if(!UIData.grayscalemode) + Surface.renderer.material.SetTexture("_MatCap",GUIMoleculeController.extSurf); + else{ + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + Surface.renderer.material.SetTexture("_MatCap",hbManager.ToGray(GUIMoleculeController.extSurf)); + } + Debug.Log("File choose surface texture"); } - else if(GUIMoleculeController.external_surface_texture){ - - Surface.renderer.material.shader = Shader.Find("Mat Cap Cut"); - Surface.renderer.material.SetTexture("_MatCap",GUIMoleculeController.ext_surf); - }else if(GUIMoleculeController.surface_build || GUIMoleculeController.dxread){ - Surface.renderer.material.shader = Shader.Find("Mat Cap Cut"); - Surface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("lit_spheres/divers/daphz1")); - - }else{ - Surface.renderer.material.shader= Shader.Find("Bumped Specular cut"); - Surface.renderer.material.SetColor("_SpecColor", Color.black); - + else{ + if(!UIData.grayscalemode) + Surface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load(GUIMoleculeController.surfaceTextureName)); // do not do that every frame! + else{ + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + Surface.renderer.material.SetTexture("_MatCap",hbManager.ToGray((Texture)Resources.Load(GUIMoleculeController.surfaceTextureName))); + } + Debug.Log("Quick choose surface texture"); } - // send all the paramter to the surface shader - // Surface.renderer.material.SetFloat("_Shininess", GUIMoleculeController.intensity); - // if (Input.GetKey("n")) // uncoment for benoist - Surface.renderer.material.SetColor("_Color", GUIMoleculeController.SurfaceGrayColor.color); -// Surface.renderer.material.SetColor("_Color", new Color(1f,1f,1f)); // couleur blanche fixé - Surface.renderer.material.SetFloat("_depthcut", GUIMoleculeController.depthcut); - Surface.renderer.material.SetFloat("_cutX", GUIMoleculeController.cutX); - Surface.renderer.material.SetFloat("_cutY", GUIMoleculeController.cutY); - Surface.renderer.material.SetFloat("_cutZ", GUIMoleculeController.cutZ); - Surface.renderer.material.SetVector("_SurfacePos", Surface.transform.position); - if (GUIMoleculeController.surface_mobilecut) // set the cutting mode - Surface.renderer.material.SetFloat("_cut", 2f); - else if ( GUIMoleculeController.surface_staticcut) - Surface.renderer.material.SetFloat("_cut", 1f); - else - Surface.renderer.material.SetFloat("_cut", 0f); - - -// } // "N" block + } + else if ((GUIMoleculeController.buildSurface || GUIMoleculeController.dxRead) && !GUIMoleculeController.buildSurfaceDone) { + Surface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("lit_spheres/divers/daphz1")); + Debug.Log("Default surface texture"); + } + + // send all the paramter to the surface shader + // Surface.renderer.material.SetFloat("_Shininess", GUIMoleculeController.intensity); + // if (Input.GetKey("n")) // uncoment for benoist + + Surface.renderer.material.SetColor("_Color", GUIMoleculeController.SurfaceGrayColor.color); + Surface.renderer.material.SetColor("_ColorIN", GUIMoleculeController.SurfaceInsideColor.color); + //Surface.renderer.material.SetColor("_Color", new Color(1f,1f,1f)); // couleur blanche fixé + Surface.renderer.material.SetFloat("_depthcut", GUIMoleculeController.depthCut); + Surface.renderer.material.SetFloat("_cutX", GUIMoleculeController.cutX); + Surface.renderer.material.SetFloat("_cutY", GUIMoleculeController.cutY); + Surface.renderer.material.SetFloat("_cutZ", GUIMoleculeController.cutZ); + Surface.renderer.material.SetVector("_SurfacePos", Surface.transform.position); + if (GUIMoleculeController.surfaceMobileCut && Surface.renderer.material.shader.name == "Mat Cap Cut"){ // set the cutting mode + if(Surface.renderer.material.GetFloat("_cut") != 2f) + Surface.renderer.material.SetFloat("_cut", 2f); } - // } - -// update the sphere clone ============================================================================================= - // GameObject sphereclone=GameObject.Find("transparentsphere(Clone)"); - // if(sphereclone) - // { - // float localscale=3.0f*GUIMoleculeController.rayon; - // if(localscale<1)localscale=1; - // sphereclone.transform.localScale=new Vector3(localscale,localscale,localscale); - // } - + else if (GUIMoleculeController.surfaceStaticCut && Surface.renderer.material.shader.name == "Mat Cap Cut"){ + if(Surface.renderer.material.GetFloat("_cut") != 1f) + Surface.renderer.material.SetFloat("_cut", 1f); + } + else if(Surface.renderer.material.shader.name == "Mat Cap Cut"){ + if(Surface.renderer.material.GetFloat("_cut") != 0f) + Surface.renderer.material.SetFloat("_cut", 0f); + } + } + GUIMoleculeController.surfaceTextureDone = true; + GUIMoleculeController.buildSurfaceDone = true; //FPS Count @@ -804,18 +619,15 @@ void Update() ++frames; // Interval ended - update GUI text and start new interval - if( timeleft <= 0.0f ) - { + if( timeleft <= 0.0f ) { // display two fractional digits (f2 format) float fps = accum/frames;//(1 / Time.deltaTime); MoleculeModel.FPS = fps.ToString("f2"); //Write FPS data into file - if(fpsLogToggle) - { + if(fpsLogToggle) { fpsCount ++; fpsSum += fps; - if(fpsCount > 35) - { + if(fpsCount > 35) { Debug.Log("Info :; End fps measure"); toggleFPSLog(); fpsCount = 0; @@ -829,20 +641,17 @@ void Update() accum = 0.0f; frames = 0; } - + + //SetVolumetricDensity(); // gUIDisplay.gUIMoleculeController.GetPanelPixel(); } - - public void toggleFPSLog() - { - if(!fpsLogToggle) - { + public void toggleFPSLog() { // Debugging tool creating .txt files with FPS informations +/* if(!fpsLogToggle) { fpsLogToggle = true; Debug.Log("Entering :: Starting fps measure to file"); } - else - { + else { fpsLogToggle = false; DateTime currTime = DateTime.Now; string filename = currTime.ToString("HH_mm_ss")+"_umol_fpsdata.txt"; @@ -852,292 +661,249 @@ public void toggleFPSLog() fpsLog.Close(); fpsLog.Dispose(); } +*/ } - float transition(float val, float newVal, float deltaVal) - { + /// + /// Make the transition between metaphors. + /// + /// + /// Value. + /// + /// + /// New value. + /// + /// + /// Delta value. + /// + float transition(float val, float newVal, float deltaVal) { if(val <= newVal && deltaVal < 0.0f) return newVal; if(val >= newVal && deltaVal > 0.0f) return newVal; return val + deltaVal; } - - private void OpenMenuOperate() - { - if(Input.GetKeyDown(KeyCode.Delete)) - { - - UIData.openAllMenu=!UIData.openAllMenu; + + /// + /// Switch back to the particle mode. ('Delete' key) + /// + private void OpenMenuOperate() { + if(Input.GetKeyDown(KeyCode.Delete)) { + UIData.openAllMenu=!UIData.openAllMenu; // ??? UIData.resetDisplay=true; UIData.isSphereToCube=true; UIData.isCubeToSphere=false; UIData.atomtype=UIData.AtomType.particleball; UIData.resetBondDisplay=true; UIData.bondtype=UIData.BondType.nobond; - - } } + + /// + /// Switch back to particle mode. ('-' or '=' keys) + /// + private void OpenBoundOperate() { + if(Input.GetKeyDown(KeyCode.Minus)||Input.GetKeyDown(KeyCode.Equals)) { - private void OpenBoundOperate() - { - if(Input.GetKeyDown(KeyCode.Minus)||Input.GetKeyDown(KeyCode.Equals)) - { - + /* Debug.Log("Press Equal key."); - UIData.openBound=!UIData.openBound; + UIData.openBound=!UIData.openBound; // ??? UIData.resetDisplay=true; UIData.isSphereToCube=true; UIData.isCubeToSphere=false; UIData.atomtype=UIData.AtomType.particleball; UIData.resetBondDisplay=true; UIData.bondtype=UIData.BondType.nobond; - - + */ } } - private void HiddenOperate() - { - if(Input.GetKeyDown(KeyCode.Backspace)) - { -// Debug.Log("KeyCode.Backspace press."); - if(UIData.hiddenUI==false&&UIData.hiddenUIbutFPS==false&&UIData.hiddenCamera==false) - { + /// + /// Hides the GUI and enables a sort of "full-screen" mode, as in GUI-less, not as opposed to windowed. + /// Helps quite a bit with performance, or at least with CPU load. + /// + private void HiddenOperate() { + if(Input.GetKeyDown(KeyCode.Backspace)) { + if(!UIData.hiddenUI) { //&& !UIData.hiddenUIbutFPS && !UIData.hiddenCamera) { UIData.hiddenUI=true; Debug.Log("Hide all the UI."); - } - else if(UIData.hiddenUI==true&&UIData.hiddenUIbutFPS==false&&UIData.hiddenCamera==false) - { + } + // I really don't know why we'd want to disable the camera. +/* else if(UIData.hiddenUI && !UIData.hiddenUIbutFPS && !UIData.hiddenCamera) { UIData.hiddenCamera=true; LocCamera.GetComponent().enabled=false; Debug.Log("Hide all the UI and Camera."); } - else if(UIData.hiddenUI==true&&UIData.hiddenUIbutFPS==false&&UIData.hiddenCamera==true) - { - UIData.hiddenCamera=false; - LocCamera.GetComponent().enabled=true; +*/ + // Doesn't seem to work +/* else if(UIData.hiddenUI && !UIData.hiddenUIbutFPS) { //&& UIData.hiddenCamera) { + //UIData.hiddenCamera=false; + //LocCamera.GetComponent().enabled=true; UIData.hiddenUI=false; UIData.hiddenUIbutFPS=true; - Debug.Log("Hide all the UI unless FPS."); + Debug.Log("Hide all the UI except FPS."); } - else if(UIData.hiddenUI==false&&UIData.hiddenUIbutFPS==true&&UIData.hiddenCamera==false) - { - +*/ + else if(UIData.hiddenUI) { //!UIData.hiddenUI && UIData.hiddenUIbutFPS && !UIData.hiddenCamera) { UIData.hiddenUI=false; - UIData.hiddenUIbutFPS=false; + //UIData.hiddenUIbutFPS=false; Debug.Log("Show all the UI and Camera."); } - - - } } - - - - -// control with the keyboard ============================================================================================= -// I don't check if the key which are used fir benoist video are here or not. - private void KeyOperate() - - { -// originalRotation = transform.localRotation; - //print(LocCamera.transform.position.x); + /// + /// For keyboard control. + /// + private void KeyOperate() { Vector3 v=new Vector3(); v=LocCamera.transform.localPosition; - //right move - if(Input.GetKey(KeyCode.D)) - { - + //Molecule right + if(Input.GetKey(KeyCode.D)) { v.x-=0.5f; LocCamera.transform.localPosition=v; - if(UIData.switchmode)ToParticle(); + if(UIData.switchmode) + ToParticle(); } - //clockwise - if(Input.GetKey(KeyCode.W)) - { - + //Molecule up + if(Input.GetKey(KeyCode.W)) { v.y-=0.5f; LocCamera.transform.localPosition=v; - if(UIData.switchmode)ToParticle(); + if(UIData.switchmode) + ToParticle(); } - //down move - if(Input.GetKey(KeyCode.S)) - { + //Molecule down + if(Input.GetKey(KeyCode.S)) { v.y+=0.5f; LocCamera.transform.localPosition=v; - if(UIData.switchmode)ToParticle(); + if(UIData.switchmode) + ToParticle(); //print("LocCamera.transform.localPosition.y"+v.y); } - //down rotation - if(Input.GetKey(KeyCode.A)) - { + //Molecule left + if(Input.GetKey(KeyCode.A)) { v.x+=0.5f; LocCamera.transform.localPosition=v; - if(UIData.switchmode)ToParticle(); + if(UIData.switchmode) + ToParticle(); //print("LocCamera.transform.localPosition.x"+v.x); } - //zoom out - if(Input.GetKey(KeyCode.N)) - { + //Zoom in + if(Input.GetKey(KeyCode.N)) { v.z+=0.5f; LocCamera.transform.localPosition=v; - if(UIData.switchmode)ToParticle(); + if(UIData.switchmode) + ToParticle(); //print("LocCamera.transform.localPosition.x"+v.x); } - //zoom in - if(Input.GetKey(KeyCode.B)) - { + //Zoom out + if(Input.GetKey(KeyCode.B)) { v.z-=0.5f; LocCamera.transform.localPosition=v; - if(UIData.switchmode)ToParticle(); + if(UIData.switchmode) + ToParticle(); //print("LocCamera.transform.localPosition.x"+v.x); } - //left move - if(Input.GetKey(KeyCode.Q)) - { - transform.RotateAround(Deta,axisX,0.6f); - DMatrix.RotationMatrix(axisX,axisY,axisZ,0.6f); - if(UIData.switchmode)ToParticle(); +/* //Moved to maxCamera + //Down rotation + if(Input.GetKey(KeyCode.Q)) { + //LocCamera.transform.RotateAround(Deta,axisX,0.6f); + //DMatrix.RotationMatrix(axisX,axisY,axisZ,0.6f); + if(UIData.switchmode) + ToParticle(); } - //up rotation - if(Input.GetKey(KeyCode.E)) - { - - transform.RotateAround(Deta,axisX,-0.6f); - DMatrix.RotationMatrix(axisX, axisY, axisZ,-0.6f); - if(UIData.switchmode)ToParticle(); + //Up rotation + if(Input.GetKey(KeyCode.E)) { + //LocCamera.transform.RotateAround(Deta,axisX,-0.6f); + //DMatrix.RotationMatrix(axisX, axisY, axisZ,-0.6f); + if(UIData.switchmode) + ToParticle(); } - //up move - if(Input.GetKey(KeyCode.Z)) - { - - transform.RotateAround(Deta,axisZ,0.6f); - DMatrix.RotationMatrix(axisZ,axisY, axisX,0.6f); - if(UIData.switchmode)ToParticle(); - + //Right rotation + if(Input.GetKey(KeyCode.Z)) { + //LocCamera.transform.RotateAround(Deta,axisZ,0.6f); + //DMatrix.RotationMatrix(axisZ,axisY, axisX,0.6f); + if(UIData.switchmode) + ToParticle(); } - //left rotation - if(Input.GetKey(KeyCode.X)) - { - - transform.RotateAround(Deta,axisZ,-0.6f); - DMatrix.RotationMatrix(axisZ, axisY,axisX,-0.6f); - if(UIData.switchmode)ToParticle(); - + //Left rotation + if(Input.GetKey(KeyCode.X)) { + //LocCamera.transform.RotateAround(Deta,axisZ,-0.6f); + //DMatrix.RotationMatrix(axisZ, axisY,axisX,-0.6f); + if(UIData.switchmode) + ToParticle(); } - +*/ if(Input.GetKeyUp(KeyCode.D)) - { - - if(UIData.switchmode)ToNotParticle(); - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.W)) - { - - if(UIData.switchmode)ToNotParticle(); - - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.S)) - { - if(UIData.switchmode)ToNotParticle(); - - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.A)) - { - if(UIData.switchmode)ToNotParticle(); - - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.N)) - { - if(UIData.switchmode)ToNotParticle(); + if(UIData.switchmode) + ToNotParticle(); - } if(Input.GetKeyUp(KeyCode.B)) - { - if(UIData.switchmode)ToNotParticle(); - - } - + if(UIData.switchmode) + ToNotParticle(); +/* if(Input.GetKeyUp(KeyCode.Q)) - { - if(UIData.switchmode)ToNotParticle(); - - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.E)) - { - if(UIData.switchmode)ToNotParticle(); - - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.Z)) - { - - if(UIData.switchmode)ToNotParticle(); - - - } + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.X)) - { - - if(UIData.switchmode)ToNotParticle(); - - - } - + if(UIData.switchmode) + ToNotParticle(); +*/ if(Input.GetKeyUp(KeyCode.RightArrow)) - { - if(UIData.switchmode)ToNotParticle(); - - } - + if(UIData.switchmode) + ToNotParticle(); if(Input.GetKeyUp(KeyCode.LeftArrow)) - { - if(UIData.switchmode)ToNotParticle(); + if(UIData.switchmode) + ToNotParticle(); - } - - if(Input.GetKey("joystick button 3")) - { + if(Input.GetKey("joystick button 3")) { UIData.resetDisplay=true; UIData.isCubeToSphere=false; UIData.isSphereToCube=true; UIData.atomtype=UIData.AtomType.cube; - - } - if(Input.GetKey("joystick button 2")) - { + if(Input.GetKey("joystick button 2")) { UIData.resetDisplay=true; UIData.isSphereToCube=false; UIData.isCubeToSphere=true; UIData.atomtype=UIData.AtomType.sphere; - } - if(Input.GetKey("joystick button 0")) - { + if(Input.GetKey("joystick button 0")) { UIData.resetDisplay=true; UIData.isCubeToSphere=false; UIData.isSphereToCube=true; UIData.atomtype=UIData.AtomType.hyperball; - - } - if(Input.GetKey("joystick button 1")) - { + if(Input.GetKey("joystick button 1")) { UIData.resetDisplay=true; UIData.isSphereToCube=true; UIData.isCubeToSphere=false; @@ -1146,137 +912,146 @@ private void KeyOperate() UIData.bondtype=UIData.BondType.nobond; } + // Takes a screenshot of the scene + if(Input.GetKeyDown(KeyCode.P)) { + ScreenShot comp = LocCamera.GetComponent (); + comp.open = true; + } + Vector3 vv=new Vector3(); vv=LocCamera.transform.localPosition; if(!GUIMoleculeController.toggle_NA_MAXCAM) - { vv.z+=Input.GetAxis("Mouse ScrollWheel")*5; -// if(UIData.switchmode)ToParticle(); - - } - LocCamera.transform.localPosition=vv; + LocCamera.transform.localPosition=vv; } -// function who set the center of the scene R for Reste and T on an atom - private void SetCenterbySpace() - { - if(Input.GetKeyUp(KeyCode.R)) - { + /// + /// Sets the center of the scene on : + /// The original center ('R' key) + /// The targeted atom ('T' key) + /// + /// + /* replaced by R and C in maxCamera. + private void SetCenterbySpace() { + if(Input.GetKeyUp(KeyCode.R)) { Debug.Log("Press the R key"); SetCenter(0); - } - if(Input.GetKeyUp(KeyCode.T)) - { + replace by touch C in maxCamera + if(Input.GetKeyUp(KeyCode.T)) { Debug.Log("Press the T key"); SetCenter(1); - } - } + }*/ // controlled when maxcam is desactivate with the mouse ============================================================================================= - private void MouseOperate() - { - Vector3 v=new Vector3(); - v=LocCamera.transform.localPosition; - + /// + /// Camera controls with mouse inputs. + /// + private void MouseOperate() { + Vector3 v=new Vector3(); + v=LocCamera.transform.localPosition; + + if(!GUIMoleculeController.toggle_NA_MAXCAM) { +// if (Input.GetMouseButton(1) ) +// v=LocCamera.transform.localPosition; + + if (Input.GetMouseButton(0)) { + if(UIData.switchmode)ToParticle(); + rotationXX += Input.GetAxis("Mouse X") * sensitivityX; + rotationYY += Input.GetAxis("Mouse Y") * sensitivityY; + print("Mouse X"+Input.GetAxis("Mouse X")); + print("Mouse Y"+Input.GetAxis("Mouse Y")); + print("rotationXX"+rotationXX); + print("rotationYY"+rotationYY); - if(!GUIMoleculeController.toggle_NA_MAXCAM) - { -// if (Input.GetMouseButton(1) ) -// { -// v=LocCamera.transform.localPosition; -// } - - if (Input.GetMouseButton(0)) - { - if(UIData.switchmode)ToParticle(); - rotationXX += Input.GetAxis("Mouse X") * sensitivityX; - rotationYY += Input.GetAxis("Mouse Y") * sensitivityY; - print("Mouse X"+Input.GetAxis("Mouse X")); - print("Mouse Y"+Input.GetAxis("Mouse Y")); - print("rotationXX"+rotationXX); - print("rotationYY"+rotationYY); + Quaternion xQuaternion = Quaternion.AngleAxis (rotationXX, Vector3.up); + Quaternion yQuaternion = Quaternion.AngleAxis (rotationYY, Vector3.left); + transform.localRotation = xQuaternion * yQuaternion; +// transform.localRotation = originalRotation * xQuaternion * yQuaternion; + if(UIData.switchmode)ToNotParticle(); + } - Quaternion xQuaternion = Quaternion.AngleAxis (rotationXX, Vector3.up); - Quaternion yQuaternion = Quaternion.AngleAxis (rotationYY, Vector3.left); - transform.localRotation = xQuaternion * yQuaternion; -// transform.localRotation = originalRotation * xQuaternion * yQuaternion; - if(UIData.switchmode)ToNotParticle(); - } -// if(Input.GetMouseButtonUp(0)) -// { -// if(UIData.switchmode)ToNotParticle(); -// } - if(Input.GetMouseButtonUp(1)) - { -// v=LocCamera.transform.localPosition; - if(UIData.switchmode)ToNotParticle(); - } - v.z+=Input.GetAxis("Mouse ScrollWheel")*5; - LocCamera.transform.localPosition=v; - Debug.Log ("get mouse: " +v.z); - - - } -// if(UIData.switchmode)ToParticle(); - - - + if(Input.GetMouseButtonUp(1)) + if(UIData.switchmode)ToNotParticle(); + + v.z+=Input.GetAxis("Mouse ScrollWheel")*5; + LocCamera.transform.localPosition=v; + Debug.Log ("get mouse: " +v.z); + } } - - -// affect the cam target to modifiate his position - private void SetCenter( int mode) - { + + /// + /// Sets the center of the scene on the original center or on an atom. + /// + /// + /// Setting mode (0 for original center, 1 for atom center). Int. + /// + private void SetCenter( int mode) { GameObject CamTarget = GameObject.Find("Cam Target"); - // CamTarget.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); - - - // chose the main function 0 to restart position or 1 to center around an atom - if (mode == 0){ + // choose the main function 0 to restart position or 1 to center around an atom + if (mode == 0) { Debug.Log("Entering :: SetCenter for cam target to" + MoleculeModel.cameraLocation.z); - //Camera.main.transform.localPosition = new Vector3(0f,0f,Camera.main.transform.localPosition.z); - // CamTarget.transform.localPosition = new Vector3(0f,0f,0f); - // change the postition of the LoadBox - // GameObject scenecontroller= GameObject.Find("LoadBox"); - if(scenecontroller.GetComponent().enabled) - { - // scenecontroller.transform.rotation = new Quaternion(0f, 0f, 0f, 0f); - // scenecontroller.transform.localPosition = new Vector3(0f,0f,-25f); + if(scenecontroller.GetComponent().enabled) { maxCamera comp = scenecontroller.GetComponent(); comp.ToCenter(); - } - }else if (mode ==1){ + if(UIData.atomtype == UIData.AtomType.hyperball){ + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + hbManager.ResetPositions(); + } + } else if (mode ==1) { Debug.Log("target : " +MoleculeModel.target); CamTarget.transform.rotation = transform.rotation; CamTarget.transform.position = MoleculeModel.target; } - } - -// change the representation of the protein in hyperball. almost for the switch mod + /// + /// Sets the volumetric density. + /// + public void SetVolumetricDensity () { + if( (GUIMoleculeController.showVolumetricDensity || GUIMoleculeController.showVolumetricFields) && !UIData.hasMoleculeDisplay) { + GameObject volumObj; + volumObj = GameObject.FindGameObjectWithTag("Volumetric"); + Volumetric volumetric; + volumetric = volumObj.GetComponent(); + if (volumetric) + volumetric.Clear(); + volumetric = volumObj.GetComponent(); + if (volumetric) + volumetric.Clear(); + GUIMoleculeController.showVolumetricDensity = false; + GUIMoleculeController.showVolumetricFields = false; + } + } + + + /// + /// Switch the protein representation to Hyperball. Used in switch mode (LOD). + /// public void ToNotParticle() { - if(UIData.atomtype != UIData.AtomType.particleball && UIData.atomtype != previous_AtomType) + if(UIData.atomtype != UIData.AtomType.particleball && UIData.atomtype != previous_AtomType) { previous_AtomType = UIData.atomtype; - DisplayMolecule.ToNotParticle(previous_AtomType); - // Debug.Log("ToNotParticle()"); - + previous_BondType = UIData.bondtype; + } + DisplayMolecule.ToNotParticle(previous_AtomType, previous_BondType); } - // change the representation of the protein in particle - // also call in switch mod + /// + /// Switch the protein representation to Particle. Used in switch mode (LOD). + /// public void ToParticle() { - if(UIData.atomtype != UIData.AtomType.particleball) + if(UIData.atomtype != UIData.AtomType.particleball) { previous_AtomType = UIData.atomtype; + previous_BondType = UIData.bondtype; + } DisplayMolecule.ToParticle(); // Debug.Log("ToParticle()"); } - } diff --git a/Assets/Scripts/MouseCameraControl.cs b/Assets/Scripts/MouseCameraControl.cs index 164babac..37539522 100644 --- a/Assets/Scripts/MouseCameraControl.cs +++ b/Assets/Scripts/MouseCameraControl.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: MouseCameraControl.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: MouseCameraControl.cs 385 2014-03-31 14:37:56Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -69,6 +69,7 @@ public class MouseCameraControl : MonoBehaviour { // Mouse buttons in the same order as Unity + public enum MouseButton { Left = 0, Right = 1, Middle = 2, None = 3 } [System.Serializable] diff --git a/Assets/Scripts/OBJ/src/OBJ.cs b/Assets/Scripts/OBJ/src/OBJ.cs index 23453d7a..2dafa7f8 100644 --- a/Assets/Scripts/OBJ/src/OBJ.cs +++ b/Assets/Scripts/OBJ/src/OBJ.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: OBJ.cs 227 2013-04-07 15:21:09Z baaden $ +/// $Id: OBJ.cs 317 2013-06-24 13:32:30Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -366,6 +366,7 @@ private Color gc(string[] p) { private void Build() { Dictionary materials = new Dictionary(); + Material m; if(hasMaterials && mtl_reader != null) { Debug.Log("Obj import :: MATERIAL read"); @@ -374,7 +375,9 @@ private void Build() { } } else { Debug.Log("Obj import :: NO MATERIAL read"); - materials.Add("default", new Material(Shader.Find("VertexLit"))); + m = new Material(Shader.Find("Mat Cap Cut")); + materials.Add("default", m); + m.SetTexture("_MatCap", (Texture)Resources.Load("lit_spheres/divers/daphz1")); } GameObject[] ms = new GameObject[buffer.numObjects]; diff --git a/Assets/Scripts/ParseData/ParsePDB/ReadDX.cs b/Assets/Scripts/ParseData/ParsePDB/ReadDX.cs index bf3c8c22..42660a1e 100644 --- a/Assets/Scripts/ParseData/ParsePDB/ReadDX.cs +++ b/Assets/Scripts/ParseData/ParsePDB/ReadDX.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ReadDX.cs 247 2013-04-07 20:38:19Z baaden $ +/// $Id: ReadDX.cs 480 2014-05-02 14:51:10Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -75,8 +75,7 @@ using System.Text; using System.Text.RegularExpressions; using UI; -public class ReadDX : MonoBehaviour -{ +public class ReadDX : MonoBehaviour { // // public int NX; // public int NY; @@ -98,36 +97,30 @@ public class ReadDX : MonoBehaviour public int Z; private bool loaded = false; - public bool Loaded - { + public bool Loaded { get{ return loaded; } } // - public Vector3 GetDelta() - { + public Vector3 GetDelta() { Debug.Log (_delta); return _delta; - } + } - public Vector3 GetOrigin() - { + public Vector3 GetOrigin() { Debug.Log(" ori: "+ _origin); return _origin; - } + } - public float getVal(int x, int y, int z) - { + public float getVal(int x, int y, int z) { return _grid[x,y,z]; - } + } - public Vector3 getGradient(int x, int y, int z) - { - return gradient[x,y,z]; - } + public Vector3 getGradient(int x, int y, int z) { + return gradient[x,y,z]; + } // - public void ReadFile(string file_name) - { + public void ReadFile(string file_name) { ReadFile(file_name, Vector3.zero); } @@ -168,8 +161,7 @@ public void ReadFile(string file_name, Vector3 offset){ } - public void ReadFile(TextReader sr, Vector3 offset) - { + public void ReadFile(TextReader sr, Vector3 offset) { DateTime temps = DateTime.Now; string line = "#"; // decalage jusqu'a la taille de la grille while (line[0] == '#')line = sr.ReadLine(); // lecture de la taille de la grille @@ -284,10 +276,7 @@ public void ReadFile(TextReader sr, Vector3 offset) val = float.Parse(vals[0]); _grid[i,j,k]=val; l=1; - } - - } } } @@ -357,22 +346,19 @@ public void calGradient(){ } - private void RightHandedToLeftHanded(Mesh m) - { + private void RightHandedToLeftHanded(Mesh m) { Vector3[] vertices = m.vertices; for(int i=0; i < vertices.Length; i++) - { vertices[i].x = -vertices[i].x; - } - int[] triangles = m.triangles; - for(int tri=0; tri < triangles.Length; tri=tri+3) - { + + for(int tri=0; tri < triangles.Length; tri=tri+3) { int tmp = triangles[tri]; triangles[tri] = triangles[tri+2]; triangles[tri+2] = tmp; } + Color[] colors = m.colors; m.Clear(); m.vertices = vertices; @@ -381,7 +367,7 @@ private void RightHandedToLeftHanded(Mesh m) m.RecalculateNormals(); } - public void isoSurface(float seuil, Color color, string tag="SurfaceManager"){ + public void isoSurface(float threshold, Color color, string tag="SurfaceManager", bool transparency=false){ Vector4[] points; @@ -432,22 +418,40 @@ public void isoSurface(float seuil, Color color, string tag="SurfaceManager"){ } } } - + + + + Debug.Log("Entering :: before marching cubes instance"); - MarchingCubesRec MCInstance; - MCInstance = new MarchingCubesRec(); + //MarchingCubesRec MCInstance; + //MCInstance = new MarchingCubesRec(); // PDBtoDEN.DestroySurface(); - if (seuil >= 0){ - MCInstance.MCRecMain(X, Y, Z, seuil, points, 0f,false, _delta, _origin,colors,tag); + + /* + + if (threshold >= 0){ + MCInstance.MCRecMain(X, Y, Z, threshold, points, 0f,false, _delta, _origin,colors,tag); }else { - MCInstance.MCRecMain(X, Y, Z, seuil, points, 0f,true , _delta, _origin,colors,tag); + MCInstance.MCRecMain(X, Y, Z, threshold, points, 0f,true , _delta, _origin,colors,tag); // GameObject iso_neg = GameObject.FindGameObjectWithTag("Elect_iso_negative"); // Mesh mesh_neg = iso_neg.GetComponent().mesh; // //Unity has a left-handed coordinates system while Molecular obj are right-handed // //So we have to negate the x axis and change the winding order // RightHandedToLeftHanded(mesh_neg); } + + + */ + + + // Works for a single mesh + //GenerateMesh.RegularGM(_grid, threshold, _delta, _origin, colors, tag); + + + GenerateMesh.CreateSurfaceObjects(_grid, threshold, _delta, _origin, colors, tag, true); + + points = null; GC.GetTotalMemory(true); GC.Collect(); @@ -461,8 +465,18 @@ public void isoSurface(float seuil, Color color, string tag="SurfaceManager"){ // //Unity has a left-handed coordinates system while Molecular obj are right-handed // //So we have to negate the x axis and change the winding order RightHandedToLeftHanded(mesh_pos); - iso.renderer.material.shader = Shader.Find("Mat Cap Cut"); - iso.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("lit_spheres/divers/daphz1")); + if(transparency) { + // TransparentZ is a custom shader that uses transparent objects, but with per-triangle transparency sorting, + // versus Unity's default per-object transparency sorting. This is necessary because of our intersecting, + // non-convex transparent objects. + iso.renderer.material.shader = Shader.Find("Transparent/Zsorted"); + color.a = 0.5f; + } + else { + iso.renderer.material.shader = Shader.Find("Diffuse"); + //iso.renderer.material.shader = Shader.Find("Mat Cap Cut"); + //iso.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("lit_spheres/divers/daphz1")); + } iso.renderer.material.SetColor("_Color", color); } // MCInstance.MCRecMain(NX, NY, NZ, 0.5f, points, 0f); diff --git a/Assets/Scripts/ParseData/ParsePDB/ReadJson.cs b/Assets/Scripts/ParseData/ParsePDB/ReadJson.cs index 6709f315..b3ce8f28 100644 --- a/Assets/Scripts/ParseData/ParsePDB/ReadJson.cs +++ b/Assets/Scripts/ParseData/ParsePDB/ReadJson.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ReadJson.cs 223 2013-04-06 22:32:11Z baaden $ +/// $Id: ReadJson.cs 266 2013-05-06 10:41:42Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -67,25 +67,23 @@ namespace ParseData.ParsePDB { using UnityEngine; using System.Collections; +using System.Collections.Generic; using System.IO; public class ReadJson { - private ArrayList m_fieldlines; + private List> m_fieldlines; - public ArrayList GetFieldLines() + public List> GetFieldLines() { return m_fieldlines; } - public ArrayList ReadFile(string fieldlines_file_content, Vector3 Offset) + public List> ReadFile(string fieldlines_file_content, Vector3 Offset) { - - - - ArrayList linelist=new ArrayList(); + List> linelist=new List>(); StringReader sr = new StringReader(fieldlines_file_content); string line = null; line = sr.ReadLine(); @@ -94,14 +92,14 @@ public ArrayList ReadFile(string fieldlines_file_content, Vector3 Offset) if(tok[0] == "n") { // We have an .apf file (animated potential fieldlines) - ArrayList particlelist = new ArrayList(); + List particlelist = new List(); while(line != null) { tok = line.Split(' '); if(tok[0] == "n" && particlelist.Count > 0) { linelist.Add(particlelist); - particlelist = new ArrayList(); + particlelist = new List(); } if(tok[0] == "v") { @@ -134,7 +132,7 @@ public ArrayList ReadFile(string fieldlines_file_content, Vector3 Offset) for (int i=0; i particlelist=new List(); for(int j=0;j<((ArrayList)FieldLinesarray[i]).Count;j+=3) { // Debug.Log("FieldLine: " +((ArrayList)FieldLinesarray[i])[j]+", "+((ArrayList)FieldLinesarray[i])[j+1]+", "+((ArrayList)FieldLinesarray[i])[j+2]); diff --git a/Assets/Scripts/ParseData/ParsePDB/RequestPDB.cs b/Assets/Scripts/ParseData/ParsePDB/RequestPDB.cs index 4510637c..bccdc976 100755 --- a/Assets/Scripts/ParseData/ParsePDB/RequestPDB.cs +++ b/Assets/Scripts/ParseData/ParsePDB/RequestPDB.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: RequestPDB.cs 228 2013-04-07 16:20:01Z baaden $ +/// $Id: RequestPDB.cs 672 2014-10-02 08:13:56Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -68,6 +68,7 @@ namespace ParseData.ParsePDB { using UnityEngine; using System.Collections; + using System.Collections.Generic; using System.IO; using ParseData.IParsePDB; using System.Net; @@ -80,12 +81,11 @@ namespace ParseData.ParsePDB using System.Text.RegularExpressions; using UI; - public class RequestPDB - { + public class RequestPDB { // private string url="http://www.pdb.org/pdb/downLoad/downLoadFile.do?fileFormat=pdb&compression=NO&structureId=3KX3"; // private string data=""; public float progress=0.0f; - public bool isDone=false; + public static bool isDone=false; public bool Loading = true; //public GUISkin mySkin; @@ -97,52 +97,25 @@ public class RequestPDB bool wantdx=false; bool wantjson =false; - void Start() - { + void Start() { //mySkin?Resources.Load("MyGUISkin") as GUISkin; } - public RequestPDB() - { - } + public RequestPDB() {} - void Update() - { - - if (isDone) - { - Loading = false; - } - else - { - Loading = true; - } - - //progress=; + void Update() { + Loading = !isDone; } - - void OnGUI() - { - //start - //if (Loading) - //{ - - // GUI.Label(new Rect(100, 15, 200, 30), "", "bj"); - // GUI.Label(new Rect(100,15, progress * 200, 30), "", "qj"); - //} - } //Move this method to the related class - public IEnumerator LoadJsonWWW(string file_name, Vector3 Offset) - { + public IEnumerator LoadJsonWWW(string file_name, Vector3 Offset) { WWW www = new WWW(file_name); progress = 0; isDone = false; - while(!www.isDone) - { + while(!www.isDone) { // Debug.Log("*** PDB: "+www.progress); progress = www.progress; yield return new WaitForEndOfFrame(); @@ -153,14 +126,12 @@ public IEnumerator LoadJsonWWW(string file_name, Vector3 Offset) isDone = true; } - public void LoadJsonRequest(string file_name, Vector3 Offset) - { + public void LoadJsonRequest(string file_name, Vector3 Offset) { WWW www = new WWW(file_name); progress = 0; isDone = false; - while(!www.isDone) - { + while(!www.isDone) { // Debug.Log("*** PDB: "+www.progress); progress = www.progress; } @@ -171,8 +142,7 @@ public void LoadJsonRequest(string file_name, Vector3 Offset) } //Move this method to the related class - public void LoadDxRequest(string file_name, Vector3 Offset) - { // function Loading DX file + public void LoadDxRequest(string file_name, Vector3 Offset) { // function Loading DX file // ReadDX readdx = new ReadDX(); // Debug.Log("time avant: "+ DateTime.Now); @@ -197,14 +167,12 @@ public void LoadDxRequest(string file_name, Vector3 Offset) } //TODO put molecule offset here - public IEnumerator LoadOBJWWW(string file_name) - { + public IEnumerator LoadOBJWWW(string file_name) { WWW www = new WWW(file_name); progress = 0; isDone = false; - while(!www.isDone) - { + while(!www.isDone) { // Debug.Log("*** PDB: "+www.progress); progress = www.progress; yield return new WaitForEndOfFrame(); @@ -254,16 +222,12 @@ public void LoadOBJRequest(string file_base_name){ } } - public void LoadXMLRequest(string file_name) - { - + public void LoadXMLRequest(string file_name) { XmlReader reader=new XmlTextReader(file_name); // int i=0; - while(reader.Read()) - { - if(reader.ReadToFollowing("PDBx:atom_site")) - { + while(reader.Read()) { + if(reader.ReadToFollowing("PDBx:atom_site")) { Vector3 v=new Vector3(); reader.ReadToDescendant("PDBx:Cartn_x"); @@ -277,39 +241,34 @@ public void LoadXMLRequest(string file_name) // print(i/150); // location1[i%150,i/150]=v; // i++; - } } - } - public IEnumerator LoadPDBWWW(string file_name) - { + public IEnumerator LoadPDBWWW(string file_name) { WWW www = new WWW(file_name); progress = 0; isDone = false; - while(!www.isDone) - { + while(!www.isDone) { // Debug.Log("*** PDB: "+www.progress); progress = www.progress; yield return new WaitForEndOfFrame(); } Debug.Log("read"); - ReadPDB(new StringReader(www.text)); + //ReadPDB(new StringReader(www.text)); + ControlMolecule.CreateMolecule(new StringReader(www.text)); isDone = true; } - public void LoadPDBResource(string resource_name) - { + public void LoadPDBResource(string resource_name) { TextAsset text_data = Resources.Load(resource_name) as TextAsset; StringReader sr = new StringReader(text_data.text); - - ReadPDB(sr); + //ReadPDB(sr); + ControlMolecule.CreateMolecule(sr); } - public void FetchPDB(string url,string id, string proxyserver = "", int proxyport = 0) - { + public void FetchPDB(string url,string id, string proxyserver = "", int proxyport = 0) { StreamReader sr ; Stream dataStream=null; HttpWebResponse response=null; @@ -333,313 +292,404 @@ public void FetchPDB(string url,string id, string proxyserver = "", int proxypor dataStream = response.GetResponseStream (); // Open the stream using a StreamReader for easy access. sr = new StreamReader (dataStream); + + ControlMolecule.CreateMolecule(sr); + //ReadPDB(sr); - ReadPDB(sr); - - if(dataStream!=null&& response!=null) - { + if(dataStream!=null&& response!=null) { dataStream.Close (); response.Close (); } } - public void LoadPDBRequest(string file_base_name, bool withData = true) - { + public void LoadPDBRequest(string file_base_name, bool withData = true) { StreamReader sr ; // FileInfo file=new FileInfo(file_base_name+".pdb"); sr=new StreamReader(file_base_name+".pdb"); - ReadPDB(sr); + //ReadPDB(sr); + ControlMolecule.CreateMolecule(sr); - if(withData) - { + if(withData) { FileInfo fieldlinefile=new FileInfo(file_base_name+".json"); FileInfo apffile=new FileInfo(file_base_name+".apf"); - if(fieldlinefile.Exists) - // if(wantjson) - { + if(fieldlinefile.Exists) { LoadJsonRequest("file://"+file_base_name+".json",MoleculeModel.Offset); - MoleculeModel.FieldLineFileExist=true; - } - else if(apffile.Exists) - { + MoleculeModel.fieldLineFileExists=true; + } else if(apffile.Exists) { LoadJsonRequest("file://"+file_base_name+".apf",MoleculeModel.Offset); - MoleculeModel.FieldLineFileExist=true; - } - else - { - MoleculeModel.FieldLineFileExist=false; + MoleculeModel.fieldLineFileExists=true; + } else { + MoleculeModel.fieldLineFileExists=false; MoleculeModel.FieldLineList=null; } FileInfo Surfacefile=new FileInfo(file_base_name+".obj"); FileInfo Surfacefile0=new FileInfo(file_base_name+"0.obj"); - if(Surfacefile.Exists || Surfacefile0.Exists) - // if(wantobj) - { + if(Surfacefile.Exists || Surfacefile0.Exists) { LoadOBJRequest(file_base_name); - MoleculeModel.SurfaceFileExist=true; + MoleculeModel.surfaceFileExists=true; GUIMoleculeController.modif=true; - } - else - { - MoleculeModel.SurfaceFileExist=false; + } else { + MoleculeModel.surfaceFileExists=false; } FileInfo dxfile=new FileInfo(file_base_name+".dx"); - if(dxfile.Exists) - // if(wantdx) - { + MoleculeModel.dxFileExists = false ; // otherwise a molecule might load dx data from a previous molecule + if(dxfile.Exists) { + MoleculeModel.dxFileExists = true ; LoadDxRequest(file_base_name+".dx",MoleculeModel.Offset); - } } - - } // Regex RE = new Regex("\n", RegexOptions.Multiline); // MatchCollection theMatches = RE.Matches(text); - // int matchescount=theMatches.Count; - private void ReadPDB(TextReader sr) - { - ArrayList alist=new ArrayList(); -// ArrayList CSidList=new ArrayList(); - ArrayList typelist=new ArrayList(); -// ArrayList edgelist=new ArrayList(); - ArrayList resnamelist=new ArrayList(); - ArrayList atomsNameList = new ArrayList(); - - - ArrayList BFactorLsit=new ArrayList(); - - -// ArrayList linelist=new ArrayList(); - -// ArrayList CSSGDList=new ArrayList(); -// ArrayList CSRadiusList=new ArrayList(); -// ArrayList CSColorList=new ArrayList(); -// ArrayList CSLabelList=new ArrayList(); - - ArrayList calist=new ArrayList(); - ArrayList caChainlist=new ArrayList(); - - string[] dnaBackboneAtoms = new string[] {"C5'"}; + // int matchescount=theMatches.Count; + + public static void ReadPDB(TextReader sr, List alist, + List calist, + List BFactorList, + List resnamelist, + List atomsNameList, + List caChainlist, + List typelist, + List chainList, + List colorList, + List sshelixlist, + List sssheetlist){ + string[] dnaBackboneAtoms = new string[] {"C5'"}; + List residueIds = new List(); + List splits = new List(); + List atomsNumberList = new List(); + + int resNb = 0; + int prevRes = int.MinValue; + int currentRes = int.MinValue+1; int nowline=0; + int nbAtoms = 0; + int nbTers = 0; string s; - - while((s=sr.ReadLine())!=null) - { + + int prevresnb = 0; + + while((s=sr.ReadLine())!=null) { if(s.StartsWith("ENDMDL")) break; - if(s.Length>4) - { + if(s.Length>4) { bool isAtomLine = s.StartsWith("ATOM"); + bool isHetAtm = s.StartsWith("HETATM"); + bool isHelixLine = s.StartsWith ("HELIX"); + bool isSheetLine = s.StartsWith("SHEET"); + bool isConnectLine = s.StartsWith("CONECT"); + if(s.StartsWith("TER")) { + splits.Add(resNb); + nbTers++; + } + + if(isHelixLine){ + string chainh = s.Substring (19,2).Trim (); + string initr = s.Substring(22,4); + string termr = s.Substring (34,4); + string classH = s.Substring(39,2); + + string len = s.Substring(72,5); + float[] vect = new float[4]; + float initres = float.Parse (initr); + float termres = float.Parse (termr); + float length = float.Parse (len); + float classhelix = 1f; + try{ + classhelix = float.Parse (classH); + }catch{ + classhelix = float.Parse (s.Substring(38,2)); + } + vect[0] = initres; + vect[1] = termres; + vect[2] = length; + vect[3] = classhelix; + sshelixlist.Add (vect); + MoleculeModel.helixChainList.Add (chainh); + } + + if(isSheetLine){ + string chainS = s.Substring (21, 2).Trim (); + string initr = s.Substring (23, 4); + string termr = s.Substring (34, 4); + float[] vect = new float[2]; + vect[0] = float.Parse (initr); + vect[1] = float.Parse (termr); + sssheetlist.Add (vect); + MoleculeModel.strandChainList.Add (chainS); + } + if(UIData.readHetAtom) isAtomLine = isAtomLine || s.StartsWith("HETATM"); - if(isAtomLine) - { - // Debug.Log(s); - //print("true"); + + if(!UIData.readWater){ + try{ + if ((string) s.Substring(17,3).Trim() == "HOH") + isAtomLine = false; + }catch{ + isAtomLine = false; + } + } + + if(isAtomLine) { float[] vect=new float[3]; + MoleculeModel.atomHetTypeList.Add(s.Split(' ')[0]); string sx=s.Substring(30,8); string sy=s.Substring(38,8); string sz=s.Substring(46,8); - string sbfactor=s.Substring(60,6); + string sbfactor = null; + bool parseBFactor = false; + if (s.Length > 60) { + sbfactor = s.Substring(60,6); + parseBFactor = true; + } + string atomsNumber = s.Substring(6,5); string typestring=s.Substring(12,4).Trim(); atomsNameList.Add(typestring); int bout; bool b = int.TryParse(typestring[0].ToString(), out bout); string type; if(b) - { type=typestring[1].ToString(); - } else - { type=typestring[0].ToString(); - - } - string resname=s.Substring(17,3); + + string resname=s.Substring(17,3).Trim(); + int resid = int.Parse(s.Substring(22,4)); + residueIds.Add(resid); + currentRes = resid; + atomsNumberList.Add (int.Parse(atomsNumber)); + //Unity has a left-handed coordinates system while PDBs are right-handed - //So we have to inverse the X coordinates + //So we have to reverse the X coordinates float x=-float.Parse(sx); float y=float.Parse(sy); float z=float.Parse(sz); - float bfactor= float.Parse(sbfactor); + float bfactor = 0.0f; + if (parseBFactor == true) + { + bfactor= float.Parse(sbfactor); + } vect[0]=x; vect[1]=y; vect[2]=z; - //Debug.Log(type + " " + x+" "+y+" "+z); - // Debug.Log("vect0="+vect[0]+"vect1="+vect[1]+"vect2="+vect[2]); - if(typestring[0].ToString()=="C"&&typestring.Length>1) - { - if(typestring[1].ToString()=="A") - { - string chaintype="chain"+s.Substring(21,1); + + //CA case + if(typestring[0].ToString()=="C" && typestring.Length>1) { + if(typestring[1].ToString()=="A") { + string chaintype = s.Substring(21,1); calist.Add(vect); caChainlist.Add(chaintype); - // Debug.Log("chaintype:"+chaintype); } } - if(dnaBackboneAtoms.Contains(typestring)) - { - string chaintype="chain"+s.Substring(21,1); + + + //?? + if(dnaBackboneAtoms.Contains(typestring)) { + string chaintype = s.Substring(21,1); calist.Add(vect); caChainlist.Add(chaintype); } + + if(s.Substring(21,1) != " "){ + string chain = s.Substring(21,1); + chainList.Add(chain); - BFactorLsit.Add(bfactor); + } + + if (parseBFactor == true) + { + BFactorList.Add(bfactor); + } alist.Add(vect); - AtomModel aModel = AtomModel.GetModel(type); + AtomModel aModel; + if (UIData.ffType == UIData.FFType.atomic) + { + aModel = AtomModel.GetModel(type); + } + else + { + aModel = AtomModel.GetModel (typestring); + } + if(aModel == null) aModel = AtomModel.GetModel("X"); typelist.Add(aModel); + if (MoleculeModel.sugarResname.Contains(resname)) + MoleculeModel.atomsSugarTypelist.Add(aModel); + + + if (UIData.ffType == UIData.FFType.atomic) + { + colorList.Add(MoleculeModel.GetAtomColor(type)); + } + else + { + colorList.Add(aModel.baseColor); + } + resnamelist.Add(resname); + if(MoleculeModel.residues.ContainsKey(resid) == false){ + MoleculeModel.residues.Add(resid, new ArrayList()); + //add the chain name for each residu + MoleculeModel.resChainList.Add (s.Substring(21,1)); + //If we have a sugar, we add theses informations in some special list + if (MoleculeModel.sugarResname.Contains(resname)) + MoleculeModel.resSugarChainList.Add (s.Substring(21,1)); + } + + int curresnb = int.Parse (s.Substring(22,4)); + if(prevresnb == 0 && curresnb != 0) + MoleculeModel.firstresnb = curresnb; + if(curresnb != prevresnb){ + MoleculeModel.resChainList2.Add (s.Substring (21,1)); + prevresnb = curresnb; + } + + MoleculeModel.residues[resid].Add(nbAtoms); + + if(prevRes != currentRes) + resNb++; + + prevRes = currentRes; + + nbAtoms ++; + + //If we have a sugar, we add theses informations in some special list + if (MoleculeModel.sugarResname.Contains(resname)){ + MoleculeModel.atomsSugarLocationlist.Add (vect); + MoleculeModel.atomsSugarResnamelist.Add (resname); + MoleculeModel.atomsSugarNamelist.Add(typestring); + + + } + + } + + if (isConnectLine){ + if (UIData.connectivity_PDB){ + string[] splitedStringTemp = s.Split(' '); //0 is Connect, 1 is the atom, 2,3..... is the bounded atoms + List splitedString = new List(); + for (int j=0; j 1); - // for(int i=0;i sortResIndex(List resChainList){ + Debug.Log ("sortResIndex :: entering"); + List nbChainStr = new List (); + List resInOrderByChain = new List(); + Dictionary IDofString = new Dictionary (); + //We count the number of different chain + int stringID = 0; + + for (int i=0; i 2) - { -// var go = new GameObject("Your Script Container"); -// var geninterpolationarray = go.AddComponent("GenInterpolationArray"); - GenInterpolationArray geninterpolationarray = new GenInterpolationArray(); - geninterpolationarray.InputKeyNodes=calist; - geninterpolationarray.InputTypeArray=caChainlist; - geninterpolationarray.CalculateSplineArray(); - calist=null; - caChainlist=null; - calist=geninterpolationarray.OutputKeyNodes; - caChainlist=geninterpolationarray.OutputTypeArray; + List[] preSortedList = new List[nbChain]; + //We initialize the preSortedList + for (int i=0; i(); } - MoleculeModel.CaSplineList=calist; - MoleculeModel.CaSplineTypeList = new ArrayList(); - for(int k=0; k alist = new List(); + List CSRadiusList = new List(); + + List typelist = new List(); +// List chainlist = new List(); + List edgelist = new List(); + List resnamelist = new List(); + List CSSGDList = new List(); + List CSColorList=new List(); + List CSLabelList=new List(); - ArrayList CSidList=new ArrayList(); - ArrayList CSSGDList=new ArrayList(); - ArrayList CSRadiusList=new ArrayList(); - ArrayList CSColorList=new ArrayList(); - ArrayList CSLabelList=new ArrayList(); + List CSidList = new List(); XmlReader reader=new XmlTextReader(new StringReader(xml_content)); @@ -823,7 +875,6 @@ public void ReadXGMML(String xml_content) } reader3.Close(); - MoleculeModel.atomsLocationlist=alist; MoleculeModel.atomsTypelist=typelist; MoleculeModel.atomsResnamelist=resnamelist; @@ -883,6 +934,7 @@ public void ReadXGMML(String xml_content) MoleculeModel.atomsnumber = alist.Count; MoleculeModel.bondsnumber = MoleculeModel.bondEPList.Count; + MoleculeModel.networkLoaded = true ; // there should be a network loaded, if all went well // return alist; } diff --git a/Assets/Scripts/ParseData/ParsePDB/SocketPDB.cs b/Assets/Scripts/ParseData/ParsePDB/SocketPDB.cs index 786b9600..6a46fb38 100755 --- a/Assets/Scripts/ParseData/ParsePDB/SocketPDB.cs +++ b/Assets/Scripts/ParseData/ParsePDB/SocketPDB.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: SocketPDB.cs 224 2013-04-06 23:00:34Z baaden $ +/// $Id: SocketPDB.cs 564 2014-07-01 12:46:16Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -67,11 +67,12 @@ using UnityEngine; using System.Collections; + using System.Collections.Generic; using System.IO; using ParseData.IParsePDB; using System.Net; using System; - using System.Net.Sockets; + //using System.Net.Sockets; using SocketConnect.UnitySocket; using Cmd; @@ -83,9 +84,9 @@ namespace ParseData.ParsePDB public class SocketPDB { - public ArrayList alist=new ArrayList(); + public List alist=new List(); - private ArrayList typelist=new ArrayList(); + private List typelist=new List(); public ArrayList clubLocationalist=new ArrayList(); private ArrayList clubRotationList =new ArrayList(); @@ -163,8 +164,10 @@ public void loadPDB(string id) MoleculeModel.atomsLocationlist=alist; MoleculeModel.atomsTypelist=typelist; - MoleculeModel.bondList=ControlMolecule.CreateBondsList(alist,typelist); + //MoleculeModel.bondList=ControlMolecule.CreateBondsList(alist,typelist); + //Debug.Log("======================= Bond List" + MoleculeModel.bondList.ToString()); MoleculeModel.bondEPList=ControlMolecule.CreateBondsEPList(alist,typelist); + MoleculeModel.bondEPSugarList = ControlMolecule.CreateBondsEPList(MoleculeModel.atomsSugarLocationlist,MoleculeModel.atomsSugarTypelist); // float [] a0=alist[0] as float[]; // MoleculeModel.cameraLocation.x=MoleculeModel.target.x=a0[0]; @@ -205,14 +208,15 @@ public void loadPDB(string id) - MoleculeModel.bondList=ControlMolecule.CreateBondsList(alist,typelist); + //MoleculeModel.bondList=ControlMolecule.CreateBondsList(alist,typelist); MoleculeModel.bondEPList=ControlMolecule.CreateBondsEPList(alist,typelist); + MoleculeModel.bondEPSugarList = ControlMolecule.CreateBondsEPList(MoleculeModel.atomsSugarLocationlist,MoleculeModel.atomsSugarTypelist); MoleculeModel.atomsnumber = alist.Count; - MoleculeModel.bondsnumber = MoleculeModel.bondList.Count; + MoleculeModel.bondsnumber = MoleculeModel.bondEPList.Count; string [] sClubArray=Clubs.Split('$'); @@ -238,7 +242,7 @@ public void loadPDB(string id) } - public ArrayList getAtoms() + public List getAtoms() { return alist; @@ -246,7 +250,7 @@ public ArrayList getAtoms() } - public ArrayList getTypes() + public List getTypes() { return typelist; } diff --git a/Assets/Scripts/PreloadFromPDB.cs b/Assets/Scripts/PreloadFromPDB.cs index 63bbde50..90965248 100644 --- a/Assets/Scripts/PreloadFromPDB.cs +++ b/Assets/Scripts/PreloadFromPDB.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: PreloadFromPDB.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: PreloadFromPDB.cs 268 2013-05-08 11:15:28Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -102,7 +102,7 @@ IEnumerator InitScene(RequestPDB requestPDB) fetch_progress = 1.0f; StartCoroutine(requestPDB.LoadPDBWWW(UIData.server_url+"pdb_files/"+pdbID+".pdb")); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { pdb_progress = requestPDB.progress; yield return new WaitForEndOfFrame(); @@ -111,8 +111,8 @@ IEnumerator InitScene(RequestPDB requestPDB) pdb_progress = 1.0f; UIData.atomtype = UIData.AtomType.particleball; UIData.bondtype = UIData.BondType.nobond; - GUIMoleculeController.menuOpen_show=false; - GUIMoleculeController.menuAtom_show=true; + GUIMoleculeController.showOpenMenu=false; + GUIMoleculeController.showAtomMenu=true; SendMessage("Display",SendMessageOptions.DontRequireReceiver); } diff --git a/Assets/Scripts/ScenePreload_1KX2.cs b/Assets/Scripts/ScenePreload_1KX2.cs index 95cc2756..37e52ee4 100644 --- a/Assets/Scripts/ScenePreload_1KX2.cs +++ b/Assets/Scripts/ScenePreload_1KX2.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ScenePreload_1KX2.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: ScenePreload_1KX2.cs 368 2013-08-29 13:10:00Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -86,7 +86,7 @@ void Update () { IEnumerator InitScene(RequestPDB requestPDB) { StartCoroutine(requestPDB.LoadPDBWWW(UIData.server_url+"Scenes/1KX2/1KX2.pdb")); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { pdb_progress = requestPDB.progress; Debug.Log(pdb_progress); @@ -97,11 +97,11 @@ IEnumerator InitScene(RequestPDB requestPDB) //requestPDB.LoadPDBResource("1KX2"); UIData.atomtype = UIData.AtomType.hyperball; UIData.bondtype = UIData.BondType.hyperstick; - GUIMoleculeController.menuOpen_show = false; - GUIMoleculeController.menuAtom_show = false; - GUIMoleculeController.rayon = 0.3f; + GUIMoleculeController.showOpenMenu = false; + GUIMoleculeController.showAtomMenu = false; + GUIMoleculeController.globalRadius = 0.3f; GUIMoleculeController.shrink = 0.0001f; - GUIMoleculeController.linkscale = 0.4f; + GUIMoleculeController.linkScale = 0.4f; SendMessage("Display",SendMessageOptions.DontRequireReceiver); } diff --git a/Assets/Scripts/ScenePreload_Fieldlines.cs b/Assets/Scripts/ScenePreload_Fieldlines.cs index 9a419d13..ef561d0a 100644 --- a/Assets/Scripts/ScenePreload_Fieldlines.cs +++ b/Assets/Scripts/ScenePreload_Fieldlines.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ScenePreload_Fieldlines.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: ScenePreload_Fieldlines.cs 268 2013-05-08 11:15:28Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -89,7 +89,7 @@ void Update () { IEnumerator InitScene(RequestPDB requestPDB) { StartCoroutine(requestPDB.LoadPDBWWW(UIData.server_url+"Scenes/fieldlines/fieldline.pdb")); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { pdb_progress = requestPDB.progress; Debug.Log(pdb_progress); @@ -99,29 +99,29 @@ IEnumerator InitScene(RequestPDB requestPDB) UIData.atomtype = UIData.AtomType.particleball; UIData.bondtype = UIData.BondType.nobond; - GUIMoleculeController.menuOpen_show=false; - GUIMoleculeController.menuAtom_show=true; + GUIMoleculeController.showOpenMenu=false; + GUIMoleculeController.showAtomMenu=true; SendMessage("Display",SendMessageOptions.DontRequireReceiver); StartCoroutine(requestPDB.LoadJsonWWW(UIData.server_url+"Scenes/fieldlines/fieldline.json",MoleculeModel.Offset)); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { json_progress = requestPDB.progress; yield return new WaitForEndOfFrame(); } json_progress = 1.0f; - MoleculeModel.FieldLineFileExist=true; - GUIMoleculeController.FieldLine_show = true; + MoleculeModel.fieldLineFileExists = true; + GUIMoleculeController.showFieldLines = true; FieldLineStyle.DisplayFieldLine(); StartCoroutine(requestPDB.LoadOBJWWW(UIData.server_url+"Scenes/fieldlines/fieldline.obj")); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { obj_progress = requestPDB.progress; yield return new WaitForEndOfFrame(); } obj_progress = 1.0f; - MoleculeModel.SurfaceFileExist=true; + MoleculeModel.surfaceFileExists = true; GUIMoleculeController.modif=true; } diff --git a/Assets/Scripts/ScenePreload_Network.cs b/Assets/Scripts/ScenePreload_Network.cs index 44c87b1a..a127d361 100644 --- a/Assets/Scripts/ScenePreload_Network.cs +++ b/Assets/Scripts/ScenePreload_Network.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ScenePreload_Network.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: ScenePreload_Network.cs 368 2013-08-29 13:10:00Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -75,7 +75,7 @@ public class ScenePreload_Network : MonoBehaviour { IEnumerator InitScene(RequestPDB requestPDB) { StartCoroutine(requestPDB.LoadXGMML(UIData.server_url+"Scenes/Network/galFiltered.sif.xgmml")); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { xml_progress = requestPDB.progress; yield return new WaitForEndOfFrame(); @@ -85,11 +85,11 @@ IEnumerator InitScene(RequestPDB requestPDB) GUIDisplay.file_extension = "xgmml"; UIData.atomtype=UIData.AtomType.hyperball; UIData.bondtype=UIData.BondType.hyperstick; - GUIMoleculeController.rayon = 0.7f; + GUIMoleculeController.globalRadius = 0.7f; GUIMoleculeController.shrink = 0.0001f; - GUIMoleculeController.linkscale = 0.3f; - GUIMoleculeController.menuOpen_show=false; - GUIMoleculeController.menuAtom_show=true; + GUIMoleculeController.linkScale = 0.3f; + GUIMoleculeController.showOpenMenu = false; + GUIMoleculeController.showAtomMenu = true; SendMessage("Display",SendMessageOptions.DontRequireReceiver); } diff --git a/Assets/Scripts/ScenePreload_RNA.cs b/Assets/Scripts/ScenePreload_RNA.cs index 2072a4e6..6badaafe 100644 --- a/Assets/Scripts/ScenePreload_RNA.cs +++ b/Assets/Scripts/ScenePreload_RNA.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ScenePreload_RNA.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: ScenePreload_RNA.cs 268 2013-05-08 11:15:28Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -88,7 +88,7 @@ IEnumerator InitScene(RequestPDB requestPDB) //print(Application.dataPath); //StartCoroutine(requestPDB.LoadPDBWWW("file://"+Application.dataPath+"/../Scenes/RNA/17RA_gg.pdb")); StartCoroutine(requestPDB.LoadPDBWWW("file://"+Application.dataPath+"/../share/17RA_gg.pdb")); - while(!requestPDB.isDone) + while(!RequestPDB.isDone) { pdb_progress = requestPDB.progress; Debug.Log(pdb_progress); @@ -101,8 +101,8 @@ IEnumerator InitScene(RequestPDB requestPDB) UIData.atomtype = UIData.AtomType.hyperball; UIData.bondtype = UIData.BondType.hyperstick; GUIMoleculeController.shrink = 0.8f; - GUIMoleculeController.menuOpen_show=false; - GUIMoleculeController.menuAtom_show=true; + GUIMoleculeController.showOpenMenu =false; + GUIMoleculeController.showAtomMenu =true; SendMessage("Display",SendMessageOptions.DontRequireReceiver); } diff --git a/Assets/Scripts/UI/GUIDisplay.cs b/Assets/Scripts/UI/GUIDisplay.cs index a82aba5b..a068917d 100755 --- a/Assets/Scripts/UI/GUIDisplay.cs +++ b/Assets/Scripts/UI/GUIDisplay.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: GUIDisplay.cs 247 2013-04-07 20:38:19Z baaden $ +/// $Id: GUIDisplay.cs 647 2014-08-06 12:20:04Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -63,11 +63,11 @@ /// J. Comput. Chem., 2011, 32, 2924 /// -namespace UI -{ - +namespace UI { using UnityEngine; using System.Collections; + using System.IO; + using System.Collections.Generic; using SocketConnect.UnitySocket; using Config; using Molecule.View; @@ -76,7 +76,7 @@ namespace UI /** !WiP manage GUI, and provide static strings for the GUI. * - * $Id: GUIDisplay.cs 247 2013-04-07 20:38:19Z baaden $ + * $Id: GUIDisplay.cs 647 2014-08-06 12:20:04Z tubiana $ * An important part of the User interface. Texture handling for atoms and bonds is done * here. * @@ -92,49 +92,39 @@ namespace UI * Rect
* */ - public class GUIDisplay - { + public class GUIDisplay { + public static float guiScale = 1.0f; + public static float oldGuiScale = guiScale; /* TODO: - * GET RID OF STATIC VARIABLES ! + * GET RID OF STATIC VARIABLES ? * See also : Singleton design pattern. */ public static string pdbID="1KX2"; public static string pdbServer = "http://www.pdb.org/pdb/files/"; - // public static string proxyServer = "cache.ibpc.fr"; - // public static string proxyPort = "8080"; - public static string proxyServer = ""; - public static string proxyPort = ""; + public static string proxyServer = ""; //OLD proxy : cache.ibpc.fr + public static string proxyPort = ""; //OLD port : 8080 private StringBuilder proxyPortValidate; // private static string idField="172.27.0.141"; // private static string PortField="843"; public bool display=false; public bool displayChoice=false; - private GUIContent []list; - // public static string directorypath="/opt/Unity3D/UnityMol_SVN/"; +// private GUIContent []list; public static string directorypath="/opt/src/Unity/UnityMol_SVN/"; + // public static string directorypath="/opt/Unity3D/UnityMol_SVN/"; public static string file_base_name = ""; public static string file_extension = ".pdb"; private string id=""; public InputURL inputURL=new InputURL(); public static bool m_max=false; - public static bool m_texture=false; - public static int texSet_max=30; /*!< Maximum number of full texture pages */ - public static int besttexSet_min=-5; /*!< Maximum number of condensed texture pages (negative value!) */ - //public bool only_best_textures = false; /*!< Toggle condensed set of textures vs. full set */ - public bool only_best_textures = true; - public static int texture_set=1; + public static bool m_texture=false; // texture menu is displayed if true +// public static int texSet_max=30; /*!< Maximum number of full texture pages */ // Actually unused +// public static int besttexSet_min=-5; /*!< Maximum number of condensed texture pages (negative value!) */ + public static int texture_set=0; public bool LoginFlag=false; public bool LoginAgainFlag=false; -// private AtomAttribution oxygenAtomAttribution; -// private AtomAttribution sulphurAtomAttribution; -// private AtomAttribution carbonAtomAttribution; -// private AtomAttribution nitrogenAtomAttribution; -// private AtomAttribution phosphorusAtomAttribution; -// private AtomAttribution hydrogenAtomAttribution; -// private AtomAttribution unknownAtomAttribution; public GUIMoleculeController gUIMoleculeController= new GUIMoleculeController(); @@ -145,41 +135,55 @@ public class GUIDisplay public Texture2D ext_surf; private Texture2D directoryimage, fileimage; - - private ColorObject carbon_color = new ColorObject(MoleculeModel.carbonColor); - private ColorObject nitrogen_color = new ColorObject(MoleculeModel.nitrogenColor); - private ColorObject oxygen_color = new ColorObject(MoleculeModel.oxygenColor); - private ColorObject sulphur_color = new ColorObject(MoleculeModel.sulphurColor); - private ColorObject phosphorus_color = new ColorObject(MoleculeModel.phosphorusColor); - private ColorObject hydrogen_color = new ColorObject(MoleculeModel.hydrogenColor); - private ColorObject unknown_color = new ColorObject(MoleculeModel.unknownColor); - Color[] colcarbonNew = new Color[200]; - Texture2D colCarbon = new Texture2D(20,10,TextureFormat.ARGB32,false); + public static float oldScale = 100f; + public static float newScale = 100f; - Color[] colNitrogenNew = new Color[200]; - Texture2D colNitrogen = new Texture2D(20,10,TextureFormat.ARGB32,false); +/* private static Dictionary applyToAtoms = new Dictionary(){ + {"H", false}, + {"C", false}, + {"N", false}, + {"O", false}, + {"P", false}, + {"S", false}, + {"X", false}, + }; +*/ - Color[] colOxygenNew = new Color[200]; - Texture2D colOxygen = new Texture2D(20,10,TextureFormat.ARGB32,false); + public static bool quickSelection = true; + //public static bool extendedSelection = false; - Color[] colSulphurNew = new Color[200]; - Texture2D colSulphur = new Texture2D(20,10,TextureFormat.ARGB32,false); + public static List applyToAtoms = new List(); + private static string applyToRes = "All"; + private static string applyToChain = "All"; - Color[] colPhosphorNew = new Color[200]; - Texture2D colPhosphor = new Texture2D(20,10,TextureFormat.ARGB32,false); + public struct RendererInfos { + public string atom; + public string residue; + public string chain; + public Color color; + public string texture; + } + private static Dictionary> panelDict = new Dictionary>(); - Color[] colHydrogenNew = new Color[200]; - Texture2D colHydrogen = new Texture2D(20,10,TextureFormat.ARGB32,false); + // Those are public because "SurfaceTexture" in LoadTypeGUI use them for the Surface Textures Menu. + // BTW, I don't really get how things are distributed between GUIDisplay, LoadTypeGUI or GUIMoleculeController... [Erwan] + public static List textureMenuTitles = new List(); + public static List textureMenuList = new List(); - Color[] colUnknowNew = new Color[200]; - Texture2D colUnknow = new Texture2D(20,10,TextureFormat.ARGB32,false); + // public to be used in PaperChain script + public static Dictionary colorByResiduesDict = new Dictionary(); + public static Dictionary ChainColorDict = new Dictionary(); + + static Color[] colorButtonNew = new Color[200]; + static Texture2D colorButton = new Texture2D(20,10,TextureFormat.ARGB32,false); + + static ColorObject buttonColor = new ColorObject(Color.red); // MB for centered text protected GUIStyle CentredText { get { - if (m_centredText == null) - { + if (m_centredText == null) { m_centredText = new GUIStyle(GUI.skin.label); m_centredText.alignment = TextAnchor.MiddleCenter; } @@ -188,12 +192,8 @@ protected GUIStyle CentredText { } protected GUIStyle m_centredText; - - - // private int left=0;//0:oxygen;1:sulphur;2:carbon;3:nitrogen;4:phosphorus;5:unknown - /** Make a box for atom color selecting. * @@ -201,72 +201,38 @@ protected GUIStyle CentredText { * Pannel for selecting Atoms Color in UnityMol. *

*/ - public GUIDisplay() - { + + ///

+ /// Make a box for atom color selecting. + /// + public GUIDisplay() { + if (Screen.width > 900) + guiScale = 0.9f; + if (Screen.width > 1200) + guiScale = 0.8f; + if (Screen.width > 1500) + guiScale = 0.76f; + if (Screen.width > 1900) + guiScale = 0.74f; + if (Screen.width > 2500) + guiScale = 0.66f; + #if !UNITY_WEBPLAYER m_last_texture_dir = System.IO.Directory.GetCurrentDirectory(); m_lastOpenDir = System.IO.Directory.GetCurrentDirectory(); #endif DebugStreamer.message = " -- GUIDisplay::GUIDisplay()"; -// oxygenAtomAttribution=new AtomAttribution(); -// sulphurAtomAttribution=new AtomAttribution(); -// carbonAtomAttribution=new AtomAttribution(); -// nitrogenAtomAttribution=new AtomAttribution(); -// phosphorusAtomAttribution=new AtomAttribution(); -// hydrogenAtomAttribution=new AtomAttribution(); -// unknownAtomAttribution=new AtomAttribution(); - list = new GUIContent[10]; - - list[0] = new GUIContent("Red"); - list[1] = new GUIContent("Orange"); - list[2] = new GUIContent("Yellow"); - list[3] = new GUIContent("Green"); - list[4] = new GUIContent("Blue"); - list[5] = new GUIContent("Cyan"); - list[6] = new GUIContent("Purple"); - list[7] = new GUIContent("Black"); - list[8] = new GUIContent("White"); - list[9] = new GUIContent("Gray"); DebugStreamer.message = " -- GUIDisplay::GUIDisplay() - allocs"; for (int i =0; i <200; i++){ - // NEW PASTEL COLOR THEME - colcarbonNew[i]= new Color(0.282f,0.6f,0.498f,1f); - colNitrogenNew[i]= new Color(0.443f,0.662f,0.882f,1f); - colOxygenNew[i]= new Color(0.827f,0.294f,0.333f,1f); - colPhosphorNew[i]= new Color(0.960f,0.521f,0.313f,1f); - colHydrogenNew[i]= Color.white; - colSulphurNew[i]= new Color(1f,0.839f,0.325f,1f); - colUnknowNew[i]= Color.black; - // OLD DEFAULT :: Basic color set -// colcarbonNew[i]=Color.green; -// colNitrogenNew[i]=Color.blue; -// colOxygenNew[i]=Color.red; -// colPhosphorNew[i]=new Color(0.6f,0.3f,0.0f,1f); -// colHydrogenNew[i]=Color.white; -// colSulphurNew[i]=Color.yellow; -// colUnknowNew[i]=Color.black; - + colorButtonNew[i]= Color.red; } DebugStreamer.message = " -- GUIDisplay::GUIDisplay() - for"; - colCarbon.SetPixels(colcarbonNew); - colCarbon.Apply(true); - colNitrogen.SetPixels(colNitrogenNew); - colNitrogen.Apply(true); - colOxygen.SetPixels(colOxygenNew); - colOxygen.Apply(true); - colSulphur.SetPixels(colSulphurNew); - colSulphur.Apply(true); - colPhosphor.SetPixels(colPhosphorNew); - colPhosphor.Apply(true); - colHydrogen.SetPixels(colHydrogenNew); - colHydrogen.Apply(true); - colUnknow.SetPixels(colUnknowNew); - colUnknow.Apply(true); + ChangeAllColors(); DebugStreamer.message = " -- GUIDisplay::GUIDisplay() - end"; @@ -277,33 +243,34 @@ public GUIDisplay() // UIData.isOpenFile = true; // UIData.atomtype = UIData.AtomType.particleball; // UIData.bondtype = UIData.BondType.nobond; - // GUIMoleculeController.menuOpen_show=false; + // GUIMoleculeController.showOpenMenu=false; // } // #endif - // AT:: temporary hack to test webplayer ------------------ - + // AT:: temporary hack to test webplayer ------------------ } - - void OnLevelWasLoaded () /**< Debug function.*/ - { + + /// + /// Debug function + /// + void OnLevelWasLoaded () { Debug.Log ("If you don't see me, Uniteh brOke!"); } - /* TODO : delete. - public void Confirm() - { - id=file_base_name; - inputURL.SetURL(id); - } - */ - /** - * @param - */ - public void OpenFileCallback(string path) - { + + public void OpenFileCallback(string path) { m_fileBrowser = null; if(path == null) return; + + if (UIData.loadHireRNA == false) { + UIData.ffType = UIData.FFType.atomic; + AtomModel.InitAtomic(); + } + else + { + UIData.ffType = UIData.FFType.HiRERNA; + AtomModel.InitHiRERNA(); + } directorypath = System.IO.Path.GetDirectoryName(path); m_lastOpenDir = directorypath; @@ -318,168 +285,190 @@ public void OpenFileCallback(string path) UIData.atomtype=UIData.AtomType.particleball; UIData.bondtype=UIData.BondType.nobond; } - /** Display a GUI pannel for selecting a PDB on a server or on a local file. + + /** Display a GUI pannel for selecting a PDB on a server or on a local file. *

* Pannel for selecting Atoms Color in UnityMol. *

*/ - public void Display() - { - + + ///

+ /// Display a GUI pannel for selecting a PDB on a server or on a local file. + /// + public void Display() { + if(!UIData.isRenderDictInit) + InitRenderDict(); + if(!UIData.isTexturesMenuListInit) + InitTextureMenuList(); + directoryimage = (Texture2D)Resources.Load("FileBrowser/dossier"); fileimage=(Texture2D)Resources.Load("FileBrowser/fichiers"); - if(GUIMoleculeController.menuOpen_show) - { - GUILayout.BeginArea(new Rect(5,30,300,300)); + if(GUIMoleculeController.showOpenMenu) { + GUILayout.BeginArea(Rectangles.openRect); #if !UNITY_WEBPLAYER { //id != "" if a molecule is already open - if (!UIData.hasMoleculeDisplay) - { + + GUILayout.BeginHorizontal(); + if (!UIData.hasMoleculeDisplay) { + if(GUILayout.Button (new GUIContent("Open File From Disk", "Load a PDB file from disk"))) { + m_fileBrowser = new ImprovedFileBrowser(Rectangles.fileBrowserRect, "", OpenFileCallback, m_lastOpenDir); +// m_fileBrowser.SelectionPattern = "*.pdb|*.xgmml"; + m_fileBrowser.DirectoryImage = directoryimage; + m_fileBrowser.FileImage = fileimage; + GUIMoleculeController.showOpenMenu = false; + GUIMoleculeController.showSecStructMenu = false; + } + } + else { + if(GUILayout.Button(new GUIContent("Clear","Clear the scene"))) { + id=""; + UIData.isclear = true; + GUIMoleculeController.pdbGen = false; + UIData.hasMoleculeDisplay = false; + GUIMoleculeController.toggle_NA_INTERACTIVE = false; // causes all sorts of headaches otherwise + Camera.main.GetComponent().ClearSelection(); // so the halos don't stay after clearing + // Delete all the Parents to start again on a clear ground + GameObject.Destroy(Molecule.View.DisplayAtom.AtomCubeStyle.AtomCubeParent); + GameObject.Destroy(Molecule.View.DisplayAtom.AtomSphereStyle.AtomCubeParent); + + DepthCueing.reset = true; + AmbientOcclusion.reset = true; + + UIData.loadHireRNA = false; + } + } + GUILayout.EndHorizontal(); + + if (!UIData.hasMoleculeDisplay) { + int menuWidth = Rectangles.openWidth; + float pServerWidth = menuWidth * 0.65f; + float pPortWidth = menuWidth * 0.30f; + GUILayout.BeginHorizontal(); - GUILayout.Label("Proxy Server"); - GUILayout.Label("Proxy Port"); + GUILayout.Label("Proxy Server", GUILayout.Width(pServerWidth)); + GUILayout.Label("Proxy Port", GUILayout.Width(pPortWidth)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); - proxyServer = GUILayout.TextField(proxyServer,256); - - //Validate the proxyPort : only digits + proxyServer = GUILayout.TextField(proxyServer, 256, GUILayout.Width(pServerWidth)); +// proxyServer = MyTextField.FixedTextField(proxyServer, 256, 150f) ; + // Validate the proxyPort : only digits proxyPortValidate = new StringBuilder(); + foreach (char c in proxyPort) - { if (char.IsDigit(c)) - { proxyPortValidate.Append(c); - } - } + proxyPort = GUILayout.TextField(proxyPortValidate.ToString(),4); GUILayout.EndHorizontal(); - GUILayout.Label("please input a PDB id"); + + GUILayout.Label("Please input a PDB ID"); GUILayout.BeginHorizontal(); - pdbID=GUILayout.TextField(pdbID,4); - if(GUILayout.Button(new GUIContent("Fetch PDB","Fetch a PDB file from the PDB server"))) - { + pdbID = GUILayout.TextField(pdbID, 4, GUILayout.Width(pPortWidth)); +// pdbID=GUILayout.TextField(pdbID,4); + if(GUILayout.Button(new GUIContent("Fetch PDB", "Fetch a PDB file from the PDB server"))) { id = pdbID; UIData.fetchPDBFile = true; UIData.isOpenFile = true; - GUIMoleculeController.menuOpen_show=false; + GUIMoleculeController.showOpenMenu=false; UIData.atomtype=UIData.AtomType.particleball; UIData.bondtype=UIData.BondType.nobond; } - GUILayout.EndHorizontal(); - } - GUILayout.BeginHorizontal(); - if (!UIData.hasMoleculeDisplay) - { - if(GUILayout.Button (new GUIContent("Open File From Disk","Load a pdb file from disk"))) - { - m_fileBrowser = new ImprovedFileBrowser( - new Rect(400, 100, 600, 500), - "Choose PDB/json/obj file", - OpenFileCallback, - m_lastOpenDir - ); - //m_fileBrowser.SelectionPattern = "*.pdb|*.xgmml"; - m_fileBrowser.DirectoryImage = directoryimage; - m_fileBrowser.FileImage = fileimage; - GUIMoleculeController.menuOpen_show=false; - } + GUILayout.EndHorizontal(); } - else - { - if(GUILayout.Button(new GUIContent("Clear","Clear the scene"))) - { - id=""; - /*ToDo: Delete - * inputURL.ClearURL(id); - * */ - UIData.isclear=true; - GUIMoleculeController.pdbgen = false; - UIData.hasMoleculeDisplay = false; - } - } - GUILayout.EndHorizontal(); + } + if (id==""){ GUILayout.BeginHorizontal(); - if (id=="") - { - UIData.readHetAtom = GUILayout.Toggle (UIData.readHetAtom, "Read Hetero Atoms ?"); - } + + UIData.readHetAtom = GUILayout.Toggle (UIData.readHetAtom, "Read Hetero Atoms?"); + + UIData.readWater = GUILayout.Toggle (UIData.readWater, "Read Water?"); + + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Label("Connectivity :"); + UIData.connectivity_calc = GUILayout.Toggle (UIData.connectivity_calc, "Calculed?"); + UIData.connectivity_PDB = GUILayout.Toggle (UIData.connectivity_PDB, "from PDB?"); + + GUILayout.EndHorizontal(); + } #endif #if UNITY_WEBPLAYER - { - // GUILayout.BeginHorizontal(); - // GUILayout.Label("Server Address:"); - // GUILayout.EndHorizontal(); - // GUILayout.BeginHorizontal(); - // idField=GUILayout.TextField(idField,15); - // PortField=GUILayout.TextField(PortField,4); - // FunctionConfig.id=idField; - // FunctionConfig.port=PortField; - // GUILayout.EndHorizontal(); - // if(!LoginFlag) - // { +/* { + GUILayout.BeginHorizontal(); + GUILayout.Label("Server Address:"); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + idField=GUILayout.TextField(idField,15); + PortField=GUILayout.TextField(PortField,4); + FunctionConfig.id=idField; + FunctionConfig.port=PortField; + GUILayout.EndHorizontal(); + if(!LoginFlag) + { - // if(GUILayout.Button("Login")) - // { - // Debug.Log("Login1"); - // UnitySocket.SocketConnection(FunctionConfig.id,int.Parse(FunctionConfig.port)); - // Debug.Log("Login2"); - // LoginFlag=true; - // Debug.Log("Login3"); - // Debug.Log(UIData.loginSucess); + if(GUILayout.Button("Login")) + { + Debug.Log("Login1"); + UnitySocket.SocketConnection(FunctionConfig.id,int.Parse(FunctionConfig.port)); + Debug.Log("Login2"); + LoginFlag=true; + Debug.Log("Login3"); + Debug.Log(UIData.loginSucess); - // } + } - // } - // else - // { - // GUILayout.BeginHorizontal(); - // if(UIData.loginSucess) - // { - // GUILayout.Label("Login Success!"); - // } - // else - // { - // // Debug.Log(UIData.loginSucess); - // GUILayout.Label("Login Error!",GUILayout.Width(80)); - // if(GUILayout.Button("Login Again",GUILayout.Width(80))) - // { + } + else + { + GUILayout.BeginHorizontal(); + if(UIData.loginSucess) + { + GUILayout.Label("Login Success!"); + } + else + { + Debug.Log(UIData.loginSucess); + GUILayout.Label("Login Error!",GUILayout.Width(80)); + if(GUILayout.Button("Login Again",GUILayout.Width(80))) + { - // UnitySocket.SocketConnection(FunctionConfig.id,int.Parse(FunctionConfig.port)); + UnitySocket.SocketConnection(FunctionConfig.id,int.Parse(FunctionConfig.port)); - // LoginAgainFlag=true; + LoginAgainFlag=true; - // } - // } - - // GUILayout.EndHorizontal(); - // } + } + } + + GUILayout.EndHorizontal(); + } GUILayout.BeginHorizontal(); if(GUILayout.Button("Main Menu")) { UIData.isclear = true; - GUIMoleculeController.pdbgen = false; + GUIMoleculeController.pdbGen = false; UIData.hasMoleculeDisplay = false; Application.LoadLevel("MainMenu"); } GUILayout.EndHorizontal(); } +*/ #endif GUILayout.EndArea(); } -// gUIMoleculeController.RenderHelp(); -// gUIMoleculeController.SetOpenMenu() gUIMoleculeController.SetAtomMenu(); + gUIMoleculeController.SetSecStructMenu(); gUIMoleculeController.SetSurfaceMenu(); gUIMoleculeController.SetBfactorMenu(); gUIMoleculeController.SetFieldMenu(); @@ -488,6 +477,7 @@ public void Display() gUIMoleculeController.DisplayGUI(); gUIMoleculeController.SetAtomType(); gUIMoleculeController.SetBondType(); + gUIMoleculeController.SetCubeLineBond(); gUIMoleculeController.SetHyperBall(); gUIMoleculeController.SetEffectType(); gUIMoleculeController.SetSurfaceTexture(); @@ -495,787 +485,964 @@ public void Display() gUIMoleculeController.SetSurtfaceMobileCut(); gUIMoleculeController.SetBackGroundType(); gUIMoleculeController.SetMetaphorType(); + gUIMoleculeController.SetAdvMenu(); + gUIMoleculeController.SetGuidedMenu(); gUIMoleculeController.CameraStop(); gUIMoleculeController.RenderHelp(); - SetHyperballMatCapTexture(); + gUIMoleculeController.setSugarMenu(); // + gUIMoleculeController.setSugarRibbonsTuneMenu(); + gUIMoleculeController.setColorTuneMenu(); + gUIMoleculeController.SetVRPNMenu(); + gUIMoleculeController.SetMDDriverMenu(); + gUIMoleculeController.SetHydroMenu (); + +// SetHyperballMatCapTexture(); + SetAtomScales(); - if( GUIMoleculeController.m_colorPicker != null ) - { - changeAllColor(); + if( GUIMoleculeController.m_colorPicker != null ){ + ChangeAllColors(); + //ColorPickerCaller (); } - - - // } + + if(applyToAtoms == null) + applyToAtoms.Add("All"); + + if(applyToAtoms.Count > 1 && applyToAtoms.Contains("All")) + applyToAtoms.Remove("All"); + + // GUI.Label ( new Rect(120,Screen.height-35,Screen.width-360,20), GUI.tooltip); + + } - /* - * ToDo : Delete - public string getURL() - { + +/* public void SetHyperballMatCapTexture() { +// GUIContent texturehyper = new GUIContent("Set Mat Cap texture"); + if (m_texture && UIData.atomtype == UIData.AtomType.hyperball) + Rectangles.textureRect = GUI.Window(41,Rectangles.textureRect, loadtexture, ""); - return inputURL.GetURL(); +// if(displayChoice){ +// GUI.Window( 2, new Rect( Screen.width-295,355, 290, 200 ), DisplayColors, ""); +// } + } +*/ - public string getID() - { - return id; + /// + /// Sets the atom scales, color and texture menu. + /// + public void SetAtomScales() { + if (GUIMoleculeController.showSetAtomScales) + Rectangles.atomScalesRect = GUILayout.Window(41,Rectangles.atomScalesRect, LoadMenu, ""); } - */ - /** - * - * - * - */ - public void SetAtomScale() - { + + /// + /// Load the atom scale, color and texture menu with the current texture set. + /// + /// + /// ? + /// + public void LoadMenu(int a){ + + AtomScales ("lit_spheres/", textureMenuList[texture_set], textureMenuTitles[texture_set]); -// GUIContent c=new GUIContent("Set Atom scale"); -// GUI.Window( 1, new Rect( Screen.width-295,0, 170, 300 ), loadGUI, ""); - if(!UIData.hiddenUIbutFPS) - { - GUI.Window( 40, new Rect( Screen.width-295,0, 290, 350 ), loadGUI, "Colors"); - } - else - { - GUI.Window( 40, new Rect( Screen.width-295,0, 290, 65 ), loadGUI, "Colors"); - } - - -// if(display) -// { -// GUI.Window( 41, new Rect( Screen.width-265,365, 250, 260 ), DisplayColors, "Colors"); -// } + GUI.DragWindow(); } - public void SetHyperballMatCapTexture() - { -// GUIContent texturehyper = new GUIContent("Set Matp Cap texture"); - if (m_texture && UIData.atomtype == UIData.AtomType.hyperball) - { - GUI.Window(41,GUIMoleculeController.texturetype_rect, loadtexture, ""); - } -// if(displayChoice) -// { -// GUI.Window( 2, new Rect( Screen.width-295,355, 290, 200 ), DisplayColors, ""); -// } -// - } - - private void loadGUI(int a) - { +/* /// + /// Convert the booleans of applyToAtoms in a List of string. (Necessary for the SetColor and SetTexture functions) + /// + /// + /// The atoms of applyToAtoms as a List. + /// + /// + /// Send applyToAtoms here (Dictionary of booleans). + /// + private static List ToList(Dictionary dic){ + List sendingAtoms = new List(); + foreach(string key in dic.Keys) + if(dic[key]) + sendingAtoms.Add(key); + return sendingAtoms; + } +*/ + + /// + /// Convertir a string to a List of String (Necessary for the SetColor and SetTexture functions) + /// + /// + /// The atom as a List + /// + /// + /// Atom. + /// + private static List ToList(string atom){ + List sendingAtoms = new List(); + sendingAtoms.Add(atom); + return sendingAtoms; + } + + /// + /// Create a ColorPicker with the currents options. + /// + private static void ColorPickerCaller(){ + GUIMoleculeController.CreateColorPicker(buttonColor, "Select a color", applyToAtoms, applyToRes, applyToChain); + } + + /// + /// Contents of the atom color/texture/scale menu. + /// + /// + /// Textures directory. + /// + /// + /// Textures list. + /// + /// + /// Textures description. + /// + private void AtomScales(string texDir,string[] texList, string texDescr){ // TODO: Move this ? + GUIMoleculeController.showSetAtomScales = LoadTypeGUI.SetTitleExit("Atom Colors, Textures and Scales"); // check on http://docs.unity3d.com/Documentation/ScriptReference/Texture2D.SetPixels.html - - - GUILayout.Box("Atoms Parameters"+" FPS:"+MoleculeModel.FPS+" "); - GUILayout.BeginHorizontal(); - GUILayout.Label("Name",GUILayout.MinWidth(90)); - GUILayout.Label("Scale",GUILayout.MinWidth(80)); - GUILayout.Label("Color",GUILayout.MinWidth(50)); - GUILayout.Label("Number",GUILayout.MinWidth(50)); - GUILayout.EndHorizontal(); + int fifth = Rectangles.atomScalesWidth / 5; + int sliderWidth = (int)(fifth*1.65f); + int nameWidth = (int)(fifth*1.2f); + + // ---------- ATOMS CHOICE ---------- GUILayout.BeginHorizontal(); - MoleculeModel.carbonScale = gUIMoleculeController.LabelSlider (MoleculeModel.carbonScale, 50, 150.0f, "Carbon "+(int)(MoleculeModel.carbonScale*10)/10, "Determines atom radius",true,80,90); - -// tex = (Texture2D)Resources.Load("color"); - if(GUILayout.Button(colCarbon,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(carbon_color, "Carbon Color"); + GUILayout.Box("Apply changes to:"); + + if(GUIMoleculeController.toggle_NA_CLICK){ + GUI.color = Color.yellow; + GUILayout.Label("Atom Selection Mode: All changes applied to selected atoms"); + GUI.color = Color.white; + } + else{ + if(GUILayout.Button(new GUIContent("Reset", "Reset all selections"), GUILayout.Width(Rectangles.textureWidth / 8))){ + applyToAtoms.Clear(); + applyToAtoms.Add("All"); + applyToRes = "All"; + applyToChain = "All"; + GUIMoleculeController.m_colorPicker = null; + } } - GUILayout.Label(MoleculeModel.carbonNumber,GUILayout.MaxWidth(150)); - GUILayout.EndHorizontal(); - + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); - MoleculeModel.nitrogenScale = gUIMoleculeController.LabelSlider (MoleculeModel.nitrogenScale, 50, 150.0f, "Nitrogen "+(int)(MoleculeModel.nitrogenScale*10)/10, "Determines atom radius",true,80,90); -// Texture tex = Resources.Load("color.png"); - if(GUILayout.Button(colNitrogen,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(nitrogen_color, "Nitrogen Color"); + if(quickSelection) + GUI.color = new Color(0.5f, 1.0f, 0.5f); + if(GUIMoleculeController.toggle_NA_CLICK) + GUI.enabled = false; + if( GUILayout.Button (new GUIContent ("Quick atoms selection", "Click-and-run mode for atom selection"), GUILayout.Width(Rectangles.textureWidth / 2))){ + quickSelection = true; + //extendedSelection = false; + GUIMoleculeController.m_colorPicker = null; + GUIMoleculeController.showAtomsExtendedMenu = false; + applyToAtoms.Clear(); + applyToAtoms.Add("All"); + } + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(!quickSelection) + GUI.enabled = false; + if(GUILayout.Button(new GUIContent("All", "Select all atoms"), GUILayout.Width(Rectangles.textureWidth / 6))){ + applyToAtoms.Clear(); + applyToAtoms.Add("All"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + + if(GUILayout.Button(new GUIContent("None", "Unselect all atoms"), GUILayout.Width(Rectangles.textureWidth / 6))){ + applyToAtoms.Clear(); + applyToAtoms.Add("None"); + GUIMoleculeController.m_colorPicker = null; } - GUILayout.Label(MoleculeModel.nitrogenNumber,GUILayout.MaxWidth(150)); GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(); - MoleculeModel.oxygenScale = gUIMoleculeController.LabelSlider (MoleculeModel.oxygenScale, 50, 150.0f, "Oxygen "+(int)(MoleculeModel.oxygenScale*10)/10, "Determines atom radius",true,80,90); -// Texture tex = Resources.Load("color.png"); - if(GUILayout.Button(colOxygen,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(oxygen_color, "Oxygen Color"); + if(applyToAtoms.Contains("H") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent ("H("+MoleculeModel.hydrogenNumber+")", "Modify hydrogen"))){ + if(applyToAtoms.Contains("H")) + applyToAtoms.Remove("H"); + else + applyToAtoms.Add("H"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(applyToAtoms.Contains("C") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent ("C("+MoleculeModel.carbonNumber+")", "Modify carbon"))){ + if(applyToAtoms.Contains("C")) + applyToAtoms.Remove("C"); + else + applyToAtoms.Add("C"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(applyToAtoms.Contains("N") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent ("N("+MoleculeModel.nitrogenNumber+")", "Modify nitrogen"))){ + if(applyToAtoms.Contains("N")) + applyToAtoms.Remove("N"); + else + applyToAtoms.Add("N"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(applyToAtoms.Contains("O") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent ("O("+MoleculeModel.oxygenNumber+")", "Modify oxygen"))){ + if(applyToAtoms.Contains("O")) + applyToAtoms.Remove("O"); + else + applyToAtoms.Add("O"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(applyToAtoms.Contains("P") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button( new GUIContent ("P("+MoleculeModel.phosphorusNumber+")", "Modify phosphorus"))){ + if(applyToAtoms.Contains("P")) + applyToAtoms.Remove("P"); + else + applyToAtoms.Add("P"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(applyToAtoms.Contains("S") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent ("S("+MoleculeModel.sulphurNumber+")", "Modify sulphur"))){ + if(applyToAtoms.Contains("S")) + applyToAtoms.Remove("S"); + else + applyToAtoms.Add("S"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); } - GUILayout.Label(MoleculeModel.oxygenNumber,GUILayout.MaxWidth(150)); + GUI.color = Color.white; + GUILayout.FlexibleSpace(); + if(applyToAtoms.Contains("X") || applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent ("X("+MoleculeModel.unknownNumber+")", "Modify unknown"))){ + if(applyToAtoms.Contains("X")) + applyToAtoms.Remove("X"); + else + applyToAtoms.Add("X"); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); + } + GUI.color = Color.white; + GUI.enabled = true; + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(); - MoleculeModel.sulphurScale =gUIMoleculeController. LabelSlider (MoleculeModel.sulphurScale, 50, 150.0f, "Sulphur "+(int)(MoleculeModel.sulphurScale*10)/10, "Determines atom radius",true,80,90); -// Texture tex = Resources.Load("color.png"); - if(GUILayout.Button(colSulphur,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(sulphur_color, "Sulphur Color"); + if(!quickSelection) + GUI.color = new Color(0.5f, 1.0f, 0.5f); + if(GUIMoleculeController.toggle_NA_CLICK)//applyToAtoms["Select"]) + GUI.enabled = false; + if( GUILayout.Button (new GUIContent ("Extended atoms selection", "In-depth atom selection"), GUILayout.Width(Rectangles.textureWidth / 2))){ + quickSelection = false; + //extendedSelection = true; + GUIMoleculeController.m_colorPicker = null; + GUIMoleculeController.showAtomsExtendedMenu = !GUIMoleculeController.showAtomsExtendedMenu; + applyToAtoms.Clear(); + applyToAtoms.Add("All"); } - GUILayout.Label(MoleculeModel.sulphurNumber,GUILayout.MaxWidth(150)); - GUILayout.EndHorizontal(); + GUI.color = Color.white; +// GUILayout.FlexibleSpace (); +// GUILayout.EndHorizontal(); +// GUILayout.BeginHorizontal(); +/* GUILayout.Label(" : "); + if(!extendedSelection) + GUI.enabled = false; + if(GUILayout.Button(new GUIContent("Extended atoms", "Change atom"), GUILayout.Width(Rectangles.textureWidth / 8))) + GUIMoleculeController.showAtomsExtendedMenu = !GUIMoleculeController.showAtomsExtendedMenu; +*/ + GUILayout.FlexibleSpace(); - GUILayout.BeginHorizontal(); - MoleculeModel.phosphorusScale = gUIMoleculeController.LabelSlider (MoleculeModel.phosphorusScale, 50, 150.0f, "Phosphor "+(int)(MoleculeModel.phosphorusScale*10)/10, "Determines atom radius",true,80,90); -// Texture tex = Resources.Load("color.png"); - if(GUILayout.Button(colPhosphor,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(phosphorus_color, "Phosphorus Color"); - } - GUILayout.Label(MoleculeModel.phosphorusNumber,GUILayout.MaxWidth(150)); + GUI.enabled = true; GUILayout.EndHorizontal(); + // ---------- RESIDUES, CHAIN, GRAYSCALE, SELECTION ---------- GUILayout.BeginHorizontal(); - MoleculeModel.hydrogenScale = gUIMoleculeController.LabelSlider (MoleculeModel.hydrogenScale, 50, 150.0f, "Hydrogen "+(int)(MoleculeModel.hydrogenScale*10)/10, "Determines atom radius",true,80,90); -// Texture tex = Resources.Load("color.png"); - if(GUILayout.Button(colHydrogen,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(hydrogen_color, "Hydrogen Color"); + GUILayout.Label("Residue :"); + if(GUIMoleculeController.toggle_NA_CLICK + || !UIData.hasResidues) { + GUI.enabled = false; + applyToRes = "All"; } - GUILayout.Label(MoleculeModel.hydrogenNumber,GUILayout.MaxWidth(150)); - GUILayout.EndHorizontal(); + + if(GUILayout.Button(new GUIContent(applyToRes, "Change residue"), GUILayout.Width(Rectangles.textureWidth / 8))) + GUIMoleculeController.showResiduesMenu = !GUIMoleculeController.showResiduesMenu; + + GUI.enabled = true; + GUILayout.FlexibleSpace(); - GUILayout.BeginHorizontal(); - MoleculeModel.unknownScale = gUIMoleculeController.LabelSlider (MoleculeModel.unknownScale, 50, 150.0f, "Unknow "+(int)(MoleculeModel.unknownScale*10)/10, "Determines atom radius",true,80,90); -// Texture tex = Resources.Load("color.png"); - if(GUILayout.Button(colUnknow,GUILayout.MinWidth(50),GUILayout.MinHeight(20))){ - GUIMoleculeController.CreateColorPicker(unknown_color, "Unknown Color"); + GUILayout.Label(" Chain :"); + if(GUIMoleculeController.toggle_NA_CLICK + || !UIData.hasChains) { + GUI.enabled = false; + applyToChain = "All"; } - GUILayout.Label(MoleculeModel.unknownNumber,GUILayout.MaxWidth(150)); - + if(GUILayout.Button(new GUIContent(applyToChain, "Change chain"), GUILayout.Width(Rectangles.textureWidth / 8))){ + GUIMoleculeController.showChainsMenu = !GUIMoleculeController.showChainsMenu; + } + GUI.enabled = true; + + GUILayout.FlexibleSpace(); + + GUILayout.EndHorizontal(); + // ---------- SCALE, COLOR ---------- GUILayout.BeginHorizontal(); - if( GUILayout.Button(new GUIContent("All white", "Change all colors to white"))){ - // m_colorpick_Atom=null; - oxygen_color.color = Color.white; - sulphur_color.color = Color.white; - carbon_color.color = Color.white; - nitrogen_color.color = Color.white; - phosphorus_color.color = Color.white; - hydrogen_color.color = Color.white; - unknown_color.color = Color.white; - changeAllColor(); - UIData.isConfirm=true; - } - if (GUILayout.Button(new GUIContent("Goodsell", "Change all colors to David Goodsell style colors"))){ - oxygen_color.color = new Color(0.95f,0.76f,0.76f,1f); - nitrogen_color.color = new Color(0.75f,0.76f,0.94f,1f); - sulphur_color.color = new Color(0.85f,0.84f,0.46f,1f); - carbon_color.color = new Color(0.76f,0.76f,0.76f,1f); - phosphorus_color.color = new Color(0.99f,0.82f,0.59f,1f); - - hydrogen_color.color = new Color(0.95f,0.95f,0.95f,1f); - - unknown_color.color = new Color(0.55f,0.55f,0.55f,1f); - - changeAllColor(); - UIData.isConfirm=true; - } - if (GUILayout.Button(new GUIContent("Watercolor", "Change all colors to Watercolor palette"))){ - oxygen_color.color = new Color(0.60f,0.13f,0.11f,1f); - nitrogen_color.color = new Color(0.19f,0.27f,0.63f,1f); - sulphur_color.color = new Color(0.98f,0.91f,0.44f,1f); - carbon_color.color = new Color(0.55f,0.86f,0.89f,1f); - phosphorus_color.color = new Color(0.99f,0.69f,0.28f,1f); - - hydrogen_color.color = new Color(0.99f,0.98f,0.96f,1f); - - unknown_color.color = new Color(0.16f,0.17f,0.29f,1f); - - changeAllColor(); - UIData.isConfirm=true; - } + GUILayout.Box("Color and Scale :"); + if (GUILayout.Button (new GUIContent ("Panels", "Open colors and textures panels menu"), GUILayout.Width(Rectangles.textureWidth / 4))) { + GUIMoleculeController.showPanelsMenu = !GUIMoleculeController.showPanelsMenu; + } + if(GUILayout.Button(new GUIContent("Reset scales", "Reset all scales to 100"), GUILayout.Width(Rectangles.textureWidth / 4))){ + newScale = 100f; + GenericManager manager = DisplayMolecule.GetManagers()[0]; + manager.SetRadii(ToList("All"), "All", "All"); + } + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); - + GUILayout.BeginHorizontal(); - if (GUILayout.Button(new GUIContent("Pastel", "Change all colors to pastel"))){ - // m_colorpick_Atom=null; - oxygen_color.color = new Color(0.827f,0.294f,0.333f,1f); - sulphur_color.color = new Color(1f,0.839f,0.325f,1f); - carbon_color.color = new Color(0.282f,0.6f,0.498f,1f); - nitrogen_color.color = new Color(0.443f,0.662f,0.882f,1f); - phosphorus_color.color = new Color(0.960f,0.521f,0.313f,1f); - hydrogen_color.color = Color.white; - unknown_color.color = Color.black; - - changeAllColor(); - UIData.isConfirm=true; + //GUILayout.FlexibleSpace(); + if(GUILayout.Button(colorButton,GUILayout.MinWidth(100),GUILayout.MinHeight(20))){ + ColorPickerCaller(); + } + GUILayout.FlexibleSpace(); + + newScale = GUIMoleculeController.LabelSlider(newScale, 50, 150.0f, + "Scale: "+(int)(newScale*10)/10, + "Determines atom radius",true,sliderWidth,(int)(nameWidth*0.75)); + if(newScale != oldScale){ + GenericManager manager = DisplayMolecule.GetManagers()[0]; + if(!GUIMoleculeController.toggle_NA_CLICK){ + manager.SetRadii(applyToAtoms, applyToRes, applyToChain); + oldScale = newScale; } - - if (GUILayout.Button(new GUIContent("CPK", "A CPK-like atom color palette"))){ - oxygen_color.color = new Color(0.78f,0.0f,0.09f,1f); - nitrogen_color.color = new Color(0.21f,0.67f,0.92f,1f); - sulphur_color.color = new Color(0.86f,0.84f,0.04f,1f); - carbon_color.color = new Color(0.02f,0.02f,0.03f,1f); - phosphorus_color.color = new Color(1.0f,0.60f,0.0f,1f); - - hydrogen_color.color = new Color(1.0f,1.00f,0.99f,1f); - - unknown_color.color = new Color(0.03f,0.56f,0.26f,1f); - - changeAllColor(); - UIData.isConfirm=true; + else{ + foreach(GameObject obj in Camera.main.GetComponent().objList) + manager.SetRadii((int)obj.GetComponent().number); + + oldScale = newScale; } - - if(GUILayout.Button(new GUIContent("Basic","Set previous default color parameters (quite intense colors)"))) - { - // m_colorpick_Atom=null; - MoleculeModel.carbonScale=100f; - MoleculeModel.nitrogenScale=100f; - MoleculeModel.oxygenScale=100f; - MoleculeModel.sulphurScale=100f; - MoleculeModel.phosphorusScale=100f; - MoleculeModel.hydrogenScale=100f; - - MoleculeModel.unknownScale=100f; - - oxygen_color.color = Color.red; - sulphur_color.color = Color.yellow; - carbon_color.color = Color.green; - nitrogen_color.color = Color.blue; - phosphorus_color.color = new Color(0.6f,0.3f,0.0f,1f); - hydrogen_color.color = Color.white; - unknown_color.color = Color.black; - - changeAllColor(); - UIData.isConfirm=true; } - if (GUILayout.Button(new GUIContent("IUPAC?", "A IUPAC color palette (?)"))){ - oxygen_color.color = new Color(0.21f,0.67f,0.92f,1f); - nitrogen_color.color = new Color(0.03f,0.56f,0.26f,1f); - sulphur_color.color = new Color(0.86f,0.84f,0.04f,1f); - carbon_color.color = new Color(1.0f,1.00f,0.99f,1f); - phosphorus_color.color = new Color(1.0f,0.60f,0.0f,1f); - - hydrogen_color.color = new Color(0.02f,0.02f,0.03f,1f); - - unknown_color.color = new Color(0.78f,0.0f,0.09f,1f); - - changeAllColor(); - UIData.isConfirm=true; - } + //GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); - - - if(GUILayout.Button(new GUIContent("Confirm","Confirm all modifications"))) - { - - UIData.isConfirm=true; - } - + + // ---------- TEXTURE ---------- GUILayout.BeginHorizontal(); - GUILayout.Label("Atom count:",GUILayout.MaxWidth(80)); - GUILayout.Label(MoleculeModel.atomsnumber.ToString(),GUILayout.MaxWidth(60)); + GUILayout.Box("Texture: " + texDescr); + GUILayout.FlexibleSpace(); + if(UIData.atomtype != UIData.AtomType.hyperball) + GUI.enabled = false; - GUILayout.Label("Bond count:",GUILayout.MaxWidth(80)); - GUILayout.Label(MoleculeModel.bondsnumber.ToString(),GUILayout.MaxWidth(60)); + UIData.grayscalemode = GUILayout.Toggle (UIData.grayscalemode, new GUIContent ("Grayscale", "Use grayscale version of the texture")); GUILayout.EndHorizontal(); - - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void changeAllColor(){ - MoleculeModel.carbonColor = carbon_color.color; - MoleculeModel.nitrogenColor = nitrogen_color.color; - MoleculeModel.oxygenColor = oxygen_color.color; - MoleculeModel.sulphurColor = sulphur_color.color; - MoleculeModel.phosphorusColor = phosphorus_color.color; - MoleculeModel.hydrogenColor = hydrogen_color.color; - MoleculeModel.unknownColor = unknown_color.color; - - for (int i =0; i <200; i++){ - colcarbonNew[i] =MoleculeModel.carbonColor; - colNitrogenNew[i] =MoleculeModel.nitrogenColor; - colOxygenNew[i] =MoleculeModel.oxygenColor; - colPhosphorNew[i] =MoleculeModel.phosphorusColor; - colHydrogenNew[i] =MoleculeModel.hydrogenColor; - colSulphurNew[i] =MoleculeModel.sulphurColor; - colUnknowNew[i] =MoleculeModel.unknownColor; - - } - colCarbon.SetPixels(colcarbonNew); - colCarbon.Apply(true); - colNitrogen.SetPixels(colNitrogenNew); - colNitrogen.Apply(true); - colOxygen.SetPixels(colOxygenNew); - colOxygen.Apply(true); - colSulphur.SetPixels(colSulphurNew); - colSulphur.Apply(true); - colPhosphor.SetPixels(colPhosphorNew); - colPhosphor.Apply(true); - colHydrogen.SetPixels(colHydrogenNew); - colHydrogen.Apply(true); - colUnknow.SetPixels(colUnknowNew); - colUnknow.Apply(true); - - } - - - public void FileSelectedCallback(string path) { - m_fileBrowser = null; - if (path!=null) - { - m_textPath = path; - m_last_texture_dir = System.IO.Path.GetDirectoryName(path); - WWW www = new WWW("file://"+m_textPath); - BallUpdateHB.SetTexture(www.texture); - } - GUIMoleculeController.FileBrowser_show2=false; - // Debug.Log("Mis a false"); - } - - // HELPER FUNCTION TO FILL A TEXTURE CHOICE MENU WITH UP TO 15 BOXES - private void textureMenu(string texDir,string[] texList, string texDescr){ - GUI.Label(new Rect(0,0,290,20),"Atoms Texture - " + texDescr,CentredText); GUILayout.BeginHorizontal(); - if(GUILayout.Button(new GUIContent("<<","Go to previous series of textures"))) // cycle through texture sets - { + if(GUILayout.Button(new GUIContent("<<","Go to previous series of textures"))){ // Cycle through texture sets texture_set--; - //Skip fun textures for the article version -// if(texture_set == 4) -// texture_set = 3; - - if (only_best_textures) { - if(texture_set>0) texture_set = -texture_set; - if (texture_set < besttexSet_min) - texture_set = -1; - } else { - if (texture_set < 1) - texture_set = texSet_max; + if(GUIMoleculeController.onlyBestTextures){ + if(texture_set < 0) + texture_set = 4; // First 5 pages are best textures (0-4) + } + else{ + if(texture_set < 5) + texture_set = textureMenuList.Count - 1; } } -// if(GUILayout.Button(new GUIContent("Confirm","Confirm all the modification of the molecule."))) - if(GUILayout.Button(new GUIContent("Open","Open custom texture image from disk"))) - { - m_fileBrowser = new ImprovedFileBrowser( - new Rect(400, 100, 600, 500), - "Choose Image File", - FileSelectedCallback, - m_last_texture_dir - ); - //m_texture=false; + if(GUILayout.Button(new GUIContent("Open","Open custom texture image from disk"))) { + m_fileBrowser = new ImprovedFileBrowser(Rectangles.fileBrowserRect, + "Choose Image File", + FileSelectedCallback, + m_last_texture_dir); } - if(GUILayout.Button(new GUIContent(">>","Go to next series of textures"))) // cycle through texture sets - { + if(GUILayout.Button(new GUIContent(">>","Go to next series of textures"))) { // Cycle through texture sets texture_set++; - //Skip fun textures for the article version -// if(texture_set == 4) -// texture_set = 5; - - if (only_best_textures) { - if(texture_set>0) texture_set = -texture_set; - - if (texture_set > -1) - texture_set = besttexSet_min; - } else { - if (texture_set > texSet_max) - texture_set = 1; + if (GUIMoleculeController.onlyBestTextures) { + if(texture_set>4) // First 5 pages are best textures (0-4) + texture_set = 0; + } + else{ + if (texture_set > textureMenuList.Count - 1) + texture_set = 5; } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); - // check whether texList has more than 15 entries and raise an error!! + // Check whether texList has more than 15 entries and raise an error ! int i=0; -// GUILayout.EndHorizontal(); GUILayout.Box(texDescr); GUILayout.BeginHorizontal(); + int buttonWidth = (int) (Rectangles.atomScalesWidth * 0.18); + int buttonHeight = (int) ( Rectangles.atomScalesHeight / 7f); + + foreach(string texFil in texList) { i++; if(i>5) {GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); i=1;} // if(GUILayout.Button((Texture)Resources.Load(texDir+texFil),GUILayout.Width(50),GUILayout.Height(50))) { - if(GUILayout.Button(new GUIContent((Texture)Resources.Load(texDir+texFil),texFil),GUILayout.Width(50),GUILayout.Height(50))) - { + if(GUILayout.Button(new GUIContent((Texture)Resources.Load(texDir+texFil),texFil),GUILayout.Width(buttonWidth),GUILayout.Height(buttonHeight))) { + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + Texture texture; if(texFil == "None") - BallUpdateHB.SetTexture("lit_spheres/divers/daphz05"); + texture = (Texture)Resources.Load("lit_spheres/divers/daphz05"); else - BallUpdateHB.SetTexture(texDir+texFil); + texture = (Texture)Resources.Load(texDir+texFil); + + if(UIData.grayscalemode) + texture = hbManager.ToGray(texture); + + if(!GUIMoleculeController.toggle_NA_CLICK){ + hbManager.SetTexture(texture, applyToAtoms, applyToRes, applyToChain); + } + else { + foreach(GameObject obj in Camera.main.GetComponent().objList) + hbManager.SetTexture(texture, (int)obj.GetComponent().number); + } } - } GUILayout.EndHorizontal(); -// GUILayout.Label(texDescr); + + GUI.enabled = true; + if (Event.current.type == EventType.Repaint) MoleculeModel.newtooltip = GUI.tooltip; - + } - - -// private void loadtexture2(int a){ // this is an old version ?? -// -// GUILayout.BeginHorizontal(); -// if(GUILayout.Button(new GUIContent("Confirm","Confirm all modifications"))) -// { -// -// m_texture=false; -// } -// GUILayout.EndHorizontal(); -// GUILayout.BeginHorizontal(); -// Texture2D none; -// none = (Texture2D)Resources.Load(""); -// if(GUILayout.Button(none,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture=""; -// } -// Texture2D daphz05; -// daphz05 = (Texture2D)Resources.Load("lit_spheres/divers/daphz05"); -// if(GUILayout.Button(daphz05,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/divers/daphz05"; -// } -// Texture2D daphz1; -// daphz1 = (Texture2D)Resources.Load("lit_spheres/divers/daphz1"); -// if(GUILayout.Button(daphz1,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/divers/daphz1"; -// } -// Texture2D hayward_spheregray; -// hayward_spheregray = (Texture2D)Resources.Load("hayward_spheregray"); -// if(GUILayout.Button(hayward_spheregray,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="hayward_spheregray"; -// -// } -// GUILayout.EndHorizontal(); -// GUILayout.BeginHorizontal(); -// Texture2D greentext; -// greentext = (Texture2D)Resources.Load("lit_spheres/objets/green_glass_860"); -// if(GUILayout.Button(greentext,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/objets/green_glass_860"; -// } -// Texture2D toon; -// toon = (Texture2D)Resources.Load("lit_spheres/dessin/toon"); -// if(GUILayout.Button(toon,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/dessin/toon"; -// } -// -// Texture2D blood; -// blood = (Texture2D)Resources.Load("lit_spheres/objets/blood"); -// if(GUILayout.Button(blood,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/objets/blood"; -// } -// -// Texture2D blue; -// blue = (Texture2D)Resources.Load("lit_spheres/dessin/blue"); -// if(GUILayout.Button(blue,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/dessin/blue"; -// } -// -// Texture2D draw3; -// draw3 = (Texture2D)Resources.Load("lit_spheres/dessin/draw3"); -// if(GUILayout.Button(draw3,GUILayout.Width(50),GUILayout.Height(50))) -// { -// -// BallUpdateHB.texture="lit_spheres/dessin/draw3"; -// } -// GUILayout.EndHorizontal(); -// } - - /** - * Provide a dialog for texture selection. - * There are two modes depending on the only_best_textures boolean. If it is true, only - * texture sets with negative numbers are displayed. They are supposed to be a condensed - * selection of the most useful textures. If only_best_textures is false, the very - * extensive list of all catalogued textures is available. - **/ - public void loadtexture(int a){ -// string[] texList; - - if(only_best_textures) { if(texture_set>0) texture_set=-1; }; // make sure values are negative for best textures - - // ######################################################################### TOP TEXTURES ************************************* - if (texture_set == -1) { - string[] texList = { "None", - "draw3","article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800","05-how-shading-crosshatch-3b", - "400px-Draw-a-Sphere-Step-7","draw-shade-spheres-1.3-800X800", "sphere_1_mth", "images-7", "toon", - "georgetownatelier_sphere_posterized", "sphere-_tutorial_6", "sphere-1p", "sphere1_1","sphere1copy","tumblr_lsyq66Y15D1r0o2eb"}; - textureMenu ("lit_spheres/dessin/", texList, "Draw Style #1"); - } - - if (texture_set == -5) { - string[] texList = { - "how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee", "E-C-S (386)","Sketch 10 - sphere1","Sketch 9 - sphere","zbVZE","0-2", - "CharcoalSphere","74027","8289_Making_a_metallic_sphere_", "crayon1","b11","chiaroscuro-valuescale","draw-shade-spheres-1.4-800X800", - "400px-Draw-a-Sphere-Step-8","sph_draw_MC"}; - textureMenu ("lit_spheres/dessin/", texList, "Draw Style #2"); - } + /// + /// Updates the colors of the ColorPicker boxes. + /// + public static void ChangeAllColors(){ - if (texture_set == -4) { - string[] texList = { - "psurftex/2-photos-sphere 2","psurftex/2-photos-sphere","psurftex/1396091264285309","psurftex/basic_shapes_monochrome_oil_painting-(0)", - "psurftex/starter sphere240 2","psurftex/silvery2","objets/MatcapQuartz","artext/white_01","artext/shopblack2","artext/shine_blue", - "objets/moon2","objets/planet2","objets/bowling1","metal/bronze1","metal/bille-en-acier-359590" - }; - textureMenu ("lit_spheres/", texList, "Photo Style"); + for (int i =0; i <200; i++){ + colorButtonNew[i] =buttonColor.color; + LoadTypeGUI.helixButtonNew[i] =Ribbons.HELIX_COLOR.color; + LoadTypeGUI.sheetButtonNew[i] =Ribbons.STRAND_COLOR.color; + LoadTypeGUI.coilButtonNew[i] =Ribbons.COIL_COLOR.color; + LoadTypeGUI.chainbuttonAnew[i] = Ribbons.ChainColorA.color; + LoadTypeGUI.chainbuttonBnew[i] = Ribbons.ChainColorB.color; + LoadTypeGUI.chainbuttonCnew[i] = Ribbons.ChainColorC.color; + LoadTypeGUI.chainbuttonDnew[i] = Ribbons.ChainColorD.color; + LoadTypeGUI.chainbuttonEnew[i] = Ribbons.ChainColorE.color; } - if (texture_set == -3) { - string[] texList = { - "dessin/hayward_sphere","dessin/basic_shapes_monochrome_oil_painting-(81)","dessin/sphere-2j","dessin/hqdefault", - "artistic/caspern","artistic/images","divers/draw2","wood/wood1","glass/glass","artext/or","artext/greenglass","artext/water1", - "artext/orpur","artext/5_04","artext/banane"}; - textureMenu ("lit_spheres/", texList, "Mixed Styles #1"); + colorButton.SetPixels(colorButtonNew); + colorButton.Apply(true); + LoadTypeGUI.helixButton.SetPixels(LoadTypeGUI.helixButtonNew); + LoadTypeGUI.helixButton.Apply(true); + LoadTypeGUI.sheetButton.SetPixels(LoadTypeGUI.sheetButtonNew); + LoadTypeGUI.sheetButton.Apply(true); + LoadTypeGUI.coilButton.SetPixels(LoadTypeGUI.coilButtonNew); + LoadTypeGUI.coilButton.Apply(true); + LoadTypeGUI.chainbuttonA.SetPixels (LoadTypeGUI.chainbuttonAnew); + LoadTypeGUI.chainbuttonA.Apply (true); + LoadTypeGUI.chainbuttonB.SetPixels (LoadTypeGUI.chainbuttonBnew); + LoadTypeGUI.chainbuttonB.Apply (true); + LoadTypeGUI.chainbuttonC.SetPixels (LoadTypeGUI.chainbuttonCnew); + LoadTypeGUI.chainbuttonC.Apply (true); + LoadTypeGUI.chainbuttonD.SetPixels (LoadTypeGUI.chainbuttonDnew); + LoadTypeGUI.chainbuttonD.Apply (true); + LoadTypeGUI.chainbuttonE.SetPixels (LoadTypeGUI.chainbuttonEnew); + LoadTypeGUI.chainbuttonE.Apply (true); + } // end of AtomScales + + + public void FileSelectedCallback(string path) { + m_fileBrowser = null; + if (path!=null) { + Debug.Log("Trying to load a texture for the Hyperballs"); + m_textPath = path; + m_last_texture_dir = System.IO.Path.GetDirectoryName(path); + WWW www = new WWW("file://" + m_textPath); + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + Texture2D grayTexture = new Texture2D(www.texture.width, www.texture.height); + if(!GUIMoleculeController.toggle_NA_CLICK){ + if(!UIData.grayscalemode){ + hbManager.SetTexture(www.texture, applyToAtoms, applyToRes, applyToChain); + } + else{ + grayTexture = hbManager.ToGray(www.texture); + hbManager.SetTexture(grayTexture, applyToAtoms, applyToRes, applyToChain); + } + } + else { + if(!UIData.grayscalemode){ + foreach(GameObject obj in Camera.main.GetComponent().objList) + hbManager.SetTexture(www.texture, (int)obj.GetComponent().number); + } + else{ + grayTexture = hbManager.ToGray(www.texture); + foreach(GameObject obj in Camera.main.GetComponent().objList) + hbManager.SetTexture(grayTexture, (int)obj.GetComponent().number); + } + } + } + GUIMoleculeController.FileBrowser_show2=false; +// Debug.Log("Mis a false"); + } + + + /// + /// Open the Panel selection Menu to apply premade color and texture panel. + /// + /// + /// No idea... + /// + public static void PanelsMenu(int a) { + GUIMoleculeController.showPanelsMenu = LoadTypeGUI.SetTitleExit("Panels Menu"); - if (texture_set == -2) { - string[] texList = { - "artext/perle","artext/1stwindow","objets/green_glass_860","artext/kirsch","artext/expo","artext/natural_01", - "organic/bone","organic/skin","wood/sph_orange_MC","divers/binary-sphere-logo" - }; - textureMenu ("lit_spheres/", texList, "Mixed Styles #2"); - } + //---------- To edit/add Color and Texture palettes, please read Assets/Resources/HowToColorPanel.txt ---------- + // NB : the name "ColorPanel.txt" and everything related to it (like panelDict, RenderDict or whatever) doesn't seem really great, + // but it would be a pain to change them now. [Erwan] + GUILayout.BeginHorizontal(); + GUILayout.Label("Color Panels"); + GUILayout.EndHorizontal(); - - // ######################################################################### DESSIN - if (texture_set == 1) { - string[] texList = { "None","crayon1","toon","draw3","melon1", "74027", "287457d8aba0f677ac18a913b9f0f441", "article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800", - "bruckner","gray","0-2","05-how-shading-crosshatch-3b","400px-Draw-a-Sphere-Step-7","8289_Making_a_metallic_sphere_","b11"}; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 1"); - } - - // ######################################################################### DESSIN #2 - if (texture_set == 2) { - string[] texList = { "chiaroscuro-valuescale","CharcoalSphere","cracked_sphere","draw-shade-spheres-1.3-800X800","how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee", - "E-C-S (386)","escher_3_spheres_1 2","escher_3_spheres_1 3","droppedImage","draw-shade-spheres-1.4-800X800", - "ex2_2_carter","eye2","fig14-charcoal-sphere","georgetownatelier_sphere_posterized","GlhTq"}; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 2"); + GUILayout.BeginHorizontal(); + if( GUILayout.Button(new GUIContent("All white", "Change all colors to white"))){ + SetColorPanel("All_White"); } - - // ######################################################################### DESSIN #3 - if (texture_set == 3) { - string[] texList = { "GRD3_LS03_IMG01","GRD3_LS03_IMG21","images-7","IMG_1339_2","IMG_1345_2", - "mqdefault","nancy_sphere","pointillism 2","pointillism 3","rZ0eX", - "Scan23c","Scan23d","shaded-sphere-1","Sketch 10 - sphere1","Sketch 9 - sphere" - }; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 3"); + if (GUILayout.Button(new GUIContent("Goodsell", "Change all colors to David Goodsell style colors"))){ + //extendedSelection = false; + quickSelection = true; + SetColorPanel("Goodsell"); + quickSelection = false; + //extendedSelection = true; + SetColorPanel("Goodsell"); + //O(0.95,0.76,0.76,1);N(0.75,0.76,0.94,1);S(0.85,0.84,0.46,1);C(0.76,0.76,0.76,1);P(0.99,0.82,0.59,1);H(0.95,0.95,0.95,1);X(0.55,0.55,0.55,1) + // Now with precise coloring of charged O and N ! } - - // ######################################################################### DESSIN #4 - if (texture_set == 4) { - string[] texList = { "sphere_1_mth","sphere-_tutorial_6","sphere-1j","sphere-1p","sphere-2p", - "sphere-drawingj1","sphere-exercise-3","sphere1_1","sphere1copy","sphere2-1", - "sphere2p","SphereAndShadow","spheregif","spheregif2","spherewhatches" - }; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 4"); + if (GUILayout.Button(new GUIContent("Watercolor", "Change all colors to Watercolor palette"))){ + quickSelection = true; + SetColorPanel("Watercolor"); + //O(0.60,0.13,0.11,1);N(0.19,0.27,0.63,1);S(0.98,0.91,0.44,1);C(0.55,0.86,0.89,1);P(0.99,0.69,0.28,1);H(0.99,0.98,0.96,1);X(0.16,0.17,0.29,1) } + GUILayout.EndHorizontal(); - // ######################################################################### DESSIN #5 - if (texture_set == 5) { - string[] texList = { "starter sphere240 3","starter sphere240","tumblr_lsyq66Y15D1r0o2eb","tYIlA","zbVZE", - "400px-Draw-a-Sphere-Step-2","400px-Draw-a-Sphere-Step-8","sph_draw_MC", - }; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 5"); + GUILayout.BeginHorizontal(); + if (GUILayout.Button(new GUIContent("Pastel", "Change all colors to pastel"))){ + quickSelection = true; + SetColorPanel("Pastel"); + //O(0.827,0.294,0.333,1);S(1,0.839,0.325,1);C(0.282,0.6,0.498,1);N(0.443,0.662,0.882,1);P(0.960,0.521,0.313,1);P(white);X(black) } - - // ######################################################################### PHOTOS TEXTURES - if (texture_set == 6) { - string[] texList = { "2-photos-sphere 2","2-photos-sphere","1396091264285309","basic_shapes_monochrome_oil_painting-(0)","shading-sphere-photo-005", - "sphere-drawing-reference","starter sphere240 2","thumbnail-140x140-ehow-images-a08-49-it-draw-planets-800x800","silvery2" - }; - textureMenu ("lit_spheres/psurftex/", texList, "Surface Textures"); + if (GUILayout.Button(new GUIContent("CPK", "A CPK-like atom color palette"))){ + quickSelection = true; + SetColorPanel("CPK"); + //O(0.78,0.0,0.09,1);N(0.21,0.67,0.92,1);S(0.86,0.84,0.04,1);C(0.02,0.02,0.03,1);P(1.0,0.60,0.0,1);H(1.0,1.00,0.99,1);X(0.03,0.56,0.26,1) } - - // ######################################################################### DESSIN COLORE - if (texture_set == 7) { - string[] texList = { "inks","blue","toon2","hayward_sphere","basic_shapes_monochrome_oil_painting-(81)", - "exercise2","hand_with_reflecting_sphere","hqdefault","source","sphere-2j", - "spherej","sphere2copykw6","sphere05"}; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 6"); + if(GUILayout.Button(new GUIContent("Basic","Set previous default color parameters (quite intense colors)"))){ + quickSelection = true; + SetColorPanel("Basic"); + //O(red);S(yellow);C(green);N(blue);P(0.6,0.3,0.0,1);H(white);X(black) } - - // ######################################################################### OBJECTS - if (texture_set == 25) { - string[] texList = { "green_glass_860","blood","petanque1", "moon1", "moon2", - "earth1", "earth2", "uk1", "planet1","planet2", - "bowling1","tablet1","bille-en-plastique-359520","bille","blu_green_litsphere_by_jujikabane" - }; - textureMenu ("lit_spheres/objets/", texList, "Objects #1"); + if (GUILayout.Button(new GUIContent("IUPAC?", "A IUPAC color palette (?)"))){ + quickSelection = true; + SetColorPanel("IUPAC"); + //O(0.21,0.67,0.92,1);N(0.03,0.56,0.26,1);S(0.86,0.84,0.04,1);C(1.0,1.00,0.99,1);P(1.0,0.60,0.0,1);H(0.02,0.02,0.03,1);X(0.78,0.0,0.09,1) } - - // ######################################################################### ARTEXT - if (texture_set == 26) { - string[] texList = { "belight","blackNblue","kirsch","chocolat","defaultball", - "disco","disco2","expo","vert","l+s1", - "l+s2","lightgray","natural_01","natural_02","neon" }; - textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #1"); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + if(!UIData.hasChains) + GUI.enabled = false; + if (GUILayout.Button(new GUIContent("Chains", "Quick chains coloring"))){ + quickSelection = true; + SetColorPanel("Chains"); } - - // ######################################################################### FUN - if (texture_set == 27) { - string[] texList = { "pig1","pumpkin1","skull1", "skull2", "skull3", - "explode1","china1", "china2","euro1","heart1", - "head1","head2","ballon" }; - textureMenu ("lit_spheres/fun/", texList, "Fun #1"); + GUI.enabled = true; + //T.T. Add coloring for sugar representation + if (GUILayout.Button(new GUIContent("Sugar", "Quick sugar type coloring"))){ + quickSelection = true; + SetColorPanel("Sugar"); } - - // ######################################################################### BIO - if (texture_set == 28) { - string[] texList = { "fluo1","fluo2","fluo3","fluo4","fluo5", - "fluo6", "fluo7", "fluo8", "fluo9", "fluo10", - "em1", "em2", "em3" }; - textureMenu ("lit_spheres/bio/", texList, "Bio #1"); + if(GUILayout.Button(new GUIContent("ADN/ARN", "Base coloring: A[red] T/U[blue] C[yellow] G[green]"))){ + quickSelection = true; + SetColorPanel("ADN-ARN"); } - - // ######################################################################### METAL - if (texture_set == 29) { - string[] texList = { "silvery1", "silvery2", "puzzle1", "black1","chrome1", - "bronze1","bille-en-acier-359590","steel","gold","metal", - "silver10" - }; - textureMenu ("lit_spheres/metal/", texList, "Metals #1"); + if(GUILayout.Button(new GUIContent("HiRE-RNA", "Base coloring: A[red] T/U[blue] C[yellow] G[green]"))){ + quickSelection = true; + SetColorPanel("HiRERNA"); } - - // ######################################################################### ORGANIC - if (texture_set == 30) { - string[] texList = { "wool1", "nobs1","nobs2","spike1","spike2", - "splinter1", "leaves1","anemone","blood2","bone", - "skin","Skin","vessel" - }; - textureMenu ("lit_spheres/organic/", texList, "Organic #1"); + GUILayout.EndHorizontal(); + + GUILayout.BeginHorizontal(); + GUILayout.Label("Texture Panels"); + GUILayout.EndHorizontal(); + + if(UIData.atomtype != UIData.AtomType.hyperball) + GUI.enabled = false; + + GUILayout.BeginHorizontal(); + if (GUILayout.Button(new GUIContent("Default", "Default color/texture palette"))){ + SetTexturePanel("All_White"); } - - // ######################################################################### ARTISTIC - if (texture_set == 8) { - string[] texList = { "caspern","carspen2","Gloss_Black","images","tableau-moderne-bille" - }; - textureMenu ("lit_spheres/artistic/", texList, "Artistic #1"); + if (GUILayout.Button(new GUIContent("CPK", "A CPK-like atom textures palette (great with CPK metaphor)"))){ + quickSelection = true; + SetTexturePanel("CPK"); + SetColorPanel("All_White"); } - - // ######################################################################### DIVERS - if (texture_set == 9) { - string[] texList = { "choco","daphz1","daphz2","daphz3","draw2", - "email","eye3","eye3gray","eye4","eyes2", - "eyes2gray", "eyes5", "gooch", "hexa","LitSphere_Example1" - }; - textureMenu ("lit_spheres/divers/", texList, "Various #1"); + if(!UIData.hasResidues) + GUI.enabled = false; + if (GUILayout.Button(new GUIContent("Acid-Basic", "A texturing for acid (ASP/GLU) and basic (ARG/LYS) residues."))){ + quickSelection = true; + SetTexturePanel("Acid-Base_Res"); + SetColorPanel("Acid-Base_Res"); } + GUI.enabled = true; + GUILayout.EndHorizontal(); - // ######################################################################### WOOD - if (texture_set == 10) { - string[] texList = { "wood1","sph_orange_MC" - }; - textureMenu ("lit_spheres/wood/", texList, "Woods #1"); + + if (Event.current.type == EventType.Repaint) + MoleculeModel.newtooltip = GUI.tooltip; + + GUI.DragWindow(); + } + + /// + /// Open the atoms extended selection Menu to apply changes to a specific atom. + /// + /// + /// No idea... + /// + public static void AtomsExtendedMenu(int a) { + GUIMoleculeController.showAtomsExtendedMenu = LoadTypeGUI.SetTitleExit("Choose an atom"); + + int buttonWidth = (int)(Rectangles.residuesMenuWidth / 4.8); + int count = 0; + + GUILayout.BeginHorizontal(); + + if(applyToAtoms.Contains("All")) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent("All", "All atoms"))){ + applyToAtoms.Clear(); + applyToAtoms.Add("All"); + //GUIMoleculeController.showAtomsExtendedMenu = false; } - - // ######################################################################### OBJECTS 2 - if (texture_set == 11) { - string[] texList = { "bluew","mat","matcap","MatcapQuartz","stone" - }; - textureMenu ("lit_spheres/objets/", texList, "Objects #2"); + GUI.color = Color.white; + GUILayout.EndHorizontal(); + + + while(count < MoleculeModel.existingName.Count){ + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + for(int i = 0; i < 4; i++){ + if(count < MoleculeModel.existingName.Count){ + if(applyToAtoms.Contains(MoleculeModel.existingName[count])) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent(MoleculeModel.existingName[count], ""), GUILayout.Width(buttonWidth))){ + if(!applyToAtoms.Contains(MoleculeModel.existingName[count])) + applyToAtoms.Add(MoleculeModel.existingName[count]); + else + applyToAtoms.Remove(MoleculeModel.existingName[count]); + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); +// GUIMoleculeController.showAtomsExtendedMenu = false; + } + GUI.color = Color.white; + } + count++; + } + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); } - - // ######################################################################### GLASS 1 - if (texture_set == 12) { - string[] texList = { "glass","glass2","glassbw" - }; - textureMenu ("lit_spheres/glass/", texList, "Glass #1"); + + if (Event.current.type == EventType.Repaint) + MoleculeModel.newtooltip = GUI.tooltip; + + GUI.DragWindow(); + } + + /// + /// Open the Residue selection Menu to apply changes to a specific residue. + /// + /// + /// No idea... + /// + public static void ResiduesMenu(int a) { + GUIMoleculeController.showResiduesMenu = LoadTypeGUI.SetTitleExit("Choose a residue"); + + int buttonWidth = (int)(Rectangles.residuesMenuWidth / 4.8); + int count = 0; + + GUILayout.BeginHorizontal(); + if(applyToRes == "All") + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent("All", "All residues"))){ + applyToRes = "All"; + //GUIMoleculeController.showResiduesMenu = false; } - - // ######################################################################### DIVERS 2 - if (texture_set == 13) { - string[] texList = { "matcap_2","material37","noise","truc","vertical1", - "hyperballparticle4","hyperballparticlegray","inks2","round_alpha","round", - "round1","round2","roundlight" - }; - textureMenu ("lit_spheres/divers/", texList, "Various #2"); + GUI.color = Color.white; + GUILayout.EndHorizontal(); + + + while(count < MoleculeModel.existingRes.Count){ + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + for(int i = 0; i < 4; i++){ + if(count < MoleculeModel.existingRes.Count){ + if(applyToRes == MoleculeModel.existingRes[count]) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent(MoleculeModel.existingRes[count], ""), GUILayout.Width(buttonWidth))){ + applyToRes = MoleculeModel.existingRes[count]; + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); +// GUIMoleculeController.showResiduesMenu = false; + } + GUI.color = Color.white; + } + count++; + } + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); } - - // ######################################################################### ARTEXT - if (texture_set == 14) { - string[] texList = { "pasha1","piggybank","rougebrillant","red_1","red_simple", - "redtowhite","rgestampage","rouille","shad1","shad2", - "shad3","shadow1","shadow2","estampage","simple10" - }; - textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #2"); + + if (Event.current.type == EventType.Repaint) + MoleculeModel.newtooltip = GUI.tooltip; + + GUI.DragWindow(); + } + + /// + /// Open the Chain selection Menu to apply changes to a specific chain. + /// + /// + /// No idea... + /// + public static void ChainsMenu(int a) { + GUIMoleculeController.showChainsMenu = LoadTypeGUI.SetTitleExit("Choose a chain"); + + int buttonWidth = (int)(Rectangles.residuesMenuWidth / 4.8); + int count = 0; + + GUILayout.BeginHorizontal(); + if(applyToChain == "All") + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent("All", "All chains"))){ + applyToChain = "All"; + //GUIMoleculeController.showChainsMenu = false; } - - if (texture_set == 15) { - string[] texList = { "simple2","simple4","simple6","simple7","simple8", - "simple9","simple_01","simple_02","simple_03","simple_blue", - "simple_contrast","simple_doberman","simple_goldcopy","simple_gold","simple_grey" - }; - textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #3"); + GUI.color = Color.white; + GUILayout.EndHorizontal(); + + while(count < MoleculeModel.existingChain.Count){ + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + + for(int i = 0; i < 4; i++){ + if(count < MoleculeModel.existingChain.Count){ + if(applyToChain == MoleculeModel.existingChain[count]) + GUI.color = Color.green; + if(GUILayout.Button(new GUIContent(MoleculeModel.existingChain[count], ""), GUILayout.Width(buttonWidth))){ + applyToChain = MoleculeModel.existingChain[count]; + if(GUIMoleculeController.m_colorPicker != null) + ColorPickerCaller (); +// GUIMoleculeController.showChainsMenu = false; + } + GUI.color = Color.white; + } + count++; + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); } + + if (Event.current.type == EventType.Repaint) + MoleculeModel.newtooltip = GUI.tooltip; + + GUI.DragWindow(); + } + + + /// + /// Inits the color/texture panel dictionary. + /// + public static void InitRenderDict() { + TextAsset cPanel = (TextAsset)Resources.Load("ColorPanel"); + StringReader sr = new StringReader(cPanel.text); + + string s; + string panelName = ""; + string[] splittedLine; + List infosFinal = new List(); + bool firstLoop = true; + float R, G, B, A; + + while((s=sr.ReadLine())!=null) { + // The last line of the file MUST be a single "$" or the last panel won't be added. + if(s.StartsWith("$")) { + if(!firstLoop) { + panelDict.Add(panelName, new List(infosFinal)); + infosFinal.Clear(); + + + } + panelName = s.Substring(1, s.Length - 1); + firstLoop = false; + } + else { + RendererInfos infos = new RendererInfos(); + splittedLine = s.Split(';'); + infos.atom = splittedLine[0].Trim(); + infos.residue = splittedLine[1].Trim(); + infos.chain = splittedLine[2].Trim(); + float.TryParse(splittedLine[3].Trim(), out R); + float.TryParse(splittedLine[4].Trim(), out G); + float.TryParse(splittedLine[5].Trim(), out B); + float.TryParse(splittedLine[6].Trim(), out A); + infos.color = new Color(R, G, B, A); + infos.texture = splittedLine[7].Trim(); + if((panelName=="PaperChain")&&(!colorByResiduesDict.ContainsKey(infos.residue))){ + colorByResiduesDict[infos.residue]=infos.color; + }else if ((panelName=="Chains") && (!ChainColorDict.ContainsKey(infos.chain))){ + ChainColorDict[infos.chain] = infos.color; + } - if (texture_set == 16) { - string[] texList = { "transp_01","transp_02","transp_03","transp_04","white_01", - "white_02","white_03","x","aqua","army", - "balloon1","balloon2","balloon3","balloon4","noir" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #4"); } - - if (texture_set == 17) { - string[] texList = { "bluebuz","blue1","blue2","blue3","blue4", - "bronze","chocolatlait","concave","sombre","oeuf", - "or","gris","verrebuz","greenglass","vertvelours" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #5"); } - - if (texture_set == 18) { - string[] texList = { "hameleon","encre","lightgray","peinture","paint1", - "paint2","paint3","rosebuz","rose","violet", - "purple1","rougebuz","red1","red2","removableeye" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #6"); } - - if (texture_set == 19) { - string[] texList = { "water1","water2","water3","rayonx","aquarelle", - "asperge","banane","noirmetal","bronze2","fruits", - "glossy","lumiereor","bijou","lemon","orclair" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #7"); } - - if (texture_set == 20) { - string[] texList = { "mango","lune","neon4","verreorange","orpur", - "raye","transparent","water","jaune","1_01", - "1_02","1_03","1_04","2_01","2_02" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #8"); } - - if (texture_set == 21) { - string[] texList = { "2_03","2_05","4","5_01","5_02", - "5_03","5_04","6_01","6_02","6_03", - "6_04","7","8_01","8_02","art_01" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #9"); } - - if (texture_set == 22) { - string[] texList = { "art_02","art_03","art_04","art_06","art_07", - "art_10","art_11","art_red","ceramique","keramic_01", - "perle","rainbow_01","rainbow_02","rainbow_03","rainbow_04" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #10"); } - - if (texture_set == 23) { - string[] texList = { "shine_blue","artball1","artball10","artball11","artball2", - "artball3","artball4","artball5","artball6","artball7", - "artball8","artball9","shopblack1","shopblack1invert","shopblack2" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #11"); } - if (texture_set == 24) { - string[] texList = { "shopblack3","shopblack4","shopgreen1","shopgreen2","shoppink1", - "shoppink2","shoppink3","shopred1","shopred2","shopred3", - "shopred4","1stwindow","3","7_12","glass1" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #12"); } -// ######################################################################### END + + infosFinal.Add(infos); + } + } + sr.Close(); + UIData.isRenderDictInit = true; + Debug.Log("ColorPanelDictionary Initialized"); + } + + /// + /// Inits the Textures Menu list. + /// + public static void InitTextureMenuList() { + TextAsset tList = (TextAsset)Resources.Load("TexturesMenu"); + StringReader sr = new StringReader(tList.text); + + string s; + string[] splittedLine; + while((s=sr.ReadLine())!=null) { + if(s.StartsWith("$")) + textureMenuTitles.Add(s.Substring(1, s.Length - 1)); + else { + splittedLine = s.Split(';'); + for(int i=0; i + /// Change the color of an atom type. + /// + /// + /// Character of the atom. String. + /// + /// + /// Color to apply. Color. + /// + public static void SetAtomColor(string atomChar, Color col) { + switch(atomChar) { + case "H" : + MoleculeModel.hydrogenColor.color = col; + break; + case "C" : + MoleculeModel.carbonColor.color = col; + break; + case "N" : + MoleculeModel.nitrogenColor.color = col; + break; + case "O" : + MoleculeModel.oxygenColor.color = col; + break; + case "P" : + MoleculeModel.phosphorusColor.color = col; + break; + case "S" : + MoleculeModel.sulphurColor.color = col; + break; + case "X" : + default : + MoleculeModel.unknownColor.color = col; + break; + } } + + /// + /// Change the color of all atoms according to a color panel. + /// + /// + /// Name of the color panel. String. + /// + public static void SetColorPanel(string panelName) { + if(panelDict.ContainsKey(panelName)) { + Debug.Log ("Setting color panel : " + panelName); + GenericManager manager = Molecule.View.DisplayMolecule.GetManagers()[0]; + foreach(RendererInfos panel in panelDict[panelName]){ + manager.SetColor(panel.color, ToList(panel.atom), panel.residue, panel.chain); + } + } + else + Debug.Log("!!! Invalid Panel Key : " + panelName); + } + + /// + /// Change the texture and color of all atoms according to a texture panel. + /// + /// + /// Name of the texture panel. String + /// + public static void SetTexturePanel(string panelName) { + if(panelDict.ContainsKey(panelName) && UIData.atomtype == UIData.AtomType.hyperball) { + Debug.Log ("Setting texture panel : " + panelName); + GameObject hbManagerObj = GameObject.FindGameObjectWithTag("HBallManager"); + HBallManager hbManager = hbManagerObj.GetComponent(); + foreach(RendererInfos panel in panelDict[panelName]) + hbManager.SetTexture(panel.texture, ToList(panel.atom), panel.residue, panel.chain); + } + else + Debug.Log("!!! Invalid Panel Key (or not hyperball) : " + panelName); + } + + } } diff --git a/Assets/Scripts/UI/GUIMoleculeController.cs b/Assets/Scripts/UI/GUIMoleculeController.cs index 786c5158..c477a5ee 100755 --- a/Assets/Scripts/UI/GUIMoleculeController.cs +++ b/Assets/Scripts/UI/GUIMoleculeController.cs @@ -63,10 +63,10 @@ /// J. Comput. Chem., 2011, 32, 2924 /// -namespace UI -{ +namespace UI { using UnityEngine; using System.Collections; + using System.Collections.Generic; using Molecule.Model; using Molecule.View; using Molecule.View.DisplayAtom; @@ -74,157 +74,80 @@ namespace UI // using System; - public class GUIMoleculeController - { - private static string umolversion = "v0.9.1 (R251)"; - //TODO: GET RID OF STATIC VARIABLES !!!!!!!!!!!!!!!!! (Singleton ?) + public class GUIMoleculeController { - //private bool toggleMouse = false; - //private bool toggleKey = false; + private static string umolversion = "v0.9.2 (R676)"; - public static int principalxstart = 5; - public static int principalystart = 5; - public static int principalwidth = 455; //535 with bfactor - public static int principalheight = 25; - - // Disposition of windows - public static int menuxstart = 5; //5 - public static int menuystart = 10; //10 - public static int menuwidth = 180; // 768 - public static int menuheight = 500; //30 - - public static int menuAtomxstart = 5; - public static int menuAtomystart = principalystart + principalheight; - public static int menuAtomwidth = 180; - public static int menuAtomheight = 205; - public static int menuSurfacexstart = menuAtomxstart + menuAtomwidth + 5 ; - public static int menuSurfaceystart = principalystart + principalheight; - public static int menuSurfacewidth = 175; - public static int menuSurfaceheight = 100; - public static int menuFieldxstart = menuSurfacexstart + menuSurfacewidth + 5 ; - public static int menuFieldystart = principalystart + principalheight; - public static int menuFieldwidth = 200; - public static int menuFieldheight = 300; - public static Rect MenuElectro_Rect = new Rect (menuFieldxstart, - menuFieldystart, - menuFieldwidth, - 120); - public static Rect FieldLineRect = new Rect (menuFieldxstart, - menuFieldystart + 120, - menuFieldwidth, - menuFieldheight - 60); - - public static int hyperballtypexstart = 5; - public static int hyperballtypeystart = menuAtomystart + menuAtomheight; - public static int hyperballtypewidth = 180; - public static int hyperballtypeheight = 360; - public static int atomtypexstart = 5; - public static int atomtypeystart = menuAtomystart + menuAtomheight; - public static int atomtypewidth = 180; - public static int atomtypeheight = 180; - public static int bondtypexstart = 5; - public static int bondtypeystart = menuAtomystart + menuAtomheight; - public static int bondtypewidth = 180; - public static int bondtypeheight = 180; - public static int graycolortypexstart = Screen.width - 240; - public static int graycolortypeystart = 5; - public static int graycolortypewidth = 238; - public static int graycolortypeheight = 308; - public static int texturetypexstart = principalxstart + principalwidth + 70; -// public static int texturetypeystart = graycolortypeystart+graycolortypeheight+20; - public static int texturetypeystart = principalystart; - public static int texturewidth = 290; - public static int textureheight = 208; - public static Rect texturetype_rect = new Rect (texturetypexstart, texturetypeystart, texturewidth, textureheight); - - public static int texSet_max=30; /*!< Maximum number of full texture pages */ - public static int besttexSet_min=-5; /*!< Maximum number of condensed texture pages (negative value!) */ - //public bool only_best_textures = false; /*!< Toggle condensed set of textures vs. full set */ - public bool only_best_textures = true; - public static int texture_set=1; - - public static int menuparamsurfacexstart = menuSurfacexstart; - public static int menuparamsurfaceystart = menuSurfaceystart + 100; - public static int menuparamsurfacewidth = menuSurfacewidth; - public static int menuparamsurfaceheight = menuSurfaceheight + 50; - public static int surfacecuttypexstart = menuAtomxstart + menuAtomwidth + 5; - public static int surfacecuttypeystart = menuSurfaceystart + menuSurfaceheight + 150; - public static int surfacecuttypewidth = 175; - public static int surfacecuttypeheight = 200; - public static int movesurfacecuttypexstart = surfacecuttypexstart; - public static int movesurfacecuttypeystart = surfacecuttypeystart + surfacecuttypeheight; - public static int movesurfacecuttypewidth = 175; - public static int movesurfacecuttypeheight = 175; - public static int metaphortypexstart = menuAtomxstart + menuAtomwidth; - public static int metaphortypeystart = surfacecuttypeystart + surfacecuttypeheight + 5; - public static int metaphortypewidth = 180; - public static int metaphortypeheight = 140; - - // a revoir - public static int manipulatorwidth = 230; - public static int manipulatorheight = 175; - public static int manipulatorxstart = Screen.width - 240; - public static int manipulatorystart = Screen.height - manipulatorheight - 20; - public static Rect rect_manipulator = new Rect(manipulatorxstart,manipulatorystart,manipulatorwidth,manipulatorheight); - private static int manipulatormoveheight = manipulatorheight-50; - private static int manipulatormoveystart = Screen.height - manipulatormoveheight - 20; - public static Rect rect_manipulatormove = new Rect(manipulatorxstart,manipulatormoveystart,manipulatorwidth,manipulatormoveheight); - public static Rect colorPicker_rect = new Rect(manipulatorxstart - graycolortypewidth - 5, - Screen.height - graycolortypeheight - 20, - graycolortypewidth, - graycolortypeheight); - public static int effecttypewidth = 180; - public static int effecttypeheight = 245; - public static int effecttypexstart = (int)colorPicker_rect.x - effecttypewidth - 5; - public static int effecttypeystart = Screen.height - effecttypeheight -20; - public static int backtypewidth = 110; - public static int backtypeheight = 125; - public static int backtypexstart = manipulatorxstart + 60; - public static int backtypeystart = manipulatorystart - backtypeheight - 5; - - // bool for showing window - - public static bool menuOpen_show = true; - public static bool menuAtom_show = false; - public bool menuSurface_show = false; - public bool menuBfactor_show = false; - public bool menuField_show = false; - public bool menuManipulator_show = false; - public static bool SetAtomScale_show = false; - string structtype = "All atoms"; - +// public static int texSet_max=30; /*!< Maximum number of full texture pages */ +// public static int besttexSet_min=-5; /*!< Maximum number of condensed texture pages (negative value!) */ + public static bool onlyBestTextures = true; /*!< Toggle condensed set of textures vs. full set */ + public static int texture_set=0; + + //bool for default visualisation with Hyperballs + public static bool HYPERBALLSDEFAULT = true; + + + // bool for showing windows + public static bool showOpenMenu = true; + public static bool showAtomMenu = false; + public static bool showSecStructMenu = false; + public static bool showSurfaceMenu = false; + public static bool showHydroMenu = false; + public static bool showBfactorMenu = false; + public static bool showElectrostaticsMenu = false; + public static bool showManipulatorMenu = false; // Careful! This boolean and all associated behavior are backwards! + public static bool showSetAtomScales = false; + public static string structType = "All atoms"; + public static bool showAdvMenu = false; + public static bool showGuidedMenu = false; + public static bool showResiduesMenu = false; + public static bool showAtomsExtendedMenu = false; + public static bool showChainsMenu = false; + public static bool showPanelsMenu = false; + public static bool showSugarChainMenu = false; // T.T Sugar menu + public static bool showSugarRibbonsTuneMenu = false; + public static bool showColorTuneMenu = false; + public static bool showVRPNMenu = false; + public static bool showMDDriverMenu = false; + + // Generic toggles // DISTRIBUTION public static bool toggle_HELP = false; + public static bool toggle_INFOS = true; public static bool toggle_VE_COPYR = true; - public static bool toggle_HB_SANIM = false; - public static float hb_sanim = 0.7f; - public static float hb_ssign = 1.0f; - public static bool toggle_HB_RANIM = false; - public static float hb_ranim = 0.4f; - public static float hb_rsign = 1.0f; - public static float shrink = 0.1f; - public static float rayon = 1.0f; - public static float linkscale = 1.0f; - public static float depthfactor = -1.0f; - public static float drag = 0.6f; - public static float spring = 5; - - -//Electric field line symbol radius + public static bool toggle_HB_SANIM = false; + public static float hb_sanim = 0.7f; + public static float hb_ssign = 1.0f; + public static bool toggle_HB_RANIM = false; + public static float hb_ranim = 0.4f; + public static float hb_rsign = 1.0f; + public static float shrink = 0.1f; + public static float globalRadius = 1.0f; + public static float linkScale = 1.0f; + public static float depthfactor = -1.0f; + public static float drag = 0.6f; + public static float spring = 5; + public static float bondWidth = 0.15f ; // default bond width for cube/line + public static float highBFradius = 1.0f; + + + //Electric field line symbol radius public static float symbolradius = 1.0f; -//CPK Licorice - public static bool transCPK_LICORICE = false; + //CPK Licorice + public static bool transMETAPHOR = false; public static float deltaShrink; public static float deltaScale; public static float deltaRadius; public static float newShrink; public static float newScale; - public static float newRadius; + public static float newGlobalRadius = 1.0f; public static float transDelta = 25.0f; + public static bool toggle_HB_TRANS = true; public static bool toggle_NA_INTERACTIVE = false; + public static bool toggle_MDDRIVER = false; public static bool toggle_NA_HIDE = false; public static bool toggle_NA_SWITCH = false; public static bool toggle_NA_HBALLSMOOTH = false; @@ -233,93 +156,125 @@ public class GUIMoleculeController public static bool toggle_NA_CLICK = false; public static bool toggle_NA_MAXCAM = true; public static bool toggle_NA_AUTOMOVE = false; + public static bool toggle_NA_CAMLOCK = false; public static bool toggle_MESHCOMBINE = false; - private GameObject scenecontroller = null; - private Molecule3D Molecule3DComp = null; - private Quaternion NA_SCCROT = new Quaternion (-0.1f, 0.1f, 0.0f, -1.0f); - private Vector3 NA_SCCPOS = new Vector3 (0.4f, 1.8f, -12.0f); - private bool toggle_VE_BLUR = false; - private bool toggle_VE_SSAO = false; - private bool toggle_VE2_VORTX = false; - private bool toggle_VE2_TWIRL = false; - private bool toggle_VE2_SEPIA = false; - private bool toggle_VE2_NOISE = false; - private bool toggle_VE2_GRAYS = false; - private bool toggle_VE2_GLOW = false; - private bool toggle_VE2_EDGE = false; - private bool toggle_VE2_CONTR = false; - private bool toggle_VE2_CCORR = false; - private bool toggle_VE2_BLUR2 = false; - private bool toggle_VE2_DREAM = false; + protected static GameObject scenecontroller = null; + protected static Molecule3D Molecule3DComp = null; + protected static Quaternion NA_SCCROT = new Quaternion (-0.1f, 0.1f, 0.0f, -1.0f); + protected static Vector3 NA_SCCPOS = new Vector3 (0.4f, 1.8f, -12.0f); + protected static bool toggle_VE_BLUR = false; + protected static bool toggle_VE_SSAO = false; + protected static bool toggle_VE_DOF = false; + protected static bool toggle_VE_CREASE = false; + protected static bool toggle_VE2_VORTX = false; + protected static bool toggle_VE2_TWIRL = false; + protected static bool toggle_VE2_SEPIA = false; + protected static bool toggle_VE2_NOISE = false; + protected static bool toggle_VE2_GRAYS = false; + protected static bool toggle_VE2_GLOW = false; + protected static bool toggle_VE2_EDGE = false; + protected static bool toggle_VE2_CONTR = false; + protected static bool toggle_VE2_CCORR = false; + protected static bool toggle_VE2_BLUR2 = false; + protected static bool toggle_VE2_DREAM = false; + + protected static bool toggle_DISTANCE_CUEING = false; + public static bool toggle_SEC_STRUCT = false; + public static bool toggle_RING_BLENDING=false; //T.T RingBlending visu - public for remove visu when CLEAR (reset to false) + public static bool toggle_SUGAR_ONLY=true; + public static bool toggle_TWISTER=false; + public static bool toggle_HIDE_HYDROGEN=false; + public static bool toggle_SHOW_HB_W_SR=false; + public static bool toggle_SHOW_HB_NOT_SUGAR=false; + public static bool oxyToggled = false; + public static bool toggle_OXYGEN=false; + protected static bool distanceCueingEnabled = false; + protected static bool cutPlaneIsDraggable = true; + private GUIContent[] listatom; private GUIContent[] listbond; private GUIStyle listStyle; // Bottom left UnityMol icon and link to helptext (currently local file, to be updated). private static Texture2D guicon = Resources.Load ("Artwork/guicon") as Texture2D; - //private static string umolbase = "file:///opt/Unity3D/UnityMol"; +// private static string umolbase = "file:///opt/Unity3D/UnityMol"; // private static string umolbase = "http://www.shaman.ibpc.fr"; private static string umolbase = "http://www.baaden.ibpc.fr/umol"; // Ramps for grayscale effect - private string[] ve2_grays_ramps = {"grayscale ramp", "grayscale ramp inverse"}; - private int ve2_grays_rampn = 1; - private int ve2_grays_rampc = 1; + protected static string[] ve2_grays_ramps = {"grayscale ramp", "grayscale ramp inverse"}; + protected static int ve2_grays_rampn = 1; + protected static int ve2_grays_rampc = 1; // Ramps for color correction effect - private string[] ve2_ccorr_ramps = {"oceangradient", "nightgradient"}; - private int ve2_ccorr_rampn = 1; - private int ve2_ccorr_rampc = 0; - - // bool for showing window - public bool atomtype_show = false; - public bool bondtype_show = false; - public bool effecttype_show = false; - public bool graycolor_show = false; - public bool hyperballs_menu_show = false; + protected static string[] ve2_ccorr_ramps = {"oceangradient", "nightgradient"}; + protected static int ve2_ccorr_rampn = 1; + protected static int ve2_ccorr_rampc = 0; + + // bool for showing windows + public static bool showAtomType = false; + public static bool showBondType = false; + public static bool showEffectType = false; + public static bool showGrayColor = false; + public static bool showHyperballsMenu = false; + public static bool showCubeLineBondMenu = false ; // public bool surfacecolor_show= false; - public bool SurfaceButton_show = false; - public bool backgroundtype_show = false; - public bool metaphortype_show = false; -// public bool ParamFieldLine_show=false; - public static bool FieldLine_show = false; - public bool Surface_show = false; - public static bool FieldLineColorGradient = true; + public static bool showSurfaceButton = false; + public static bool showBackgroundType = false; + public static bool showMetaphorType = false; +// public bool ParamshowFieldLine=false; + public static bool showFieldLines = false; + public static bool showSurface = false; + public static bool fieldLineColorGradient = true; + public static bool showVolumetricDensity = false; + public static bool showVolumetricFields = false; // volumetric electrostatic fields + public static bool showVolumetricDepth = false; + public static bool electroIsoSurfaceTransparency = false; // variable for the surface and field lines cutting - public static float depthcut = 40f; - public static bool surface_mobilecut = false; - public static bool surface_staticcut = false; - public static bool SurfaceCut_show = false; - public static bool SurfaceMobileCut_show = false; - public static float depthcutMin = 0; - public static float depthcutMax = 0; - - public static bool surface_texture = false; - public static bool external_surface_texture = false; - public static bool surface_texture_show = false; - public static string surface_texture_name; + public static float depthCut = 40f; + public static bool surfaceMobileCut = false; + public static bool surfaceStaticCut = false; + public static bool showSurfaceCut = false; + public static bool showSurfaceMobileCut = false; + public static float depthCutMin = 0; + public static float depthCutMax = 0; + + public static bool surfaceTexture = false; + public static bool externalSurfaceTexture = false; + public static bool showSurfaceTexture = false; + public static string surfaceTextureName; + public static bool surfaceTextureDone = false; public static float cutX = 1f; public static float cutY = 0f; public static float cutZ = 0f; - public static float adjustFieldLinecut = 40f; - public static float generateSeuil = 0.5f; - public static float generateSeuilDx_pos = 0f; - public static float generateSeuilDx_neg = 0f; + public static float adjustFieldLineCut = 40f; + public static float generateThreshold = 0.5f; + public static float generateThresholdDx_pos = 0f; + public static float generateThresholdDx_neg = 0f; public static bool modif = false; - public static bool pdbgen = false; // bool of density grid. true when density was calculated - public static bool dxread = false; // true when dx read - public static bool surface_build = false; + public static bool pdbGen = false; // bool of density grid. true when density was calculated + public static bool dxRead = false; // true when dx read + public static bool buildSurface = false; + public static bool buildSurfaceDone = false; public static bool FileBrowser_show = false; public static bool FileBrowser_show2 = false; public static ImprovedFileBrowser m_fileBrowser; public static string m_textPath; public static string m_last_extSurf_Path = null; - public static Texture2D ext_surf; + public static Texture2D extSurf; + + protected static bool showAtoms = true ; // whether atoms are displayed + protected static float prevRadius; // previous radius, needed to save the radius when hiding atoms + protected static DepthCueing depthCueing; + protected static AmbientOcclusion ambientOcclusion; + + private static GUIContent emptyContent = new GUIContent() ; // We create our own titles, we don't want to use Unity's, because they force window top padding. + // MB for centered text - protected GUIStyle CentredText { + protected static GUIStyle CentredText { get { if (m_centredText == null) { m_centredText = new GUIStyle (GUI.skin.label); @@ -329,21 +284,21 @@ protected GUIStyle CentredText { } } - protected GUIStyle m_centredText; + protected static GUIStyle m_centredText; -// pos = mul (UNITY_MATRIX_MVP, float4(IN.worldPos,0f)); +// pos = mul (UNITY_MATRIX_MVP, float4(IN.worldPos,0f)); // clip (frac(-(-5+pos.z)/500) - 0.2); - ReadDX readdx;// = new ReadDX (); + public static ReadDX readdx;// = new ReadDX (); // public Texture2D aTexture; - float colorRed = 0.0f; - float colorGreen = 0.0f; - float colorBlue = 0.0f; + protected static float colorRed = 0.0f; + protected static float colorGreen = 0.0f; + protected static float colorBlue = 0.0f; -// Field line paramter: + // Field line paramter: public static float speed = 0.13333333f; public static float density = 3.4f; public static float linewidth = 0.2f; @@ -351,7 +306,14 @@ protected GUIStyle CentredText { public static float linelength = 0.7f; public static ColorObject EnergyGrayColor = new ColorObject(Color.white); public static ColorObject SurfaceGrayColor = new ColorObject(Color.white); // color of surface + public static ColorObject SurfaceInsideColor = new ColorObject(Color.gray); // color of the inside of the surface public static ColorObject BackgroundColor = new ColorObject(Color.black); + public static ColorObject BondColor = new ColorObject(Color.black); + public static ColorObject BondColorcheck = new ColorObject(Color.black); + public static ColorObject RingColor = new ColorObject(Color.black); + public static ColorObject OxySphereColor = new ColorObject(Color.red); + public static ColorObject OxySphereColorCheck = new ColorObject(Color.red); + public static ColorObject RingColorcheck = new ColorObject(Color.black); public static ColorPicker m_colorPicker = null; @@ -359,18 +321,18 @@ protected GUIStyle CentredText { private bool firstpass = true; //Electrostatic iso-surface parameters - public static bool Elect_iso_positive_show = false; - public static bool Elect_iso_negative_show = false; - public static bool Elect_iso_positive_initialized = false; - public static bool Elect_iso_negative_initialized = false; + public static bool showElectroIsoPositive = false; + public static bool showElectroIsoNegative = false; + public static bool electroIsoPositiveInitialized = false; + public static bool electroIsoNegativeInitialized = false; - public static void CreateColorPicker(ColorObject col, string title) + public static void CreateColorPicker(ColorObject col, string title, List atomTarget, string residueTarget = "All", string chainTarget = "All") { if(m_colorPicker != null) m_colorPicker = null; - m_colorPicker = new ColorPicker(colorPicker_rect, col, title); + m_colorPicker = new ColorPicker(Rectangles.colorPickerRect, col, atomTarget, residueTarget, chainTarget, title); } public GUIMoleculeController () @@ -382,32 +344,33 @@ public GUIMoleculeController () scenecontroller = GameObject.Find ("LoadBox"); Molecule3DComp = scenecontroller.GetComponent (); - -// listatom = new GUIContent[11]; -// listatom[0] = new GUIContent("Cube"); -// listatom[1] = new GUIContent("Sphere"); -// listatom[2] = new GUIContent("HyperBall"); -// listatom[3] = new GUIContent("Raycasting"); -// listatom[4] = new GUIContent("Common Billboard"); -// listatom[5] = new GUIContent("RayCasting Billboard"); -// listatom[6] = new GUIContent("HyperBall Billboard"); -// listatom[7] = new GUIContent("RayCasting Sprite"); -// listatom[8] = new GUIContent("Multi-Hyperball"); -// listatom[9] = new GUIContent("CombineMesh HyperBall"); -// listatom[10] = new GUIContent("ParticleBall"); -// -// listbond = new GUIContent[7]; -// listbond[0] = new GUIContent("Cube"); -// listbond[1] = new GUIContent("Line"); -// listbond[2] = new GUIContent("HyperStick"); -// listbond[3] = new GUIContent("Tube Stick"); -// listbond[4] = new GUIContent("Billboard HyperStick"); -// listbond[5] = new GUIContent("Particle Stick"); -// listbond[6] = new GUIContent("No Stick"); +/* + listatom = new GUIContent[11]; + listatom[0] = new GUIContent("Cube"); + listatom[1] = new GUIContent("Sphere"); + listatom[2] = new GUIContent("HyperBall"); + listatom[3] = new GUIContent("Raycasting"); + listatom[4] = new GUIContent("Common Billboard"); + listatom[5] = new GUIContent("RayCasting Billboard"); + listatom[6] = new GUIContent("HyperBall Billboard"); + listatom[7] = new GUIContent("RayCasting Sprite"); + listatom[8] = new GUIContent("Multi-Hyperball"); + listatom[9] = new GUIContent("CombineMesh HyperBall"); + listatom[10] = new GUIContent("ParticleBall"); + + listbond = new GUIContent[7]; + listbond[0] = new GUIContent("Cube"); + listbond[1] = new GUIContent("Line"); + listbond[2] = new GUIContent("HyperStick"); + listbond[3] = new GUIContent("Tube Stick"); + listbond[4] = new GUIContent("Billboard HyperStick"); + listbond[5] = new GUIContent("Particle Stick"); + listbond[6] = new GUIContent("No Stick"); +*/ //Get the ReadDX component readdx = scenecontroller.GetComponent(); - //Debug.Log("READDX GUIMolecule: " + readdx); +// Debug.Log("READDX GUIMolecule: " + readdx); // Make a GUIStyle that has a solid white hover/onHover background to indicate highlighted items listStyle = new GUIStyle (); @@ -424,86 +387,106 @@ public GUIMoleculeController () listStyle.onHover.background = tex; listStyle.padding.left = listStyle.padding.right = listStyle.padding.top = listStyle.padding.bottom = 4; - aTexture = (Texture2D)Resources.Load ("EnergyGrayColor2"); + aTexture = (Texture2D)Resources.Load ("EnergyGrayColorAlpha"); } public static void InitMoleculeParameters() { - depthcutMin = -5 + Mathf.Min(new float[]{MoleculeModel.MinValue.x, + depthCutMin = -5 + Mathf.Min(new float[]{MoleculeModel.MinValue.x, MoleculeModel.MinValue.y, MoleculeModel.MinValue.z}); - depthcutMax = 5 + Mathf.Max(new float[]{MoleculeModel.MaxValue.x, + depthCutMax = 5 + Mathf.Max(new float[]{MoleculeModel.MaxValue.x, MoleculeModel.MaxValue.y, MoleculeModel.MaxValue.z}); - depthcut = depthcutMax; + depthCut = depthCutMax; } - - // void OnGUI () - // { - // if (GUI.tooltip != "") - // GUI.Label (new Rect (120, Screen.height - 35, Screen.width - 360, 20), GUI.tooltip); - // } - + + + /// + /// Prevents the camera from moving along with the mouse if the cursor is over any active menu or button. + /// Currently a bit dirty, since existing rectangles are recreated for the pruposes of this function. + /// public void CameraStop () { - +/* // rectangle were the mouse isn't active - Rect guirect = new Rect (principalxstart, principalystart, principalwidth, principalheight); - Rect guirect2 = new Rect (menuAtomxstart, menuAtomystart, menuAtomwidth, menuAtomheight); - Rect guirect3 = new Rect (atomtypexstart, atomtypeystart, atomtypewidth, atomtypeheight); - Rect guirect4 = new Rect (bondtypexstart, bondtypeystart, bondtypewidth, bondtypeheight); - Rect guirect5 = new Rect (effecttypexstart, effecttypeystart, effecttypewidth, effecttypeheight); - Rect guirect6 = new Rect (backtypexstart, backtypeystart, backtypewidth, backtypeheight); - // Rect guirect7 = new Rect (graycolortypexstart, graycolortypeystart, graycolortypewidth, graycolortypeheight); - Rect guirect8 = new Rect (metaphortypexstart, metaphortypeystart, metaphortypewidth, metaphortypeheight); - // Rect guirect9 = new Rect (menuFieldxstart, menuFieldystart, menuFieldwidth, menuFieldheight); - Rect guirect10 = new Rect (menuSurfacexstart, menuSurfaceystart, menuSurfacewidth, menuSurfaceheight); - Rect rect_surfacecut = new Rect (surfacecuttypexstart, surfacecuttypeystart, surfacecuttypewidth, surfacecuttypeheight); - Rect rect_cutplanmove = new Rect (surfacecuttypexstart, surfacecuttypeystart, surfacecuttypewidth, surfacecuttypeheight + movesurfacecuttypeheight); - Rect guirectHyperballs = new Rect (hyperballtypexstart, hyperballtypeystart, hyperballtypewidth, hyperballtypeheight); + Rect guirect = Rectangles.mainRect; + Rect guirect2 = Rectangles.atomMenuRect; + Rect guirect3 = Rectangles.atomStyleRect; + Rect guirect4 = Rectangles.bondTypeRect; + Rect guirect5 = Rectangles.effectTypeRect; + Rect guirect6 = Rectangles.backTypeRect; + Rect guirect8 = Rectangles.metaphorRect; + Rect guirect10 = Rectangles.surfaceMenuRect; + Rect guirectHyperballs = Rectangles.hyperballRect; // right window - Rect guirectD11 = new Rect (Screen.width - 295, 0, 290, 350); + Rect guirectD11 = Rectangles.atomScalesRect; Rect guirectD12 = new Rect (Screen.width - 295, 0, 290, 65); - Rect rect_paramsurface = new Rect (menuparamsurfacexstart, menuparamsurfaceystart, menuparamsurfacewidth, menuparamsurfaceheight); + Rect rect_paramsurface = Rectangles.surfaceParametersRect; Rect guirectFileBrow = new Rect (400, 100, 600, 500); - Rect Manipulator = new Rect (manipulatorxstart, manipulatorystart, manipulatorwidth, manipulatorheight); - Rect moveplan = new Rect (movesurfacecuttypexstart, movesurfacecuttypeystart, movesurfacecuttypewidth, movesurfacecuttypeheight); + Rect Manipulator = Rectangles.manipulatorRect ; + // Rect colorpickerAtom = new Rect (Screen.width - 238, 350, 238, 308); - // TO DO : un rectangle pour desactivé le mouvement de la protéine quand on regle le plan. de coupe +*/ Rect screen = new Rect (0, 0, Screen.width, Screen.height); Vector3 mousePos = Input.mousePosition; mousePos.y = Screen.height - mousePos.y; - // check were mouse have to be active - if (!screen.Contains (mousePos) + // [Erwan - 28/08/13] I didn't delete this since HotControl isn't as good as checking rectangle by rectangle, + // still, it's probably lighter than recreating all those rectangles and making all those tests +/* if (!screen.Contains (mousePos) + || (Rectangles.helpRect.Contains(mousePos)) + || (Rectangles.exitRect.Contains(mousePos)) || (guirectFileBrow.Contains (mousePos) && FileBrowser_show) || (guirectFileBrow.Contains (mousePos) && FileBrowser_show2) - || (Manipulator.Contains (mousePos) && menuManipulator_show) + || (Manipulator.Contains (mousePos) && showManipulatorMenu) + || (Rectangles.manipulatorMoveRect.Contains(mousePos) && !showManipulatorMenu) || guirect.Contains (mousePos) - || (menuAtom_show && guirect2.Contains (mousePos)) - || (atomtype_show && guirect3.Contains (mousePos)) - || (bondtype_show && guirect4.Contains (mousePos)) - || (effecttype_show && guirect5.Contains (mousePos)) - || (backgroundtype_show && guirect6.Contains (mousePos)) - || (m_colorPicker != null && m_colorPicker.enabled && colorPicker_rect.Contains (mousePos)) - || (metaphortype_show && guirect8.Contains (mousePos)) - || (menuField_show && MenuElectro_Rect.Contains (mousePos)) - || (menuField_show && FieldLine_show && FieldLineRect.Contains(mousePos)) - || (menuSurface_show && guirect10.Contains (mousePos)) - || (menuBfactor_show && guirect10.Contains (mousePos)) - || (menuSurface_show && SurfaceCut_show && rect_cutplanmove.Contains (mousePos)) - || (menuSurface_show && SurfaceMobileCut_show && rect_surfacecut.Contains (mousePos)) - || (surface_texture_show && texturetype_rect.Contains (mousePos)) - || SetAtomScale_show && !UIData.hiddenUIbutFPS && guirectD11.Contains (mousePos) + || (showAtomMenu && guirect2.Contains (mousePos)) + || (showAtomType && guirect3.Contains (mousePos)) + || (showBondType && guirect4.Contains (mousePos)) + || (showEffectType && guirect5.Contains (mousePos)) + || (showBackgroundType && guirect6.Contains (mousePos)) + || (m_colorPicker != null && m_colorPicker.enabled && Rectangles.colorPickerRect.Contains (mousePos)) + || (showMetaphorType && guirect8.Contains (mousePos)) + || (showElectrostaticsMenu && Rectangles.electroMenuRect.Contains (mousePos)) + || (showElectrostaticsMenu && showFieldLines && Rectangles.fieldLinesRect.Contains(mousePos)) + || (showSurfaceMenu && guirect10.Contains (mousePos)) + || (showBfactorMenu && guirect10.Contains (mousePos)) + || (showSurfaceMenu && showSurfaceCut && Rectangles.movePlaneRect.Contains (mousePos)) + || (showSurfaceMenu && showSurfaceCut && Rectangles.surfaceCutRect.Contains (mousePos)) + || (showSurfaceMenu && showSurfaceMobileCut && Rectangles.surfaceMobileCutRect.Contains(mousePos)) + || (showSurfaceTexture && Rectangles.textureRect.Contains (mousePos)) + || showSetAtomScales && !UIData.hiddenUIbutFPS && guirectD11.Contains (mousePos) || GUIDisplay.m_max && UIData.hiddenUIbutFPS && guirectD12.Contains (mousePos) - || GUIDisplay.m_texture && texturetype_rect.Contains (mousePos) - || (rect_paramsurface.Contains (mousePos) && GameObject.FindGameObjectWithTag ("SurfaceManager") && (menuSurface_show || menuBfactor_show || menuField_show)) - || (guirectHyperballs.Contains (mousePos) && hyperballs_menu_show) - ) { + || GUIDisplay.m_texture && Rectangles.textureRect.Contains (mousePos) + || (rect_paramsurface.Contains (mousePos) && GameObject.FindGameObjectWithTag ("SurfaceManager") && (showSurfaceMenu || showBfactorMenu || showElectrostaticsMenu)) + || (guirectHyperballs.Contains (mousePos) && showHyperballsMenu) + || (showCubeLineBondMenu && Rectangles.cubeLineBondRect.Contains(mousePos)) + || (showAdvMenu && Rectangles.advOptionsRect.Contains(mousePos)) + || (MouseOverMolecule.stopCamera) + ) +*/ + // Check where mouse has to be active + // I think GUIUtility.hotControl is enough to check wether the mouse is on a GUI component or on the molecule. [Erwan] + // After some tries, it didn't work with some rectangles like ColorPicker or CutPlane... + // The mousewheel is still enabled on normal GUIs (not on colorpicker, cutplane...) -> Hotcontrol only watch the mouse click. + // Also, small problem when low FPS (I think ?) causing HotControl to activate with a small delay : when you click on menus, the molecule will often move a little before HotControl freeze camera + if( + !screen.Contains (mousePos) // Avoid scrolling outside the screen + || GUIUtility.hotControl != 0 // Mouse on a GUI + || (m_colorPicker != null && m_colorPicker.enabled && Rectangles.colorPickerRect.Contains (mousePos)) // Special GUIs + || (showSurfaceMenu && showSurfaceCut && Rectangles.movePlaneRect.Contains (mousePos)) + || (showBackgroundType && Rectangles.backTypeRect.Contains(mousePos)) +// || (FileBrowser_show2 && Rectangles.fileBrowserRect.Contains(mousePos)) // Can't manage to disable scrolling on filebrowser ?? + || (MouseOverMolecule.stopCamera) // Interactive mode + || toggle_NA_CAMLOCK + ) + { maxCamera.cameraStop = true; // stop macCamera UIData.cameraStop2 = true; // Debug.Log("maxCamera.cameraStop = true"); @@ -516,67 +499,19 @@ public void CameraStop () UIData.cameraStop2 = false; } } - if (moveplan.Contains (mousePos) && SurfaceCut_show && menuSurface_show) { - if (Input.GetMouseButton (0)) { - cutX += Input.GetAxis ("Mouse X") * 1 * 0.02f; - cutY -= Input.GetAxis ("Mouse Y") * 1 * 0.02f; - cutZ -= Input.GetAxis ("Mouse X") * 1 * 0.02f; - } - if (cutX < -1) - cutX = -1; - if (cutX > 1) - cutX = 1; - if (cutY < -1) - cutY = -1; - if (cutY > 1) - cutY = 1; - if (cutZ < -1) - cutZ = -1; - if (cutZ > 1) - cutZ = 1; - depthcut -= Input.GetAxis ("Mouse ScrollWheel"); -// cutZ +=Input.GetAxis("Mouse X") * 1 * 0.02f; -// cutZ -=Input.GetAxis("Mouse Y") * 1 * 0.02f; - } + } - public void DisplayGUI () - { - - GUI.Window (1, new Rect (principalxstart, principalystart, principalwidth, principalheight), loadGUI, ""); - + public void DisplayGUI () { + int padding = GUI.skin.window.padding.top ; + GUI.skin.window.padding.top = 5; + GUI.Window (1, Rectangles.mainRect, LoadTypeGUI.MainFun, ""); + GUI.skin.window.padding.top = padding; +// GUI.Window (1, Rectangles.mainRect, loadGUI, ""); if (firstpass) { firstpass = false; -// menuManipulator_show=false; - Camera.mainCamera.backgroundColor = new Color (0.0f, 0.0f, 0.0f); - - // MB:: temporary hack to speedup texture inclusion ------------------ -// if (1 == 0) { -// GUIDisplay.directorypath = "/opt/Unity3D/UnityMol_SVN/"; -// GUIDisplay.file_base_name = "/opt/Unity3D/UnityMol_SVN/1KX2"; -// // GUIDisplay.directorypath = "/opt/src/Unity/UnityMol_SVN/"; -// // GUIDisplay.file_base_name = "/opt/src/Unity/UnityMol_SVN/1KX2"; -// GUIDisplay.file_extension = "pdb"; -// UIData.isOpenFile = true; -// UIData.atomtype = UIData.AtomType.particleball; -// UIData.bondtype = UIData.BondType.nobond; -// GUIMoleculeController.menuOpen_show = false; -// GUIDisplay.m_texture = true; -// UIData.resetDisplay = true; -// UIData.isCubeToSphere = false; -// UIData.isSphereToCube = true; -// UIData.atomtype = UIData.AtomType.hyperball; -// atomtype_show = false; -// MoleculeModel.oxygenColor = Color.white; -// MoleculeModel.sulphurColor = Color.white; -// MoleculeModel.carbonColor = Color.white; -// MoleculeModel.nitrogenColor = Color.white; -// MoleculeModel.phosphorusColor = Color.white; -// MoleculeModel.hydrogenColor = Color.white; -// MoleculeModel.unknownColor = Color.white; -// UIData.isConfirm = true; -// } - // MB:: temporary hack to speedup texture inclusion ------------------ + // Camera.mainCamera.backgroundColor = new Color (0.0f, 0.0f, 0.0f); + Camera.main.backgroundColor = new Color (0.0f, 0.0f, 0.0f); } @@ -591,2088 +526,271 @@ public void DisplayGUI () //TODO: colorpick Atom //TODO: colorpick Background } - - private void loadGUI (int a) - { - if(toggle_NA_HIDE) - { - Molecule3DComp.HideAtoms(); - }else{ - Molecule3DComp.ShowAtoms(); - } - if (GUI.Button (new Rect (20, 2, 80, 20), new GUIContent ("Open", "Open the File Open dialogue"))) { - if (menuOpen_show) - menuOpen_show = false; - else { - menuOpen_show = true; - menuAtom_show = false; - menuSurface_show = false; - menuBfactor_show = false; - menuField_show = false; - menuManipulator_show = false; - SetAtomScale_show = false; - GUIDisplay.m_texture = false; -// atomtype_show=false; -// bondtype_show=false; -// effecttype_show=false; - m_colorPicker = null; - SurfaceButton_show = false; - backgroundtype_show = false; -// metaphortype_show=false; -// ParamFieldLine_show=false; - SurfaceCut_show = false; - SurfaceMobileCut_show = false; - surface_texture_show = false; -// UIData.atomtype=UIData.AtomType.particleball; - } - } - - if (GUI.Button (new Rect (80 + 21, 2, 80, 20), new GUIContent ("Atoms", "Open the Atom appearance dialogue"))) { - if (menuAtom_show) { - menuAtom_show = false; -// atomtype_show=false; -// bondtype_show=false; -// effecttype_show=false; -// metaphortype_show=false; - SetAtomScale_show = false; - // GUIDisplay.m_colorpick_Atom = null; -// UIData.atomtype=UIData.AtomType.particleball; - } else { - menuAtom_show = true; - menuOpen_show = false; - } - } - if (GUI.Button (new Rect (160 + 22, 2, 80, 20), new GUIContent ("Surface", "Open the Surface rendering dialogue"))) { - if (menuSurface_show) { - menuSurface_show = false; -// SurfaceCut_show=false; -// SurfaceMobileCut_show=false; - surface_texture_show = false; - } else { - menuSurface_show = true; - menuBfactor_show = false; - menuOpen_show = false; - } - if (!UIData.toggleSurf) { - UIData.toggleBfac = false; - UIData.toggleSurf = true; - pdbgen = false; - } + private static void VisualControl (){ + GUILayout.BeginHorizontal (); + GUILayout.Label ("Visual", GUILayout.MaxWidth (50)); + + UIData.toggleMouse = GUILayout.Toggle (UIData.toggleMouse, "Mouse"); + UIData.toggleKey = !UIData.toggleMouse; + + UIData.toggleKey = GUILayout.Toggle (UIData.toggleKey, "Key"); + UIData.toggleMouse = !UIData.toggleKey; + GUILayout.EndHorizontal (); + } + + public static float LabelSlider (float sliderValue, float sliderMinValue, float sliderMaxValue, string labelText, + string toolTip, bool enable, int sliderwidth, int labelwidth=100, bool newLine = false) { + GUI.enabled = enable; + + GUILayout.BeginHorizontal(); + GUILayout.Label (new GUIContent (labelText, toolTip), GUILayout.MinWidth (labelwidth)); + if(newLine) { + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); } - //No bfactor option in this version - // if (GUI.Button (new Rect (240 + 23, 2, 80, 20), new GUIContent ("Bfactor", "Open the Bfactor settings dialogue"))) - // { - // if (menuBfactor_show) { - // menuBfactor_show = false; - // SurfaceCut_show = false; - // SurfaceMobileCut_show = false; - // m_colorpick_fieldline = null; - // surface_texture_show = false; - // ; - // m_colorpick_Surface = null; - // } else { - // menuBfactor_show = true; - // menuSurface_show = false; - // menuOpen_show = false; - - // } - // if (!UIData.toggleBfac) { - // UIData.toggleBfac = true; - // UIData.toggleSurf = false; - // pdbgen = false; - // } - // } - // if (GUI.Button (new Rect (320 + 24, 2, 80, 20), new GUIContent ("Electrostat.", "Open the electrostatics fieldline dialogue"))) - if (GUI.Button (new Rect (240 + 24, 2, 80, 20), new GUIContent ("Electrostat.", "Open the electrostatics fieldline dialogue"))) - { - if (menuField_show) { - menuField_show = false; - graycolor_show = false; - } else { - menuField_show = true; - menuOpen_show = false; - - } - } - // if (GUI.Button (new Rect (400 + 25, 2, 90, 20), new GUIContent ("Display", "Open the Display dialogue"))) - if (GUI.Button (new Rect (320 + 25, 2, 90, 20), new GUIContent ("Display", "Open display configuration menu"))) - { - if (menuManipulator_show) - menuManipulator_show = false; - else - menuManipulator_show = true; - } + sliderValue = GUILayout.HorizontalSlider (sliderValue, sliderMinValue, sliderMaxValue, GUILayout.Width (sliderwidth)); - // generate the cam target. - if (!toggle_NA_MAXCAM && scenecontroller.GetComponent ().enabled) { - scenecontroller.GetComponent ().enabled = false; - scenecontroller.transform.rotation = NA_SCCROT; - scenecontroller.transform.position = NA_SCCPOS; - } else if (toggle_NA_MAXCAM && !scenecontroller.GetComponent ().enabled) { - scenecontroller.GetComponent ().enabled = true; - } - - - - // if (!toggle_NA_AUTOMOVE && scenecontroller.GetComponent ().automove) { - // scenecontroller.GetComponent ().automove = false; - // Molecule3DComp.toggleFPSLog (); - // } else if (toggle_NA_AUTOMOVE && !scenecontroller.GetComponent ().automove) { - // scenecontroller.GetComponent ().automove = true; - // Molecule3DComp.toggleFPSLog (); - // } - // MB + GUILayout.EndHorizontal(); + if (Event.current.type == EventType.Repaint) MoleculeModel.newtooltip = GUI.tooltip; + return sliderValue; } - private void loadmenuAtom (int a) - { + + +// All the functions that open a new window in the GUI. ============================================================================================= + + public void SetAdvMenu () { + if(showAdvMenu) + Rectangles.advOptionsRect = GUILayout.Window(142, Rectangles.advOptionsRect, LoadTypeGUI.AdvOptions, emptyContent); + } - AtomStyle (); -// BondStyle(); - RenderParameter (); - - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + public void SetGuidedMenu () { + if(showGuidedMenu) + Rectangles.GuidedNavRect = GUILayout.Window(143, Rectangles.GuidedNavRect, LoadTypeGUI.GuidedOptions, emptyContent); } - private void loadControl (int a) - { - // VisualControl (); - loadScreenShot (); - //ShaderControl(); - BackGroundControl (); - - if(backgroundtype_show) - GUI.enabled = false; - BackColor (); - GUI.enabled = true; - - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("Effect", "Toggle which kind of special effect to apply to the scene"))) - { - if (effecttype_show) - effecttype_show = false; - else - effecttype_show = true; - } - GUILayout.EndHorizontal (); - - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + public void SetAtomMenu () { + if (showAtomMenu) + Rectangles.atomMenuRect = GUI.Window (10, Rectangles.atomMenuRect, LoadTypeGUI.AtomMenu, emptyContent); } - private void loadMove (int a) - { - maxCamera fixeCam; - fixeCam = scenecontroller.GetComponent (); - if (GUILayout.RepeatButton (new GUIContent ("up", "move up"))) { - fixeCam.upyDeg (); - } - - GUILayout.BeginHorizontal (); - if (GUILayout.RepeatButton (new GUIContent ("left", "move left"))) { - fixeCam.downxDeg (); - } - if (GUILayout.RepeatButton (new GUIContent ("right", "move right"))) { - fixeCam.upxDeg (); - } - GUILayout.EndHorizontal (); - - if (GUILayout.RepeatButton (new GUIContent ("down", "move down"))) { - fixeCam.downyDeg (); - } - - GUILayout.BeginHorizontal (); - if (GUILayout.RepeatButton (new GUIContent ("rot left", "rotate left"))) { - fixeCam.upzDeg (); - } - if (GUILayout.RepeatButton (new GUIContent ("rot right", "rotate right"))) { - fixeCam.downzDeg (); - } - GUILayout.EndHorizontal (); - - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + public void SetSecStructMenu () { + if(showSecStructMenu) + Rectangles.secStructMenuRect = GUI.Window(587, Rectangles.secStructMenuRect, LoadTypeGUI.SecStructMenu, emptyContent); } + //public static void SetAtomScales() { + // Rectangles.atomScalesRect = GUI.Window( 40, Rectangles.atomScalesRect, GUIDisplay.AtomScales, emptyContent); + //} + public static void SetPanels () { + Rectangles.panelsMenuRect = GUILayout.Window (44, Rectangles.panelsMenuRect, GUIDisplay.PanelsMenu, emptyContent); + } - //Activer une mise a jour automatique quand on clique dessus - private void StructureChoice () - { - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent (structtype, "Change the molecule appearance between all atom and carbon alpha trace"))) { - if (UIData.secondarystruct) { - UIData.secondarystruct = false; - structtype = "All atoms"; - UIData.changeStructure = true; - } else { - UIData.secondarystruct = true; - structtype = "Carbon alpha trace"; - UIData.changeStructure = true; - } - } - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + public static void SetAtomsExtended () { + //Rectangles.atomsExtendedMenuRect = GUI.Window (45, Rectangles.atomsExtendedMenuRect, GUIDisplay.AtomsExtendedMenu, emptyContent); + Rectangles.atomsExtendedMenuRect = GUILayout.Window(45, Rectangles.atomsExtendedMenuRect, GUIDisplay.AtomsExtendedMenu, emptyContent); } - - private void PhysicalChoice () // MB - sert a quoi? - { - GUILayout.BeginHorizontal (); - GUILayout.Label ("Velocity Colors", GUILayout.MaxWidth (50)); - - UIData.toggleGray = GUILayout.Toggle (UIData.toggleGray, "Gray"); - - if (UIData.toggleGray) { - UIData.toggleColor = false; - } else { - UIData.toggleColor = true; - } - - UIData.toggleColor = GUILayout.Toggle (UIData.toggleColor, "Normal"); - - if (UIData.toggleColor) { - UIData.toggleGray = false; - } else { - UIData.toggleGray = true; - } - - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + + public static void SetResidues () { + Rectangles.residuesMenuRect = GUILayout.Window (46, Rectangles.residuesMenuRect, GUIDisplay.ResiduesMenu, emptyContent); } - - private void VisualControl () - { - GUILayout.BeginHorizontal (); - GUILayout.Label ("Visual", GUILayout.MaxWidth (50)); - - UIData.toggleMouse = GUILayout.Toggle (UIData.toggleMouse, "Mouse"); - - if (UIData.toggleMouse) { - UIData.toggleKey = false; - } else { - UIData.toggleKey = true; - } - - UIData.toggleKey = GUILayout.Toggle (UIData.toggleKey, "Key"); - if (UIData.toggleKey) { - UIData.toggleMouse = false; - } else { - UIData.toggleMouse = true; - } - - GUILayout.EndHorizontal (); - + + public static void SetChains () { + Rectangles.chainsMenuRect = GUILayout.Window (47, Rectangles.chainsMenuRect, GUIDisplay.ChainsMenu, emptyContent); } - -// choice of the background color - private void BackGroundControl () - { - GUILayout.BeginHorizontal (); - GUILayout.Label (new GUIContent ("BackGround", "Toggle the use of a skybox on/off"), GUILayout.MaxWidth (120)); - - UIData.backGroundIs = GUILayout.Toggle (UIData.backGroundIs, new GUIContent ("Yes", "Toggle the use of a skybox to ON")); - - if (UIData.backGroundIs) { - UIData.backGroundNo = false; - } else { - UIData.backGroundNo = true; - } - - UIData.backGroundNo = GUILayout.Toggle (UIData.backGroundNo, new GUIContent ("No", "Toggle the use of a skybox to OFF")); - if (UIData.backGroundNo) { - UIData.backGroundIs = false; - } else { - UIData.backGroundIs = true; - } - GUILayout.EndHorizontal (); - - // MB: only show possibility to change skybox if it is set to on - if (UIData.backGroundIs) - { - backgroundtype_show = true; - }else{ - backgroundtype_show = false; + + public void SetAtomType () { + if (showAtomType && showAtomMenu) { +// GUIContent c = new GUIContent ("Set Atom Type", "Set the atom type"); + Rectangles.atomStyleRect = GUI.Window (11, Rectangles.atomStyleRect, LoadTypeGUI.AtomStyle, emptyContent); +// Debug.Log(Screen.width-195); } - //////////////////////// - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; } - private void MetaphorControl () - { - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("Metaphor", "Change HyperBalls parameters to values for standard representations"))) { - if (metaphortype_show) - metaphortype_show = false; - else - metaphortype_show = true; - - } - GUILayout.EndHorizontal (); - //////////////////////// - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + public void SetBfactorMenu () { + if (showBfactorMenu) { +// GUIContent c=new GUIContent("Set Atom Type","Set the atom type"); + Rectangles.surfaceMenuRect = GUI.Window (20, Rectangles.surfaceMenuRect, LoadTypeGUI.Surface, emptyContent); +// Debug.Log(Screen.width-195); + if (GameObject.FindGameObjectWithTag ("SurfaceManager")) + Rectangles.surfaceParametersRect = GUI.Window (25, Rectangles.surfaceParametersRect, LoadTypeGUI.SurfaceParams, emptyContent); + } } - private void BackColor () - { - // Camera.mainCamera.backgroundColor = new Color(colorRed / 255.0f, colorGreen / 255.0f, colorBlue / 255.0f); - Camera.mainCamera.backgroundColor = new Color (colorRed, colorGreen, colorBlue); - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("White", "Set background to plain white"))) { - BackgroundColor.color = new Color(1,1,1,0); - } - if (GUILayout.Button (new GUIContent ("Black", "Set background color to plain black"))) { - BackgroundColor.color = Color.black; - } - GUILayout.EndHorizontal (); - // GUI.color = new Color(colorRed / 255.0f, 0, 0); - - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - // colorGreen = GUI.HorizontalSlider(new Rect(55, 195, 95, 30), colorGreen, 0.0f, 255.0f); - // GUI.Label(new Rect(25, 190, 30, 30), ((int)colorGreen).ToString()); - // GUI.Label(new Rect(10, 190, 30, 30), "G"); - // //GUI.Label(new Rect(535, 57.5f, 15, 15), "", "bj"); - - // // GUI.color = Color.white; - // GUI.color = new Color(0, 0, colorBlue / 255.0f); - - // colorBlue = GUI.HorizontalSlider(new Rect(55, 220, 95, 30), colorBlue, 0.0f, 255.0f); - // GUI.Label(new Rect(25, 215, 30, 30), ((int)colorBlue).ToString()); - // GUI.Label(new Rect(10, 215, 30, 30), "B"); - //GUI.Label(new Rect(535, 92.5f, 15, 15), "", "bj"); - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("Background Color", "Choose the background color"))) - { - if (m_colorPicker != null) - m_colorPicker = null; - - m_colorPicker = new ColorPicker(colorPicker_rect, - BackgroundColor, - "Background Color"); - } - GUILayout.EndHorizontal (); + + public void SetBondType () { + if (showBondType && showAtomMenu) + Rectangles.bondTypeRect = GUI.Window (11, Rectangles.bondTypeRect, LoadTypeGUI.Bond, emptyContent); } -// choose teh style of the atom - private void AtomStyle () - { - - GUILayout.BeginHorizontal (); - StructureChoice (); - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - GUILayout.Label ("Atom Style Bond Style", GUILayout.MaxWidth (170)); - GUILayout.EndHorizontal (); - - - GUILayout.BeginHorizontal (); - string atomtype = ""; - UIData.AtomType atype = UIData.atomtype; - if(atype == UIData.AtomType.noatom) - atype = Molecule3DComp.PreviousAtomType; - switch (atype) { - case UIData.AtomType.cube: - atomtype = "Cube"; - break; - case UIData.AtomType.sphere: - atomtype = "Sphere"; - break; - case UIData.AtomType.hyperball: - atomtype = "HyperBall"; - break; - case UIData.AtomType.raycasting: - atomtype = "Raycasting"; - break; - case UIData.AtomType.billboard: - atomtype = "Common Billboard"; - break; - case UIData.AtomType.rcbillboard: - atomtype = "RayCasting Billboard"; - break; - case UIData.AtomType.hbbillboard: - atomtype = "HyperBall Billboard"; - break; - case UIData.AtomType.rcsprite: - atomtype = "RayCasting Sprite"; - break; - case UIData.AtomType.multihyperball: - atomtype = "Multi-Hyperball"; - break; - case UIData.AtomType.combinemeshball: - atomtype = "CombineMesh HyperBall"; - break; - case UIData.AtomType.particleball: - atomtype = "ParticleBall"; - break; - case UIData.AtomType.particleballalphablend: - atomtype = "ParticleBallAlpahBlend"; - break; - } - - -// if(GUILayout.Button(atomtype)) - if (GUILayout.Button (new GUIContent (atomtype, "Change the atom appearance style or rendering method"))) { - if (atomtype_show) - atomtype_show = false; - else - atomtype_show = true; - bondtype_show = false; - } - -// GUILayout.EndHorizontal(); -// -// } -// -// private void BondStyle() -// { -// -// GUILayout.BeginHorizontal(); -// GUILayout.Label("Bond Style",GUILayout.MaxWidth(85)); - -// GUILayout.EndHorizontal(); - -// GUILayout.BeginHorizontal(); - string bondtype = ""; - switch (UIData.bondtype) { - case UIData.BondType.cube: - bondtype = "Cube"; - break; - case UIData.BondType.line: - bondtype = "Line"; - break; - case UIData.BondType.hyperstick: - bondtype = "HyperStick"; - break; - case UIData.BondType.tubestick: - bondtype = "TubeStick"; - break; - case UIData.BondType.bbhyperstick: - bondtype = "Billboard HyperStick"; - break; - case UIData.BondType.particlestick: - bondtype = "Particle Stick"; - break; - case UIData.BondType.nobond: - bondtype = "No Stick"; - break; - } - - - if (GUILayout.Button (new GUIContent (bondtype, "Change the bond appearance style or rendering method"))) { - if (bondtype_show) - bondtype_show = false; - else - bondtype_show = true; - atomtype_show = false; - } + // T.T Sugar Menu + public void setSugarMenu(){ + if (showSugarChainMenu) + Rectangles.SugarMenuRect = GUI.Window(454654, Rectangles.SugarMenuRect, LoadTypeGUI.SugarM, emptyContent); + } - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + public void setSugarRibbonsTuneMenu(){ + if (showSugarRibbonsTuneMenu) + Rectangles.SugarRibbonsTuneRect = GUI.Window(4554, Rectangles.SugarRibbonsTuneRect, LoadTypeGUI.SugarRibbonsTune, emptyContent); } - - public float LabelSlider (float sliderValue, float sliderMinValue, float sliderMaxValue, string labelText, string toolTip, bool enable, int sliderwidth, int labelwidth=100) - { - GUI.enabled = enable; - GUILayout.Label (new GUIContent (labelText, toolTip), GUILayout.MinWidth (labelwidth)); - sliderValue = GUILayout.HorizontalSlider (sliderValue, sliderMinValue, sliderMaxValue, GUILayout.Width (sliderwidth)); - //GUI.Box (Rect (10, 10, 100, 20), new GUIContent ("", "My Tooltip"), GUIStyle.none); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - return sliderValue; + public void setColorTuneMenu(){ + if (showColorTuneMenu) + Rectangles.ColorTuneRect = GUI.Window(45154, Rectangles.ColorTuneRect, LoadTypeGUI.ColorTuneMenu, emptyContent); + } + public void SetCubeLineBond() { + if (((UIData.bondtype == UIData.BondType.cube) || (UIData.bondtype == UIData.BondType.line)) + && !showBondType && !showAtomType && showAtomMenu) { + Rectangles.cubeLineBondRect = GUI.Window (13, Rectangles.cubeLineBondRect, LoadTypeGUI.CubeLineBond, emptyContent) ; + showCubeLineBondMenu = true ; + } else + showCubeLineBondMenu = false ; } + public void SetEffectType () { + if (showEffectType) + Rectangles.effectTypeRect = GUI.Window (125, Rectangles.effectTypeRect, LoadTypeGUI.Effects, emptyContent); + } -// All the function who open a new window in the GUI. ============================================================================================= - -// public void SetOpenMenu() -// { -// if(atomtype_show) -// { -//// GUIContent c=new GUIContent("Set Atom Type","Set the atom type"); -// GUI.Window( 2, new Rect(atomtypexstart,atomtypeystart,atomtypewidth,atomtypeheight), loadTypeGUIAtom, ""); -//// Debug.Log(Screen.width-195); -// } -// } - - - public void SetAtomMenu () - { - if (menuAtom_show) { -// GUIContent c=new GUIContent("Set Atom Type","Set the atom type"); - GUI.Window (10, new Rect (menuAtomxstart, menuAtomystart, menuAtomwidth, menuAtomheight), loadmenuAtom, "Atom appearance"); -// Debug.Log(Screen.width-195); - } + public void SetFieldMenu () { + if (showElectrostaticsMenu) + Rectangles.electroMenuRect = GUI.Window (30, Rectangles.electroMenuRect, LoadTypeGUI.Electrostatics, emptyContent); + + if (showFieldLines && showElectrostaticsMenu) + Rectangles.fieldLinesRect = GUI.Window (31, Rectangles.fieldLinesRect, LoadTypeGUI.FieldLines, emptyContent); } - public void SetSurfaceMenu () - { - if (menuSurface_show) { + public void SetSurfaceMenu () { + if (showSurfaceMenu) { // Debug.Log("test 42000"); // GUIContent c=new GUIContent("Set Surface Params"); - GUI.Window (20, new Rect (menuSurfacexstart, menuSurfaceystart, menuSurfacewidth, menuSurfaceheight), loadTypeGUISurface, "Surface"); + Rectangles.surfaceMenuRect = GUI.Window (20, Rectangles.surfaceMenuRect, LoadTypeGUI.Surface, emptyContent); // Debug.Log(Screen.width-195); if (GameObject.FindGameObjectWithTag ("SurfaceManager")) { - GUI.Window (25, new Rect (menuparamsurfacexstart, menuparamsurfaceystart, menuparamsurfacewidth, menuparamsurfaceheight), loadTypeGUISurfaceParams, "Surface"); - } - } - } - - public void SetBfactorMenu () - { - if (menuBfactor_show) { -// GUIContent c=new GUIContent("Set Atom Type","Set the atom type"); - GUI.Window (20, new Rect (menuSurfacexstart, menuSurfaceystart, menuSurfacewidth, menuSurfaceheight), loadTypeGUISurface, "B Factor"); -// Debug.Log(Screen.width-195); - if (GameObject.FindGameObjectWithTag ("SurfaceManager")) { - GUI.Window (25, new Rect (menuparamsurfacexstart, menuparamsurfaceystart, menuparamsurfacewidth, menuparamsurfaceheight), loadTypeGUISurfaceParams, "Surface"); + Rectangles.surfaceParametersRect = GUI.Window (25, Rectangles.surfaceParametersRect, LoadTypeGUI.SurfaceParams, emptyContent); } } } - public void SetFieldMenu () - { - if (menuField_show) { - // Debug.Log("test 42000"); -// GUIContent c = new GUIContent ("Set Field Lines Parameters"); - - GUI.Window (30, MenuElectro_Rect, loadTypeGUIField, "Electrostatic 2"); - // Debug.Log(Screen.width-195); - // if (GameObject.FindGameObjectWithTag ("SurfaceManager")) { - // GUI.Window (25, new Rect (menuSurfacexstart, menuSurfaceystart + 100, menuSurfacewidth, menuSurfaceheight + 50), loadTypeGUISurfaceParams, "Surface"); - // } - } - - if (FieldLine_show && menuField_show) { - GUI.Window (31, FieldLineRect, loadTypeGUIFieldVisible, ""); - } - + public void SetHydroMenu(){ + if (showHydroMenu && showSurfaceMenu ) + Rectangles.hydroMenuRect = GUI.Window (2001, Rectangles.hydroMenuRect, LoadTypeGUI.HydroMenu, emptyContent); } - public void SetManipulatorMenu () - { - if (menuManipulator_show) { -// GUIContent c=new GUIContent("Set Atom Type","Set the atom type"); -// GUI.Window( 2, new Rect(atomtypexstart,atomtypeystart,atomtypewidth,atomtypeheight), loadmenuManipulator, ""); -// Debug.Log(Screen.width-195); -// GUIContent d = new GUIContent ("Manipulator", "Manipulator submenu"); - GUIContent d = new GUIContent ("Display"); - - GUI.Window (42, rect_manipulator, loadControl, d); - } - } - - public void SetMnipulatormove () - { - if (!menuManipulator_show) { - GUIContent d = new GUIContent ("Movement", ""); - GUI.Window (42, rect_manipulatormove, loadMove, d); - } - } - - public void SetAtomType () - { - if (atomtype_show && menuAtom_show) { -// GUIContent c = new GUIContent ("Set Atom Type", "Set the atom type"); - GUI.Window (11, new Rect (atomtypexstart, atomtypeystart, atomtypewidth, atomtypeheight), loadTypeGUIAtom, "Choose Atom Style"); -// Debug.Log(Screen.width-195); - } - } - - public void SetBondType () - { - if (bondtype_show && menuAtom_show) { -// GUIContent c = new GUIContent ("Set Bond Type", "Set the bond type"); - GUI.Window (11, new Rect (bondtypexstart, bondtypeystart, bondtypewidth, bondtypeheight), loadTypeGUIBond, "Bond Style"); -// Debug.Log(Screen.width-195); - } - } - - public void SetHyperBall () - { - if ((UIData.atomtype == UIData.AtomType.hyperball || UIData.bondtype == UIData.BondType.hyperstick) && (!bondtype_show && !atomtype_show) && menuAtom_show) { - GUI.Window (12, new Rect (hyperballtypexstart, hyperballtypeystart, hyperballtypewidth, hyperballtypeheight), loadTypeGUIhyperball, "Hyperball Style"); - hyperballs_menu_show = true; - } else - hyperballs_menu_show = false; - } - - public void SetEffectType () - { - if (effecttype_show) { -// GUIContent c = new GUIContent ("Set Effect Type", "Set Effect Type"); - GUI.Window (25, new Rect (effecttypexstart, effecttypeystart, effecttypewidth, effecttypeheight), loadTypeGUIEffect, "Effect"); -// Debug.Log(Screen.width-195); - } - } - - public void SetSurfaceTexture () - { - if (surface_texture_show && (menuSurface_show || menuBfactor_show)) { - GUIDisplay.m_texture = false; -// GUI.Window(41, new Rect(texturetypexstart,texturetypeystart,texturewidth,textureheight),loadSurfaceTexture, "Surface texture parameters"); - GUI.Window (41, new Rect (texturetypexstart, texturetypeystart, texturewidth, textureheight), loadSurfaceTexture, ""); - } - } - - public void SetSurtfaceMobileCut () - { - if (SurfaceMobileCut_show && (menuSurface_show || menuBfactor_show)) { - GUI.Window (21, new Rect (surfacecuttypexstart, surfacecuttypeystart, surfacecuttypewidth, surfacecuttypeheight), loadSurfaceMobileCut, "Surface cut poarameters"); - } - } - - public void SetSurfaceCut () - { - if (SurfaceCut_show && (menuSurface_show || menuBfactor_show)) { - GUI.Window (21, new Rect (surfacecuttypexstart, surfacecuttypeystart, surfacecuttypewidth, surfacecuttypeheight), loadSurfaceCut, "Surface cut parameters"); - GUI.Window (22, new Rect (movesurfacecuttypexstart, movesurfacecuttypeystart, movesurfacecuttypewidth, movesurfacecuttypeheight), loadTypeGUIsurfaceMove, "move cut plane"); - - } - } - - public void SetBackGroundType () - { - - if (backgroundtype_show) { -// GUIContent c = new GUIContent ("Set BackGround Type"); - - GUI.Window (43, new Rect (backtypexstart, backtypeystart, backtypewidth, backtypeheight), loadTypeGUIBack, "Background"); -// Debug.Log(Screen.width-195); - } - } - - public void SetMetaphorType () - { - - if (metaphortype_show && menuAtom_show) { -// GUIContent c = new GUIContent ("Set Metaphor Type"); - - GUI.Window (22, new Rect (metaphortypexstart, metaphortypeystart, metaphortypewidth, metaphortypeheight), loadTypeGUIMetaphor, "Metaphor"); - // Debug.Log(Screen.width-195); - } - } - - - -// end of windows function ============================================================================================= - - public void MinLoadTypeGUIAtom (int b) - { - - } - - -// function who tell what happens when a window is open ============================================================================================= - private void loadTypeGUIAtom (int a) - { - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Cube", "Use cubes to represent atoms"))) { - - UIData.resetDisplay = true; - UIData.isCubeToSphere = false; - UIData.isSphereToCube = true; - UIData.atomtype = UIData.AtomType.cube; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Sphere", "Use triangulated spheres to represent atoms"))) { - UIData.resetDisplay = true; - UIData.isCubeToSphere = true; - UIData.isSphereToCube = false; - UIData.atomtype = UIData.AtomType.sphere; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Hyperball", "Use the HyperBalls shader to render atoms"))) { - UIData.resetDisplay = true; - UIData.isCubeToSphere = false; - UIData.isSphereToCube = true; - UIData.atomtype = UIData.AtomType.hyperball; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - - - if (UIData.openAllMenu) { - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Raycasting", "Use raycasting to represent atoms"))) { - UIData.resetDisplay = true; - UIData.isCubeToSphere = false; - UIData.isSphereToCube = true; - UIData.atomtype = UIData.AtomType.raycasting; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - - - } - - if (UIData.openAllMenu) { - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("RayCasting Sprite", "Use RayCasting Sprites to represent atoms"))) { - UIData.resetDisplay = true; - UIData.isSphereToCube = true; - UIData.isCubeToSphere = false; - UIData.atomtype = UIData.AtomType.rcsprite; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Multi-Hyperball", "Use Multi-Hyperballs rendering to represent atoms"))) { - UIData.resetDisplay = true; - UIData.isSphereToCube = true; - UIData.isCubeToSphere = false; - UIData.atomtype = UIData.AtomType.multihyperball; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("CombineMesh HyperBall", "Use the CombineMesh HyperBall shader to represent atoms"))) { - UIData.resetDisplay = true; - UIData.isSphereToCube = true; - UIData.isCubeToSphere = false; - UIData.atomtype = UIData.AtomType.combinemeshball; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - atomtype_show = false; - toggle_NA_HIDE = false; - } - GUILayout.EndHorizontal (); - } - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("ParticleBall", "Use the ParticleBall shader to represent atoms"))) { - UIData.resetDisplay = true; - UIData.isSphereToCube = false; - UIData.isCubeToSphere = false; - UIData.atomtype = UIData.AtomType.particleball; - Debug.Log ("UIData.resetDisplay:" + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere:" + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube:" + UIData.isSphereToCube); - UIData.resetBondDisplay = true; - //UIData.bondtype=UIData.BondType.nobond; - atomtype_show = false; - toggle_NA_HIDE = false; - } - - GUILayout.EndHorizontal (); - - // GUILayout.BeginHorizontal(); - - - // if(GUILayout.Button(new GUIContent("ParticleBallAlphaBlend","Use the ParticleBallAlphaBlend to represent the atoms."))) - // { - // UIData.resetDisplay=true; - // UIData.isSphereToCube=true; - // UIData.isCubeToSphere=false; - // UIData.atomtype=UIData.AtomType.particleballalphablend; - // Debug.Log("UIData.resetDisplay:"+UIData.resetDisplay); - // Debug.Log("UIData.isCubeToSphere:"+UIData.isCubeToSphere); - // Debug.Log("UIData.isSphereToCube:"+UIData.isSphereToCube); - // UIData.resetBondDisplay=true; - // UIData.bondtype=UIData.BondType.nobond; - // atomtype_show=false; - // } - - // GUILayout.EndHorizontal(); - - if (UIData.openAllMenu) { - - GUILayout.BeginHorizontal (); - GUILayout.Label ("Billboard", GUILayout.MaxWidth (50)); - - UIData.toggleClip = GUILayout.Toggle (UIData.toggleClip, new GUIContent ("Clip", "Toggle the Clip plane")); - - if (UIData.toggleClip) { - UIData.togglePlane = false; - } else { - UIData.togglePlane = true; - } - - UIData.togglePlane = GUILayout.Toggle (UIData.togglePlane, new GUIContent ("Plane", "Toggle the Cut plane")); - if (UIData.togglePlane) { - UIData.toggleClip = false; - } else { - UIData.toggleClip = true; - } - - GUILayout.EndHorizontal (); - - - toggle_MESHCOMBINE = GUILayout.Toggle (toggle_MESHCOMBINE, new GUIContent ("MESHCOMBINE", "Toggle the mesh combination")); - - if (!toggle_MESHCOMBINE) { - UIData.meshcombine = false; - UIData.resetMeshcombine = true; - - } else if (toggle_MESHCOMBINE) { - UIData.meshcombine = true; - UIData.resetMeshcombine = true; - } - } - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - } - - private void loadTypeGUIBond (int a) - { - - GUILayout.BeginHorizontal (); - GUILayout.Label ("", GUILayout.MaxWidth (85)); - GUILayout.EndHorizontal (); - //if(UIData.atomtype==UIData.AtomType.particleball&&!UIData.openAllMenu)GUI.enabled=false; - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("Cube", "Use Cubes to represent bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.cube; - bondtype_show = false; - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Line", "Use the Line renderer to represent bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.line; - bondtype_show = false; - } - - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("HyperStick", "Use the HyperStick shader to represent bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.hyperstick; - bondtype_show = false; - - } - GUILayout.EndHorizontal (); - - if (UIData.openAllMenu) { - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Tube Stick", "Use the Tube Stick renderer to represent bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.tubestick; - bondtype_show = false; - } - - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Billboard HyperStick", "Use the Billboard HyperStick shader to represent bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.bbhyperstick; - } - - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Particle Stick", "Use the Particle Stick shader to represent bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.particlestick; - bondtype_show = false; - } - - GUILayout.EndHorizontal (); - } - GUI.enabled = true; - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("No Stick", "Do not render any bonds"))) { - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.nobond; - bondtype_show = false; - } - - - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void loadTypeGUIMetaphor (int a) - { - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("CPK", "CPK representation as balls and sticks"))) { - newRadius = 0.2f; - deltaRadius = (newRadius - rayon) / transDelta; - newShrink = 0.0001f; - deltaShrink = (newShrink - shrink) / transDelta; - newScale = 0.3f; - deltaScale = (newScale - linkscale) / transDelta; - transCPK_LICORICE = true; - - - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Licorice", "Licorice representation of the molecule"))) { - newRadius = 0.1f; - deltaRadius = (newRadius - rayon) / transDelta; - newShrink = 0.0001f; - deltaShrink = (newShrink - shrink) / transDelta; - newScale = 1.0f; - deltaScale = (newScale - linkscale) / transDelta; - transCPK_LICORICE = true; - - - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("VdW", "van der Waals representation as spacefilling spheres"))) { - newRadius = 1.0f; - deltaRadius = (newRadius - rayon) / transDelta; - newShrink = 0.8f; - deltaShrink = (newShrink - shrink) / transDelta; - newScale = 1.0f; - deltaScale = (newScale - linkscale) / transDelta; - transCPK_LICORICE = true; - - - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Smooth", "Smooth HyperBalls metaphor representation"))) { - newRadius = 0.35f; - deltaRadius = (newRadius - rayon) / transDelta; - newShrink = 0.4f; - deltaShrink = (newShrink - shrink) / transDelta; - newScale = 1.0f; - deltaScale = (newScale - linkscale) / transDelta; - transCPK_LICORICE = true; - - - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("SmoothLink", "SmoothLink HyperBalls representation"))) { - newRadius = 0.4f; - deltaRadius = (newRadius - rayon) / transDelta; - newShrink = 0.5f; - deltaShrink = (newShrink - shrink) / transDelta; - newScale = 1.0f; - deltaScale = (newScale - linkscale) / transDelta; - transCPK_LICORICE = true; - - - } - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void loadTypeGUIField (int a) - { - - // GUILayout.BeginHorizontal(); - // GUILayout.Label("Parameter",GUILayout.MaxWidth(100)); - // GUILayout.EndHorizontal(); - #if UNITY_WEBPLAYER - GUI.enabled = false; - #endif - GUILayout.BeginHorizontal (); - generateSeuilDx_neg = LabelSlider (generateSeuilDx_neg, -10f, 0f, "S: " + Mathf.Round (generateSeuilDx_neg * 10f) / 10f, "Ramp value used for surface generation",GUI.enabled , 50, 50); - if (GUILayout.Button (new GUIContent ("Load Neg.", "Read an OpenDx format electrostatic field and generate a surface"))) { - MoleculeModel.SurfaceFileExist = true; - if (!dxread) { - - readdx.ReadFile(GUIDisplay.file_base_name+".dx",MoleculeModel.Offset); - dxread = true; - } - - string tag = "Elect_iso_negative"; - Elect_iso_negative_initialized = true; - Elect_iso_negative_show = true; - - GameObject[] IsoSurfaces = GameObject.FindGameObjectsWithTag(tag); - foreach(GameObject iso in IsoSurfaces) - Object.Destroy(iso); - readdx.isoSurface (generateSeuilDx_neg,Color.red,tag); - - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - generateSeuilDx_pos = LabelSlider (generateSeuilDx_pos, 0f, 10f, "S: " + Mathf.Round (generateSeuilDx_pos * 10f) / 10f, "Ramp value used for surface generation",GUI.enabled , 50, 50); - - if (GUILayout.Button (new GUIContent ("Load Pos.", "Read an OpenDx format electrostatic field and generate a surface"))) { - MoleculeModel.SurfaceFileExist = true; - if (!dxread) { - - readdx.ReadFile(GUIDisplay.file_base_name+".dx",MoleculeModel.Offset); - dxread = true; - } - - string tag = "Elect_iso_positive"; - Elect_iso_positive_show = true; - Elect_iso_positive_initialized = true; - - GameObject[] IsoSurfaces = GameObject.FindGameObjectsWithTag(tag); - foreach(GameObject iso in IsoSurfaces) - Object.Destroy(iso); - readdx.isoSurface (generateSeuilDx_pos,Color.blue,tag); - - } - GUILayout.EndHorizontal (); - - - if (dxread && Elect_iso_negative_initialized) - GUI.enabled = true; - else - GUI.enabled = false; - GUILayout.BeginHorizontal(); - if (GUILayout.Button (new GUIContent ("Toggle Neg.", "Toggles negative iso-surface from visible to hidden and vice versa"))) { - string tag = "Elect_iso_negative"; - if (Elect_iso_negative_show) - { - Surface_show = false; - SurfaceCut_show = false; - SurfaceMobileCut_show = false; - Elect_iso_negative_show = false; - GameObject[] IsoSurfaces = GameObject.FindGameObjectsWithTag(tag); - foreach(GameObject iso in IsoSurfaces) - iso.renderer.enabled = false; - } else { - Elect_iso_negative_show = true; - GameObject[] IsoSurfaces = GameObject.FindGameObjectsWithTag(tag); - foreach(GameObject iso in IsoSurfaces) - iso.renderer.enabled = true; - //rayon = 0.001f; - // OBJ obj = new OBJ(); - // obj.Load(); - // MoleculeModel.SurfaceFileExist=true; - } - - } - if (dxread && Elect_iso_positive_initialized) - GUI.enabled = true; - else - GUI.enabled = false; - if (GUILayout.Button (new GUIContent ("Toggle Pos.", "Toggles positive iso-surface from visible to hidden and vice versa"))) { - string tag = "Elect_iso_positive"; - if (Elect_iso_positive_show) - { - Surface_show = false; - SurfaceCut_show = false; - SurfaceMobileCut_show = false; - Elect_iso_positive_show = false; - GameObject[] IsoSurfaces = GameObject.FindGameObjectsWithTag(tag); - foreach(GameObject iso in IsoSurfaces) - iso.renderer.enabled = false; - } else { - Elect_iso_positive_show = true; - GameObject[] IsoSurfaces = GameObject.FindGameObjectsWithTag(tag); - foreach(GameObject iso in IsoSurfaces) - iso.renderer.enabled = true; - //rayon = 0.001f; - // OBJ obj = new OBJ(); - // obj.Load(); - // MoleculeModel.SurfaceFileExist=true; - } - - } - GUILayout.EndHorizontal(); - - #if UNITY_WEBPLAYER - if(!MoleculeModel.FieldLineFileExist) - GUI.enabled = false; - else - GUI.enabled = true; - #else - GUI.enabled = true; - #endif - - GUILayout.BeginHorizontal (); - - // rajouter un if si présence de field line ou non////// - // add an if if we have a json file or not ///////// - - if (GUILayout.Button (new GUIContent ("Field Line", "Toggles animated field lines from visible to hidden and vice versa"))) { - - if (FieldLine_show) { - FieldLine_show = false; - GameObject FieldLineManager = GameObject.Find ("FieldLineManager"); - FieldLineModel Line = FieldLineManager.transform.GetComponent (); - Line.killCurrentEffects (); - } else { - FieldLine_show = true; - if(GameObject.FindGameObjectsWithTag("FieldLineManager").Length == 0) - FieldLineStyle.DisplayFieldLine (); - } - - } - - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void loadTypeGUIFieldVisible (int a) - { - - if (GUILayout.Button (new GUIContent ("Energy/Field Color", "Choose color to represent potential energy or field line"))) - { - CreateColorPicker(EnergyGrayColor, "Field Lines Color"); - FieldLineColorGradient = false; - } - if (GUILayout.Button (new GUIContent ("Color Gradient", "Display field lines with a color gradient"))) - { - // m_colorpick_fieldline = null; - FieldLineColorGradient = true; - } - // GUI.enabled=true; - - speed = LabelSlider (speed, 0.001f, 1.0f, "Speed " + speed, "Determines field line animation speed", true, 150); - density = LabelSlider (density, 1.0f, 8.0f, "Density " + density, "Determines field line density", true, 150); - linewidth = LabelSlider (linewidth, 0.01f, 5.0f, "Width " + linewidth, "Determines field line width", true, 150); - linelength = LabelSlider (linelength, 0.8f, 0.1f, "Length " + (1 - linelength), "Determines field line length", true, 150); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - // ParamFieldLine_show=false; - } - - private void loadTypeGUISurface (int a) - { - - // GUILayout.BeginHorizontal(); - // GUILayout.Label("Parameter",GUILayout.MaxWidth(100)); - // GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("Generate", "Generate a new surface mesh"))) { - if (!pdbgen) { - MoleculeModel.SurfaceFileExist = true; - PDBtoDEN generatedensity = new PDBtoDEN (); - generatedensity.TranPDBtoDEN (); - // Debug.Log("time : PDBtoDEN "+ (DateTime.Now-temp)); - pdbgen = true; - surface_build = true; - } - PDBtoDEN.ProSurface (generateSeuil); - } - - - - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - generateSeuil = LabelSlider (generateSeuil, 0.002f, 2f, "S:" + Mathf.Round (generateSeuil * 10f) / 10f, "Determines ramp value for surface generation", true, 100, 50); - - GUILayout.EndHorizontal (); - if (surface_build || MoleculeModel.SurfaceFileExist) - GUI.enabled = true; - else - GUI.enabled = false; - if (GUILayout.Button (new GUIContent ("Toggle surface", "Toggles surface from visible to hidden and vice versa"))) { - - if (Surface_show) { - Surface_show = false; - SurfaceCut_show = false; - SurfaceMobileCut_show = false; - GameObject[] SurfaceManager = GameObject.FindGameObjectsWithTag ("SurfaceManager"); - foreach (GameObject Surface in SurfaceManager) { -// Surface.SetActiveRecursively (false); - Surface.SetActive (false); - } - - - } else { - Surface_show = true; - GameObject SurfaceManager = GameObject.Find ("SurfaceManager"); -// SurfaceManager.SetActiveRecursively (true); - SurfaceManager.SetActive (true); - } - - } - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void loadTypeGUISurfaceParams (int a) - { - - - if (GUILayout.Button (new GUIContent ("Surface Color", "Choose the color of the surface"))) { - CreateColorPicker(SurfaceGrayColor,"Surface Color"); - } - - if (GUILayout.Button (new GUIContent ("Surface Texture", "Choose the texture of the surface"))) - { - if (surface_texture_show) - { - surface_texture_show = false; - //surface_texture = false; - //external_surface_texture = false; - } else { - surface_texture_show = true; - //SurfaceCut_show = false; - //SurfaceMobileCut_show = false; - //SetAtomScale_show = false; - // GUIDisplay.m_colorpick_Atom = null; - } - } - - - if (GUILayout.Button (new GUIContent ("Surface static cut", "Activate a static cut plane on the surface"))) { - if (surface_staticcut) { - surface_staticcut = false; - SurfaceCut_show = false; - SurfaceMobileCut_show = false; - } else { - surface_staticcut = true; - surface_mobilecut = false; - SurfaceCut_show = true; - SurfaceMobileCut_show = false; - } - } - - if (GUILayout.Button (new GUIContent ("Surface mobile cut", "Activate a mobile cut plane on the surface"))) { - if (surface_mobilecut) { - surface_mobilecut = false; - SurfaceMobileCut_show = false; - } else { - SurfaceMobileCut_show = true; - surface_mobilecut = true; - surface_staticcut = false; - SurfaceCut_show = false; - - } - } - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void loadTypeGUIsurfaceMove (int a) - { - - } - - private void loadTypeGUIBack (int a) - { - GameObject LocCamera = GameObject.Find ("Camera"); - - // GUILayout.BeginHorizontal (); - // GUILayout.Label ("BackGround Style", GUILayout.MaxWidth (85)); - // GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("1", "Lerpz background"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/skyBoxLerpzMaterial"); - } -// GUILayout.EndHorizontal (); -// GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("2", "HotDesert background"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/skyBoxHotDesert"); - } -// GUILayout.EndHorizontal (); - //GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("3", "Molecule background"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/skyBoxmolecularMaterial"); - } -// GUILayout.EndHorizontal (); -// GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("4", "Snow background"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/skyBoxSnow"); - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("5", "DawnDusk Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/DawnDusk Skybox"); - } - if (GUILayout.Button (new GUIContent ("6", "Eerie Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/Eerie Skybox"); - } - if (GUILayout.Button (new GUIContent ("7", "MoonShine Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/MoonShine Skybox"); - } - if (GUILayout.Button (new GUIContent ("8", "Overcast1 Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/Overcast1 Skybox"); - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - if (GUILayout.Button (new GUIContent ("9", "Overcast2 Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/Overcast2 Skybox"); - } - if (GUILayout.Button (new GUIContent ("10", "StarryNight Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/StarryNight Skybox"); - } - if (GUILayout.Button (new GUIContent ("11", "Sunny1 Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/Sunny1 Skybox"); - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("12", "Sunny2 Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/Sunny2 Skybox"); - } - if (GUILayout.Button (new GUIContent ("13", "Sunny3 Skybox"))) { - LocCamera.GetComponent ().material = (Material)Resources.Load ("skybox/Sunny3 Skybox"); - } - GUILayout.EndHorizontal (); - - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - } - - private void loadScreenShot () - { - - if (GUILayout.Button (new GUIContent ("ScreenShot", "Capture the screen and save image to the original file path"))) { - GameObject LocCamera = GameObject.Find ("Camera"); - ScreenShot comp = LocCamera.GetComponent (); - comp.open = true; - - - } - //////////modify/////////////////////// - - if (GUILayout.Button (new GUIContent ("ScreenShot Sequence", "Capture the screen sequentially and save images to the original file path"))) { - GameObject LocCamera = GameObject.Find ("Camera"); - ScreenShot comp = LocCamera.GetComponent (); - if (comp.sequence) { - comp.sequence = false; - comp.open = false; - } else { - comp.sequence = true; - comp.open = true; - } - - } - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - public static void FileSelectedCallback (string path) - { - #if !UNITY_WEBPLAYER - m_fileBrowser = null; - if (path != null) { - m_textPath = path; - m_last_extSurf_Path = System.IO.Path.GetDirectoryName (path); - external_surface_texture = true; - } - // FileBrowser_show = false; - surface_texture = false; - GUIMoleculeController.FileBrowser_show2 = false; - WWW www = new WWW ("file://" + GUIMoleculeController.m_textPath); - ext_surf = www.texture; - Debug.Log (m_textPath); - #endif + + public void SetManipulatorMenu () { + if (showManipulatorMenu) + Rectangles.manipulatorRect = GUI.Window (42, Rectangles.manipulatorRect, LoadTypeGUI.Display, emptyContent); } - // HELPER FUNCTION TO FILL A TEXTURE CHOICE MENU WITH UP TO 15 BOXES - private void textureMenu (string texDir, string[] texList, string texDescr) - { - GUI.Label (new Rect (0, 0, 290, 20), "Surface Texture - " + texDescr, CentredText); - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("<<", "Go to previous series of textures"))) { // cycle through texture sets - texture_set--; - //Skip fun textures for the article version - //if(texture_set == 4) - // texture_set = 3; - - if (only_best_textures) { - if(texture_set>0) texture_set = -texture_set; - if (texture_set < besttexSet_min) - texture_set = -1; - } else { - if (texture_set < 1) { - texture_set = texSet_max; - } - } - } - - // if(GUILayout.Button(new GUIContent("Confirm","Confirm all the modification of the molecule."))) - if (GUILayout.Button (new GUIContent ("Open", "Open custom texture image from disk"))) { - FileBrowser_show2 = true; - m_fileBrowser = new ImprovedFileBrowser ( - new Rect (400, 100, 600, 500), - "Choose Image File", - FileSelectedCallback, - m_last_extSurf_Path - ); - } - - if (GUILayout.Button (new GUIContent (">>", "Go to next series of textures"))) { // cycle through texture sets - texture_set++; - //Skip fun textures for the article version - //if(texture_set == 4) - // texture_set = 5; - - if (only_best_textures) { - if(texture_set>0) texture_set = -texture_set; - - if (texture_set > -1) - texture_set = besttexSet_min; - } else { - - if (texture_set > texSet_max) { - texture_set = 1; - } - } - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - - // check whether texList has more than 15 entries and raise an error!! - int i = 0; - // GUILayout.EndHorizontal(); GUILayout.Box(texDescr); GUILayout.BeginHorizontal(); - foreach (string texFil in texList) - { - i++; - if (i > 5) - { - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - i = 1; - } -// if(GUILayout.Button((Texture2D)Resources.Load(texDir+texFil),GUILayout.Width(50),GUILayout.Height(50))) - if (GUILayout.Button (new GUIContent ((Texture2D)Resources.Load (texDir + texFil), texFil), GUILayout.Width (50), GUILayout.Height (50))) - { - if(texFil != "None") - { - surface_texture = true; - external_surface_texture = false; - surface_texture_name = texDir + texFil; - } - else - { - surface_texture = false; - external_surface_texture = false; - } - } + public void SetMnipulatormove () { + if (!showManipulatorMenu) + Rectangles.manipulatorMoveRect = GUI.Window (42, Rectangles.manipulatorMoveRect, LoadTypeGUI.Manipulator, emptyContent); + } + + public void SetHyperBall () { + if ((/*UIData.atomtype == UIData.AtomType.hyperball || */UIData.bondtype == UIData.BondType.hyperstick) && (!showBondType && !showAtomType) && showAtomMenu) { + Rectangles.hyperballRect = GUI.Window (12, Rectangles.hyperballRect, LoadTypeGUI.HyperballStyle, emptyContent); + showHyperballsMenu = true; + } else + showHyperballsMenu = false; + } + + public void SetSurfaceTexture () { + if (showSurfaceTexture && (showSurfaceMenu || showBfactorMenu)) { + GUIDisplay.m_texture = false; +// GUI.Window(41, new Rect(texturetypexstart,texturetypeystart,texturewidth,textureheight),loadSurfaceTexture, "Surface texture parameters"); + Rectangles.textureRect = GUI.Window (41, Rectangles.textureRect, LoadTypeGUI.SurfaceTexture, emptyContent); } - GUILayout.EndHorizontal (); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; + } + public void SetSurtfaceMobileCut () { + if (showSurfaceMobileCut && (showSurfaceMenu || showBfactorMenu)) + Rectangles.surfaceMobileCutRect = GUI.Window (21, Rectangles.surfaceMobileCutRect, LoadTypeGUI.SurfaceMobileCut, emptyContent); } - private void loadSurfaceTexture (int a) - { -// string[] texList; - if(only_best_textures) { if(texture_set>0) texture_set=-1; }; // make sure values are negative for best textures - - // ######################################################################### TOP TEXTURES ************************************* - if (texture_set == -1) { - string[] texList = { "None", - "draw3","article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800","05-how-shading-crosshatch-3b", - "400px-Draw-a-Sphere-Step-7","draw-shade-spheres-1.3-800X800", "sphere_1_mth", "images-7", "toon", - "georgetownatelier_sphere_posterized", "sphere-_tutorial_6", "sphere-1p", "sphere1_1","sphere1copy","tumblr_lsyq66Y15D1r0o2eb"}; - textureMenu ("lit_spheres/dessin/", texList, "Draw Style #1"); + public void SetSurfaceCut () { + if (showSurfaceCut && (showSurfaceMenu || showBfactorMenu)) { + Rectangles.surfaceCutRect = GUI.Window (21, Rectangles.surfaceCutRect, LoadTypeGUI.SurfaceCut, emptyContent); + Rectangles.movePlaneRect = GUI.Window (22, Rectangles.movePlaneRect, LoadTypeGUI.MoveCutPlane, emptyContent); } + } - if (texture_set == -5) { - string[] texList = { - "how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee", "E-C-S (386)","Sketch 10 - sphere1","Sketch 9 - sphere","zbVZE","0-2", - "CharcoalSphere","74027","8289_Making_a_metallic_sphere_", "crayon1","b11","chiaroscuro-valuescale","draw-shade-spheres-1.4-800X800", - "400px-Draw-a-Sphere-Step-8","sph_draw_MC"}; - textureMenu ("lit_spheres/dessin/", texList, "Draw Style #2"); - } - - if (texture_set == -4) { - string[] texList = { - "psurftex/2-photos-sphere 2","psurftex/2-photos-sphere","psurftex/1396091264285309","psurftex/basic_shapes_monochrome_oil_painting-(0)", - "psurftex/starter sphere240 2","psurftex/silvery2","objets/MatcapQuartz","artext/white_01","artext/shopblack2","artext/shine_blue", - "objets/moon2","objets/planet2","objets/bowling1","metal/bronze1","metal/bille-en-acier-359590" - }; - textureMenu ("lit_spheres/", texList, "Photo Style"); - } - - if (texture_set == -3) { - string[] texList = { - "dessin/hayward_sphere","dessin/basic_shapes_monochrome_oil_painting-(81)","dessin/sphere-2j","dessin/hqdefault", - "artistic/caspern","artistic/images","divers/draw2","wood/wood1","glass/glass","artext/or","artext/greenglass","artext/water1", - "artext/orpur","artext/5_04","artext/banane"}; - textureMenu ("lit_spheres/", texList, "Mixed Styles #1"); - } - - if (texture_set == -2) { - string[] texList = { - "artext/perle","artext/1stwindow","objets/green_glass_860","artext/kirsch","artext/expo","artext/natural_01", - "organic/bone","organic/skin","wood/sph_orange_MC","divers/binary-sphere-logo" - }; - textureMenu ("lit_spheres/", texList, "Mixed Styles #2"); - } - - - // ######################################################################### DESSIN - if (texture_set == 1) { - string[] texList = { "None","crayon1","toon","draw3","melon1", "74027", "287457d8aba0f677ac18a913b9f0f441", "article-new-ehow-images-a02-00-ep-draw-crosshatching-hatching-800x800", - "bruckner","gray","0-2","05-how-shading-crosshatch-3b","400px-Draw-a-Sphere-Step-7","8289_Making_a_metallic_sphere_","b11"}; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 1"); - } - - // ######################################################################### DESSIN #2 - if (texture_set == 2) { - string[] texList = { "chiaroscuro-valuescale","CharcoalSphere","cracked_sphere","draw-shade-spheres-1.3-800X800","how_to_draw_a_basic_sphere_by_unknowntone-d4yfqee", - "E-C-S (386)","escher_3_spheres_1 2","escher_3_spheres_1 3","droppedImage","draw-shade-spheres-1.4-800X800", - "ex2_2_carter","eye2","fig14-charcoal-sphere","georgetownatelier_sphere_posterized","GlhTq"}; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 2"); - } - - // ######################################################################### DESSIN #3 - if (texture_set == 3) { - string[] texList = { "GRD3_LS03_IMG01","GRD3_LS03_IMG21","images-7","IMG_1339_2","IMG_1345_2", - "mqdefault","nancy_sphere","pointillism 2","pointillism 3","rZ0eX", - "Scan23c","Scan23d","shaded-sphere-1","Sketch 10 - sphere1","Sketch 9 - sphere" - }; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 3"); - } - - // ######################################################################### DESSIN #4 - if (texture_set == 4) { - string[] texList = { "sphere_1_mth","sphere-_tutorial_6","sphere-1j","sphere-1p","sphere-2p", - "sphere-drawingj1","sphere-exercise-3","sphere1_1","sphere1copy","sphere2-1", - "sphere2p","SphereAndShadow","spheregif","spheregif2","spherewhatches" - }; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 4"); - } - - // ######################################################################### DESSIN #5 - if (texture_set == 5) { - string[] texList = { "starter sphere240 3","starter sphere240","tumblr_lsyq66Y15D1r0o2eb","tYIlA","zbVZE", - "400px-Draw-a-Sphere-Step-2","400px-Draw-a-Sphere-Step-8","sph_draw_MC", - }; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 5"); - } - - // ######################################################################### PHOTOS TEXTURES - if (texture_set == 6) { - string[] texList = { "2-photos-sphere 2","2-photos-sphere","1396091264285309","basic_shapes_monochrome_oil_painting-(0)","shading-sphere-photo-005", - "sphere-drawing-reference","starter sphere240 2","thumbnail-140x140-ehow-images-a08-49-it-draw-planets-800x800","silvery2" - }; - textureMenu ("lit_spheres/psurftex/", texList, "Surface Textures"); - } - - // ######################################################################### DESSIN COLORE - if (texture_set == 7) { - string[] texList = { "inks","blue","toon2","hayward_sphere","basic_shapes_monochrome_oil_painting-(81)", - "exercise2","hand_with_reflecting_sphere","hqdefault","source","sphere-2j", - "spherej","sphere2copykw6","sphere05"}; - textureMenu ("lit_spheres/dessin/", texList, "Drawn 6"); - } - - // ######################################################################### OBJECTS - if (texture_set == 25) { - string[] texList = { "green_glass_860","blood","petanque1", "moon1", "moon2", - "earth1", "earth2", "uk1", "planet1","planet2", - "bowling1","tablet1","bille-en-plastique-359520","bille","blu_green_litsphere_by_jujikabane" - }; - textureMenu ("lit_spheres/objets/", texList, "Objects #1"); - } - - // ######################################################################### ARTEXT - if (texture_set == 26) { - string[] texList = { "belight","blackNblue","kirsch","chocolat","defaultball", - "disco","disco2","expo","vert","l+s1", - "l+s2","lightgray","natural_01","natural_02","neon" }; - textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #1"); - } - - // ######################################################################### FUN - if (texture_set == 27) { - string[] texList = { "pig1","pumpkin1","skull1", "skull2", "skull3", - "explode1","china1", "china2","euro1","heart1", - "head1","head2","ballon" }; - textureMenu ("lit_spheres/fun/", texList, "Fun #1"); - } - - // ######################################################################### BIO - if (texture_set == 28) { - string[] texList = { "fluo1","fluo2","fluo3","fluo4","fluo5", - "fluo6", "fluo7", "fluo8", "fluo9", "fluo10", - "em1", "em2", "em3" }; - textureMenu ("lit_spheres/bio/", texList, "Bio #1"); - } - - // ######################################################################### METAL - if (texture_set == 29) { - string[] texList = { "silvery1", "silvery2", "puzzle1", "black1","chrome1", - "bronze1","bille-en-acier-359590","steel","gold","metal", - "silver10" - }; - textureMenu ("lit_spheres/metal/", texList, "Metals #1"); - } - - // ######################################################################### ORGANIC - if (texture_set == 30) { - string[] texList = { "wool1", "nobs1","nobs2","spike1","spike2", - "splinter1", "leaves1","anemone","blood2","bone", - "skin","Skin","vessel" - }; - textureMenu ("lit_spheres/organic/", texList, "Organic #1"); - } - - // ######################################################################### ARTISTIC - if (texture_set == 8) { - string[] texList = { "caspern","carspen2","Gloss_Black","images","tableau-moderne-bille" - }; - textureMenu ("lit_spheres/artistic/", texList, "Artistic #1"); - } - - // ######################################################################### DIVERS - if (texture_set == 9) { - string[] texList = { "choco","daphz1","daphz2","daphz3","draw2", - "email","eye3","eye3gray","eye4","eyes2", - "eyes2gray", "eyes5", "gooch", "hexa","LitSphere_Example1" - }; - textureMenu ("lit_spheres/divers/", texList, "Various #1"); - } - - // ######################################################################### WOOD - if (texture_set == 10) { - string[] texList = { "wood1","sph_orange_MC" - }; - textureMenu ("lit_spheres/wood/", texList, "Woods #1"); - } - - // ######################################################################### OBJECTS 2 - if (texture_set == 11) { - string[] texList = { "bluew","mat","matcap","MatcapQuartz","stone" - }; - textureMenu ("lit_spheres/objets/", texList, "Objects #2"); - } - - // ######################################################################### GLASS 1 - if (texture_set == 12) { - string[] texList = { "glass","glass2","glassbw" - }; - textureMenu ("lit_spheres/glass/", texList, "Glass #1"); - } - - // ######################################################################### DIVERS 2 - if (texture_set == 13) { - string[] texList = { "matcap_2","material37","noise","truc","vertical1", - "hyperballparticle4","hyperballparticlegray","inks2","round_alpha","round", - "round1","round2","roundlight" - }; - textureMenu ("lit_spheres/divers/", texList, "Various #2"); - } - - // ######################################################################### ARTEXT - if (texture_set == 14) { - string[] texList = { "pasha1","piggybank","rougebrillant","red_1","red_simple", - "redtowhite","rgestampage","rouille","shad1","shad2", - "shad3","shadow1","shadow2","estampage","simple10" - }; - textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #2"); - } - - if (texture_set == 15) { - string[] texList = { "simple2","simple4","simple6","simple7","simple8", - "simple9","simple_01","simple_02","simple_03","simple_blue", - "simple_contrast","simple_doberman","simple_goldcopy","simple_gold","simple_grey" - }; - textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #3"); - } - - if (texture_set == 16) { - string[] texList = { "transp_01","transp_02","transp_03","transp_04","white_01", - "white_02","white_03","x","aqua","army", - "balloon1","balloon2","balloon3","balloon4","noir" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #4"); } - - if (texture_set == 17) { - string[] texList = { "bluebuz","blue1","blue2","blue3","blue4", - "bronze","chocolatlait","concave","sombre","oeuf", - "or","gris","verrebuz","greenglass","vertvelours" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #5"); } - - if (texture_set == 18) { - string[] texList = { "hameleon","encre","lightgray","peinture","paint1", - "paint2","paint3","rosebuz","rose","violet", - "purple1","rougebuz","red1","red2","removableeye" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #6"); } - - if (texture_set == 19) { - string[] texList = { "water1","water2","water3","rayonx","aquarelle", - "asperge","banane","noirmetal","bronze2","fruits", - "glossy","lumiereor","bijou","lemon","orclair" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #7"); } - - if (texture_set == 20) { - string[] texList = { "mango","lune","neon4","verreorange","orpur", - "raye","transparent","water","jaune","1_01", - "1_02","1_03","1_04","2_01","2_02" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #8"); } - - if (texture_set == 21) { - string[] texList = { "2_03","2_05","4","5_01","5_02", - "5_03","5_04","6_01","6_02","6_03", - "6_04","7","8_01","8_02","art_01" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #9"); } - - if (texture_set == 22) { - string[] texList = { "art_02","art_03","art_04","art_06","art_07", - "art_10","art_11","art_red","ceramique","keramic_01", - "perle","rainbow_01","rainbow_02","rainbow_03","rainbow_04" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #10"); } - - if (texture_set == 23) { - string[] texList = { "shine_blue","artball1","artball10","artball11","artball2", - "artball3","artball4","artball5","artball6","artball7", - "artball8","artball9","shopblack1","shopblack1invert","shopblack2" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #11"); } - - if (texture_set == 24) { - string[] texList = { "shopblack3","shopblack4","shopgreen1","shopgreen2","shoppink1", - "shoppink2","shoppink3","shopred1","shopred2","shopred3", - "shopred4","1stwindow","3","7_12","glass1" - }; textureMenu ("lit_spheres/artext/", texList, "Art Text v2 #12"); } - // ######################################################################### END - - } -// private void loadSurfaceTexture(int a) -// { -// GUILayout.BeginHorizontal(); -// Texture2D greentext; -// greentext = (Texture2D)Resources.Load("graypic/green_glass_860"); -// if(GUILayout.Button(greentext,GUILayout.Width(50),GUILayout.Height(50))) -// { -// surface_texture =true; -// surface_texture_name ="graypic/green_glass_860"; -// } -// Texture2D toon; -// toon = (Texture2D)Resources.Load("graypic/toon"); -// if(GUILayout.Button(toon,GUILayout.Width(50),GUILayout.Height(50))) -// { -// surface_texture =true; -// surface_texture_name="graypic/toon"; -// } -// -// Texture2D blood; -// blood = (Texture2D)Resources.Load("graypic/blood"); -// if(GUILayout.Button(blood,GUILayout.Width(50),GUILayout.Height(50))) -// { -// surface_texture =true; -// surface_texture_name="graypic/blood"; -// } -// -// Texture2D blue; -// blue = (Texture2D)Resources.Load("graypic/blue"); -// if(GUILayout.Button(blue,GUILayout.Width(50),GUILayout.Height(50))) -// { -// surface_texture =true; -// surface_texture_name="graypic/blue"; -// } -// -// Texture2D draw3; -// draw3 = (Texture2D)Resources.Load("graypic/draw3"); -// if(GUILayout.Button(draw3,GUILayout.Width(50),GUILayout.Height(50))) -// { -// surface_texture =true; -// surface_texture_name="graypic/draw3"; -// } -// GUILayout.EndHorizontal(); -// } - + public void SetBackGroundType () { + if (showBackgroundType) + Rectangles.backTypeRect = GUI.Window (43, Rectangles.backTypeRect, LoadTypeGUI.Background, emptyContent); + } - private void loadSurfaceCut (int a) - { - depthcut = LabelSlider (depthcut, depthcutMin, depthcutMax, "depth cutting " + depthcut, "Determines cut plane depth position", true, 150); - cutX = LabelSlider (cutX, -1f, 1f, " X: " + cutX, "Determines cut plane X position", true, 150); - cutY = LabelSlider (cutY, -1f, 1f, " Y: " + cutY, "Determines cut plane Y position", true, 150); - cutZ = LabelSlider (cutZ, -1f, 1f, " Z: " + cutZ, "Determines cut plane Z position", true, 150); - - + public void SetMetaphorType () { + if (showMetaphorType && showAtomMenu) + Rectangles.metaphorRect = GUI.Window (23, Rectangles.metaphorRect, LoadTypeGUI.Metaphor, emptyContent); } - private void loadSurfaceMobileCut (int a) - { - depthcut = LabelSlider (depthcut, -40f, 40f, "depth cutting " + depthcut, "Determines mobile cut plane depth position", true, 150); - adjustFieldLinecut = LabelSlider (adjustFieldLinecut, -100f, 100f, " FL cut :" + adjustFieldLinecut, "Determines field line cut position", true, 150); + public void SetVRPNMenu () { + if (showVRPNMenu) + Rectangles.vrpnMenuRect = GUI.Window (419, Rectangles.vrpnMenuRect, VRPNManager.VRPNM, emptyContent); } - private void loadTypeGUIEffect (int a) - { - GUILayout.BeginHorizontal (); - // Make a toggle for SSAO :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - if (UIData.atomtype == UIData.AtomType.hyperball) - GUI.enabled = false; - toggle_VE_SSAO = GUILayout.Toggle (toggle_VE_SSAO, new GUIContent ("SSAO", "Toggle screen space ambient occlusion effect")); - if (!toggle_VE_SSAO) - { - if (Camera.main.GetComponent ().enabled) - { - Camera.main.GetComponent ().enabled = false; - } - } - else - { - Camera.main.GetComponent ().enabled = true; - } - GUI.enabled = true; - GUILayout.EndHorizontal (); + public void SetMDDriverMenu () { + if (showMDDriverMenu) + Rectangles.mddriverMenuRect = GUI.Window (420, Rectangles.mddriverMenuRect, MDDriver.MDDriverM, emptyContent); + } - GUILayout.BeginHorizontal (); - // Make a toggle for BLUR :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE_BLUR = GUILayout.Toggle (toggle_VE_BLUR, new GUIContent ("BLUR", "Toggle motion blur effect")); - if (!toggle_VE_BLUR && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE_BLUR && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("MotionBlur"); - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/MotionBlur"); - Camera.main.GetComponent ().enabled = true; - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - // Make a toggle for NOISE ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_NOISE = GUILayout.Toggle (toggle_VE2_NOISE, new GUIContent ("NOISE", "Toggle noise effect")); - if (!toggle_VE2_NOISE && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_NOISE && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("NoiseEffect"); - Camera.main.GetComponent ().enabled = true; - Camera.main.GetComponent ().shaderRGB = Shader.Find ("Hidden/Noise Shader RGB"); - Camera.main.GetComponent ().shaderYUV = Shader.Find ("Hidden/Noise Shader YUV"); - Camera.main.GetComponent ().grainTexture = Resources.Load ("NoiseEffectGrain") as Texture2D; - Camera.main.GetComponent ().scratchTexture = Resources.Load ("NoiseEffectScratch") as Texture2D; - } - // Make a toggle for BLUR2 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_BLUR2 = GUILayout.Toggle (toggle_VE2_BLUR2, new GUIContent ("BLUR2", "Toggle overall blur effect")); - if (!toggle_VE2_BLUR2 && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_BLUR2 && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("BlurEffect"); - Camera.main.GetComponent ().blurShader = Shader.Find ("Hidden/BlurEffectConeTap"); - Camera.main.GetComponent ().enabled = true; - } - GUILayout.EndHorizontal (); - - GUILayout.BeginHorizontal (); - // Make a toggle for EDGE ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_EDGE = GUILayout.Toggle (toggle_VE2_EDGE, new GUIContent ("EDGE", "Toggle edge detection effect")); - if (!toggle_VE2_EDGE && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_EDGE && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("EdgeDetectEffect"); - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/Edge Detect X"); - Camera.main.GetComponent ().enabled = true; - } - // Make a toggle for CONTR ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_CONTR = GUILayout.Toggle (toggle_VE2_CONTR, new GUIContent ("CONTR", "Toggle contrast stretch effect")); - if (!toggle_VE2_CONTR && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_CONTR && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("ContrastStretchEffect"); - Camera.main.GetComponent ().shaderLum = Shader.Find ("Hidden/Contrast Stretch Luminance"); - Camera.main.GetComponent ().shaderReduce = Shader.Find ("Hidden/Contrast Stretch Reduction"); - Camera.main.GetComponent ().shaderAdapt = Shader.Find ("Hidden/Contrast Stretch Adaptation"); - Camera.main.GetComponent ().shaderApply = Shader.Find ("Hidden/Contrast Stretch Apply"); - Camera.main.GetComponent ().enabled = true; - } - GUILayout.EndHorizontal (); + +// end of windows functions ============================================================================================= - GUILayout.BeginHorizontal (); - // Make a toggle for VORTX ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_VORTX = GUILayout.Toggle (toggle_VE2_VORTX, new GUIContent ("VORTX", "Toggle vortex deformation effect")); - if (!toggle_VE2_VORTX && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_VORTX && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("VortexEffect"); - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/Twist Effect"); - Camera.main.GetComponent ().enabled = true; - } - // Make a toggle for TWIRL ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_TWIRL = GUILayout.Toggle (toggle_VE2_TWIRL, new GUIContent ("TWIRL", "Toggle twirl deformation effect")); - if (!toggle_VE2_TWIRL && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_TWIRL && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("TwirlEffect"); - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/Twirt Effect Shader"); - Camera.main.GetComponent ().enabled = true; - } - GUILayout.EndHorizontal (); + public void MinLoadTypeGUIAtom (int b) {} - // Make a combined toggle+button for GRAYS :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - GUILayout.BeginHorizontal (); - toggle_VE2_GRAYS = GUILayout.Toggle (toggle_VE2_GRAYS, new GUIContent ("GRAYS", "Toggle grayscale color effect")); - if (!toggle_VE2_GRAYS && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_GRAYS && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("GrayscaleEffect"); - Camera.main.GetComponent ().enabled = true; - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/Grayscale Effect"); - Camera.main.GetComponent ().textureRamp = Resources.Load (ve2_grays_ramps [ve2_grays_rampc]) as Texture2D; - } - if (GUILayout.Button (new GUIContent ("Ramp " + ve2_grays_rampc, "Choose among several grayscale ramps"))) { - ve2_grays_rampc += 1; - if (ve2_grays_rampc > ve2_grays_rampn) { - ve2_grays_rampc = 0; - } - if (toggle_VE2_GRAYS) { - Camera.main.GetComponent ().textureRamp = Resources.Load (ve2_grays_ramps [ve2_grays_rampc]) as Texture2D; + protected static string queryBestTextures(){ + if (onlyBestTextures) + return("On"); + else + return("Off"); + } + + public static void FileSelectedCallback (string path) { + #if !UNITY_WEBPLAYER + m_fileBrowser = null; + if (path != null) { + m_textPath = path; + m_last_extSurf_Path = System.IO.Path.GetDirectoryName (path); + externalSurfaceTexture = true; + surfaceTextureDone = false; } - } - GUILayout.EndHorizontal (); +// FileBrowser_show = false; + surfaceTexture = false; + GUIMoleculeController.FileBrowser_show2 = false; + WWW www = new WWW ("file://" + GUIMoleculeController.m_textPath); + extSurf = www.texture; + Debug.Log (m_textPath); + #endif + } + - // Make a combined toggle+button for CCORR :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - GUILayout.BeginHorizontal (); - toggle_VE2_CCORR = GUILayout.Toggle (toggle_VE2_CCORR, new GUIContent ("CCORR", "Toggle color correction effect")); - if (!toggle_VE2_CCORR && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_CCORR && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("ColorCorrectionEffect"); - Camera.main.GetComponent ().enabled = true; - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/Grayscale Effect"); - Camera.main.GetComponent ().textureRamp = Resources.Load (ve2_ccorr_ramps [ve2_ccorr_rampc]) as Texture2D; - } - if (GUILayout.Button (new GUIContent ("Ramp " + ve2_ccorr_rampc, "Choose among several color correction ramps"))) { - ve2_ccorr_rampc += 1; - if (ve2_ccorr_rampc > ve2_ccorr_rampn) { - ve2_ccorr_rampc = 0; - } - if (toggle_VE2_CCORR) { - Camera.main.GetComponent ().textureRamp = Resources.Load (ve2_ccorr_ramps [ve2_ccorr_rampc]) as Texture2D; - } - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - // Make a toggle for SEPIA ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_SEPIA = GUILayout.Toggle (toggle_VE2_SEPIA, new GUIContent ("SEPIA", "Toggle sepia tone color effect")); - if (!toggle_VE2_SEPIA && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_SEPIA && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("SepiaToneEffect"); - Camera.main.GetComponent ().shader = Shader.Find ("Hidden/Sepiatone Effect"); - Camera.main.GetComponent ().enabled = true; - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - // Make a toggle for GLOW ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_GLOW = GUILayout.Toggle (toggle_VE2_GLOW, new GUIContent ("GLOW", "Toggle glow effect")); - if (!toggle_VE2_GLOW && Camera.main.GetComponent ()) { - Object.Destroy (Camera.main.GetComponent ()); - } else if (toggle_VE2_GLOW && !Camera.main.GetComponent ()) { - GameObject.FindWithTag ("MainCamera").AddComponent ("GlowEffect"); - Camera.main.GetComponent ().compositeShader = Shader.Find ("Hidden/GlowCompose"); - Camera.main.GetComponent ().blurShader = Shader.Find ("Hidden/GlowConeTap"); - Camera.main.GetComponent ().downsampleShader = Shader.Find ("Hidden/Glow Downsample"); - // Camera.main.GetComponent().blurspread = 0.7f; - // Camera.main.GetComponent().bluriterations = 3f; - Camera.main.GetComponent ().glowIntensity = 0.3f; - Camera.main.GetComponent ().enabled = true; - } - GUILayout.EndHorizontal (); - GUILayout.BeginHorizontal (); - // Make a toggle for DREAM ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - toggle_VE2_DREAM = GUILayout.Toggle (toggle_VE2_DREAM, new GUIContent ("DREAM", "Toggle a dream-like effect")); - - -// if (!toggle_VE2_DREAM && Camera.main.GetComponent ()) { -// Object.Destroy (Camera.main.GetComponent ()); -// } else if (toggle_VE2_DREAM && !Camera.main.GetComponent ()) { -// GameObject.FindWithTag ("MainCamera").AddComponent ("DreamEffect"); -// Camera.main.GetComponent ().blackChannelShader = Shader.Find ("Hidden/DreamEffect BlackChannel"); -// Camera.main.GetComponent ().enabled = true; -// } - GUILayout.EndHorizontal (); - backgroundtype_show = false; - graycolor_show = false; - // ParamFieldLine_show=false; - SurfaceButton_show = false; - - // GUI.Label ( new Rect(120,Screen.height-35,Screen.width-360,20), GUI.tooltip); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - } - // help window at the start of program ============================================================================================= - public void RenderHelp () - { + public void RenderHelp () { if (toggle_HELP) { - if (!toggle_VE_COPYR) { + if (!toggle_VE_COPYR) toggle_VE_COPYR = true; - } + GUI.Box (new Rect (Screen.width / 4, Screen.height / 4 + 30, Screen.width / 2, Screen.height / 2 - 60), "UNITY MOL QUICK HELP"); - GUILayout.BeginArea (new Rect (5 + Screen.width / 4, 25 + Screen.height / 4 + 30, 0.5f * Screen.width - 10, 0.5f * Screen.height - 25)); + GUILayout.BeginArea (new Rect (5 + Screen.width / 4, 25 + Screen.height / 4 + 30, 0.5f * Screen.width, 0.5f * Screen.height - 25)); GUILayout.Label ("Welcome to UnityMol. Most program functions will show a tooltip in the bottom left corner to provide some assistance.\n"); GUILayout.Label ("The main menu functions are accessible from the buttons on the top left part of the screen." + "GUI elements will be arranged along the screen borders in order to leave space in the middle for the molecule view." + @@ -2685,370 +803,52 @@ public void RenderHelp () "A tutorial image summarizing essential functions is also provided." + "In the future, clicking on the bottom left UnityMol icon will open the online help (keep posted)." + "Further information can be obtained from the UnityMol SourceForge website and mailing list.\n"); - // MB: these keys don't seem to work anuy more?? check: - // GUILayout.Label("Use the cursor keys to navigate the scene: W/X for rotation D/E/Q/S/Z for pan, and B/N for zoom if click the key choice. You can also use the Mouse button to navigate if click the mouse choice. Alternatively,if you have a joypad you can rotation and zoom and pan by the button of the joypad, and also the radius of the atoms"); - GUILayout.Label ("You can press the delete key to activate some hidden features on the left-hand atoms menu (bugs included!)."); + GUILayout.Label ("Keyboard Controls :\n"+ + "Move the molecule with the arrow Keys or Q/E/Z/X. Rotate it with W/A/S/D. Modify zoom with B/N.\n"+ + "Focus an atom by selecting it and pressing T, reset camera and focus with R. Hide GUI with Backspace.\n"); + // MB: these keys don't seem to work anymore?? check: +// GUILayout.Label("Use the cursor keys to navigate the scene: W/X for rotation D/E/Q/S/Z for pan, +// and B/N for zoom if click the key choice. You can also use the Mouse button to navigate if click the mouse choice. +// Alternatively,if you have a joypad you can rotation and zoom and pan by the button of the joypad, and also the radius of the atoms"); +// GUILayout.Label ("You can press the delete key to activate some hidden features on the left-hand atoms menu (bugs included!)."); // MB: the equal key does not seem to work? - //GUILayout.Label("If you press the equal key, the octree dividing blocks for the particle system are shown."); +// GUILayout.Label("If you press the equal key, the octree dividing blocks for the particle system are shown."); GUILayout.Label ("\nUnity Mol is an open source project by Marc Baaden and the LBT team. version "+umolversion+" (c) 2009-13."); GUILayout.EndArea (); - // Debug.Log("Hlep information window"); - if (GUI.Button (new Rect (Screen.width / 4, 0.75f * Screen.height - 20 - 30, Screen.width / 2, 20), "Close unity mol help window")) { +// Debug.Log("Help information window"); + if (GUI.Button (new Rect (Screen.width / 4, 0.75f * Screen.height - 20 - 30, Screen.width / 2, 20), "Close unity mol help window")) toggle_HELP = false; - } } - + + // Print FPS and atom/bond count if activated :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + if(toggle_INFOS) { + GUI.Label(Rectangles.fpsInfosRect, new GUIContent(" FPS : " + MoleculeModel.FPS + + "\n Atom count : " + MoleculeModel.atomsnumber.ToString() + + "\n Bond count : " + MoleculeModel.bondsnumber.ToString())); + } + // Print copyright and icon if activated ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if (toggle_VE_COPYR) { // GUI.Box (new Rect (Screen.width - 700, Screen.height - 25, 450, 25), "(c)opyright 2009-13 by LBT team/M. Baaden, "); - GUI.Box (new Rect (180, Screen.height - 25, 500, 25), umolversion+" (c)opyright 2009-13 by LBT team/M. Baaden, "); - // real logo size: 87 x 263 // 175 x 58 -// if (GUI.Button ( new Rect(0,Screen.height-58, 175, 58), new GUIContent(guicon,"Open the Unity Mol manual in a web browser"), GUI.skin.GetStyle("label"))) - if (GUI.Button (new Rect (0, Screen.height - 58, 175, 58), new GUIContent (guicon, "Open the Unity Mol manual in a web browser"))) { -// Application.OpenURL (umolbase+"/Assets/_Documentation/Manual.html"); + GUI.Box (new Rect (Rectangles.webHelpWidth, Screen.height - 25, Screen.width, 25), umolversion+" (c)opyright 2009-14 by LBT team/M. Baaden, ; SweetUnityMol by Tubiana, Imberty, Perez & MB"); + // Real logo size: 87 x 263 // 175 x 58 +// if (GUI.Button ( new Rect(0,Screen.height-58, 175, 58), new GUIContent(guicon,"Open the Unity Mol manual in a web browser"), GUI.skin.GetStyle("label"))) + if (GUI.Button (Rectangles.webHelpRect, new GUIContent (guicon, "Open the Unity Mol manual in a web browser"))) { +// Application.OpenURL (umolbase+"/Assets/_Documentation/Manual.html"); // Application.OpenURL (umolbase + "/umolfigs2.png"); Application.OpenURL (umolbase + "/page2/index.html"); } } #if !UNITY_WEBPLAYER { - if (GUI.Button (new Rect (principalxstart + principalwidth + 25, principalystart, 40, 20), new GUIContent ("EXIT", "APPLICATION: Exit the Unity Mol program!"))) { +// if (GUI.Button (new Rect (principalxstart + principalwidth + 25, principalystart, 40, 20), new GUIContent ("EXIT", "Exit the Unity Mol program"))) { + if (GUI.Button (Rectangles.exitRect, new GUIContent ("EXIT", "Exit the Unity Mol program"))) Application.Quit (); - } } #endif - if (GUI.Button (new Rect (principalxstart + principalwidth + 5, principalystart, 20, 20), new GUIContent ("?", "APPLICATION: Open quick help for the Unity Mol program!"))) { - if (toggle_HELP) { - toggle_HELP = false; - } else { - toggle_HELP = true; - } - ; - - } - -// GUI.Label ( new Rect(120,Screen.height-35,Screen.width-360,20), GUI.tooltip); - } - - private void RenderParameter () - { - // toggle_HB_SANIM = GUILayout.Toggle (toggle_HB_SANIM, new GUIContent ("HB_SANIM", "Animate shrink parameter")); - GUILayout.BeginHorizontal (); - if (GUILayout.Button (new GUIContent ("Color", "Choose the color for each atom type"))) - if (!SetAtomScale_show) { - SetAtomScale_show = true; - // m_colorpick_Surface = null; - // m_colorpick_fieldline = null; - // surface_texture_show = false; - } else - SetAtomScale_show = false; - - if (UIData.atomtype == UIData.AtomType.hyperball) - GUI.enabled = true; - else - GUI.enabled = false; - - if (GUILayout.Button (new GUIContent ("Texture", "Change the texture used in the HyperBalls matcap shader"))) { - if (GUIDisplay.m_texture == false) { - GUIDisplay.m_texture = true; - surface_texture_show = false; - // GUIDisplay.m_colorpick_Atom = null; - - } else - GUIDisplay.m_texture = false; - } - GUILayout.EndHorizontal (); - - bool enable = true; - - rayon = LabelSlider (rayon, 0.00001f, 2.0f, "Radius " + rayon, "Determines radius value", enable, 150); - // rayon = LabelSlider (rayon, 0.00001f, 2.0f, new GUIContent("Radius "+rayon,"Choose the atom radius"),enable,150); - - // if(!UIData.openAllMenu) - // { - // if(UIData.atomtype==UIData.AtomType.particleball)enable=false; - // } - // - // shrink = LabelSlider (shrink, 0.00001f, 0.99f, "Shrink "+shrink,enable); - // - // - //// toggle_HB_RANIM = GUILayout.Toggle (toggle_HB_RANIM, new GUIContent ("HB_RANIM", "Animate radius parameter")); - // - // linkscale = LabelSlider(linkscale, 0.00001f, 1.0f, "Scale "+linkscale,enable); - // - // depthfactor = LabelSlider(depthfactor, -2.0f, 2.0f, "Depthfactor "+depthfactor,enable); - // - // MetaphorControl(); - // - // GUI.enabled=true; - // - //// toggle_HB_TRANS = GUILayout.Toggle (toggle_HB_TRANS, new GUIContent ("HB_TRANS", "Animate CPK/Licorice")); - // //Make a toggle for interactive mode - // if(UIData.atomtype!=UIData.AtomType.hyperball)GUI.enabled=false; - // toggle_NA_INTERACTIVE = GUILayout.Toggle (toggle_NA_INTERACTIVE, new GUIContent ("Interactive mode", "Toggle interactive mode, the physical engine will be open.")); - // //toggle_NA_INTERACTIVE=false; - // GUI.enabled=true; - // toggle_NA_SWITCH = GUILayout.Toggle (toggle_NA_SWITCH, new GUIContent ("Switch mode", "Toggle switch mode, which is swith representation method between hyperball and particleball due to the static or moving.")); - // - // toggle_NA_CLICK = GUILayout.Toggle (toggle_NA_CLICK, new GUIContent ("Click Mode", "Toggle Click Mode, and then click the atom, the information will be shown.")); - // - // toggle_NA_MEASURE = GUILayout.Toggle (toggle_NA_MEASURE, new GUIContent ("Measure distance", "Toggle Mesaure Distance between two atoms.")); - - - // if(!toggle_NA_MEASURE && Camera.main.GetComponent()) - // { - // // Object.Destroy (Camera.main.GetComponent()); - // Camera.main.GetComponent().Clear(); - // Camera.main.GetComponent().enabled = false; - // // GameObject line=GameObject.Find("Line"); - // //// Destroy(line); - // // line.active = false; - - // } - // else if (toggle_NA_MEASURE && Camera.main.GetComponent()) - // { - // //GameObject.FindWithTag("MainCamera").AddComponent ("MeasureDistance"); - // Camera.main.GetComponent().enabled = true; - // } - // //GUILayout.EndHorizontal(); - - // if(!toggle_NA_CLICK && Camera.main.GetComponent()) - // { - // // Object.Destroy (Camera.main.GetComponent()); - - // Camera.main.GetComponent().Clear(); - // Camera.main.GetComponent().enabled = false; - // // GameObject line=GameObject.Find("Line"); - // //// Destroy(line); - // // line.active = false; - - // } - // else if (toggle_NA_CLICK && Camera.main.GetComponent()) - // { - // //GameObject.FindWithTag("MainCamera").AddComponent ("MeasureDistance"); - // Camera.main.GetComponent().enabled = true; - // Debug.Log("RenderParameter"); - // } - - - // if(toggle_NA_SWITCH) - // { - // UIData.switchmode=true; - // } - // else - // { - // UIData.switchmode=false; - // } - - // if(toggle_NA_INTERACTIVE) - // { - // UIData.interactive=true; - // UIData.resetInteractive=true; - // } - // else - // { - // UIData.toggleGray=false; - // UIData.toggleColor=true; - // UIData.interactive=false; - // UIData.resetInteractive=true; - // if(!MoleculeModel.FieldLineFileExist)graycolor_show=false; - // if(!MoleculeModel.SurfaceFileExist) SurfaceButton_show= false; - // } - - - //////////////////////modify/////////////////////// - // toggle_NA_MAXCAM = GUILayout.Toggle (toggle_NA_MAXCAM, new GUIContent ("MAXCAM", "Toggle 3DS max-like scene navigation")); - - GUILayout.BeginHorizontal(); - if(toggle_NA_HIDE) - GUI.enabled = false; - toggle_NA_HBALLSMOOTH = GUILayout.Toggle (toggle_NA_HBALLSMOOTH, new GUIContent ("HballSmoothL", "Set a parameter combo for HyperBalls and Sticks with SmoothLinks once")); - UIData.hballsmoothmode = toggle_NA_HBALLSMOOTH; - GUI.enabled = true; - toggle_NA_HIDE = GUILayout.Toggle (toggle_NA_HIDE, new GUIContent ("Hide", "Hide/Display atoms")); - GUILayout.EndHorizontal(); - - if (toggle_NA_HBALLSMOOTH) { - UIData.resetDisplay = true; - UIData.isCubeToSphere = false; - UIData.isSphereToCube = true; - UIData.atomtype = UIData.AtomType.hyperball; - Debug.Log ("UIData.resetDisplay :: " + UIData.resetDisplay); - Debug.Log ("UIData.isCubeToSphere :: " + UIData.isCubeToSphere); - Debug.Log ("UIData.isSphereToCube :: " + UIData.isSphereToCube); - atomtype_show = false; - - UIData.resetBondDisplay = true; - UIData.bondtype = UIData.BondType.hyperstick; - bondtype_show = false; - - rayon = 0.4f; - shrink = 0.5f; - linkscale = 1.0f; - - toggle_NA_HBALLSMOOTH = false; - UIData.hballsmoothmode = false; - } - - // LOD Mode - // if(UIData.atomtype != UIData.AtomType.hyperball) - // { - // toggle_NA_SWITCH = false; - // GUI.enabled = false; - // } - GUILayout.BeginHorizontal(); - if(toggle_NA_HIDE || UIData.atomtype == UIData.AtomType.particleball) - GUI.enabled = false; - toggle_NA_SWITCH = GUILayout.Toggle (toggle_NA_SWITCH, new GUIContent ("LOD mode", "Toggle LOD mode between hyperball and particles")); - UIData.switchmode = toggle_NA_SWITCH; - GUI.enabled = true; - if(toggle_NA_HIDE) - GUI.enabled = false; - toggle_NA_AUTOMOVE = GUILayout.Toggle (toggle_NA_AUTOMOVE, new GUIContent ("Automove", "Camera auto rotation")); - GUI.enabled = true; - GUILayout.EndHorizontal(); - - - //////////////////////modify/////////////////////// - -//MB bool enable2=true; - - // if(!(UIData.interactive&&(UIData.atomtype==UIData.AtomType.hyperball)))enable2=false; - // - // drag = LabelSlider (drag, 0.00001f, 5f, "Drag "+drag,enable2); - // - // spring = LabelSlider (spring, 0.00001f, 20, "Spring "+spring,enable2); - - - ///////////////////////////////////////////////////////// - // GUI.enabled=true; - // - // if(!(UIData.interactive||MoleculeModel.FieldLineFileExist))GUI.enabled=false; - - // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici - // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas util ici // pas - - - // if(GUILayout.Button(new GUIContent ("Field Lines","Field Lines Parameters"))) // boutton show the filedline - // { - // if(ParamFieldLine_show){ - // ParamFieldLine_show=false; - // graycolor_show=false; - // } - // else { - // ParamFieldLine_show=true; - // SurfaceButton_show=false; - // m_colorpick_Surface= false; - // } - // } - // GUI.enabled=true; - // if(!(UIData.interactive||MoleculeModel.SurfaceFileExist))GUI.enabled=false; // active just when have a obj file or not - // - // if(GUILayout.Button(new GUIContent ("Surface","Surface Parameters"))) // boutton show the filedline - // { - // - // if(SurfaceButton_show){ - // SurfaceButton_show=false; - // m_colorpick_Surface= false; - // SurfaceCut_show=false; - // SurfaceMobileCut_show =false; - // surface_texture_show = false; - // - // } - // else {SurfaceButton_show=true; - // ParamFieldLine_show=false; - // graycolor_show=false; - // - // } - // } - GUI.enabled = true; - //////////////////////// - // GUI.Label ( new Rect(120,Screen.height-35,Screen.width-360,20), GUI.tooltip); - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } - - private void loadTypeGUIhyperball (int a) - { - - shrink = LabelSlider (shrink, 0.00001f, 0.99f, "Shrink " + shrink, "Determines shrink factor parameter for HyperBalls", true, 150); - - - // toggle_HB_RANIM = GUILayout.Toggle (toggle_HB_RANIM, new GUIContent ("HB_RANIM", "Animate radius parameter")); - - linkscale = LabelSlider (linkscale, 0.00001f, 1.0f, "Scale " + linkscale, "Determines scale parameter", true, 150); - - depthfactor = LabelSlider (depthfactor, -2.0f, 2.0f, "Depthfactor " + depthfactor, "Determines depth factor for network visualization", true, 150); - - MetaphorControl (); - - GUI.enabled = true; - - // toggle_HB_TRANS = GUILayout.Toggle (toggle_HB_TRANS, new GUIContent ("HB_TRANS", "Animate CPK/Licorice")); - //Make a toggle for interactive mode - //if(UIData.atomtype!=UIData.AtomType.hyperball)GUI.enabled=false; - toggle_NA_INTERACTIVE = GUILayout.Toggle (toggle_NA_INTERACTIVE, new GUIContent ("Interactive mode", "Toggle interactive mode, the physics engine will be used")); - drag = LabelSlider (drag, 0.00001f, 5f, "Drag " + drag, "Determines PhysX engine drag value", UIData.interactive, 150); - spring = LabelSlider (spring, 0.00001f, 20, "Spring " + spring, "Determines PhysX engine spring constant", UIData.interactive, 150); - PhysicalChoice(); - //toggle_NA_INTERACTIVE=false; - GUI.enabled = true; - toggle_NA_CLICK = GUILayout.Toggle (toggle_NA_CLICK, new GUIContent ("Atom info", "Toggles mouse clicking on an atom to show related information")); - - toggle_NA_MEASURE = GUILayout.Toggle (toggle_NA_MEASURE, new GUIContent ("Measure distance", "Toggle mouse clicking to measure the distance between two atoms")); - - //Alex : - //TODO : LOD mode buggy with other representation than Hyperball - - GUI.enabled = true; - if (!toggle_NA_MEASURE && Camera.main.GetComponent ()) { - // Camera.main.GetComponent().Clear(); - Camera.main.GetComponent ().enabled = false; - } else if (toggle_NA_MEASURE && Camera.main.GetComponent ()) { - //GameObject.FindWithTag("MainCamera").AddComponent ("MeasureDistance"); - Camera.main.GetComponent ().enabled = true; - } - //GUILayout.EndHorizontal(); - - if (!toggle_NA_CLICK && Camera.main.GetComponent ()) { - // Object.Destroy (Camera.main.GetComponent()); - - //Camera.main.GetComponent().Clear(); - Camera.main.GetComponent ().enabled = false; - // GameObject line=GameObject.Find("Line"); - //// Destroy(line); - // line.active = false; - - } else if (toggle_NA_CLICK && Camera.main.GetComponent ()) { - //GameObject.FindWithTag("MainCamera").AddComponent ("MeasureDistance"); - Camera.main.GetComponent ().enabled = true; - } - - - - - - - //////////////////////modify/////////////////////// - - - if (toggle_NA_INTERACTIVE) { - UIData.interactive = true; - UIData.resetInteractive = true; - } else { - UIData.toggleGray = false; - UIData.toggleColor = true; - UIData.interactive = false; - UIData.resetInteractive = true; - if (!MoleculeModel.FieldLineFileExist) - graycolor_show = false; - if (!MoleculeModel.SurfaceFileExist) - SurfaceButton_show = false; + if (GUI.Button (Rectangles.helpRect, new GUIContent ("?", "Open quick help for the Unity Mol program"))) { + toggle_HELP = !toggle_HELP; } - if (Event.current.type == EventType.Repaint) - MoleculeModel.newtooltip = GUI.tooltip; - - } + } // End of RenderHelp } } diff --git a/Assets/Scripts/UI/MainMenu.cs b/Assets/Scripts/UI/MainMenu.cs index a0bab249..502326e3 100644 --- a/Assets/Scripts/UI/MainMenu.cs +++ b/Assets/Scripts/UI/MainMenu.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: MainMenu.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: MainMenu.cs 378 2013-09-10 17:18:27Z kouyoumdjian $ /// /// References : /// If you use this code, please cite the following reference : @@ -95,9 +95,8 @@ public class MainMenu : MonoBehaviour { * Screen
* Color */ - void Start () - { - Camera.mainCamera.backgroundColor = new Color (0.0f, 0.0f, 0.0f); + void Start () { + Camera.main.backgroundColor = new Color (0.0f, 0.0f, 0.0f); rect_mainmenu = new Rect(Screen.width/2 - 150, Screen.height/2 - 50, 300,200); pdbID = ""; } @@ -108,8 +107,7 @@ void Start () * OnGUI
* Application */ - void OnGUI() - { + void OnGUI() { GUILayout.BeginArea(rect_mainmenu); GUILayout.BeginHorizontal(); @@ -125,18 +123,13 @@ void OnGUI() GUILayout.EndHorizontal(); if(GUILayout.Button("1KX2")) - { Application.LoadLevel("1KX2"); - } if(GUILayout.Button("Fieldlines")) - { Application.LoadLevel("Fieldlines"); - } + if(GUILayout.Button("Proteins Network")) - { Application.LoadLevel("Network"); - } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); @@ -148,17 +141,15 @@ void OnGUI() GUILayout.FlexibleSpace(); pdbID = GUILayout.TextField(pdbID,4,GUILayout.Width(50)); if(GUILayout.Button("Fetch")) - { Application.LoadLevel("FromPDB"); - } + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); #if !UNITY_WEBPLAYER if(GUILayout.Button("UnityMol Full")) - { Application.LoadLevel("Molecule"); - } + #endif GUILayout.EndArea(); } diff --git a/Assets/Scripts/UI/UIData.cs b/Assets/Scripts/UI/UIData.cs index fd15775f..0eb49de4 100755 --- a/Assets/Scripts/UI/UIData.cs +++ b/Assets/Scripts/UI/UIData.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: UIData.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: UIData.cs 647 2014-08-06 12:20:04Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -75,38 +75,50 @@ namespace UI * Unity3D Doc :
* Color */ - public class UIData - { - // public static bool standalone=true; + public class UIData { +// public static bool standalone=true; + //Initial molecule to load from resources public static string init_molecule = ""; #if UNITY_EDITOR - // public static string server_url = "http://172.27.0.170/"; +// public static string server_url = "http://172.27.0.170/"; public static string server_url = "http://www.shaman.ibpc.fr/umolweb/"; #else public static string server_url = ""; #endif - //public static string server_url = "http://localhost:8888/"; - +// public static string server_url = "http://localhost:8888/"; + + public static bool fetchPDBFile = false; - public static bool isConfirm=false;// + public static bool isConfirm = false; public static bool changeStructure = false; - public static bool hasMoleculeDisplay=false;// + public static bool hasMoleculeDisplay = false; + public static bool hasResidues = false; + public static bool hasChains = false; public static bool isclear=false; public static bool isOpenFile=false; public static bool isParticlesInitialized = false; - - public static bool readHetAtom = false; - public static bool resetDisplay=false;// - public static bool isCubeToSphere=false;// - public static bool isSphereToCube=true;// + public static bool isCubeLoaded = false; + public static bool isSphereLoaded = false; + public static bool isHBallLoaded = false; + + public static bool isRenderDictInit = false; + public static bool isTexturesMenuListInit = false; + + public static bool readHetAtom = true; + public static bool readWater = false; + public static bool connectivity_calc = true; + public static bool connectivity_PDB = false; + public static bool resetDisplay=false; + public static bool isCubeToSphere=false; + public static bool isSphereToCube=true; public static bool resetBondDisplay=false; - public static bool toggleMouse = true;// - public static bool toggleKey = false;// + public static bool toggleMouse = true; + public static bool toggleKey = false; public static bool toggleClip =true; public static bool togglePlane=false; @@ -114,14 +126,14 @@ public class UIData public static bool toggleGray =false; public static bool toggleColor=true; - public static bool backGroundIs = false;// - public static bool backGroundNo = true;// + public static bool backGroundIs = false; + public static bool backGroundNo = true; public static bool cameraStop = false; public static bool cameraStop2 = false; - public static bool loginSucess=false;// + public static bool loginSucess=false; public static AtomType atomtype=AtomType.particleball; @@ -142,26 +154,53 @@ public class UIData public static bool switchmode=false; public static bool hballsmoothmode=false; - + + public static bool grayscalemode = false; + public static bool hiddenUI=false; public static bool hiddenUIbutFPS=false; public static bool hiddenCamera=false; + + public static bool up_part=true; + public static bool down_part=false; public static bool openAllMenu=false; public static bool openBound=false; public static bool secondarystruct=false; + public static bool toggle_bf = false; + public static bool isRescale = false; + public static bool toggle_SS = false; + public static bool ssColChain = false; + public static bool ssColStruct = false; + public static bool ssDivCol = false; + public static bool surfColChain = false; + public static bool surfColHydroKD = false; + public static bool surfColHydroEng = false; + public static bool surfColHydroWO = false; + public static bool surfColHydroEis = false; + public static bool surfColHydroHW = false; + public static bool surfColPChim = false; + public static bool surfColBF = false; + public static bool isGLIC = false; + public static bool spread_tree = false; public static bool firststruct=true; public static bool toggleSurf=true; public static bool toggleBfac=false; - - public enum AtomType - { + + // Guided navigation mode + public static bool guided=false; + // Optimal view mode + public static bool optim_view=false; + public static Vector3 optim_view_start_point; + public static float start_time; + + public enum AtomType { cube=0, sphere=1, hyperball=2, @@ -177,8 +216,7 @@ public enum AtomType noatom = 12 } - public enum BondType - { + public enum BondType { cube=0, line=1, hyperstick=2, @@ -188,13 +226,13 @@ public enum BondType nobond=6 } - public enum FFType - { + public enum FFType { atomic = 0, HiRERNA = 1 } + public static bool loadHireRNA = false; public static FFType ffType = FFType.atomic; } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Utility/ClickAtom.cs b/Assets/Scripts/Utility/ClickAtom.cs index ca970cf4..958ceb67 100644 --- a/Assets/Scripts/Utility/ClickAtom.cs +++ b/Assets/Scripts/Utility/ClickAtom.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ClickAtom.cs 225 2013-04-07 14:21:34Z baaden $ +/// $Id: ClickAtom.cs 486 2014-05-05 08:09:21Z sebastien $ /// /// References : /// If you use this code, please cite the following reference : @@ -65,39 +65,50 @@ using UnityEngine; using System.Collections; +using System.Collections.Generic; using UI; using Molecule.Model; public class ClickAtom : MonoBehaviour { -LineRenderer mLine; -public GameObject obj; - - -private LineRenderer line; -public bool clicked; -//private float coordinate_x=-100; -//private float coordinate_y=-100; -//private float coordinate_x2=0; -//private float coordinate_y2=0; - -private float width=0; -private float height=0; -private GameObject halo; - -private string atominfo=""; + LineRenderer mLine; + public List objList = new List(); + + + private LineRenderer line; + //public bool clicked; + //private float coordinate_x=-100; + //private float coordinate_y=-100; + //private float coordinate_x2=0; + //private float coordinate_y2=0; + + private float width=0; + private float height=0; + private List haloList = new List(); + + private List atominfoList = new List(); void Update () { - if (Input.GetButtonDown ("Fire1")) + if (Input.GetButtonDown ("Fire1") && GUIUtility.hotControl == 0) { Ray sRay= camera.ScreenPointToRay (Input.mousePosition); RaycastHit sHit; long atomnumber=0; + GameObject obj; + GameObject halo; + string atominfo; + if (Physics.Raycast(sRay, out sHit)) { - obj = sHit.collider.gameObject; - if(obj.GetComponent() == null) + Vector3 mousePos = Input.mousePosition; + mousePos.y = Screen.height - mousePos.y; + if(GUIMoleculeController.m_colorPicker != null && GUIMoleculeController.m_colorPicker.enabled + && Rectangles.colorPickerRect.Contains (mousePos)) + return; + + obj = sHit.collider.gameObject; + if(obj.GetComponent() == null || objList.IndexOf(obj) >= 0) return; atominfo=""; @@ -106,29 +117,28 @@ void Update () vl=obj.renderer.transform.localPosition; - Destroy(halo); + //Destroy(halo); halo=Instantiate(Resources.Load("transparentsphere"),vl,new Quaternion(0f,0f,0f,0f)) as GameObject; float rad = obj.GetComponent().GetRealRadius(); halo.transform.localScale = new Vector3(rad+1,rad+1,rad+1); + halo.transform.parent = obj.transform; atomnumber = obj.GetComponent().number; - - ArrayList alist=MoleculeModel.atomsLocationlist; + List alist=MoleculeModel.atomsLocationlist; - - float [] a=alist[(int)atomnumber] as float[]; + float[] a=alist[(int)atomnumber]; if(UI.GUIDisplay.file_extension=="xgmml") { - atominfo+="ID : "+(MoleculeModel.CSidList[(int)atomnumber] as int[])[0]; - atominfo+=" || Label : "+ (MoleculeModel.CSLabelList[(int)atomnumber] as string[])[0]; - atominfo+=" || X : "+(a[0]-MoleculeModel.Offset.x)+" , Y : "+(a[1]-MoleculeModel.Offset.y)+" , Z : "+(a[2]-MoleculeModel.Offset.z); - atominfo+=" || Radius : "+((MoleculeModel.CSRadiusList[(int)atomnumber]) as float[])[0]; + atominfo+="ID : "+(MoleculeModel.CSidList[(int)atomnumber])[0]; + atominfo+=" || Label : "+ (MoleculeModel.CSLabelList[(int)atomnumber])[0]; + atominfo+=" || X : "+ (a[0]-MoleculeModel.Offset.x)+" , Y : "+(a[1]-MoleculeModel.Offset.y)+" , Z : " + (a[2]-MoleculeModel.Offset.z); + atominfo+=" || Radius : "+ ((MoleculeModel.CSRadiusList[(int)atomnumber]))[0]; if(MoleculeModel.CSSGDList.Count>1) { - atominfo+=" || SGD symbol : "+((MoleculeModel.CSSGDList[(int)atomnumber]) as string[])[0]; + atominfo+=" || SGD symbol : "+((MoleculeModel.CSSGDList[(int)atomnumber]))[0]; width=750; } else @@ -141,11 +151,14 @@ void Update () } else { - atominfo+="X : "+(a[0]-MoleculeModel.Offset.x)+" , Y : "+(a[1]-MoleculeModel.Offset.y)+" , Z : "+(a[2]-MoleculeModel.Offset.z); - atominfo+=" || Type : "+(MoleculeModel.atomsTypelist[(int)atomnumber] as AtomModel).type;; - atominfo+=" || RES : "+MoleculeModel.atomsResnamelist[(int)atomnumber]; + atominfo+="X : "+(-(a[0]-MoleculeModel.Offset.x))+" , Y : "+(a[1]-MoleculeModel.Offset.y)+" , Z : "+(a[2]-MoleculeModel.Offset.z); + atominfo+=" || Type : " + (MoleculeModel.atomsTypelist[(int)atomnumber]).type; + atominfo+="("+ MoleculeModel.atomsNamelist[(int)atomnumber]+")"; + atominfo+=" nb "+ MoleculeModel.atomsNumberList[(int)atomnumber]; + atominfo+=" || RES "+MoleculeModel.residueIds[(int)atomnumber]+": " + MoleculeModel.atomsResnamelist[(int)atomnumber]; + atominfo+=" || Chain : " + (MoleculeModel.atomsChainList[(int)atomnumber]); - width=400; + width=500; height=25; // Debug.Log(atominfo); MoleculeModel.target = new Vector3(a[0],a[1],a[2]); @@ -155,34 +168,60 @@ void Update () // coordinate_y= Screen.height-Input.mousePosition.y + 20; // coordinate_x2= Input.mousePosition.x ; // coordinate_y2= Screen.height-Input.mousePosition.y ; - - clicked = true; - } + objList.Add(obj); + haloList.Add(halo); + atominfoList.Add(atominfo); + //clicked = true; + } } - if (Input.GetMouseButtonDown(1)) + if (Input.GetMouseButtonDown(1) && GUIUtility.hotControl == 0) { - Destroy(halo); - clicked = false; + Ray sRay= camera.ScreenPointToRay (Input.mousePosition); + RaycastHit sHit; + GameObject obj; + + if (Physics.Raycast(sRay, out sHit)) + { + obj = sHit.collider.gameObject; + if(obj.name != "transparentsphere(Clone)") + return; + int spot = haloList.IndexOf(obj); + Destroy(haloList[spot]); + objList.RemoveAt(spot); + haloList.RemoveAt(spot); + atominfoList.RemoveAt(spot); + //clicked = false; + } } } void OnGUI() { - if(clicked) + if(/*clicked &&*/ atominfoList.Count > 0) { - Vector3 pos = Camera.main.WorldToScreenPoint(obj.transform.position); - GUI.Box(new Rect (pos.x + 5, Screen.height - pos.y + 20, width, height),atominfo); + for(int i=0; i < atominfoList.Count; i++){ + Vector3 pos = Camera.main.WorldToScreenPoint(objList[i].transform.position); + GUI.Box(new Rect (pos.x + 5, Screen.height - pos.y + 20, width, height),atominfoList[i]);} } } void OnDisable() { - clicked = false; - Destroy(halo); + //clicked = false; + ClearSelection(); } -} + + public void ClearSelection() + { + foreach(GameObject halo in haloList) + Destroy(halo); + objList.Clear(); + haloList.Clear(); + atominfoList.Clear(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Utility/GUILayoutx.cs b/Assets/Scripts/Utility/GUILayoutx.cs index 08a55085..dacf16cd 100644 --- a/Assets/Scripts/Utility/GUILayoutx.cs +++ b/Assets/Scripts/Utility/GUILayoutx.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: GUILayoutx.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: GUILayoutx.cs 306 2013-06-19 10:08:20Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -66,7 +66,7 @@ using UnityEngine; public class GUILayoutx { - + public delegate void DoubleClickCallback(int index); public static int SelectionList(int selected, GUIContent[] list) { diff --git a/Assets/Scripts/Utility/ImprovedFileBrowser.cs b/Assets/Scripts/Utility/ImprovedFileBrowser.cs index a2acb411..5f3c068d 100644 --- a/Assets/Scripts/Utility/ImprovedFileBrowser.cs +++ b/Assets/Scripts/Utility/ImprovedFileBrowser.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: ImprovedFileBrowser.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: ImprovedFileBrowser.cs 635 2014-08-01 13:03:26Z tubiana $ /// /// References : /// If you use this code, please cite the following reference : @@ -71,6 +71,7 @@ /* File browser for selecting files or folders at runtime. */ +using UI; public enum FileBrowserType { File, @@ -79,6 +80,8 @@ public enum FileBrowserType { public class ImprovedFileBrowser { + private int buttonWidth; + // Called when the user clicks cancel or select public delegate void FinishedCallback(string path); // Defaults to working directory @@ -185,6 +188,7 @@ protected GUIStyle CentredText { public ImprovedFileBrowser(Rect screenRect, string name, FinishedCallback callback) { m_name = name; m_screenRect = screenRect; + buttonWidth = (int) m_screenRect.width / 3; m_browserType = FileBrowserType.File; m_callback = callback; SetNewDirectory(Directory.GetCurrentDirectory()); @@ -195,6 +199,7 @@ public ImprovedFileBrowser(Rect screenRect, string name, FinishedCallback callba public ImprovedFileBrowser(Rect screenRect, string name, FinishedCallback callback, string startingPath) { m_name = name; m_screenRect = screenRect; + buttonWidth = (int) m_screenRect.width / 3; m_browserType = FileBrowserType.File; m_callback = callback; SetNewDirectory(startingPath); @@ -360,9 +365,14 @@ public void OnGUI() { ); GUI.enabled = true; GUILayout.EndScrollView(); + GUILayout.BeginHorizontal(); + UIData.loadHireRNA = GUILayout.Toggle(UIData.loadHireRNA, "HiRERNA model"); + UIData.readHetAtom = GUILayout.Toggle (UIData.readHetAtom, "Read HetAtm?"); + UIData.readWater = GUILayout.Toggle (UIData.readWater, "Read Water?"); + GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); - if (GUILayout.Button("Cancel", GUILayout.Width(50))) { + if (GUILayout.Button("Cancel", GUILayout.Width(buttonWidth))) { m_callback(null); } if (BrowserType == FileBrowserType.File) { @@ -379,7 +389,7 @@ public void OnGUI() { ); } } - if (GUILayout.Button("Select", GUILayout.Width(50))) { + if (GUILayout.Button("Select", GUILayout.Width(buttonWidth))) { if (BrowserType == FileBrowserType.File) { m_callback(Path.Combine(m_currentDirectory, m_files[m_selectedFile])); } else { diff --git a/Assets/Scripts/Utility/MouseOverMolecule.cs b/Assets/Scripts/Utility/MouseOverMolecule.cs index 65099221..4b6ccb0d 100755 --- a/Assets/Scripts/Utility/MouseOverMolecule.cs +++ b/Assets/Scripts/Utility/MouseOverMolecule.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: MouseOverMolecule.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: MouseOverMolecule.cs 307 2013-06-20 08:11:24Z erwan $ /// /// References : /// If you use this code, please cite the following reference : @@ -69,6 +69,8 @@ public class MouseOverMolecule : MonoBehaviour { + public static bool stopCamera = false; + // Use this for initialization @@ -77,6 +79,7 @@ public class MouseOverMolecule : MonoBehaviour { void OnMouseDrag () { if(Input.GetMouseButton(0)){ maxCamera.cameraStop = true; + stopCamera = true; Vector3 p = Input.mousePosition; p.z = Camera.main.WorldToScreenPoint(transform.position).z; transform.position = Camera.main.ScreenToWorldPoint(p); @@ -84,7 +87,9 @@ void OnMouseDrag () { } void OnMouseUp() { - maxCamera.cameraStop = false; + Debug.Log("MouseUp is called now."); + maxCamera.cameraStop = false; + stopCamera = false; } } diff --git a/Assets/Scripts/hermitespline/GenInterpolationArray.cs b/Assets/Scripts/hermitespline/GenInterpolationArray.cs index 598f63d0..f5a9b874 100644 --- a/Assets/Scripts/hermitespline/GenInterpolationArray.cs +++ b/Assets/Scripts/hermitespline/GenInterpolationArray.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: GenInterpolationArray.cs 231 2013-04-07 17:44:22Z baaden $ +/// $Id: GenInterpolationArray.cs 405 2014-04-09 08:26:05Z roudier $ /// /// References : /// If you use this code, please cite the following reference : @@ -65,49 +65,59 @@ using UnityEngine; using System.Collections; +using System.Collections.Generic; public class GenInterpolationArray { - public ArrayList InputKeyNodes; - public ArrayList InputTypeArray; + public List InputKeyNodes; + public List InputTypeArray; - public ArrayList OutputKeyNodes; - public ArrayList OutputTypeArray; + public List OutputKeyNodes; + public List OutputTypeArray; // Use this for initialization void Start () {} - public void CalculateSplineArray() - { + public void CalculateSplineArray() { Debug.Log("Entering :: CalculateSplineArray()"); - OutputKeyNodes=new ArrayList(); - OutputTypeArray=new ArrayList(); + OutputKeyNodes=new List(); + OutputTypeArray=new List(); ArrayList ChainAtomList=new ArrayList(); - ArrayList CaSplineTypeList=new ArrayList(); - for(int i=1;i CaSplineTypeList=new List(); + for(int i=1;i(); + ChainAtomList.Add(InputKeyNodes[i]); + CaSplineTypeList.Add(InputTypeArray[i]); + Debug.Log("(string)(InputTypeArray[i-1])!=(string)(InputTypeArray[i])"); + } } } + + + /* + void Update() + { + if (UI.UIData.resetSpline) + { + CalculateSplineArray(); + UI.UIData.resetSpline = false; + } + } */ } diff --git a/Assets/Scripts/hermitespline/GenInterpolationArray.cs.meta b/Assets/Scripts/hermitespline/GenInterpolationArray.cs.meta index cfa672ec..ec5124f8 100644 --- a/Assets/Scripts/hermitespline/GenInterpolationArray.cs.meta +++ b/Assets/Scripts/hermitespline/GenInterpolationArray.cs.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/hermitespline/GenInterpolationPoint.cs b/Assets/Scripts/hermitespline/GenInterpolationPoint.cs index c844b006..2730e1dc 100644 --- a/Assets/Scripts/hermitespline/GenInterpolationPoint.cs +++ b/Assets/Scripts/hermitespline/GenInterpolationPoint.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: GenInterpolationPoint.cs 226 2013-04-07 14:43:54Z baaden $ +/// $Id: GenInterpolationPoint.cs 405 2014-04-09 08:26:05Z roudier $ /// /// References : /// If you use this code, please cite the following reference : @@ -74,13 +74,15 @@ public class GenInterpolationPoint { public float Duration = 1.0f; public int lineCount=1000; public ArrayList InputKeyNodes; - public ArrayList InputTypeArray; + public List InputTypeArray; - public ArrayList OutputKeyNodes; - public ArrayList OutputTypeArray; + public List OutputKeyNodes; + public List OutputTypeArray; // private Transform[] mTransforms; private List mNodes; + public static int smoothnessFactor = 8 ; + //test the node data varibles public GameObject temp; @@ -96,17 +98,15 @@ public class GenInterpolationPoint { private Vector3[] Nodes; - public void CalculateSpline() - { - lineCount=InputKeyNodes.Count*8; + public void CalculateSpline() { + lineCount=InputKeyNodes.Count*smoothnessFactor; SetupSplineInterpolator(); - OutputKeyNodes=new ArrayList(); - OutputTypeArray=new ArrayList(); + OutputKeyNodes=new List(); + OutputTypeArray=new List(); Gizmos.color = new Color(0.0f, 0.0f, 1.0f); - for (int c=1; c (); step = Duration/InputKeyNodes.Count; - for (c = 0; c < InputKeyNodes.Count; c++) - { + for (c = 0; c < InputKeyNodes.Count; c++) { float[] vect=(float[])InputKeyNodes[c]; Vector3 inputnode=new Vector3(vect[0],vect[1],vect[2]); mNodes.Add(new SplineNode(inputnode, step*c)); diff --git a/Assets/Scripts/hermitespline/GenInterpolationPoint.cs.meta b/Assets/Scripts/hermitespline/GenInterpolationPoint.cs.meta index 227a27cb..03a37ce7 100644 --- a/Assets/Scripts/hermitespline/GenInterpolationPoint.cs.meta +++ b/Assets/Scripts/hermitespline/GenInterpolationPoint.cs.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/maxCamera.cs b/Assets/Scripts/maxCamera.cs index a5d8d8ea..6528daa1 100755 --- a/Assets/Scripts/maxCamera.cs +++ b/Assets/Scripts/maxCamera.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: maxCamera.cs 213 2013-04-06 21:13:42Z baaden $ +/// $Id: maxCamera.cs 634 2014-08-01 09:14:04Z trellet $ /// /// References : /// If you use this code, please cite the following reference : @@ -63,316 +63,1516 @@ /// J. Comput. Chem., 2011, 32, 2924 /// -// $Id: maxCamera.cs 213 2013-04-06 21:13:42Z baaden $ +// $Id: maxCamera.cs 634 2014-08-01 09:14:04Z trellet $ // Filename: maxCamera.cs // // original: http://www.unifycommunity.com/wiki/index.php?title=MouseOrbitZoom // // --01-18-2010 - create temporary target, if none supplied at start - using UnityEngine; using System.Collections; +using System.Collections.Generic; using UI; using Molecule.Model; +using System; //[AddComponentMenu("Camera-Control/3dsMax Camera Style")] public class maxCamera : MonoBehaviour { public static bool cameraStop = false; - public bool automove = false; + public bool automove = false; + public Transform target; + public Vector3 targetOffset; + public float distance = 20.0f; + public float maxDistance = 1000; + public float minDistance = -1000f; + public float xSpeed = 400.0f; + public float ySpeed = 400.0f; + public int yMinLimit = -80; + public int yMaxLimit = 80; + public int zoomRate = 200; + public float panSpeed = 2f; + public float zoomDampening = 20.0f ; + public float rotationFactor = 50.0f ; + public float strength = 0.5f; // for camera translation + public int reslim =192; // for second step spreading (currently only available for GLIC) - public Transform target; - public Vector3 targetOffset; - public float distance = 20.0f; - public float maxDistance = 1000; - public float minDistance = -1000f; - public float xSpeed = 400.0f; - public float ySpeed = 400.0f; - public int yMinLimit = -80; - public int yMaxLimit = 80; - public int zoomRate = 200; - public float panSpeed = 2f; - public float zoomDampening = 20.0f ; - public float rotationFactor = 50.0f ; - - public float joypadDeadzone = 0.01f; - - private float xDeg = 0.0f; - private float yDeg = 0.0f; + public Vector3 originalCamPosition; + public bool centerChanged = false; // for camera rotation; + + public Vector3 newposition; + public Vector3 cameraLocalPositionSave; + + public bool cameraTranslation = false; + public float weight = 0.0f; + public float joypadDeadzone = 0.01f; + private float xDeg = 0.0f; + private float yDeg = 0.0f; private float zDeg = 0.0f; - public static float currentDistance; - public static float desiredDistance; - private Quaternion currentRotation; - private Quaternion desiredRotation; - private Quaternion rotation; - private Vector3 position; + public static float currentDistance; + public static float desiredDistance; + private Quaternion currentRotation; + private Quaternion desiredRotation; + private Quaternion rotation; + private Vector3 position; + private bool guiControl = false; + private GameObject LoadBox; + public static GameObject LocCamera; + private Molecule3D Molecule3DComp; + + // +------------------------------+ + // | Guided Navigation Variables | + // +------------------------------+ + + //Variables for constrained navigation + public float nav_speed = 1.0f; + public bool navigationUp = false; + public bool navigationDown = false; + public bool guidedzoom = false; + public bool checkangle = false; + //public bool checkangle2 = false; + public bool isneg = false; + public Vector3 move; + public bool panoramic = false; + public bool reset_panoramic; + public bool isabove = false; + public bool isunder = false; + public bool dirup = false; + public bool dirdown = false; - private bool guiControl = false; + //Variables for "jump" navigation + public float rotation_done = 0.0f; + public bool monomer_jump = false; + public bool next_right = false; + public bool next_left = false; - private GameObject LoadBox; - private GameObject LocCamera; - private Molecule3D Molecule3DComp; + //Variables for Spreading/Narrowing + private BallUpdateHB[] hballs; + private BallUpdateSphere[] sballs; + private BallUpdate[] pballs; + private Vector3 spreadA, spreadA1, spreadA2; + private Vector3 spreadB, spreadB1, spreadB2; + private Vector3 spreadC, spreadC1, spreadC2; + private Vector3 spreadD, spreadD1, spreadD2; + private Vector3 spreadE, spreadE1, spreadE2; + private double comp_spread = 0; + private AtomTree atomtree; + private string rep = ""; + private float[] closeatom; + private Vector3 poscloseatom; + private float distclose; + private bool near_spread = true; + private bool onlyTMD = false; + // Variables for best point of view transition // + // PyMol like transition + public GameObject ghost_target; + public GameObject ghost_target_real; + private bool ghost_target_instantiate = false; + public static Vector3 optim_target; + public static Vector3 optim_cam_position; + public bool cam_pos_optimized = false; + public float angle = 0; + private Vector3 velocity = Vector3.zero; + public bool RemotePhase=true; + public bool HeightPhase=true; + public bool RotatePhase=true; + // Straight transition + public bool ApproachPhase=true; + public bool smooth = false; + public bool FocusPhase = true; + public float transitionDuration = 2.5f; + // Elliptic transition +// public Vector3 center = new Vector3(0, 1, 0); +// public float radiusA; +// public float radiusB = MoleculeModel.; + //Nouvelle variable - void Awake() { Init(); } - void OnEnable() { Init(); } + void Awake () + { + Init (); + } + + void OnEnable () + { + Init (); + } - public void Init() - { - LoadBox = GameObject.Find("LoadBox"); - LocCamera = GameObject.Find("Camera"); - - Molecule3DComp = LoadBox.GetComponent(); - //If there is no target, create a temporary target at 'distance' from the cameras current viewpoint - if (!target) - { - GameObject go = new GameObject("Cam Target"); - //transform.position = go.transform.position + (transform.forward * distance); - target = go.transform; - } + public void Init () + { + LoadBox = GameObject.Find ("LoadBox"); + LocCamera = GameObject.Find ("Camera"); + + Molecule3DComp = LoadBox.GetComponent (); + //If there is no target, create a temporary target at 'distance' from the cameras current viewpoint + if (!target) { + GameObject go = new GameObject ("Cam Target"); + //transform.position = go.transform.position + (transform.forward * distance); + target = go.transform; + } - // Debug.Log("Cam distance : " + Vector3.Distance(transform.position, target.position)); - distance = Vector3.Distance(transform.position, target.position); - currentDistance = distance; - desiredDistance = distance; + // Debug.Log("Cam distance : " + Vector3.Distance(transform.position, target.position)); + distance = Vector3.Distance (transform.position, target.position); + currentDistance = distance; + desiredDistance = distance; - //be sure to grab the current rotations as starting points. - position = transform.position; - rotation = transform.rotation; - // position = Vector3.zero; - // rotation = Quaternion.identity; - currentRotation = transform.rotation; - desiredRotation = transform.rotation; + //be sure to grab the current rotations as starting points. + position = transform.position; + rotation = transform.rotation; + // position = Vector3.zero; + // rotation = Quaternion.identity; + currentRotation = transform.rotation; + desiredRotation = transform.rotation; - xDeg = Vector3.Angle(Vector3.right, transform.right ); - yDeg = Vector3.Angle(Vector3.up, transform.up ); - } + xDeg = Vector3.Angle (Vector3.right, transform.right); + yDeg = Vector3.Angle (Vector3.up, transform.up); + } - public void upxDeg(){ + public void upxDeg () + { xDeg = 1; - guiControl = true; + guiControl = true; } - public void upyDeg(){ - yDeg =-1; - guiControl = true; + public void upyDeg () + { + yDeg = -1; + guiControl = true; } - public void downxDeg(){ + + public void downxDeg () + { xDeg = -1; - guiControl = true; + guiControl = true; } - public void downyDeg(){ - yDeg =1; - guiControl = true; + public void downyDeg () + { + yDeg = 1; + guiControl = true; } - public void downzDeg(){ - zDeg =1; - guiControl = true; + public void downzDeg () + { + zDeg = 1; + guiControl = true; } - public void upzDeg(){ - zDeg =-1; - guiControl = true; + public void upzDeg () + { + zDeg = -1; + guiControl = true; } - void Update() - { - if(Input.GetKeyUp(KeyCode.Space)) - { - Debug.Log("Space push"); - if(automove) - { - automove = false; - } - else - { - automove = true; - } - Molecule3DComp.toggleFPSLog(); - } - } - - /* + void Update () + { + if (Input.GetKeyUp (KeyCode.Space)) { + Debug.Log ("Space push"); + automove = !automove; + GUIMoleculeController.toggle_NA_AUTOMOVE = !GUIMoleculeController.toggle_NA_AUTOMOVE; + Molecule3DComp.toggleFPSLog (); + } + + + //Camera sliding and re-center on a atom or a group or atom + if (Input.GetKeyUp (KeyCode.R)) { + cameraTranslation = true; + centerChanged = true; + newposition = Vector3.zero; + } + + if (Input.GetKeyUp (KeyCode.C)) { + + if (UI.GUIMoleculeController.toggle_NA_CLICK) { + + /*if just one atom is selected, we center the camera (CAM TARGEt!!! THE CAMERA FOLLOW CAM TARGET) + on this atom*/ + if (Camera.main.GetComponent ().objList.Count == 1) { + + int atomnumber = (int)Camera.main.GetComponent ().objList [0].GetComponent ().number; + newposition = new Vector3 (MoleculeModel.atomsLocationlist [atomnumber] [0], + MoleculeModel.atomsLocationlist [atomnumber] [1], + MoleculeModel.atomsLocationlist [atomnumber] [2]); + + cameraTranslation = true; + centerChanged = true; + /* if multiple atom is selected, we calcul the barycenter*/ + } else if (Camera.main.GetComponent ().objList.Count > 1) { + + //barycenter of all atom selection calculation + Vector3 barycenter = new Vector3 (); + float xTot = 0.0f, yTot = 0.0f, zTot = 0.0f; + for (int i=0; i().objList.Count; i++) { + int atomnumber = (int)Camera.main.GetComponent ().objList [i].GetComponent ().number; + xTot = xTot + MoleculeModel.atomsLocationlist [atomnumber] [0]; + yTot = yTot + MoleculeModel.atomsLocationlist [atomnumber] [1]; + zTot = zTot + MoleculeModel.atomsLocationlist [atomnumber] [2]; + } + barycenter.x = xTot / Camera.main.GetComponent ().objList.Count; + barycenter.y = yTot / Camera.main.GetComponent ().objList.Count; + barycenter.z = zTot / Camera.main.GetComponent ().objList.Count; + + newposition = barycenter; + + cameraTranslation = true; + centerChanged = true; + } + } + } + + if(UIData.guided){ + + //Automatic constrained navigation up + if (Input.GetKeyUp (KeyCode.U)) { + navigationDown = false; + navigationUp = !navigationUp; + + } + + //Automatic constrained navigation down + if (Input.GetKeyUp (KeyCode.J)) { + navigationUp = false; + navigationDown = !navigationDown; + } + + //Enter panoramic mode + if (Input.GetKeyUp (KeyCode.I)) { + panoramic = !panoramic; + Debug.Log ("panoramic " + panoramic); + + if(!panoramic) + reset_panoramic = true; + } + + //Enter jump mode + if (Input.GetKeyUp (KeyCode.M)) { + monomer_jump = !monomer_jump; + Debug.Log("monomer jump: " + monomer_jump); + } + + if(Input.GetKeyUp (KeyCode.L)) + near_spread = !near_spread; + + if(near_spread) + NearSpreading(); + } + } + + /// + /// Only available in "guided navigation" mode and specific to pentameric channels. + /// Constrained path for camera moving around the protein structure. + /// + void goUpConstrained() + { + Vector3 v = transform.position; + Vector3 r = transform.eulerAngles; + + dirup = true; + if (dirdown) { + checkangle = false; + //dirdown = false; + } + + if (float.Parse(MoleculeModel.FPS) > 30) + nav_speed = SpeedNavigation(); + + if(Vector3.Distance(transform.position, new Vector3(0, transform.position.y, 0)) < 2.0 && angle < 180){ + //Vector3 target = new Vector3(-LocCamera.transform.position.x,LocCamera.transform.position.y,-LocCamera.transform.position.z ); + //LocCamera.transform.RotateAround(new Vector3(0, LocCamera.transform.position.y, 0), new Vector3(0,1,0), 6); + transform.RotateAround(new Vector3(0, transform.position.y, 0), new Vector3(0,1,0), nav_speed*6); + angle += nav_speed*6; + //Debug.Log("Angle: "+angle); + } + + else if(Vector3.Distance(transform.position, new Vector3(0, transform.position.y, 0)) > 2.0 && angle >= 180) + { + angle = 0; + } + + else if ((LocCamera.transform.position.y >= MoleculeModel.MaxValue.y)) { + + UIData.up_part = false; + UIData.down_part = true; + isabove = true; + + transform.LookAt(new Vector3(0, MoleculeModel.MaxValue.y, 0)); + Vector3 tempv = transform.position - new Vector3 (0, MoleculeModel.MaxValue.y, 0); + + if(!checkangle){ + if((r.y < 90 || r.y > 270) && (!dirdown)) + isneg = true; + else + isneg = false; + checkangle = true; + } + + if(isneg) + move = new Vector3(0, -tempv.z, 0); + else + move = new Vector3(0, tempv.z, 0); + + move.Normalize (); + transform.Translate(move); + dirdown = false; + + target.position = new Vector3(0, MoleculeModel.MaxValue.y, 0); + + } + + else if ((LocCamera.transform.position.y <= MoleculeModel.MinValue.y)){ + + UIData.up_part = true; + UIData.down_part = false; + isunder = true; + + transform.LookAt(new Vector3(0, MoleculeModel.MinValue.y, 0)); + Vector3 tempv = transform.position - new Vector3 (0, MoleculeModel.MinValue.y, 0) ; + + if(!checkangle){ + if((r.y < 90 || r.y > 270) && (!dirdown)) + isneg = true; + else + isneg = false; + checkangle = true; + } + + if(isneg) + move = new Vector3(0, tempv.z, 0); + else + move = new Vector3(0, -tempv.z, 0); + + move.Normalize (); + transform.Translate(move); + dirdown = false; + + target.position = new Vector3(0, MoleculeModel.MinValue.y, 0); + + } else { + if(UIData.up_part){ + checkangle = false; + isabove = false; + isunder = false; + transform.eulerAngles = new Vector3 (0, transform.eulerAngles.y, 0); + v.y += nav_speed; + transform.position = v; + target.position = new Vector3(0, v.y, 0); + }else{ + checkangle = false; + isabove = false; + isunder = false; + transform.eulerAngles = new Vector3 (0, transform.eulerAngles.y, 0); + v.y -= nav_speed; + transform.position = v; + target.position = new Vector3(0, v.y, 0); + } + } + } + + /// + /// Only available in "guided navigation" and specific to pentameric channels. + /// Constrained path for camera moving around the protein structure (second way). + /// + void goDownConstrained() + { + + Vector3 v = transform.position; + Vector3 r = transform.eulerAngles; + + dirdown = true; + if (dirup) { + checkangle = false; + //dirup = false; + } + + if (float.Parse(MoleculeModel.FPS) > 30) + nav_speed = SpeedNavigation(); + + if(Vector3.Distance(transform.position, new Vector3(0, transform.position.y, 0)) < 2.0 && angle < 180){ + //Vector3 target = new Vector3(-LocCamera.transform.position.x,LocCamera.transform.position.y,-LocCamera.transform.position.z ); + transform.RotateAround(new Vector3(0, transform.position.y, 0), new Vector3(0,1,0), 6); + angle += 6; + //Debug.Log("Angle: "+angle); + } + + else if(Vector3.Distance(transform.position, new Vector3(0, transform.position.y, 0)) > 2.0 && angle >= 180) + { + angle = 0; + } + + else if ((LocCamera.transform.position.y >= MoleculeModel.MaxValue.y)) { + + UIData.down_part = false; + UIData.up_part = true; + isabove = true; + + transform.LookAt(new Vector3(0, MoleculeModel.MaxValue.y, 0)); + Vector3 tempv = transform.position - new Vector3 (0, MoleculeModel.MaxValue.y, 0) ; + + if(!checkangle){ + if((r.y < 90 || r.y > 270) && (!dirup)) + isneg = true; + else + isneg = false; + checkangle = true; + } + + if(isneg) + move = new Vector3(0, -tempv.z, 0); + else + move = new Vector3(0, tempv.z, 0); + + move.Normalize (); + transform.Translate(move); + dirup = false; + + target.position = new Vector3(0, MoleculeModel.MaxValue.y, 0); + } + + else if ((LocCamera.transform.position.y <= MoleculeModel.MinValue.y)){ + + UIData.down_part = true; + UIData.up_part = false; + isunder = true; + + transform.LookAt(new Vector3(0, MoleculeModel.MinValue.y, 0)); + Vector3 tempv = transform.position - new Vector3 (0, MoleculeModel.MinValue.y, 0) ; + + if(!checkangle){ + if((r.y < 90 || r.y > 270) && (!dirup)) + isneg = true; + else + isneg = false; + checkangle = true; + } + + if(isneg) + move = new Vector3(0, tempv.z, 0); + else + move = new Vector3(0, -tempv.z, 0); + + move.Normalize (); + transform.Translate(move); + dirup = false; + + target.position = new Vector3(0, MoleculeModel.MinValue.y, 0); + + } else { + if(UIData.down_part){ + checkangle = false; + isabove = false; + isunder = false; + transform.eulerAngles = new Vector3 (0, LocCamera.transform.eulerAngles.y, 0); + v.y += nav_speed; + transform.position = v; + target.position = new Vector3(0, v.y, 0); + }else{ + checkangle = false; + isabove = false; + isunder = false; + transform.eulerAngles = new Vector3 (0, LocCamera.transform.eulerAngles.y, 0); + v.y -= nav_speed; + transform.position = v; + target.position = new Vector3(0, v.y, 0); + } + } + } + + private float SpeedNavigation() + { + float tot = Math.Abs (MoleculeModel.MinValue.y) + Math.Abs (MoleculeModel.MaxValue.y); + return (tot / 120); + } + + IEnumerator Transition() + { + float t = 0.0f; + Vector3 startingPos = transform.position; + while (t < 1.0f) + { + t += Time.deltaTime * (Time.timeScale/transitionDuration); + + transform.position = Vector3.Lerp(startingPos, optim_target, t); + yield return 0; + } + } + + /* * Camera logic on LateUpdate to only update after all character movement logic has been handled. */ - void LateUpdate() - { - if(cameraStop == false) - { - keyboardOperate(); - if(!guiControl) - joypadOperate(); - - // If Control and Alt and Middle button? ZOOM! - if (Input.GetMouseButton(1) )//&& Input.GetKey(KeyCode.LeftAlt) && Input.GetKey(KeyCode.LeftControl)) - { - if(UIData.switchmode) Molecule3DComp.ToParticle(); - desiredDistance -= Input.GetAxis("Mouse Y") * Time.deltaTime * zoomRate;//* Mathf.Abs(desiredDistance); - } - // If middle mouse and left alt are selected? ORBIT - else if (Input.GetMouseButton(0) && !guiControl)// && Input.GetKey(KeyCode.LeftAlt)) - { - if(UIData.switchmode) Molecule3DComp.ToParticle(); - if (Input.mousePosition.xScreen.height*0.15f) - { - xDeg = Input.GetAxis("Mouse X") * xSpeed * 0.02f; - yDeg = -Input.GetAxis("Mouse Y") * ySpeed * 0.02f; - } - else if (Input.mousePosition.x>Screen.width*0.85f ) { - yDeg = -Input.GetAxis("Mouse Y") * xSpeed * 0.02f; - xDeg = 0; - }else if( Input.mousePosition.y>Screen.height*0.85f ){ - xDeg = Input.GetAxis("Mouse X") * xSpeed * 0.02f; - yDeg = 0; - }else{ - zDeg = Input.GetAxis("Mouse X") * ySpeed * 0.02f; - yDeg = 0; - } - - } - // otherwise if middle mouse is selected, we pan by way of transforming the target in screenspace - else if (Input.GetMouseButton(2)) - { - if(UIData.switchmode)Molecule3DComp.ToParticle(); - Vector3 v = LocCamera.transform.localPosition; - v.x -= Input.GetAxis("Mouse X") * panSpeed; - v.y -= Input.GetAxis("Mouse Y") * panSpeed; - LocCamera.transform.localPosition = v; - } - else - { - if(UIData.switchmode) - { - Molecule3DComp.ToNotParticle(); - } - } - - // affect the desired Zoom distance if we roll the scrollwheel - desiredDistance -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * zoomRate;// * Mathf.Abs(desiredDistance); - } - - if(automove == true) - { - if(UIData.switchmode)Molecule3DComp.ToParticle(); - xDeg += Mathf.Lerp(0.0F, 100.0F, Time.deltaTime*0.8f); - yDeg = 0; - } - - - //Camera rotation - desiredRotation *= Quaternion.Euler(yDeg, xDeg, zDeg); - currentRotation = transform.rotation; - rotation = Quaternion.Lerp(currentRotation, desiredRotation, Time.deltaTime * zoomDampening); - transform.rotation = rotation; - - //Camera movement - currentDistance = Mathf.Lerp(currentDistance, desiredDistance, Time.deltaTime * zoomDampening); - position = target.position - (rotation * Vector3.forward * currentDistance + targetOffset); - transform.position = position; - - xDeg = 0; - yDeg = 0; - zDeg = 0; - guiControl = false; - } - - private static float ClampAngle(float angle, float min, float max) - { - if (angle < -360) - angle += 360; - if (angle > 360) - angle -= 360; - return Mathf.Clamp(angle, min, max); - } + void LateUpdate () + { + if (cameraStop == false) { + keyboardOperate (); + if (!guiControl) + joypadOperate (); + + // Check if guided navigation is on, if yes, no mouse interactions + if (!UIData.guided) { + // If Control and Alt and Middle button? ZOOM! + if (Input.GetMouseButton (1)) { + if (UIData.switchmode) + Molecule3DComp.ToParticle (); + desiredDistance -= Input.GetAxis ("Mouse Y") * Time.deltaTime * zoomRate;//* Mathf.Abs(desiredDistance); + } + // If middle mouse and left alt are selected? ORBIT + else if (Input.GetMouseButton (0) && !guiControl) { + if (UIData.switchmode) + Molecule3DComp.ToParticle (); + if (Input.mousePosition.x < Screen.width * 0.85f && Input.mousePosition.y < Screen.height * 0.85f && Input.mousePosition.y > Screen.height * 0.15f) { + xDeg = Input.GetAxis ("Mouse X") * xSpeed * 0.02f; + yDeg = -Input.GetAxis ("Mouse Y") * ySpeed * 0.02f; + } else if (Input.mousePosition.x > Screen.width * 0.85f) { + yDeg = -Input.GetAxis ("Mouse Y") * xSpeed * 0.02f; + xDeg = 0; + } else if (Input.mousePosition.y > Screen.height * 0.85f) { + xDeg = Input.GetAxis ("Mouse X") * xSpeed * 0.02f; + yDeg = 0; + } else { + zDeg = Input.GetAxis ("Mouse X") * ySpeed * 0.02f; + yDeg = 0; + } + + + } + // otherwise if middle mouse is selected, we pan by way of transforming the target in screenspace + else if (Input.GetMouseButton (2)) { + if (UIData.switchmode) + Molecule3DComp.ToParticle (); + Vector3 v = LocCamera.transform.localPosition; + v.x -= Input.GetAxis ("Mouse X") * panSpeed; + v.y -= Input.GetAxis ("Mouse Y") * panSpeed; + LocCamera.transform.localPosition = v; + } else { + if (UIData.switchmode) + Molecule3DComp.ToNotParticle (); + } + } //End if guided + + // get the desired Zoom distance if we roll the scrollwheel + if (!UIData.hiddenCamera) + if (!Camera.main.orthographic){ // only if the camera is in perspective mode + desiredDistance -= Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime * zoomRate;// * Mathf.Abs(desiredDistance); + if(UIData.guided && (desiredDistance != currentDistance)){ + //currentDistance = Vector3.Distance (transform.position, target.position); + guidedzoom = true; + } + }else { // otherwise (orthographic mode) we can achieve the same effet by making the camera bigger/smaller + float tmp_size = Camera.main.orthographicSize - Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime * zoomRate; + if (tmp_size <= LoadTypeGUI.maxOrthoSize && tmp_size >= LoadTypeGUI.minOrthoSize) + Camera.main.orthographicSize = tmp_size; + } + + if (automove == true) { + if (UIData.switchmode) + Molecule3DComp.ToParticle (); + xDeg += Mathf.Lerp (0.0F, 100.0F, Time.deltaTime * 0.8f); + yDeg = 0; + } + + if (centerChanged) { + //if we reach the position (for camera sliding) we stop! + + //otherwise we continue the translation. + if (cameraTranslation) { + + weight += Time.deltaTime * 1; + target.localPosition = Vector3.Lerp (target.localPosition, newposition, weight); + + LocCamera.transform.localPosition = Vector3.Lerp (LocCamera.transform.localPosition, Vector3.zero, weight); + + //LocCamera.transform.eulerAngles = Vector3.Lerp (LocCamera.transform.eulerAngles, Vector3.zero, weight); + + if (cameraTranslation && target.position == newposition && LocCamera.transform.localPosition== Vector3.zero) { + + weight = 0; + cameraTranslation = false; + centerChanged = false; + } + } + } + //Camera rotation + desiredRotation *= Quaternion.Euler (yDeg, xDeg, zDeg); + currentRotation = transform.rotation; + rotation = Quaternion.Lerp (currentRotation, desiredRotation, Time.deltaTime * zoomDampening); + if(!UIData.guided || reset_panoramic){ + transform.rotation = rotation; + } + + //Camera movement + currentDistance = Mathf.Lerp (currentDistance, desiredDistance, Time.deltaTime * zoomDampening); + position = target.position - (rotation * Vector3.forward * currentDistance + targetOffset); + if(!UIData.guided || reset_panoramic){ + transform.position = position; + reset_panoramic = false; + } + + // Temporary + if(guidedzoom){ + //Dive into the channel if zoom above or under the structure + if((Vector3.Distance(transform.position , target.position) < 100) && isabove){ + near_spread = false; + if(transform.position.y <= target.position.y+20) + target.position = new Vector3(0, target.position.y-1, 0); + transform.LookAt(target.position); + transform.Translate(new Vector3(0, 0, Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime * zoomRate)); + } + else if (Vector3.Distance (transform.position, target.position) < 100 && isunder){ + near_spread = false; + if(transform.position.y >= target.position.y-20) + target.position = new Vector3(0, target.position.y+1, 0); + transform.LookAt (target.position); + transform.Translate (new Vector3(0, 0, Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime * zoomRate)); + } + else + transform.Translate(new Vector3(0, 0, Input.GetAxis ("Mouse ScrollWheel") * Time.deltaTime * zoomRate)); + guidedzoom = false; + } + + xDeg = 0; + yDeg = 0; + zDeg = 0; + guiControl = false; + } + //} + + if (navigationUp) + goUpConstrained(); + + if(navigationDown) + goDownConstrained(); + + if(panoramic){ + Vector3 v = transform.position; + weight += Time.deltaTime * 1; + transform.position = Vector3.Lerp (v, new Vector3(0, v.y, 0), weight); + } + + if(UIData.optim_view) + { + if(!ghost_target_instantiate){ + Debug.LogWarning("CREATE TARGET OBJECT"); + ghost_target_real = (GameObject) GameObject.Instantiate(ghost_target, optim_target, Quaternion.identity); + ghost_target_real.name = "Target"; + ghost_target_real.renderer.material.color = Color.magenta; + ghost_target_real.transform.localScale = new Vector3(4.0f, 4.0f, 4.0f); + ghost_target_real.SetActive(true); + ghost_target_instantiate = true; + } + if(LocCamera.transform.position != optim_cam_position) + { + Debug.Log("optim: " + optim_cam_position); + Debug.Log("camera: " + LocCamera.transform.position); + float distance = Vector3.Distance(LocCamera.transform.position, new Vector3(0,0,0)); +// Debug.Log("initial camera location z ++: " + (-MoleculeModel.cameraLocation.z) * 1.05); +// Debug.Log("initial camera location z --: " + (-MoleculeModel.cameraLocation.z) * 0.95); +// Debug.Log ("height comparison: "+ !Mathf.Approximately(LocCamera.transform.position.y, optim_cam_position.y) + " smooth: " + smooth); + + + if(RemotePhase){ + LocCamera.transform.position = Vector3.SmoothDamp(LocCamera.transform.position, optim_cam_position, ref velocity, 5.0f); + LocCamera.transform.LookAt(optim_target); + } + + +// if(distance < (- MoleculeModel.cameraLocation.z * 0.95) && RemotePhase){ +// Debug.Log ("Remote Phase zoom out"); +//// float distCovered = (Time.time - UIData.start_time) * 1.0F; +//// float fracJourney = distCovered / 4.0F; +//// LocCamera.transform.position = Vector3.Lerp(UIData.optim_view_start_point, new Vector3(LocCamera.transform.position.x, LocCamera.transform.position.y, MoleculeModel.cameraLocation.z), fracJourney); +//// LocCamera.transform.LookAt(new Vector3(0,LocCamera.transform.position.y,0)); +// LocCamera.transform.position = Vector3.SmoothDamp(LocCamera.transform.position, new Vector3(LocCamera.transform.position.x, LocCamera.transform.position.y, MoleculeModel.cameraLocation.z), ref velocity, 0.5f); +// //LocCamera.transform.Translate((LocCamera.transform.position - new Vector3(0,LocCamera.transform.position.y, 0)) * Time.deltaTime * 0.5f, Space.World); +// } +// else if(distance > (-MoleculeModel.cameraLocation.z * 1.05) && RemotePhase){ +// Debug.Log ("Remote Phase zoom in"); +// float distCovered = (Time.time - UIData.start_time) * 1.0F; +// float fracJourney = distCovered / 2.0F; +// LocCamera.transform.position = Vector3.Lerp(UIData.optim_view_start_point, new Vector3(LocCamera.transform.position.x, LocCamera.transform.position.y, MoleculeModel.cameraLocation.z), fracJourney); +// //LocCamera.transform.Translate((new Vector3(0,LocCamera.transform.position.y, 0) - LocCamera.transform.position) * Time.deltaTime * 0.5f, Space.World); +// } +//// else if(smooth){ +//// RemotePhase = false; +//// HeightPhase = false; +//// RotatePhase = false; +//// ApproachPhase = false; +//// if(FocusPhase && Quaternion.Angle(LocCamera.transform.rotation, Quaternion.LookRotation(optim_target - LocCamera.transform.position)) < 1.0F){ +//// Quaternion lookat = Quaternion.LookRotation(optim_target - LocCamera.transform.position); +//// Debug.Log("Rotation : "+LocCamera.transform.rotation+" "+lookat); +//// LocCamera.transform.rotation = Quaternion.Slerp(LocCamera.transform.rotation, lookat, Time.deltaTime); +//// } +//// else if (Vector3.Distance(LocCamera.transform.position, optim_cam_position) < 0.5){ +//// FocusPhase = false; +//// Debug.Log("MoveTowards"); +//// float step = 1.0F * Time.deltaTime; +//// LocCamera.transform.position = Vector3.SmoothDamp(LocCamera.transform.position, optim_cam_position, ref velocity, 2.0f); +//// LocCamera.transform.LookAt(optim_target); +//// } +//// //float step = 1.0F * Time.deltaTime; +//// } +// else if(!Mathf.Approximately(LocCamera.transform.position.y, optim_cam_position.y) && HeightPhase){ +// RemotePhase = false; +// Debug.Log ("Height Phase"); +// LocCamera.transform.position = Vector3.SmoothDamp(LocCamera.transform.position, new Vector3(LocCamera.transform.position.x, optim_cam_position.y, LocCamera.transform.position.z), ref velocity, 0.3f); +// UIData.start_time = Time.time; +// UIData.optim_view_start_point = LocCamera.transform.position - new Vector3(0, LocCamera.transform.position.y, 0); +// } +// else if(Vector3.Angle( (LocCamera.transform.position - new Vector3(0, LocCamera.transform.position.y, 0)), (optim_cam_position - new Vector3(0, LocCamera.transform.position.y, 0))) > 2 && RotatePhase){ +// HeightPhase = false; +// Debug.Log ("Rotate Phase"); +// Debug.Log (Vector3.Angle( (LocCamera.transform.position - new Vector3(0, LocCamera.transform.position.y, 0)), (optim_cam_position - new Vector3(0, LocCamera.transform.position.y, 0)))); +//// Vector3 center = (UIData.optim_view_start_point + (optim_cam_position - new Vector3(0, LocCamera.transform.position.y, 0))) * 0.5F; +//// center -= new Vector3(0, 1, 0); +//// Vector3 riseRelCenter = UIData.optim_view_start_point - center; +//// Vector3 setRelCenter = (optim_cam_position - new Vector3(0, LocCamera.transform.position.y, 0)) - center; +//// float fracComplete = (Time.time - UIData.start_time) / 2.0F; +//// LocCamera.transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, fracComplete); +//// LocCamera.transform.position += center; +// float angle = Vector3.Angle( (LocCamera.transform.position - new Vector3(0, LocCamera.transform.position.y, 0)), (optim_cam_position - new Vector3(0, LocCamera.transform.position.y, 0))); +// LocCamera.transform.RotateAround(Vector3.zero, Vector3.up, angle * Time.deltaTime); +// } +// else if(LocCamera.transform.position != optim_cam_position && ApproachPhase){ +// Debug.Log("Approach phase"); +// RotatePhase = false; +// LocCamera.transform.position = Vector3.SmoothDamp(LocCamera.transform.position, optim_cam_position, ref velocity, 0.5f); +// } +//// Debug.Log ("Distance: "+distance); +// //LocCamera.transform.position = Vector3.SmoothDamp(LocCamera.transform.position, optim_cam_position, ref velocity, 0.3f); + } + else{ + Debug.Log ("LookAt phase"); + ApproachPhase = false; + Quaternion lookat = Quaternion.LookRotation(optim_target - LocCamera.transform.position); + LocCamera.transform.rotation = Quaternion.Slerp(LocCamera.transform.rotation, lookat, Time.deltaTime); + } +// LocCamera.transform.position = optim_cam_position; +// GameObject ghost_target = new GameObject(); +// ghost_target.name = "TARGET"; +// ghost_target.transform.position = optim_target; +// ghost_target.SetActive(true); +// LocCamera.transform.LookAt(ghost_target.transform); + } + if(UIData.guided){ + if (next_right && rotation_done < 360/MoleculeModel.existingChain.Count){ + LocCamera.transform.RotateAround(Vector3.zero, Vector3.up, - (360/MoleculeModel.existingChain.Count) * Time.deltaTime); + rotation_done += (360/MoleculeModel.existingChain.Count) * Time.deltaTime; + } + else if (next_left && rotation_done < 360/MoleculeModel.existingChain.Count){ + LocCamera.transform.RotateAround(Vector3.zero, Vector3.up, (360/MoleculeModel.existingChain.Count) * Time.deltaTime); + rotation_done += (360/MoleculeModel.existingChain.Count) * Time.deltaTime;; + } + else if (rotation_done > 360/MoleculeModel.existingChain.Count){ + next_right = false; + next_left = false; + rotation_done = 0.0f; + } + /*if (next_left && rotation_done < 360/MoleculeModel.existingChain.Count){ + LocCamera.transform.RotateAround(Vector3.zero, Vector3.up, (360/MoleculeModel.existingChain.Count) * Time.deltaTime); + rotation_done += (360/MoleculeModel.existingChain.Count) * Time.deltaTime; + Debug.Log("rotation_done " + rotation_done + " next_left " + next_left); + } + else if (rotation_done > 360/MoleculeModel.existingChain.Count){ + Debug.Log("STOP left " + next_left); + next_right = false; + rotation_done = 0.0f; + }*/ + } + } + + private static float ClampAngle (float angle, float min, float max) + { + if (angle < -360) + angle += 360; + if (angle > 360) + angle -= 360; + return Mathf.Clamp (angle, min, max); + } - public void ToCenter() + public void ToCenter () { - LocCamera.transform.localPosition = Vector3.zero; - target.transform.localPosition = Vector3.zero; - transform.position = new Vector3(0,0,MoleculeModel.cameraLocation.z); - transform.rotation = Quaternion.identity; - Init(); + LocCamera.transform.localPosition = Vector3.zero; + target.transform.localPosition = Vector3.zero; + transform.position = new Vector3 (0, 0, MoleculeModel.cameraLocation.z); + LocCamera.transform.rotation = new Quaternion (0, 0, 0, 0); + transform.rotation = Quaternion.identity; + centerChanged = false; + weight = 0; + Init (); } // control of the joypad ============================================================================================= // ============================================================================================= - private void joypadOperate() - { - target.rotation = transform.rotation; - - Vector3 v = LocCamera.transform.localPosition; - if(Input.GetAxis("Axis5")>joypadDeadzone || (Input.GetAxis("Axis5")joypadDeadzone || (Input.GetAxis("Axis6")joypadDeadzone || (Input.GetAxis("AxisX")joypadDeadzone || (Input.GetAxis("AxisY")joypadDeadzone || (Input.GetAxis("Axis3")joypadDeadzone || (Input.GetAxis("Axis4") joypadDeadzone || (Input.GetAxis ("Axis5") < joypadDeadzone)) + v.x -= Input.GetAxis ("Axis5") * panSpeed; + if (Input.GetAxis ("Axis6") > joypadDeadzone || (Input.GetAxis ("Axis6") < joypadDeadzone)) + v.y -= Input.GetAxis ("Axis6") * panSpeed; + if (Input.GetAxis ("AxisX") > joypadDeadzone || (Input.GetAxis ("AxisX") < joypadDeadzone)) + v.x -= Input.GetAxis ("AxisX") * panSpeed * 3.0f; + if (Input.GetAxis ("AxisY") > joypadDeadzone || (Input.GetAxis ("AxisY") < joypadDeadzone)) + v.y -= Input.GetAxis ("AxisY") * panSpeed * 3.0f; + LocCamera.transform.localPosition = v; + + if (Input.GetAxis ("Axis3") > joypadDeadzone || (Input.GetAxis ("Axis3") < joypadDeadzone)) + xDeg = Input.GetAxis ("Axis3") * xSpeed * 0.08f; + + if (Input.GetAxis ("Axis4") > joypadDeadzone || (Input.GetAxis ("Axis4") < joypadDeadzone)) + yDeg = Input.GetAxis ("Axis4") * ySpeed * 0.08f; - //rotation - if(Input.GetKey(KeyCode.LeftArrow)) - { - downxDeg(); - } - - //rotation - if(Input.GetKey(KeyCode.UpArrow)) - { - upyDeg(); - } + //Z rotation + if (Input.GetKey ("joystick button 7")) + zDeg = Time.deltaTime * xSpeed * 0.5f; + + if (Input.GetKey ("joystick button 5")) + zDeg = - Time.deltaTime * xSpeed * 0.5f; + + //Zoom out + if (Input.GetKey ("joystick button 4")) { + desiredDistance -= Time.deltaTime * zoomRate * 0.08f; + if (UIData.switchmode) + Molecule3DComp.ToParticle (); + } + //zoom in + if (Input.GetKey ("joystick button 6")) { + desiredDistance += Time.deltaTime * zoomRate * 0.08f; + if (UIData.switchmode) + Molecule3DComp.ToParticle (); + } + } + + /// + /// Manage the camera rotation with keyboard inputs. + /// + private void keyboardOperate () + { + //rotation + if (Input.GetKey (KeyCode.RightArrow) || Input.GetKey (KeyCode.Z)){ + if(monomer_jump && UIData.guided){ +// int nb_chains = MoleculeModel.existingChain.Count; +// Dictionary chains_COM = new Dictionary(); +// for(int c = 0; i + /// Compute center of mass. + /// + private Vector3 get_com(string chain) + { + float x = 0, y = 0, z = 0; + float nb_atoms = 0; + int first_atom = 0; + + if (onlyTMD) + first_atom = reslim; + + if (UIData.secondarystruct) { + for (int i=0; i < MoleculeModel.CaSplineList.Count; i++) { + if(MoleculeModel.CaSplineChainList[i]== chain){ + x += MoleculeModel.CaSplineList[i][0]; + y += MoleculeModel.CaSplineList[i][1]; + z += MoleculeModel.CaSplineList[i][2]; + nb_atoms++; + } + } + return new Vector3(x/nb_atoms, y/nb_atoms, z/nb_atoms); + } + + else{ + for (int i=first_atom; i < MoleculeModel.atomsLocationlist.Count; i++) { + if(MoleculeModel.atomsChainList[i]== chain){ + x += MoleculeModel.atomsLocationlist[i][0]; + y += MoleculeModel.atomsLocationlist[i][1]; + z += MoleculeModel.atomsLocationlist[i][2]; + nb_atoms++; + } + } + return new Vector3(x/nb_atoms, y/nb_atoms, z/nb_atoms); + } + } // End get_com + /// + /// Compute spreading vectors (first step). + /// + private void computeSpreadingVector() + { + Vector3 sym_center; + if(MoleculeModel.MinValue.y < 0) + sym_center = new Vector3(0, (MoleculeModel.MaxValue.y + MoleculeModel.MinValue.y), 0); + else + sym_center = new Vector3(0, (MoleculeModel.MaxValue.y - MoleculeModel.MinValue.y), 0); + + Vector3 temp = get_com("A"); + spreadA = temp - sym_center; + spreadA.Normalize(); + + temp = get_com("B"); + spreadB = temp - sym_center; + spreadB.Normalize(); + + temp = get_com("C"); + spreadC = temp - sym_center; + spreadC.Normalize(); + + temp = get_com("D"); + spreadD = temp - sym_center; + spreadD.Normalize(); + + temp = get_com("E"); + spreadE = temp - sym_center; + spreadE.Normalize(); + } + + /// + /// Compute spreading vectors (second step). + /// + private void computeSpreadPart(out Vector3 Spread1, out Vector3 Spread2, string chain){ + + float x1 = 0, y1 = 0, z1 = 0; + float x2 = 0, y2 = 0, z2 = 0; + float nb_atoms1 = 0; + float nb_atoms2 = 0; + + Vector3 sym_center; + if(MoleculeModel.MinValue.y < 0) + sym_center = new Vector3(0, (MoleculeModel.MaxValue.y + MoleculeModel.MinValue.y), 0); + else + sym_center = new Vector3(0, (MoleculeModel.MaxValue.y - MoleculeModel.MinValue.y), 0); + + for (int i=0; i < MoleculeModel.atomsLocationlist.Count; i++) { + if(MoleculeModel.atomsChainList[i]== chain){ + if(MoleculeModel.residueIds[i] < reslim){ + x1 += MoleculeModel.atomsLocationlist[i][0]; + y1 += MoleculeModel.atomsLocationlist[i][1]; + z1 += MoleculeModel.atomsLocationlist[i][2]; + nb_atoms1++; + }else{ + x2 += MoleculeModel.atomsLocationlist[i][0]; + y2 += MoleculeModel.atomsLocationlist[i][1]; + z2 += MoleculeModel.atomsLocationlist[i][2]; + nb_atoms2++; + } + } + } + Vector3 temp1 = new Vector3 (x1 / nb_atoms1, y1 / nb_atoms1, z1 / nb_atoms1); + Spread1 = temp1 - sym_center; + Spread1.Normalize (); + + Vector3 temp2 = new Vector3 (x2 / nb_atoms2, y2 / nb_atoms2, z2 / nb_atoms2); + Spread2 = temp2 - sym_center; + Spread2.Normalize (); + + } //End ComputeSpreadPart + + /// + /// Computes spreading vectors for helices (third step spreading) + /// + /// Spreadhelix. + /// First_atom. + /// Last_atom. + /// Chain. + private void computeSpreadHelix(out Vector3 Spreadhelix, int first_atom, int last_atom, string chain){ + float x = 0, y = 0, z = 0; + float nb_atoms = 0; + + for (int i=first_atom; i < last_atom; i++) { + x += MoleculeModel.atomsLocationlist[i][0]; + y += MoleculeModel.atomsLocationlist[i][1]; + z += MoleculeModel.atomsLocationlist[i][2]; + nb_atoms++; + } + + Vector3 temp = new Vector3 (x / nb_atoms, y / nb_atoms, z / nb_atoms); + onlyTMD = true; + Vector3 center = get_com (chain); + onlyTMD = false; + Spreadhelix = temp - center; + Spreadhelix.Normalize (); + + } + + /// + /// Spreading chains (limit: 5 chains) + /// + private void Spreading(){ + computeSpreadingVector(); + comp_spread+=0.1f; + comp_spread = Math.Round (comp_spread, 1); + + if(UIData.isGLIC){ + //Second step spreading + computeSpreadPart(out spreadA1, out spreadA2, "A"); + computeSpreadPart(out spreadB1, out spreadB2, "B"); + computeSpreadPart(out spreadC1, out spreadC2, "C"); + computeSpreadPart(out spreadD1, out spreadD2, "D"); + computeSpreadPart(out spreadE1, out spreadE2, "E"); + } + + if(GUIMoleculeController.toggle_SEC_STRUCT){ + + GameObject[] ribA = GameObject.FindGameObjectsWithTag("RibbonObjA"); + GameObject[] ribB = GameObject.FindGameObjectsWithTag("RibbonObjB"); + GameObject[] ribC = GameObject.FindGameObjectsWithTag("RibbonObjC"); + GameObject[] ribD = GameObject.FindGameObjectsWithTag("RibbonObjD"); + GameObject[] ribE = GameObject.FindGameObjectsWithTag("RibbonObjE"); + + if(comp_spread > 2 && UIData.isGLIC){ + + if(UIData.guided){ + ribA[0].transform.Translate(spreadE1); + ribA[1].transform.Translate (spreadE2); + ribB[0].transform.Translate(spreadD1); + ribB[1].transform.Translate (spreadD2); + ribC[0].transform.Translate(spreadC1); + ribC[1].transform.Translate (spreadC2); + ribD[0].transform.Translate(spreadB1); + ribD[1].transform.Translate (spreadB2); + ribE[0].transform.Translate(spreadA1); + ribE[1].transform.Translate (spreadA2); + }else{ + ribA[0].transform.Translate(spreadA1); + ribA[1].transform.Translate (spreadA2); + ribB[0].transform.Translate(spreadB1); + ribB[1].transform.Translate (spreadB2); + ribC[0].transform.Translate(spreadC1); + ribC[1].transform.Translate (spreadC2); + ribD[0].transform.Translate(spreadD1); + ribD[1].transform.Translate (spreadD2); + ribE[0].transform.Translate(spreadE1); + ribE[1].transform.Translate (spreadE2); + } + }else{ + foreach( GameObject rib in ribA) + // Dunno why but the vectors are reversed when guided navigation is activated + if(UIData.guided) + rib.transform.Translate(spreadE); + else + rib.transform.Translate(spreadA); + + foreach( GameObject rib in ribB) + if(UIData.guided) + rib.transform.Translate(spreadD); + else + rib.transform.Translate(spreadB); + + foreach( GameObject rib in ribC) + rib.transform.Translate(spreadC); + + foreach( GameObject rib in ribD) + if(UIData.guided) + rib.transform.Translate(spreadB); + else + rib.transform.Translate(spreadD); + + foreach( GameObject rib in ribE) + if(UIData.guided) + rib.transform.Translate(spreadA); + else + rib.transform.Translate(spreadE); + } + } + + if(UIData.atomtype == UIData.AtomType.hyperball){ + hballs = GameObject.FindObjectsOfType(typeof(BallUpdateHB)) as BallUpdateHB[]; + Molecule.View.DisplayMolecule.DestroyBondObject(); + for (int i=0; i + /// Narrowing chains. + /// + private void Narrowing(){ + computeSpreadingVector(); + comp_spread-=0.1f; + comp_spread = Math.Round ((double)comp_spread, 1); + + if(comp_spread <= 0){ + comp_spread = 0; + }else{ + + if(GUIMoleculeController.toggle_SEC_STRUCT){ + + GameObject[] ribA = GameObject.FindGameObjectsWithTag("RibbonObjA"); + GameObject[] ribB = GameObject.FindGameObjectsWithTag("RibbonObjB"); + GameObject[] ribC = GameObject.FindGameObjectsWithTag("RibbonObjC"); + GameObject[] ribD = GameObject.FindGameObjectsWithTag("RibbonObjD"); + GameObject[] ribE = GameObject.FindGameObjectsWithTag("RibbonObjE"); + + if(comp_spread > 2 && UIData.isGLIC){ + + if(UIData.guided){ + ribA[0].transform.Translate(-spreadE1); + ribA[1].transform.Translate (-spreadE2); + ribB[0].transform.Translate(-spreadD1); + ribB[1].transform.Translate (-spreadD2); + ribC[0].transform.Translate(-spreadC1); + ribC[1].transform.Translate (-spreadC2); + ribD[0].transform.Translate(-spreadB1); + ribD[1].transform.Translate (-spreadB2); + ribE[0].transform.Translate(-spreadA1); + ribE[1].transform.Translate (-spreadA2); + }else{ + ribA[0].transform.Translate(-spreadA1); + ribA[1].transform.Translate (-spreadA2); + ribB[0].transform.Translate(-spreadB1); + ribB[1].transform.Translate (-spreadB2); + ribC[0].transform.Translate(-spreadC1); + ribC[1].transform.Translate (-spreadC2); + ribD[0].transform.Translate(-spreadD1); + ribD[1].transform.Translate (-spreadD2); + ribE[0].transform.Translate(-spreadE1); + ribE[1].transform.Translate (-spreadE2); + } + }else{ + foreach( GameObject rib in ribA) + if(UIData.guided) + rib.transform.Translate(-spreadE); + else + rib.transform.Translate(-spreadA); + + foreach( GameObject rib in ribB) + if(UIData.guided) + rib.transform.Translate(-spreadD); + else + rib.transform.Translate(-spreadB); + + foreach( GameObject rib in ribC) + rib.transform.Translate(-spreadC); + + foreach( GameObject rib in ribD) + if(UIData.guided) + rib.transform.Translate(-spreadB); + else + rib.transform.Translate(-spreadD); + + foreach( GameObject rib in ribE) + if(UIData.guided) + rib.transform.Translate(-spreadA); + else + rib.transform.Translate(-spreadE); + } + } + + if(UIData.atomtype == UIData.AtomType.hyperball){ + hballs = GameObject.FindObjectsOfType(typeof(BallUpdateHB)) as BallUpdateHB[]; + Molecule.View.DisplayMolecule.DestroyBondObject(); + for (int i=0; i + /// Resets the chains position. + /// + private void ResetChainsPos(){ + Vector3 vectemp; + comp_spread = 0; + if(UIData.atomtype == UIData.AtomType.hyperball){ + hballs = GameObject.FindObjectsOfType(typeof(BallUpdateHB)) as BallUpdateHB[]; + for (int i=0; i + /// Slightly spreads the chains when the camera is near the protein structure. + /// + private void NearSpreading(){ + UIData.spread_tree = true; + if(rep == ""){ + atomtree = AtomTree.Build(); + } + rep = atomtree.GetClosestAtomType(transform.position); + closeatom = MoleculeModel.atomsLocationlist[int.Parse(rep)]; + poscloseatom = new Vector3(closeatom[0], closeatom[1], closeatom[2]); + distclose = Vector3.Distance (transform.position, poscloseatom); // Distance Camera / Closest atom; + if((distclose < 15) && comp_spread < 0.3) + Spreading (); + else if ((distclose > 15) && comp_spread != 0) + ResetChainsPos (); + UIData.spread_tree = false; + } + } diff --git a/Assets/Scripts/surface/GenerateMesh.cs b/Assets/Scripts/surface/GenerateMesh.cs index 271748ea..a3bc472b 100755 --- a/Assets/Scripts/surface/GenerateMesh.cs +++ b/Assets/Scripts/surface/GenerateMesh.cs @@ -47,7 +47,7 @@ /// The fact that you are presently reading this means that you have had /// knowledge of the CeCILL-C license and that you accept its terms. /// -/// $Id: GenerateMesh.cs 227 2013-04-07 15:21:09Z baaden $ +/// $Id: GenerateMesh.cs 518 2014-05-14 14:52:51Z roudier $ /// /// References : /// If you use this code, please cite the following reference : @@ -64,57 +64,407 @@ /// using UnityEngine; -using System.Collections.Generic; using System; +using System.Collections.Generic; +using System.Threading; using Molecule.Model; public class GenerateMesh { -// public static void GM (Vector3[] Mnormals, Vector3[] Mvertices, int[] Mtriangles, int centrage) { - - - public void GM (Vector3[] Mvertices, int[] Mtriangles, Vector3 center, int surfaceNb, Color[] Colors, string tag="SurfaceManager") - { - Debug.Log("Entering :: GM: "+tag); - GameObject GOSurface = new GameObject("SurfaceOBJ"); - GOSurface.tag = tag; - GOSurface.transform.parent = GameObject.Find("SurfaceManager").transform; - Mesh mesh = new Mesh(); - GOSurface.AddComponent(); - GOSurface.AddComponent(); - GOSurface.GetComponent().mesh = mesh; - // Material SurfaceShader = Resources.Load("SurfaceShader", typeof(Material)) as Material; - // GOSurface.renderer.material = SurfaceShader; -// GOSurface.renderer.material = new Material(Shader.Find("Mat Cap Cut")); - GOSurface.renderer.material = new Material(Shader.Find("Vertex Colored")); -// GOSurface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("graypic/bruckner")); - GOSurface.transform.localPosition = center; - mesh.Clear(); + private static Vector3 CENTER = new Vector3(0f,0f,0f); + private static float[,,] VOXELS; + private static Vector3 DELTA; + private static Vector3 ORIGIN; + private static Vector3 OFFSET_ORIGIN; + private static Transform DADDY; + private static string TAG; + private static int XDIM, YDIM, ZDIM; + private static int SLICE_WIDTH = 80; + private static float S_FUDGE_FACTOR = 18f; + private static Vector3 FUDGE_FACTOR = new Vector3(S_FUDGE_FACTOR, S_FUDGE_FACTOR, S_FUDGE_FACTOR); + private static bool ELECTRO = false; + + /// + /// This computes the normal vectors from a MeshData object, and adds them to it. + /// This is necessary because Unity3D can only do it for real Mesh objects, + /// but this creates artifacts at the edges + /// when said meshes are created by splitting a surface. + /// + /// + /// The MeshData object to which normals will be added. + /// + private static void ProperlyCalculateNormals(MeshData mData) { + Vector3[] vertices = mData.vertices; + int vCount = mData.vertices.Length; + + // this will contain the list of normals affecting each vertex + List> normal_buffer = new List>(); + + // temporary storage for normals, you can't directly access mesh.normals[i] + Vector3[] myNormals = new Vector3[vCount]; + + // initializing the buffer so we can access it by index and add stuff freely later + for(int i=0; i()); + myNormals[i] = new Vector3(0f,0f,0f); // make sure we start with empty normals + } + + int[] triangles = mData.triangles; + int index = triangles.Length; + + // For each triangle + for(int i=0; i(); + surface.AddComponent(); + surface.GetComponent().mesh = mesh; + surface.renderer.material = new Material(Shader.Find("Diffuse")); + // What about MoleculeModel.vertices? + } + */ + + private static void CreateSurfaceObjects(List meshes) { + foreach(Mesh mesh in meshes) { + GameObject surface = new GameObject("SurfaceOBJ"); + surface.tag = TAG; + surface.transform.parent = DADDY; + surface.transform.localPosition = CENTER; + //mesh.RecalculateNormals(); + mesh.RecalculateBounds(); + surface.AddComponent(); + surface.AddComponent(); + surface.GetComponent().mesh = mesh; + //surface.renderer.material = new Material(Shader.Find("Diffuse")); + + if(ELECTRO) + surface.renderer.material = new Material(Shader.Find("Diffuse")); + /*else if(UI.UIData.toggleBfac){ + surface.renderer.material = new Material(Shader.Find("Transparent/OIT_BLUE"));} */ + else { + surface.renderer.material = new Material(Shader.Find("Mat Cap Cut")); + surface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("lit_spheres/divers/daphz1")); + } + Debug.Log(surface.renderer.material.shader.name); + } + } + + private static void SetDims() { + XDIM = VOXELS.GetLength(0); + YDIM = VOXELS.GetLength(1); + ZDIM = VOXELS.GetLength(2); + } + + private static void DebugDims() { + Debug.Log(SLICE_WIDTH.ToString()); + Debug.Log("GenerateMesh::CreateSurfaceObjects > Voxel grid dimensions (x,y,z):"); + Debug.Log(XDIM.ToString()); + Debug.Log(YDIM.ToString()); + Debug.Log(ZDIM.ToString()); + } + + private static void InitGenMesh(float[,,] vox, float thresh, Vector3 d, Vector3 o, string t="SurfaceManager") { + VOXELS = vox; + DELTA = d; + ORIGIN = o; + OFFSET_ORIGIN = ORIGIN; + TAG = t; + DADDY = GameObject.Find("SurfaceManager").transform; + MarchingCubes.SetTarget(thresh); + MarchingCubes.SetModeToCubes(); + // We could use MarchingCubes.SetWindingOrder here instead of flipping the triangles. + + } + + /// + /// Creates the surface objects. + /// + /// + /// Voxels, i.e. the scalar field used to compute the surface. + /// + /// + /// The threshold on which the isosurface is based. + /// + /// + /// Delta parameter from the grid, basically the size of each cell. + /// + /// + /// Origin of the grid. + /// + /// + /// Colors. Kept from previous implementation, but doesn't do anything here. I'm only + /// keeping it because I'm not sure what it was used for. --- Alexandre + /// + /// + /// Tag for the objects to be created. + /// + /// + /// True if this is an electrostatic field isosurface. + /// + public static void CreateSurfaceObjects(float[,,] voxels, float threshold, Vector3 delta, Vector3 origin, + Color[] colors, string tag="SurfaceManager", bool electro = false) { + ELECTRO = electro; + Debug.Log(ELECTRO.ToString()); + if(ELECTRO) { + ReadDX readDX = UI.GUIMoleculeController.readdx; + origin = readDX.GetOrigin(); + delta = readDX.GetDelta(); + } + + InitGenMesh(voxels, threshold, delta, origin, tag); + SetDims(); + + float bMCTime = Time.realtimeSinceStartup; + MeshData mData = MarchingCubes.CreateMesh(VOXELS, 0, XDIM, 0, YDIM, 0, ZDIM); + Debug.Log("Entire surface contains " + mData.vertices.Length.ToString() + " vertices."); + float elapsed = 10f * (Time.realtimeSinceStartup - bMCTime); + Debug.Log("GenerateMesh::MarchingCubes time: " + elapsed.ToString()); + OffsetVertices(mData); + + float bSmooth = Time.realtimeSinceStartup; + AdjacencySets adjacencySets = new AdjacencySets(mData.triangles.Length); + adjacencySets.AddAllTriangles(mData.triangles); + SmoothFilter.AdjSetsSmoother(mData, adjacencySets); + elapsed = Time.realtimeSinceStartup - bSmooth; + Debug.Log("Smoothing time: " + elapsed.ToString()); + + ProperlyCalculateNormals(mData); + + // Necessary for electrostatic fields isosurfaces + Debug.Log(threshold.ToString()); + if(threshold < 0) + FlipTriangles(mData); + + Splitting splitting = new Splitting(); + List meshes = splitting.Split(mData); + CreateSurfaceObjects(meshes); + } + + + public void GM (Vector3[] Mvertices, int[] Mtriangles, Vector3 center, int surfaceNb, Color[] Colors, string tag="SurfaceManager") { + Debug.Log("Entering :: GM: "+tag); + GameObject GOSurface = new GameObject("SurfaceOBJ"); + GOSurface.tag = tag; + GOSurface.transform.parent = GameObject.Find("SurfaceManager").transform; + Mesh mesh = new Mesh(); + GOSurface.AddComponent(); + GOSurface.AddComponent(); + GOSurface.GetComponent().mesh = mesh; + //Material SurfaceShader = Resources.Load("SurfaceShader", typeof(Material)) as Material; + //GOSurface.renderer.material = SurfaceShader; + + + GOSurface.renderer.material = new Material(Shader.Find("Mat Cap Cut")); + GOSurface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("lit_spheres/divers/daphz1")); + + + //GOSurface.renderer.material = new Material(Shader.Find("Diffuse")); + + //GOSurface.renderer.material = new Material(Shader.Find("Vertex Colored")); + //GOSurface.renderer.material.SetTexture("_MatCap",(Texture)Resources.Load("graypic/bruckner")); + GOSurface.transform.localPosition = center; + mesh.Clear(); + + // //Unity has a left-handed coordinates system while Molecular obj are right-handed + // //So we have to negate the x axis and change the winding order + // for(int i=0; i < Mvertices.Length; i++) + // { + // Mvertices[i].x = -Mvertices[i].x; + // } + + // for(int tri=0; tri + /// First we lower the resolution for bigger molecules. + /// Perhaps this could be exposed to the interface, but it might cause + /// users to choose unreasonable values. + /// Bear in mind that the "threshold" value in VertexTree effectively caps + /// the resolution of the final mesh, but not of the original voxels, or of + /// the MarchingCubes algorithm itself. + /// So they serve slightly different purposes. + /// + /// + /// The resolution. + /// + private float CapResolution(float resolution) { + int nbAtoms = MoleculeModel.atomsLocationlist.Count; + //float resolution = DEFAULT_RESOLUTION; + if(nbAtoms > 500) + resolution = 2.5f; + if(nbAtoms > 1000) + resolution = 2.2f; + if(nbAtoms > 2000) + resolution = 2.0f; + if(nbAtoms > 4000) + resolution = 1.8f; + if(nbAtoms > 5000) + resolution = 1.7f; + if(nbAtoms > 6000) + resolution = 1.6f; + if(nbAtoms > 8000) + resolution = 1.5f; + if(nbAtoms > 10000) + resolution = 1.4f; + if(nbAtoms > 14000) + resolution = 1.2f; + if(nbAtoms > 20000) + resolution = 1.0f; -// if (MoleculeModel.MinValue.x >0) -// MoleculeModel.MinValue.x = 0; -// if (MoleculeModel.MinValue.y >0) -// MoleculeModel.MinValue.y = 0; -// if (MoleculeModel.MinValue.z >0) -// MoleculeModel.MinValue.z = 0; - Debug.Log("Entering :: Generation of density from PDB"); - X = (int)(((MoleculeModel.MaxValue.x-MoleculeModel.MinValue.x)*2)+40); - Y = (int)(((MoleculeModel.MaxValue.y-MoleculeModel.MinValue.y)*2)+40); - Z = (int)(((MoleculeModel.MaxValue.z-MoleculeModel.MinValue.z)*2)+40); + return resolution; + } + public void TranPDBtoDEN(float resolution = DEFAULT_RESOLUTION, bool cap = true){ + if(cap) + resolution = CapResolution(resolution); + + delta = new Vector3(resolution, resolution, resolution); + + // We need to refresh the molecule's origin when it's not + // the first molecule for which we generate a surface. + origin = MoleculeModel.MinValue; + Debug.Log("Entering :: Generation of density from PDB"); + X = (int) (((MoleculeModel.MaxValue.x-MoleculeModel.MinValue.x) * resolution) + 40); + Y = (int) (((MoleculeModel.MaxValue.y-MoleculeModel.MinValue.y) * resolution) + 40); + Z = (int) (((MoleculeModel.MaxValue.z-MoleculeModel.MinValue.z) * resolution) + 40); Debug.Log("Density point X,Y,Z :: "+ X+","+Y+","+Z); Debug.Log("Density minValue :: " + MoleculeModel.MinValue); - GridS = new float[X,Y,Z]; + gridS = new float[X,Y,Z]; VertColor = new Color[X,Y,Z]; - + + int i; int j; int k; @@ -128,111 +177,143 @@ public void TranPDBtoDEN(){ for(j=0;j GridS[l,m,n]) + if (density > gridS[l,m,n]) // if (VertColor[l,m,n].b!=0){ // if (density > 0.5) VertColor[l,m,n] = atomColor; - GridS[l,m,n] += density; - } + gridS[l,m,n] += density; + } - }else if (UIData.toggleBfac){ - for (int l = i-8 ;l < i+9 ; l++) - for ( int m = j-8 ; m < j+9 ; m++) - for ( int n = k-8 ; n < k+9 ; n++){ - Vector3 v2 = new Vector3(l,m,n); - Dist = Vector3.Distance(v1,v2); - - bfactor = ((float)MoleculeModel.BFactorList[atomnumber]/maxValue*5); - if (bfactor>0) - GridS[l,m,n] += (float)Math.Exp(-((Dist/bfactor)*(Dist/bfactor))); - else - GridS[l,m,n] -= (float)Math.Exp(-((Dist/bfactor)*(Dist/bfactor))); + } else if (UIData.toggleBfac) { // these index bounds might need to be express as functions of fudgeFactor + for (int l = i-8 ;l < i+9 ; l++) { + for ( int m = j-8 ; m < j+9 ; m++) { + for ( int n = k-8 ; n < k+9 ; n++) { + Vector3 v2 = new Vector3(l,m,n); + Dist = Vector3.Distance(v1,v2); + + bfactor = ((float)MoleculeModel.BFactorList[atomnumber]/maxValue*5); + if (bfactor>0) + gridS[l,m,n] += (float)Math.Exp(-((Dist/bfactor)*(Dist/bfactor))); + else + gridS[l,m,n] -= (float)Math.Exp(-((Dist/bfactor)*(Dist/bfactor))); + + if (VertColor[l,m,n].b == 1f && VertColor[l,m,n].r==0f) { + VertColor[l,m,n].r +=((float)MoleculeModel.BFactorList[atomnumber]/(maxValue)); + VertColor[l,m,n].b -=((float)MoleculeModel.BFactorList[atomnumber]/(2*maxValue)); + } + // if ( (VertColor[l,m,n].r + ((float)MoleculeModel.BFactorList[atomnumber]/(maxValue))) > 1){ + // VertColor[l,m,n].r=1f; + // VertColor[l,m,n].b=0f; + // } + else { + VertColor[l,m,n].r +=((float)MoleculeModel.BFactorList[atomnumber]/(20*maxValue)); + VertColor[l,m,n].b -=((float)MoleculeModel.BFactorList[atomnumber]/(20*maxValue)); + } - if (VertColor[l,m,n].b == 1f && VertColor[l,m,n].r==0f){ - VertColor[l,m,n].r +=((float)MoleculeModel.BFactorList[atomnumber]/(maxValue)); - VertColor[l,m,n].b -=((float)MoleculeModel.BFactorList[atomnumber]/(2*maxValue)); -// } -// if ( (VertColor[l,m,n].r + ((float)MoleculeModel.BFactorList[atomnumber]/(maxValue))) > 1){ -// VertColor[l,m,n].r=1f; -// VertColor[l,m,n].b=0f; - } - else - { - VertColor[l,m,n].r +=((float)MoleculeModel.BFactorList[atomnumber]/(20*maxValue)); - VertColor[l,m,n].b -=((float)MoleculeModel.BFactorList[atomnumber]/(20*maxValue)); - } - } + } + } } atomnumber++; } - + } + // } // } // } @@ -240,42 +321,49 @@ public void TranPDBtoDEN(){ // export the density in a .dx file readable by pymol or vmd // StreamWriter test; // test = new StreamWriter("grille.dx"); -// test.Write("# Data from APBS 1.3\n#\n# POTENTIAL (kT/e)\n#\nobject 1 class gridpositions counts "+X+" "+Y+" "+Z+"\norigin -2.330000e+01 -2.34000e+01 -2.550000e+01\ndelta 5.000000e-01 0.000000e+00 0.000000e+00\ndelta 0.000000e+00 5.000000e-01 0.000000e+00\ndelta 0.000000e+00 0.000000e+00 5.000000e-01\nobject 2 class gridconnections counts "+X+" "+Y+" "+Z+"\nobject 3 class array type double rank 0 items "+X*Y*Z+" data follows\n"); +// test.Write("# Data from APBS 1.3\n#\n# POTENTIAL (kT/e)\n#\nobject 1 class gridpositions counts "+X+" "+Y+" "+Z+"\n +// origin -2.330000e+01 -2.34000e+01 -2.550000e+01\ndelta 5.000000e-01 0.000000e+00 0.000000e+00\n +// delta 0.000000e+00 5.000000e-01 0.000000e+00\ndelta 0.000000e+00 0.000000e+00 5.000000e-01\n +// object 2 class gridconnections counts "+X+" "+Y+" "+Z+"\nobject 3 class array type double rank 0 items "+X*Y*Z+" data follows\n"); // for (i=0 ; i< X ; i++){ // for (j=0 ; j + /// Destroys previously displayed isosurface at GUI change + /// + public static void DestroySurface() { GameObject[] surfaceOBJ = GameObject.FindGameObjectsWithTag("SurfaceManager"); for (int l = 0; l < surfaceOBJ.Length; l++) { - Destroy(surfaceOBJ[l]); } - } + } diff --git a/Assets/SkinWithListItem.guiskin b/Assets/SkinWithListItem.guiskin index 7ee1d3b5251c2c196f7a63c8584dd6cefbc2b53e..0042fde5711e88a8c1c1b76ea2c94c670587158e 100644 GIT binary patch delta 618 zcmaE`gzdu;HfaXNva1Y?lL{CZ7&w9K4?vp1M9)yqD9x}@daE>JMj0dX^p-M4OA+;o zMy`hr&eC(`9(;IFaO^xYQ04U9WsKI-9V!@Erj;`)urq;l2OQq6Ue3tL$O+{!a8BP_ z&nP?nUKu0b^bI|XEZZ|G7&(xnw^vp&nj`V2H+C~BPJd9w$hQ4K6{7&MOl=*b_I8yT zR6(F};q3vnj4Egedodd_yFP1S1^Rfbk;211~>P~f#B!j?o!$wBo<$vlKkG7jt&vfU5$4nB=X)5Hx0f|B%E5)U&u(UPh4ZG@cQYza-`C8@w_T!@Q3N3l(l~uy zH_(qUZHx*Caj<%z-&wY=YG>5K6lVj6_I8d=pm*V}fN6qCCUh}Mz$Lc>B|Q;5puN6u z9>jH^kcOBV(1*<_Y}*&~BRd_{HekfFOn)hD(Vka`rhdZjej!}2I!6Zfl01L*O A(*OVf delta 559 zcmZuuO-lk%6rB^Jj-oNB1A-AkQ4t|VQbddDpSX$^1+GTzQ?tx6`jF_hi8eyJuti)5 zqJBXHZCd&R3JhAbkm$XcNex=Oci(&WoO{oCw^?&HYVN24^Fcv1r6`J5oEsu4$@q9Y zv5+i8Z=+Z=(L>uNrs+j&XBoJuo`Xty1~Cr=*c?`PDg!U*u?*c#zHTB&-zI$Ws&O_8 z%}GD6LgmvO#z0?r_(eT0T~uJm!rWYeZsEdozJVAg*POc{F&<8>W3ZEd3uvOfTtOM> z!$c_H6GyqiGSW>M18qfpE-6>1`2s>${yadRdFZ0Ci{1}l@MHl)pjIB5bP}*1OIzsg zew5z%zKDq~w$x8gMfCE>4#Ji|!(!8QMYvijAtunK069)ozT3s91N?Pw>Ey_sW3dgk z|C`hMh}aAkjF~P?EY#2bTP$@bI}0 1 ? RenderTexture.GetTemporary (source.width/blurRtDivider, source.height/blurRtDivider, 0, source.format) : null; - if (scene) scene.filterMode = FilterMode.Bilinear; - var rtLow : RenderTexture = RenderTexture.GetTemporary (source.width/(2*blurRtDivider), source.height/(2*blurRtDivider), 0, source.format); - var rtLow2 : RenderTexture = RenderTexture.GetTemporary (source.width/(2*blurRtDivider), source.height/(2*blurRtDivider), 0, source.format); - if (rtLow) rtLow.filterMode = FilterMode.Bilinear; - if (rtLow2) rtLow2.filterMode = FilterMode.Bilinear; - - dofHdrMaterial.SetVector ("_CurveParams", Vector4 (0.0f, focalSize, aperture/10.0f, focalDistance01)); - - // foreground blur - - if (foregroundBlur) { - var rtLowTmp : RenderTexture = RenderTexture.GetTemporary (source.width/(2*blurRtDivider), source.height/(2*blurRtDivider), 0, source.format); - - // Capture foreground CoC only in alpha channel and increase CoC radius - Graphics.Blit (source, rtLow2, dofHdrMaterial, 4); - dofHdrMaterial.SetTexture("_FgOverlap", rtLow2); - - var fgAdjustment : float = internalBlurWidth * foregroundOverlap * 0.225f; - dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, fgAdjustment , 0.0f, fgAdjustment)); - Graphics.Blit (rtLow2, rtLowTmp, dofHdrMaterial, 2); - dofHdrMaterial.SetVector ("_Offsets", Vector4 (fgAdjustment, 0.0f, 0.0f, fgAdjustment)); - Graphics.Blit (rtLowTmp, rtLow, dofHdrMaterial, 2); - - dofHdrMaterial.SetTexture("_FgOverlap", null); // NEW: not needed anymore - // apply adjust FG coc back to high rez coc texture - Graphics.Blit(rtLow, source, dofHdrMaterial, 7); + focalDistance01 = (focalTransform) ? (camera.WorldToViewportPoint (focalTransform.position)).z / (camera.farClipPlane) : FocalDistance01 (focalLength); + dofHdrMaterial.SetVector ("_CurveParams", Vector4 (1.0f, focalSize, aperture/10.0f, focalDistance01)); + + // possible render texture helpers + + var rtLow : RenderTexture = null; + var rtLow2 : RenderTexture = null; + var rtSuperLow1 : RenderTexture = null; + var rtSuperLow2 : RenderTexture = null; + var fgBlurDist : float = internalBlurWidth * foregroundOverlap; - RenderTexture.ReleaseTemporary(rtLowTmp); - } - else - dofHdrMaterial.SetTexture("_FgOverlap", null); // ugly FG overlaps as a result - - // capture remaing CoC (fore & *background*) - - Graphics.Blit (source, source, dofHdrMaterial, foregroundBlur ? 3 : 0); - - var cocRt : RenderTexture = source; - - if(blurRtDivider>1) { - Graphics.Blit (source, scene, dofHdrMaterial, 6); - cocRt = scene; - } - - // spawn a few low rez parts in high rez image to get a bigger blur - // resulting quality is higher than directly blending preblurred buffers - - Graphics.Blit(cocRt, rtLow2, dofHdrMaterial, 6); - Graphics.Blit(rtLow2, cocRt, dofHdrMaterial, 8); - - // blur and apply to color buffer - - var blurPassNumber : int = 10; - switch(blurQuality) { - case BlurQuality.Low: - blurPassNumber = blurRtDivider > 1 ? 13 : 10; - break; - case BlurQuality.Medium: - blurPassNumber = blurRtDivider > 1 ? 12 : 11; - break; - case BlurQuality.High: - blurPassNumber = blurRtDivider > 1 ? 15 : 14; - break; - default: - Debug.Log("DOF couldn't find valid blur quality setting", transform); - break; - } + if(visualizeFocus) + { + + // + // 2. + // visualize coc + // + // + + rtLow = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); + rtLow2 = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); - if(visualizeFocus) { - Graphics.Blit (source, destination, dofHdrMaterial, 1); + WriteCoc (source, rtLow, rtLow2, true); + Graphics.Blit (source, destination, dofHdrMaterial, 16); + } + else if ((blurType == BlurType.DX11) && dx11bokehMaterial) + { + + // + // 1. + // optimized dx11 bokeh scatter + // + // + + + if(highResolution) { + + internalBlurWidth = internalBlurWidth < 0.1f ? 0.1f : internalBlurWidth; + fgBlurDist = internalBlurWidth * foregroundOverlap; + + rtLow = RenderTexture.GetTemporary (source.width, source.height, 0, source.format); + + var dest2 = RenderTexture.GetTemporary (source.width, source.height, 0, source.format); + + // capture COC + WriteCoc (source, null, null, false); + + // blur a bit so we can do a frequency check + rtSuperLow1 = RenderTexture.GetTemporary(source.width>>1, source.height>>1, 0, source.format); + rtSuperLow2 = RenderTexture.GetTemporary(source.width>>1, source.height>>1, 0, source.format); + + Graphics.Blit(source, rtSuperLow1, dofHdrMaterial, 15); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, 1.5f , 0.0f, 1.5f)); + Graphics.Blit (rtSuperLow1, rtSuperLow2, dofHdrMaterial, 19); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (1.5f, 0.0f, 0.0f, 1.5f)); + Graphics.Blit (rtSuperLow2, rtSuperLow1, dofHdrMaterial, 19); + + // capture fg coc + if(nearBlur) + Graphics.Blit (source, rtSuperLow2, dofHdrMaterial, 4); + + dx11bokehMaterial.SetTexture ("_BlurredColor", rtSuperLow1); + dx11bokehMaterial.SetFloat ("_SpawnHeuristic", dx11SpawnHeuristic); + dx11bokehMaterial.SetVector ("_BokehParams", Vector4(dx11BokehScale, dx11BokehIntensity, Mathf.Clamp(dx11BokehThreshhold, 0.005f, 4.0f), internalBlurWidth)); + dx11bokehMaterial.SetTexture ("_FgCocMask", nearBlur ? rtSuperLow2 : null); + + // collect bokeh candidates and replace with a darker pixel + Graphics.SetRandomWriteTarget (1, cbPoints); + Graphics.Blit (source, rtLow, dx11bokehMaterial, 0); + Graphics.ClearRandomWriteTargets (); + + // fg coc blur happens here (after collect!) + if(nearBlur) { + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, fgBlurDist , 0.0f, fgBlurDist)); + Graphics.Blit (rtSuperLow2, rtSuperLow1, dofHdrMaterial, 2); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (fgBlurDist, 0.0f, 0.0f, fgBlurDist)); + Graphics.Blit (rtSuperLow1, rtSuperLow2, dofHdrMaterial, 2); + + // merge fg coc with bg coc + Graphics.Blit (rtSuperLow2, rtLow, dofHdrMaterial, 3); + } + + // NEW: LAY OUT ALPHA on destination target so we get nicer outlines for the high rez version + Graphics.Blit (rtLow, dest2, dofHdrMaterial, 20); + + // box blur (easier to merge with bokeh buffer) + dofHdrMaterial.SetVector ("_Offsets", Vector4 (internalBlurWidth, 0.0f , 0.0f, internalBlurWidth)); + Graphics.Blit (rtLow, source, dofHdrMaterial, 5); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, internalBlurWidth, 0.0f, internalBlurWidth)); + Graphics.Blit (source, dest2, dofHdrMaterial, 21); + + // apply bokeh candidates + Graphics.SetRenderTarget (dest2); + ComputeBuffer.CopyCount (cbPoints, cbDrawArgs, 0); + dx11bokehMaterial.SetBuffer ("pointBuffer", cbPoints); + dx11bokehMaterial.SetTexture ("_MainTex", dx11BokehTexture); + dx11bokehMaterial.SetVector ("_Screen", Vector3(1.0f/(1.0f*source.width), 1.0f/(1.0f*source.height), internalBlurWidth)); + dx11bokehMaterial.SetPass (2); + + Graphics.DrawProceduralIndirect (MeshTopology.Points, cbDrawArgs, 0); + + Graphics.Blit (dest2, destination); // hackaround for DX11 high resolution flipfun (OPTIMIZEME) + + RenderTexture.ReleaseTemporary(dest2); + RenderTexture.ReleaseTemporary(rtSuperLow1); + RenderTexture.ReleaseTemporary(rtSuperLow2); + } + else { + rtLow = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); + rtLow2 = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); + + fgBlurDist = internalBlurWidth * foregroundOverlap; + + // capture COC & color in low resolution + WriteCoc (source, null, null, false); + source.filterMode = FilterMode.Bilinear; + Graphics.Blit (source, rtLow, dofHdrMaterial, 6); + + // blur a bit so we can do a frequency check + rtSuperLow1 = RenderTexture.GetTemporary(rtLow.width>>1, rtLow.height>>1, 0, rtLow.format); + rtSuperLow2 = RenderTexture.GetTemporary(rtLow.width>>1, rtLow.height>>1, 0, rtLow.format); + + Graphics.Blit(rtLow, rtSuperLow1, dofHdrMaterial, 15); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, 1.5f , 0.0f, 1.5f)); + Graphics.Blit (rtSuperLow1, rtSuperLow2, dofHdrMaterial, 19); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (1.5f, 0.0f, 0.0f, 1.5f)); + Graphics.Blit (rtSuperLow2, rtSuperLow1, dofHdrMaterial, 19); + + var rtLow3 : RenderTexture = null; + + if(nearBlur) { + // capture fg coc + rtLow3 = RenderTexture.GetTemporary (source.width>>1, source.height>>1, 0, source.format); + Graphics.Blit (source, rtLow3, dofHdrMaterial, 4); + } + + dx11bokehMaterial.SetTexture ("_BlurredColor", rtSuperLow1); + dx11bokehMaterial.SetFloat ("_SpawnHeuristic", dx11SpawnHeuristic); + dx11bokehMaterial.SetVector ("_BokehParams", Vector4(dx11BokehScale, dx11BokehIntensity, Mathf.Clamp(dx11BokehThreshhold, 0.005f, 4.0f), internalBlurWidth)); + dx11bokehMaterial.SetTexture ("_FgCocMask", rtLow3); + + // collect bokeh candidates and replace with a darker pixel + Graphics.SetRandomWriteTarget (1, cbPoints); + Graphics.Blit (rtLow, rtLow2, dx11bokehMaterial, 0); + Graphics.ClearRandomWriteTargets (); + + RenderTexture.ReleaseTemporary(rtSuperLow1); + RenderTexture.ReleaseTemporary(rtSuperLow2); + + // fg coc blur happens here (after collect!) + if(nearBlur) { + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, fgBlurDist , 0.0f, fgBlurDist)); + Graphics.Blit (rtLow3, rtLow, dofHdrMaterial, 2); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (fgBlurDist, 0.0f, 0.0f, fgBlurDist)); + Graphics.Blit (rtLow, rtLow3, dofHdrMaterial, 2); + + // merge fg coc with bg coc + Graphics.Blit (rtLow3, rtLow2, dofHdrMaterial, 3); + } + + // box blur (easier to merge with bokeh buffer) + dofHdrMaterial.SetVector ("_Offsets", Vector4 (internalBlurWidth, 0.0f , 0.0f, internalBlurWidth)); + Graphics.Blit (rtLow2, rtLow, dofHdrMaterial, 5); + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, internalBlurWidth, 0.0f, internalBlurWidth)); + Graphics.Blit (rtLow, rtLow2, dofHdrMaterial, 5); + + // apply bokeh candidates + Graphics.SetRenderTarget (rtLow2); + ComputeBuffer.CopyCount (cbPoints, cbDrawArgs, 0); + dx11bokehMaterial.SetBuffer ("pointBuffer", cbPoints); + dx11bokehMaterial.SetTexture ("_MainTex", dx11BokehTexture); + dx11bokehMaterial.SetVector ("_Screen", Vector3(1.0f/(1.0f*rtLow2.width), 1.0f/(1.0f*rtLow2.height), internalBlurWidth)); + dx11bokehMaterial.SetPass (1); + Graphics.DrawProceduralIndirect (MeshTopology.Points, cbDrawArgs, 0); + + // upsample & combine + dofHdrMaterial.SetTexture ("_LowRez", rtLow2); + dofHdrMaterial.SetTexture ("_FgOverlap", rtLow3); + dofHdrMaterial.SetVector ("_Offsets", ((1.0f*source.width)/(1.0f*rtLow2.width)) * internalBlurWidth * Vector4.one); + Graphics.Blit (source, destination, dofHdrMaterial, 9); + + if(rtLow3) RenderTexture.ReleaseTemporary(rtLow3); + } } - else { - dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, 0.0f , 0.0f, internalBlurWidth)); - dofHdrMaterial.SetTexture("_LowRez", cocRt); // only needed in low resolution profile. and then, ugh, we get an ugly transition from nonblur -> blur areas - Graphics.Blit (source, destination, dofHdrMaterial, blurPassNumber); + else + { + + // + // 2. + // poisson disc style blur in low resolution + // + // + + rtLow = RenderTexture.GetTemporary (source.width >> 1, source.height >> 1, 0, source.format); + rtLow2 = RenderTexture.GetTemporary (source.width >> 1, source.height >> 1, 0, source.format); + source.filterMode = FilterMode.Bilinear; + + if(highResolution) internalBlurWidth *= 2.0f; + + WriteCoc (source, rtLow, rtLow2, true); + + var blurPass : int = (blurSampleCount == BlurSampleCount.High || blurSampleCount == BlurSampleCount.Medium) ? 17 : 11; + + if(highResolution) { + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, internalBlurWidth, 0.025f, internalBlurWidth)); + Graphics.Blit (source, destination, dofHdrMaterial, blurPass); + } + else { + dofHdrMaterial.SetVector ("_Offsets", Vector4 (0.0f, internalBlurWidth, 0.1f, internalBlurWidth)); + + // blur + Graphics.Blit (source, rtLow, dofHdrMaterial, 6); + Graphics.Blit (rtLow, rtLow2, dofHdrMaterial, blurPass); + + // cheaper blur in high resolution, upsample and combine + dofHdrMaterial.SetTexture("_LowRez", rtLow2); + dofHdrMaterial.SetTexture("_FgOverlap", null); + dofHdrMaterial.SetVector ("_Offsets", Vector4.one * ((1.0f*source.width)/(1.0f*rtLow2.width)) * internalBlurWidth); + Graphics.Blit (source, destination, dofHdrMaterial, blurSampleCount == BlurSampleCount.High ? 18 : 12); + } } - + if(rtLow) RenderTexture.ReleaseTemporary(rtLow); if(rtLow2) RenderTexture.ReleaseTemporary(rtLow2); - if(scene) RenderTexture.ReleaseTemporary(scene); } } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/DepthOfFieldScatter.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/DepthOfFieldScatter.js.meta index adf4a3b2..ff7ba3ee 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/DepthOfFieldScatter.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/DepthOfFieldScatter.js.meta @@ -3,7 +3,10 @@ guid: f202adaee27c646fa9d90739bb84aa42 MonoImporter: serializedVersion: 2 defaultReferences: - - objectFocus: {instanceID: 0} - - dofHdrShader: {fileID: 4800000, guid: acd613035ff3e455e8abf23fdc8c8c24, type: 1} + - focalTransform: {instanceID: 0} + - dofHdrShader: {fileID: 4800000, guid: acd613035ff3e455e8abf23fdc8c8c24, type: 3} + - dx11BokehShader: {fileID: 4800000, guid: d8e82664aa8686642a424c88ab10164a, type: 3} + - dx11BokehTexture: {fileID: 2800000, guid: a4cdca73d61814d33ac1587f6c163bca, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffect.cs.meta index d554268f..c732f5ed 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffect.cs.meta @@ -3,6 +3,7 @@ guid: e2dabca7ad1189d6d00011d98d76c639 MonoImporter: serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: 4116114fad112a07d000fbfb8d76c639, type: 1} + - shader: {fileID: 4800000, guid: 4116114fad112a07d000fbfb8d76c639, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js b/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js index 8d8f686a..b93bb9fa 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js +++ b/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js @@ -6,55 +6,70 @@ @script AddComponentMenu ("Image Effects/Edge Detection (Geometry)") enum EdgeDetectMode { - Thin = 0, - Thick = 1, + TriangleDepthNormals = 0, + RobertsCrossDepthNormals = 1, + SobelDepth = 2, + SobelDepthThin = 3, } class EdgeDetectEffectNormals extends PostEffectsBase { - public var mode : EdgeDetectMode = EdgeDetectMode.Thin; - public var sensitivityDepth : float = 1.0; - public var sensitivityNormals : float = 1.0; - - public var edgesOnly : float = 0.0; + public var mode : EdgeDetectMode = EdgeDetectMode.SobelDepthThin; + public var sensitivityDepth : float = 1.0f; + public var sensitivityNormals : float = 1.0f; + public var edgeExp : float = 1.0f; + public var sampleDist : float = 1.0f; + public var edgesOnly : float = 0.0f; public var edgesOnlyBgColor : Color = Color.white; - + public var edgeDetectShader : Shader; private var edgeDetectMaterial : Material = null; + private var oldMode : EdgeDetectMode = EdgeDetectMode.SobelDepthThin; function CheckResources () : boolean { CheckSupport (true); edgeDetectMaterial = CheckShaderAndCreateMaterial (edgeDetectShader,edgeDetectMaterial); - - if(!isSupported) + if (mode != oldMode) + SetCameraFlag (); + + oldMode = mode; + + if (!isSupported) ReportAutoDisable (); return isSupported; } + + function Start () { + oldMode = mode; + } + + function SetCameraFlag () { + if (mode>1) + camera.depthTextureMode |= DepthTextureMode.Depth; + else + camera.depthTextureMode |= DepthTextureMode.DepthNormals; + } + + function OnEnable() { + SetCameraFlag(); + } @ImageEffectOpaque function OnRenderImage (source : RenderTexture, destination : RenderTexture) { - if(CheckResources()==false) { + if (CheckResources () == false) { Graphics.Blit (source, destination); return; } - var sensitivity : Vector2 = Vector2 (sensitivityDepth, sensitivityNormals); - - source.filterMode = FilterMode.Point; - - edgeDetectMaterial.SetVector ("sensitivity", Vector4 (sensitivity.x, sensitivity.y, 1.0, sensitivity.y)); + var sensitivity : Vector2 = Vector2 (sensitivityDepth, sensitivityNormals); + edgeDetectMaterial.SetVector ("_Sensitivity", Vector4 (sensitivity.x, sensitivity.y, 1.0, sensitivity.y)); edgeDetectMaterial.SetFloat ("_BgFade", edgesOnly); + edgeDetectMaterial.SetFloat ("_SampleDistance", sampleDist); + edgeDetectMaterial.SetVector ("_BgColor", edgesOnlyBgColor); + edgeDetectMaterial.SetFloat ("_Exponent", edgeExp); - var vecCol : Vector4 = edgesOnlyBgColor; - edgeDetectMaterial.SetVector ("_BgColor", vecCol); - - if (mode == EdgeDetectMode.Thin) { - Graphics.Blit (source, destination, edgeDetectMaterial, 0); - } - else { - Graphics.Blit (source, destination, edgeDetectMaterial, 1); - } + Graphics.Blit (source, destination, edgeDetectMaterial, mode); } } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js.meta index 4360f9af..6d0252d3 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/EdgeDetectEffectNormals.js.meta @@ -3,6 +3,7 @@ guid: 57378565f2adf4d3fbe949ebe1453f09 MonoImporter: serializedVersion: 2 defaultReferences: - - edgeDetectShader: {fileID: 4800000, guid: 0d1644bdf064147baa97f235fc5b4903, type: 1} + - edgeDetectShader: {fileID: 4800000, guid: 0d1644bdf064147baa97f235fc5b4903, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Fisheye.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/Fisheye.js.meta index 3612e03a..0ad0fe83 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Fisheye.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Fisheye.js.meta @@ -3,6 +3,7 @@ guid: 7d5488e098d8f4eb492591bb089fe793 MonoImporter: serializedVersion: 2 defaultReferences: - - fishEyeShader: {fileID: 4800000, guid: 874ceab4425f64bccb1d14032f4452b1, type: 1} + - fishEyeShader: {fileID: 4800000, guid: 874ceab4425f64bccb1d14032f4452b1, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/GlobalFog.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/GlobalFog.js.meta index db764d06..f01a9a9b 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/GlobalFog.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/GlobalFog.js.meta @@ -3,6 +3,7 @@ guid: 34c3946ab5378473cb34bedd1c8194ba MonoImporter: serializedVersion: 2 defaultReferences: - - fogShader: {fileID: 4800000, guid: 70d8568987ac0499f952b54c7c13e265, type: 1} + - fogShader: {fileID: 4800000, guid: 70d8568987ac0499f952b54c7c13e265, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs b/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs index e3f99c41..0de0858e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs +++ b/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs @@ -1 +1,189 @@ -using UnityEngine; // Glow uses the alpha channel as a source of "extra brightness". // All builtin Unity shaders output baseTexture.alpha * color.alpha, plus // specularHighlight * specColor.alpha into that. // Usually you'd want either to make base textures to have zero alpha; or // set the color to have zero alpha (by default alpha is 0.5). [ExecuteInEditMode] [RequireComponent (typeof(Camera))] [AddComponentMenu("Image Effects/Glow")] public class GlowEffect : MonoBehaviour { /// The brightness of the glow. Values larger than one give extra "boost". public float glowIntensity = 1.5f; /// Blur iterations - larger number means more blur. public int blurIterations = 3; /// Blur spread for each iteration. Lower values /// give better looking blur, but require more iterations to /// get large blurs. Value is usually between 0.5 and 1.0. public float blurSpread = 0.7f; /// Tint glow with this color. Alpha adds additional glow everywhere. public Color glowTint = new Color(1,1,1,0); // -------------------------------------------------------- // The final composition shader: // adds (glow color * glow alpha * amount) to the original image. // In the combiner glow amount can be only in 0..1 range; we apply extra // amount during the blurring phase. public Shader compositeShader; Material m_CompositeMaterial = null; protected Material compositeMaterial { get { if (m_CompositeMaterial == null) { m_CompositeMaterial = new Material(compositeShader); m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave; } return m_CompositeMaterial; } } // -------------------------------------------------------- // The blur iteration shader. // Basically it just takes 4 texture samples and averages them. // By applying it repeatedly and spreading out sample locations // we get a Gaussian blur approximation. // The alpha value in _Color would normally be 0.25 (to average 4 samples), // however if we have glow amount larger than 1 then we increase this. public Shader blurShader; Material m_BlurMaterial = null; protected Material blurMaterial { get { if (m_BlurMaterial == null) { m_BlurMaterial = new Material(blurShader); m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave; } return m_BlurMaterial; } } // -------------------------------------------------------- // The image downsample shaders for each brightness mode. // It is in external assets as it's quite complex and uses Cg. public Shader downsampleShader; Material m_DownsampleMaterial = null; protected Material downsampleMaterial { get { if (m_DownsampleMaterial == null) { m_DownsampleMaterial = new Material( downsampleShader ); m_DownsampleMaterial.hideFlags = HideFlags.HideAndDontSave; } return m_DownsampleMaterial; } } // -------------------------------------------------------- // finally, the actual code protected void OnDisable() { if( m_CompositeMaterial ) { DestroyImmediate( m_CompositeMaterial ); } if( m_BlurMaterial ) { DestroyImmediate( m_BlurMaterial ); } if( m_DownsampleMaterial ) DestroyImmediate( m_DownsampleMaterial ); } protected void Start() { // Disable if we don't support image effects if (!SystemInfo.supportsImageEffects) { enabled = false; return; } // Disable the effect if no downsample shader is setup if( downsampleShader == null ) { Debug.Log ("No downsample shader assigned! Disabling glow."); enabled = false; } // Disable if any of the shaders can't run on the users graphics card else { if( !blurMaterial.shader.isSupported ) enabled = false; if( !compositeMaterial.shader.isSupported ) enabled = false; if( !downsampleMaterial.shader.isSupported ) enabled = false; } } // Performs one blur iteration. public void FourTapCone (RenderTexture source, RenderTexture dest, int iteration) { float off = 0.5f + iteration*blurSpread; Graphics.BlitMultiTap (source, dest, blurMaterial, new Vector2( off, off), new Vector2(-off, off), new Vector2( off,-off), new Vector2(-off,-off) ); } // Downsamples the texture to a quarter resolution. private void DownSample4x (RenderTexture source, RenderTexture dest) { downsampleMaterial.color = new Color( glowTint.r, glowTint.g, glowTint.b, glowTint.a/4.0f ); Graphics.Blit (source, dest, downsampleMaterial); } // Called by the camera to apply the image effect void OnRenderImage (RenderTexture source, RenderTexture destination) { // Clamp parameters to sane values glowIntensity = Mathf.Clamp( glowIntensity, 0.0f, 10.0f ); blurIterations = Mathf.Clamp( blurIterations, 0, 30 ); blurSpread = Mathf.Clamp( blurSpread, 0.5f, 1.0f ); RenderTexture buffer = RenderTexture.GetTemporary(source.width/4, source.height/4, 0); RenderTexture buffer2 = RenderTexture.GetTemporary(source.width/4, source.height/4, 0); // Copy source to the 4x4 smaller texture. DownSample4x (source, buffer); // Blur the small texture float extraBlurBoost = Mathf.Clamp01( (glowIntensity - 1.0f) / 4.0f ); blurMaterial.color = new Color( 1F, 1F, 1F, 0.25f + extraBlurBoost ); bool oddEven = true; for(int i = 0; i < blurIterations; i++) { if( oddEven ) FourTapCone (buffer, buffer2, i); else FourTapCone (buffer2, buffer, i); oddEven = !oddEven; } Graphics.Blit(source,destination); if( oddEven ) BlitGlow(buffer, destination); else BlitGlow(buffer2, destination); RenderTexture.ReleaseTemporary(buffer); RenderTexture.ReleaseTemporary(buffer2); } public void BlitGlow( RenderTexture source, RenderTexture dest ) { compositeMaterial.color = new Color(1F, 1F, 1F, Mathf.Clamp01(glowIntensity)); Graphics.Blit (source, dest, compositeMaterial); } } \ No newline at end of file +using UnityEngine; + +// Glow uses the alpha channel as a source of "extra brightness". +// All builtin Unity shaders output baseTexture.alpha * color.alpha, plus +// specularHighlight * specColor.alpha into that. +// Usually you'd want either to make base textures to have zero alpha; or +// set the color to have zero alpha (by default alpha is 0.5). + +[ExecuteInEditMode] +[RequireComponent (typeof(Camera))] +[AddComponentMenu("Image Effects/Glow")] +public class GlowEffect : MonoBehaviour +{ + /// The brightness of the glow. Values larger than one give extra "boost". + public float glowIntensity = 1.5f; + + /// Blur iterations - larger number means more blur. + public int blurIterations = 3; + + /// Blur spread for each iteration. Lower values + /// give better looking blur, but require more iterations to + /// get large blurs. Value is usually between 0.5 and 1.0. + public float blurSpread = 0.7f; + + /// Tint glow with this color. Alpha adds additional glow everywhere. + public Color glowTint = new Color(1,1,1,0); + + + // -------------------------------------------------------- + // The final composition shader: + // adds (glow color * glow alpha * amount) to the original image. + // In the combiner glow amount can be only in 0..1 range; we apply extra + // amount during the blurring phase. + + public Shader compositeShader; + Material m_CompositeMaterial = null; + protected Material compositeMaterial { + get { + if (m_CompositeMaterial == null) { + m_CompositeMaterial = new Material(compositeShader); + m_CompositeMaterial.hideFlags = HideFlags.HideAndDontSave; + } + return m_CompositeMaterial; + } + } + + + // -------------------------------------------------------- + // The blur iteration shader. + // Basically it just takes 4 texture samples and averages them. + // By applying it repeatedly and spreading out sample locations + // we get a Gaussian blur approximation. + // The alpha value in _Color would normally be 0.25 (to average 4 samples), + // however if we have glow amount larger than 1 then we increase this. + + public Shader blurShader; + Material m_BlurMaterial = null; + protected Material blurMaterial { + get { + if (m_BlurMaterial == null) { + m_BlurMaterial = new Material(blurShader); + m_BlurMaterial.hideFlags = HideFlags.HideAndDontSave; + } + return m_BlurMaterial; + } + } + + + // -------------------------------------------------------- + // The image downsample shaders for each brightness mode. + // It is in external assets as it's quite complex and uses Cg. + public Shader downsampleShader; + Material m_DownsampleMaterial = null; + protected Material downsampleMaterial { + get { + if (m_DownsampleMaterial == null) { + m_DownsampleMaterial = new Material( downsampleShader ); + m_DownsampleMaterial.hideFlags = HideFlags.HideAndDontSave; + } + return m_DownsampleMaterial; + } + } + + + // -------------------------------------------------------- + // finally, the actual code + + protected void OnDisable() + { + if( m_CompositeMaterial ) { + DestroyImmediate( m_CompositeMaterial ); + } + if( m_BlurMaterial ) { + DestroyImmediate( m_BlurMaterial ); + } + if( m_DownsampleMaterial ) + DestroyImmediate( m_DownsampleMaterial ); + } + + protected void Start() + { + // Disable if we don't support image effects + if (!SystemInfo.supportsImageEffects) + { + enabled = false; + return; + } + + // Disable the effect if no downsample shader is setup + if( downsampleShader == null ) + { + Debug.Log ("No downsample shader assigned! Disabling glow."); + enabled = false; + } + // Disable if any of the shaders can't run on the users graphics card + else + { + if( !blurMaterial.shader.isSupported ) + enabled = false; + if( !compositeMaterial.shader.isSupported ) + enabled = false; + if( !downsampleMaterial.shader.isSupported ) + enabled = false; + } + } + + // Performs one blur iteration. + public void FourTapCone (RenderTexture source, RenderTexture dest, int iteration) + { + float off = 0.5f + iteration*blurSpread; + Graphics.BlitMultiTap (source, dest, blurMaterial, + new Vector2( off, off), + new Vector2(-off, off), + new Vector2( off,-off), + new Vector2(-off,-off) + ); + } + + // Downsamples the texture to a quarter resolution. + private void DownSample4x (RenderTexture source, RenderTexture dest) + { + downsampleMaterial.color = new Color( glowTint.r, glowTint.g, glowTint.b, glowTint.a/4.0f ); + Graphics.Blit (source, dest, downsampleMaterial); + } + + // Called by the camera to apply the image effect + void OnRenderImage (RenderTexture source, RenderTexture destination) + { + // Clamp parameters to sane values + glowIntensity = Mathf.Clamp( glowIntensity, 0.0f, 10.0f ); + blurIterations = Mathf.Clamp( blurIterations, 0, 30 ); + blurSpread = Mathf.Clamp( blurSpread, 0.5f, 1.0f ); + + RenderTexture buffer = RenderTexture.GetTemporary(source.width/4, source.height/4, 0); + RenderTexture buffer2 = RenderTexture.GetTemporary(source.width/4, source.height/4, 0); + + // Copy source to the 4x4 smaller texture. + DownSample4x (source, buffer); + + // Blur the small texture + float extraBlurBoost = Mathf.Clamp01( (glowIntensity - 1.0f) / 4.0f ); + blurMaterial.color = new Color( 1F, 1F, 1F, 0.25f + extraBlurBoost ); + + bool oddEven = true; + for(int i = 0; i < blurIterations; i++) + { + if( oddEven ) + FourTapCone (buffer, buffer2, i); + else + FourTapCone (buffer2, buffer, i); + oddEven = !oddEven; + } + Graphics.Blit(source,destination); + + if( oddEven ) + BlitGlow(buffer, destination); + else + BlitGlow(buffer2, destination); + + RenderTexture.ReleaseTemporary(buffer); + RenderTexture.ReleaseTemporary(buffer2); + } + + public void BlitGlow( RenderTexture source, RenderTexture dest ) + { + compositeMaterial.color = new Color(1F, 1F, 1F, Mathf.Clamp01(glowIntensity)); + Graphics.Blit (source, dest, compositeMaterial); + } +} diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs.meta index 023860b8..ccf425c7 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/GlowEffect.cs.meta @@ -3,8 +3,9 @@ guid: 0d1352984e3c6465088f6cc7c4ce6e22 MonoImporter: serializedVersion: 2 defaultReferences: - - compositeShader: {fileID: 4800000, guid: 96ca71e39c7b6fb4f9bec2c5bf331349, type: 1} - - blurShader: {fileID: 4800000, guid: fb52973118cf00648825ced2fcca240c, type: 1} - - downsampleShader: {fileID: 4800000, guid: b14b79b8936134d3f8238f0c2d40d634, type: 1} + - compositeShader: {fileID: 4800000, guid: 96ca71e39c7b6fb4f9bec2c5bf331349, type: 3} + - blurShader: {fileID: 4800000, guid: fb52973118cf00648825ced2fcca240c, type: 3} + - downsampleShader: {fileID: 4800000, guid: b14b79b8936134d3f8238f0c2d40d634, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/GrayscaleEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/GrayscaleEffect.cs.meta index 238d985c..b23db623 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/GrayscaleEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/GrayscaleEffect.cs.meta @@ -3,6 +3,7 @@ guid: 243a781cad112c75d0008dfa8d76c639 MonoImporter: serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: daf9781cad112c75d0008dfa8d76c639, type: 1} + - shader: {fileID: 4800000, guid: daf9781cad112c75d0008dfa8d76c639, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffectBase.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffectBase.cs.meta index 30a36e3b..f3c00250 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffectBase.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffectBase.cs.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffects.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffects.cs.meta index a9eb0958..9d82a111 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffects.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/ImageEffects.cs.meta @@ -3,14 +3,15 @@ guid: 89a037199d11087f1100e2b844295342 MonoImporter: serializedVersion: 2 defaultReferences: - - blitCopyShader: {fileID: 4800000, guid: 3338b5ea2f3cb594698fae65cf060346, type: 1} + - blitCopyShader: {fileID: 4800000, guid: 3338b5ea2f3cb594698fae65cf060346, type: 3} - blitMultiplyShader: {fileID: 4800000, guid: 7034c801b78acab448cdcf845f7c352d, - type: 1} + type: 3} - blitMultiply2XShader: {fileID: 4800000, guid: cde82987e0a884c4788c65f7b54390e8, - type: 1} - - blitAddShader: {fileID: 4800000, guid: c7515f214a63bdb42b6ae6335a00a8a4, type: 1} + type: 3} + - blitAddShader: {fileID: 4800000, guid: c7515f214a63bdb42b6ae6335a00a8a4, type: 3} - blitAddSmoothShader: {fileID: 4800000, guid: 7741a77a7c455d0418bc429bd508dc87, - type: 1} - - blitBlendShader: {fileID: 4800000, guid: f1cf7e9c98754c4429ff0f7cc1d9dd7b, type: 1} + type: 3} + - blitBlendShader: {fileID: 4800000, guid: f1cf7e9c98754c4429ff0f7cc1d9dd7b, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/MotionBlur.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/MotionBlur.cs.meta index 4d89e969..5fe9ed8a 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/MotionBlur.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/MotionBlur.cs.meta @@ -3,6 +3,7 @@ guid: 478a2083ad114a07d000fbfb8d76c639 MonoImporter: serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: e9ba2083ad114a07d000fbfb8d76c639, type: 1} + - shader: {fileID: 4800000, guid: e9ba2083ad114a07d000fbfb8d76c639, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js b/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js index 94313e78..0c967eb4 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js +++ b/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js @@ -3,62 +3,117 @@ @script ExecuteInEditMode @script RequireComponent (Camera) -@script AddComponentMenu ("Image Effects/Noise And Grain (Overlay)") +@script AddComponentMenu ("Image Effects/Noise And Grain (Overlay, DX11)") class NoiseAndGrain extends PostEffectsBase { - public var strength : float = 1.0f; + public var intensityMultiplier : float = 0.25f; + + public var generalIntensity : float = 0.5f; public var blackIntensity : float = 1.0f; public var whiteIntensity : float = 1.0f; - - public var redChannelNoise : float = 0.975f; - public var greenChannelNoise : float = 0.875f; - public var blueChannelNoise : float = 1.2f; - - public var redChannelTiling : float = 24.0f; - public var greenChannelTiling : float = 28.0f; - public var blueChannelTiling : float = 34.0f; + public var midGrey : float = 0.2f; + + public var dx11Grain : boolean = false; + public var softness : float = 0.0f; + public var monochrome : boolean = false; + + public var intensities : Vector3 = Vector3(1.0f, 1.0f, 1.0f); + public var tiling : Vector3 = Vector3(64.0f, 64.0f, 64.0f); + public var monochromeTiling : float = 64.0f; public var filterMode : FilterMode = FilterMode.Bilinear; - public var noiseShader : Shader; public var noiseTexture : Texture2D; - + + public var noiseShader : Shader; private var noiseMaterial : Material = null; + + public var dx11NoiseShader : Shader; + private var dx11NoiseMaterial : Material = null; + + private static var TILE_AMOUNT : float = 64.0f; function CheckResources () : boolean { CheckSupport (false); noiseMaterial = CheckShaderAndCreateMaterial (noiseShader, noiseMaterial); + + if(dx11Grain && supportDX11) { + #if UNITY_EDITOR + dx11NoiseShader = Shader.Find("Hidden/NoiseAndGrainDX11"); + #endif + dx11NoiseMaterial = CheckShaderAndCreateMaterial (dx11NoiseShader, dx11NoiseMaterial); + } if(!isSupported) ReportAutoDisable (); return isSupported; } - + function OnRenderImage (source : RenderTexture, destination : RenderTexture) { - if(CheckResources()==false) { + if(CheckResources()==false || (null==noiseTexture)) { Graphics.Blit (source, destination); + if(null==noiseTexture){ + Debug.LogWarning("Noise & Grain effect failing as noise texture is not assigned. please assign.", transform); + } return; } - - noiseMaterial.SetVector ("_NoisePerChannel", Vector3(redChannelNoise, greenChannelNoise, blueChannelNoise)); - noiseMaterial.SetVector ("_NoiseTilingPerChannel", Vector3(redChannelTiling, greenChannelTiling, blueChannelTiling)); - noiseMaterial.SetVector ("_NoiseAmount", Vector3(strength, blackIntensity, whiteIntensity)); - noiseMaterial.SetTexture ("_NoiseTex", noiseTexture); - noiseTexture.filterMode = filterMode; - DrawNoiseQuadGrid (source, destination, noiseMaterial, noiseTexture, 0); + softness = Mathf.Clamp(softness, 0.0f, 0.99f); + + if(dx11Grain && supportDX11) { + // We have a fancy, procedural noise pattern in this version, so no texture needed + + dx11NoiseMaterial.SetFloat("_DX11NoiseTime", Time.frameCount); + dx11NoiseMaterial.SetTexture ("_NoiseTex", noiseTexture); + dx11NoiseMaterial.SetVector ("_NoisePerChannel", monochrome ? Vector3.one : intensities); + dx11NoiseMaterial.SetVector ("_MidGrey", Vector3(midGrey, 1.0f/(1.0-midGrey), -1.0f/midGrey)); + dx11NoiseMaterial.SetVector ("_NoiseAmount", Vector3(generalIntensity, blackIntensity, whiteIntensity) * intensityMultiplier); + + if(softness > Mathf.Epsilon) + { + var rt : RenderTexture = RenderTexture.GetTemporary(source.width * (1.0f-softness), source.height * (1.0f-softness)); + DrawNoiseQuadGrid (source, rt, dx11NoiseMaterial, noiseTexture, monochrome ? 3 : 2); + dx11NoiseMaterial.SetTexture("_NoiseTex", rt); + Graphics.Blit(source, destination, dx11NoiseMaterial, 4); + RenderTexture.ReleaseTemporary(rt); + } + else + DrawNoiseQuadGrid (source, destination, dx11NoiseMaterial, noiseTexture, (monochrome ? 1 : 0)); + } + else { + // normal noise (DX9 style) + + if (noiseTexture) { + noiseTexture.wrapMode = TextureWrapMode.Repeat; + noiseTexture.filterMode = filterMode; + } + + noiseMaterial.SetTexture ("_NoiseTex", noiseTexture); + noiseMaterial.SetVector ("_NoisePerChannel", monochrome ? Vector3.one : intensities); + noiseMaterial.SetVector ("_NoiseTilingPerChannel", monochrome ? Vector3.one * monochromeTiling : tiling); + noiseMaterial.SetVector ("_MidGrey", Vector3(midGrey, 1.0f/(1.0-midGrey), -1.0f/midGrey)); + noiseMaterial.SetVector ("_NoiseAmount", Vector3(generalIntensity, blackIntensity, whiteIntensity) * intensityMultiplier); + + if(softness > Mathf.Epsilon) + { + var rt2 : RenderTexture = RenderTexture.GetTemporary(source.width * (1.0f-softness), source.height * (1.0f-softness)); + DrawNoiseQuadGrid (source, rt2, noiseMaterial, noiseTexture, 2); + noiseMaterial.SetTexture("_NoiseTex", rt2); + Graphics.Blit(source, destination, noiseMaterial, 1); + RenderTexture.ReleaseTemporary(rt2); + } + else + DrawNoiseQuadGrid (source, destination, noiseMaterial, noiseTexture, 0); + } } static function DrawNoiseQuadGrid (source : RenderTexture, dest : RenderTexture, fxMaterial : Material, noise : Texture2D, passNr : int) { RenderTexture.active = dest; var noiseSize : float = (noise.width * 1.0f); - - var tileSize : float = noiseSize; - - var subDs : float = (1.0f * source.width) / tileSize; + var subDs : float = (1.0f * source.width) / TILE_AMOUNT; fxMaterial.SetTexture ("_MainTex", source); @@ -68,7 +123,7 @@ class NoiseAndGrain extends PostEffectsBase { var aspectCorrection : float = (1.0f * source.width) / (1.0f * source.height); var stepSizeX : float = 1.0f / subDs; var stepSizeY : float = stepSizeX * aspectCorrection; - var texTile : float = tileSize / (noise.width * 1.0f); + var texTile : float = noiseSize / (noise.width * 1.0f); fxMaterial.SetPass (passNr); @@ -79,24 +134,30 @@ class NoiseAndGrain extends PostEffectsBase { var tcXStart : float = Random.Range (0.0f, 1.0f); var tcYStart : float = Random.Range (0.0f, 1.0f); - + + //var v3 : Vector3 = Random.insideUnitSphere; + //var c : Color = new Color(v3.x, v3.y, v3.z); + tcXStart = Mathf.Floor(tcXStart*noiseSize) / noiseSize; tcYStart = Mathf.Floor(tcYStart*noiseSize) / noiseSize; - //var texTileMod : float = Mathf.Sign (Random.Range (-1.0f, 1.0f)); var texTileMod : float = 1.0f / noiseSize; GL.MultiTexCoord2 (0, tcXStart, tcYStart); - GL.MultiTexCoord2 (1, 0.0f, 0.0f); + GL.MultiTexCoord2 (1, 0.0f, 0.0f); + //GL.Color( c ); GL.Vertex3 (x1, y1, 0.1); GL.MultiTexCoord2 (0, tcXStart + texTile * texTileMod, tcYStart); GL.MultiTexCoord2 (1, 1.0f, 0.0f); + //GL.Color( c ); GL.Vertex3 (x1 + stepSizeX, y1, 0.1); GL.MultiTexCoord2 (0, tcXStart + texTile * texTileMod, tcYStart + texTile * texTileMod); GL.MultiTexCoord2 (1, 1.0f, 1.0f); + //GL.Color( c ); GL.Vertex3 (x1 + stepSizeX, y1 + stepSizeY, 0.1); GL.MultiTexCoord2 (0, tcXStart, tcYStart + texTile * texTileMod); GL.MultiTexCoord2 (1, 0.0f, 1.0f); + //GL.Color( c ); GL.Vertex3 (x1, y1 + stepSizeY, 0.1); } } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js.meta index ba6abc2f..0d49f3ad 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/NoiseAndGrain.js.meta @@ -3,7 +3,9 @@ guid: 0da8daaf1d21e474bafa968f8f6c9f1e MonoImporter: serializedVersion: 2 defaultReferences: - - noiseShader: {fileID: 4800000, guid: b0249d8c935344451aa4de6db76f0688, type: 1} - - noiseTexture: {fileID: 2800000, guid: 7a632f967e8ad42f5bd275898151ab6a, type: 1} + - noiseTexture: {fileID: 2800000, guid: 7a632f967e8ad42f5bd275898151ab6a, type: 3} + - noiseShader: {fileID: 4800000, guid: b0249d8c935344451aa4de6db76f0688, type: 3} + - dx11NoiseShader: {fileID: 4800000, guid: 8b30686bb4322ab42ad5eb50a0210b58, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/NoiseEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/NoiseEffect.cs.meta index 4f638d79..6d5b8214 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/NoiseEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/NoiseEffect.cs.meta @@ -3,9 +3,10 @@ guid: a88a26a276b4e47619ce2c5adad33fab MonoImporter: serializedVersion: 2 defaultReferences: - - grainTexture: {fileID: 2800000, guid: ffa9c02760c2b4e8eb9814ec06c4b05b, type: 1} - - scratchTexture: {fileID: 2800000, guid: 6205c27cc031f4e66b8ea90d1bfaa158, type: 1} - - shaderRGB: {fileID: 4800000, guid: 5d7f4c401ae8946bcb0d6ff68a9e7466, type: 1} - - shaderYUV: {fileID: 4800000, guid: 0e447868506ba49f0a73235b8a8b647a, type: 1} + - grainTexture: {fileID: 2800000, guid: ffa9c02760c2b4e8eb9814ec06c4b05b, type: 3} + - scratchTexture: {fileID: 2800000, guid: 6205c27cc031f4e66b8ea90d1bfaa158, type: 3} + - shaderRGB: {fileID: 4800000, guid: 5d7f4c401ae8946bcb0d6ff68a9e7466, type: 3} + - shaderYUV: {fileID: 4800000, guid: 0e447868506ba49f0a73235b8a8b647a, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js b/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js index 92eb4b65..3a915fa0 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js +++ b/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js @@ -6,6 +6,7 @@ class PostEffectsBase extends MonoBehaviour { protected var supportHDRTextures : boolean = true; + protected var supportDX11 : boolean = false; protected var isSupported : boolean = true; function CheckShaderAndCreateMaterial (s : Shader, m2Create : Material) : Material { @@ -20,7 +21,7 @@ class PostEffectsBase extends MonoBehaviour { if (!s.isSupported) { NotSupported (); - Debug.LogError("The shader " + s.ToString() + " on effect "+this.ToString()+" is not supported on this platform!"); + Debug.Log("The shader " + s.ToString() + " on effect "+this.ToString()+" is not supported on this platform!"); return null; } else { @@ -57,7 +58,6 @@ class PostEffectsBase extends MonoBehaviour { isSupported = true; } - // deprecated but needed for old effects to survive upgrade function CheckSupport () : boolean { return CheckSupport (false); } @@ -74,6 +74,7 @@ class PostEffectsBase extends MonoBehaviour { function CheckSupport (needDepth : boolean) : boolean { isSupported = true; supportHDRTextures = SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.ARGBHalf); + supportDX11 = SystemInfo.graphicsShaderLevel >= 50 && SystemInfo.supportsComputeShaders; if (!SystemInfo.supportsImageEffects || !SystemInfo.supportsRenderTextures) { NotSupported (); @@ -103,6 +104,10 @@ class PostEffectsBase extends MonoBehaviour { return true; } + function Dx11Support() : boolean { + return supportDX11; + } + function ReportAutoDisable () { Debug.LogWarning ("The image effect " + this.ToString() + " has been disabled as it's not supported on the current platform."); } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js.meta index 0cdb7fb0..885d0a56 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsBase.js.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsHelper.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsHelper.js.meta index c30cd9e8..08d40598 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsHelper.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/PostEffectsHelper.js.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Quads.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/Quads.js.meta index 8f18fbc9..743c4eae 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Quads.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Quads.js.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/SSAOEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/SSAOEffect.cs.meta index 2f1ffb6d..8fda23ba 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/SSAOEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/SSAOEffect.cs.meta @@ -3,7 +3,8 @@ guid: b0923359e9e352a4b9b11c7b7161ad67 MonoImporter: serializedVersion: 2 defaultReferences: - - m_SSAOShader: {fileID: 4800000, guid: 43ca18288c424f645aaa1e9e07f04c50, type: 1} - - m_RandomTexture: {fileID: 2800000, guid: a181ca8e3c62f3e4b8f183f6c586b032, type: 1} + - m_SSAOShader: {fileID: 4800000, guid: 43ca18288c424f645aaa1e9e07f04c50, type: 3} + - m_RandomTexture: {fileID: 2800000, guid: a181ca8e3c62f3e4b8f183f6c586b032, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js b/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js index f86a77ba..0593ed8c 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js +++ b/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js @@ -8,7 +8,7 @@ class ScreenOverlay extends PostEffectsBase { enum OverlayBlendMode { - AddSub = 0, + Additive = 0, ScreenBlend = 1, Multiply = 2, Overlay = 3, diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js.meta index 86439076..deab65c5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/ScreenOverlay.js.meta @@ -4,6 +4,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: - texture: {instanceID: 0} - - overlayShader: {fileID: 4800000, guid: 8c81db0e527d24acc9bcec04e87781bd, type: 1} + - overlayShader: {fileID: 4800000, guid: 8c81db0e527d24acc9bcec04e87781bd, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/SepiaToneEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/SepiaToneEffect.cs.meta index 3b83439f..94ff94c8 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/SepiaToneEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/SepiaToneEffect.cs.meta @@ -3,6 +3,7 @@ guid: a07a781cad112c75d0008dfa8d76c639 MonoImporter: serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: b6aa781cad112c75d0008dfa8d76c639, type: 1} + - shader: {fileID: 4800000, guid: b6aa781cad112c75d0008dfa8d76c639, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/SunShafts.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/SunShafts.js.meta index 2e2b83f0..7b03754e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/SunShafts.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/SunShafts.js.meta @@ -4,9 +4,10 @@ MonoImporter: serializedVersion: 2 defaultReferences: - sunTransform: {instanceID: 0} - - prepareBlurShader: {fileID: 4800000, guid: 9ad381ed8492840ab9f165df743e4826, type: 1} - - radialBlurShader: {fileID: 4800000, guid: f58445347fe2e4b8396487ed2bfa02ad, type: 1} - - sunShaftsShader: {fileID: 4800000, guid: d3b1c8c1036784176946f5cfbfb7fe4c, type: 1} - - simpleClearShader: {fileID: 4800000, guid: f688f89ed5eb847c5b19c934a0f1e772, type: 1} + - prepareBlurShader: {fileID: 4800000, guid: 9ad381ed8492840ab9f165df743e4826, type: 3} + - radialBlurShader: {fileID: 4800000, guid: f58445347fe2e4b8396487ed2bfa02ad, type: 3} + - sunShaftsShader: {fileID: 4800000, guid: d3b1c8c1036784176946f5cfbfb7fe4c, type: 3} + - simpleClearShader: {fileID: 4800000, guid: f688f89ed5eb847c5b19c934a0f1e772, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/TiltShift.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/TiltShift.js.meta index 834eaefb..e33c9c8d 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/TiltShift.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/TiltShift.js.meta @@ -3,6 +3,7 @@ guid: dc9131fb93ac942ea92b55a17cc9bd82 MonoImporter: serializedVersion: 2 defaultReferences: - - tiltShiftShader: {fileID: 4800000, guid: 926e6b8704ae248539bd7d7d6bdb7f16, type: 1} + - tiltShiftShader: {fileID: 4800000, guid: 926e6b8704ae248539bd7d7d6bdb7f16, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js b/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js index 6c4ffb9d..5430e859 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js @@ -8,13 +8,13 @@ class Tonemapping extends PostEffectsBase { public enum TonemapperType { - SimpleReinhard = 0x0, - UserCurve = 0x1, - Hable = 0x2, - Photographic = 0x3, - OptimizedHejiDawson = 0x4, - AdaptiveReinhard = 0x5, - AdaptiveReinhardAutoWhite = 0x6, + SimpleReinhard, + UserCurve, + Hable, + Photographic, + OptimizedHejiDawson, + AdaptiveReinhard, + AdaptiveReinhardAutoWhite, }; public enum AdaptiveTexSize { @@ -27,7 +27,7 @@ class Tonemapping extends PostEffectsBase { Square1024 = 1024, }; - public var type : TonemapperType = TonemapperType.SimpleReinhard; + public var type : TonemapperType = TonemapperType.Photographic; public var adaptiveTextureSize = AdaptiveTexSize.Square256; // CURVE parameter @@ -47,6 +47,7 @@ class Tonemapping extends PostEffectsBase { public var validRenderTextureFormat : boolean = true; private var tonemapMaterial : Material = null; private var rt : RenderTexture = null; + private var rtFormat : RenderTextureFormat = RenderTextureFormat.ARGBHalf; function CheckResources () : boolean { CheckSupport (false, true); @@ -66,7 +67,7 @@ class Tonemapping extends PostEffectsBase { public function UpdateCurve () : float { var range : float = 1.0f; - if(!remapCurve) + if(remapCurve.keys.length < 1) remapCurve = new AnimationCurve(Keyframe(0, 0), Keyframe(2, 1)); if (remapCurve) { if(remapCurve.length) @@ -78,32 +79,44 @@ class Tonemapping extends PostEffectsBase { curveTex.Apply (); } return 1.0f / range; - } + } + + function OnDisable () { + if (rt) { + DestroyImmediate (rt); + rt = null; + } + if (tonemapMaterial) { + DestroyImmediate (tonemapMaterial); + tonemapMaterial = null; + } + if (curveTex) { + DestroyImmediate (curveTex); + curveTex = null; + } + } function CreateInternalRenderTexture () : boolean { if (rt) { return false; } - rt = new RenderTexture(1,1, 0, RenderTextureFormat.ARGBHalf); - var oldrt : RenderTexture = RenderTexture.active; - RenderTexture.active = rt; - GL.Clear(false, true, Color.white); + rtFormat = SystemInfo.SupportsRenderTextureFormat (RenderTextureFormat.RGHalf) ? RenderTextureFormat.RGHalf : RenderTextureFormat.ARGBHalf; + rt = new RenderTexture(1,1, 0, rtFormat); rt.hideFlags = HideFlags.DontSave; - RenderTexture.active = oldrt; return true; } // a new attribute we introduced in 3.5 indicating that the image filter chain will continue in LDR @ImageEffectTransformsToLDR function OnRenderImage (source : RenderTexture, destination : RenderTexture) { - if(CheckResources()==false) { + if (CheckResources() == false) { Graphics.Blit (source, destination); return; } #if UNITY_EDITOR validRenderTextureFormat = true; - if(source.format != RenderTextureFormat.ARGBHalf) { + if (source.format != RenderTextureFormat.ARGBHalf) { validRenderTextureFormat = false; } #endif @@ -114,7 +127,7 @@ class Tonemapping extends PostEffectsBase { // SimpleReinhard tonemappers (local, non adaptive) - if(type == TonemapperType.UserCurve) { + if (type == TonemapperType.UserCurve) { var rangeScale : float = UpdateCurve (); tonemapMaterial.SetFloat("_RangeScale", rangeScale); tonemapMaterial.SetTexture("_Curve", curveTex); @@ -122,47 +135,48 @@ class Tonemapping extends PostEffectsBase { return; } - if(type == TonemapperType.SimpleReinhard) { + if (type == TonemapperType.SimpleReinhard) { tonemapMaterial.SetFloat("_ExposureAdjustment", exposureAdjustment); Graphics.Blit(source, destination, tonemapMaterial, 6); return; } - if(type == TonemapperType.Hable) { + if (type == TonemapperType.Hable) { tonemapMaterial.SetFloat("_ExposureAdjustment", exposureAdjustment); Graphics.Blit(source, destination, tonemapMaterial, 5); return; } - if(type == TonemapperType.Photographic) { + if (type == TonemapperType.Photographic) { tonemapMaterial.SetFloat("_ExposureAdjustment", exposureAdjustment); Graphics.Blit(source, destination, tonemapMaterial, 8); return; } - if(type == TonemapperType.OptimizedHejiDawson) { + if (type == TonemapperType.OptimizedHejiDawson) { tonemapMaterial.SetFloat("_ExposureAdjustment", 0.5f * exposureAdjustment); Graphics.Blit(source, destination, tonemapMaterial, 7); return; } // still here? - // => more complex adaptive tone mapping: + // => adaptive tone mapping: // builds an average log luminance, tonemaps according to // middle grey and white values (user controlled) + // AdaptiveReinhardAutoWhite will calculate white value automagically - var freshlyBrewedInternalRt : boolean = CreateInternalRenderTexture (); + var freshlyBrewedInternalRt : boolean = CreateInternalRenderTexture (); // this retrieves rtFormat, so should happen before rt allocations - var rtSquared : RenderTexture = RenderTexture.GetTemporary(adaptiveTextureSize, adaptiveTextureSize, 0, RenderTextureFormat.ARGBHalf); + var rtSquared : RenderTexture = RenderTexture.GetTemporary(adaptiveTextureSize, adaptiveTextureSize, 0, rtFormat); Graphics.Blit(source, rtSquared); var downsample : int = Mathf.Log(rtSquared.width * 1.0f, 2); var div : int = 2; var rts : RenderTexture[] = new RenderTexture[downsample]; - for(var i : int = 0; i < downsample; i++) { - rts[i] = RenderTexture.GetTemporary(rtSquared.width / div, rtSquared.width / div, 0, RenderTextureFormat.ARGBHalf); + for (var i : int = 0; i < downsample; i++) { + rts[i] = RenderTexture.GetTemporary(rtSquared.width / div, rtSquared.width / div, 0, rtFormat); div *= 2; } @@ -188,36 +202,36 @@ class Tonemapping extends PostEffectsBase { // we have the needed values, let's apply adaptive tonemapping adaptionSpeed = adaptionSpeed < 0.001f ? 0.001f : adaptionSpeed; + tonemapMaterial.SetFloat ("_AdaptionSpeed", adaptionSpeed); + #if UNITY_EDITOR - tonemapMaterial.SetFloat("_AdaptionSpeed", adaptionSpeed); if(Application.isPlaying && !freshlyBrewedInternalRt) - Graphics.Blit(lumRt, rt, tonemapMaterial, 2); - else - Graphics.Blit(lumRt, rt, tonemapMaterial, 3); + Graphics.Blit (lumRt, rt, tonemapMaterial, 2); + else + Graphics.Blit (lumRt, rt, tonemapMaterial, 3); #else - tonemapMaterial.SetFloat("_AdaptionSpeed", adaptionSpeed); - Graphics.Blit(lumRt, rt, tonemapMaterial, 2); + Graphics.Blit (lumRt, rt, tonemapMaterial, freshlyBrewedInternalRt ? 3 : 2); #endif middleGrey = middleGrey < 0.001f ? 0.001f : middleGrey; - tonemapMaterial.SetVector("_HdrParams", Vector4(middleGrey, middleGrey, middleGrey, white*white)); - tonemapMaterial.SetTexture("_SmallTex", rt); + tonemapMaterial.SetVector ("_HdrParams", Vector4 (middleGrey, middleGrey, middleGrey, white*white)); + tonemapMaterial.SetTexture ("_SmallTex", rt); if (type == TonemapperType.AdaptiveReinhard) { Graphics.Blit (source, destination, tonemapMaterial, 0); } - else if(type == TonemapperType.AdaptiveReinhardAutoWhite) { + else if (type == TonemapperType.AdaptiveReinhardAutoWhite) { Graphics.Blit (source, destination, tonemapMaterial, 10); } else { - Debug.LogError("No valid adaptive tonemapper type found!"); + Debug.LogError ("No valid adaptive tonemapper type found!"); Graphics.Blit (source, destination); // at least we get the TransformToLDR effect } // cleanup for adaptive for(i = 0; i < downsample; i++) { - RenderTexture.ReleaseTemporary(rts[i]); + RenderTexture.ReleaseTemporary (rts[i]); } - RenderTexture.ReleaseTemporary(rtSquared); + RenderTexture.ReleaseTemporary (rtSquared); } } \ No newline at end of file diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js.meta index 406af01a..241da11f 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Tonemapping.js.meta @@ -3,6 +3,7 @@ guid: dd05e71c69dd4457fa205c9eea7c2326 MonoImporter: serializedVersion: 2 defaultReferences: - - tonemapper: {fileID: 4800000, guid: 003377fc2620a44939dadde6fe3f8190, type: 1} + - tonemapper: {fileID: 4800000, guid: 003377fc2620a44939dadde6fe3f8190, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Triangles.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/Triangles.js.meta index 8ff5fab6..b92d2a46 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Triangles.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Triangles.js.meta @@ -5,3 +5,4 @@ MonoImporter: defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/TwirlEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/TwirlEffect.cs.meta index 7057f489..4b0b6c84 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/TwirlEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/TwirlEffect.cs.meta @@ -3,6 +3,7 @@ guid: bdda781cad112c75d0008dfa8d76c639 MonoImporter: serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: 641b781cad112c75d0008dfa8d76c639, type: 1} + - shader: {fileID: 4800000, guid: 641b781cad112c75d0008dfa8d76c639, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js b/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js index 33552acf..80ffa92d 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js @@ -5,15 +5,24 @@ @script RequireComponent (Camera) @script AddComponentMenu ("Image Effects/Vignette and Chromatic Aberration") -class Vignetting extends PostEffectsBase { +class Vignetting /* And Chromatic Aberration */ extends PostEffectsBase { + + public enum AberrationMode { + Simple = 0, + Advanced = 1, + } + + public var mode : AberrationMode = AberrationMode.Simple; - public var intensity : float = 0.375f; + public var intensity : float = 0.375f; // intensity == 0 disables pre pass (optimization) public var chromaticAberration : float = 0.2f; - public var blur : float = 0.1f; - public var blurSpread : float = 1.5f; - - // needed shaders & materials - + public var axialAberration : float = 0.5f; + + public var blur : float = 0.0f; // blur == 0 disables blur pass (optimization) + public var blurSpread : float = 0.75f; + + public var luminanceDependency : float = 0.25f; + public var vignetteShader : Shader; private var vignetteMaterial : Material; @@ -30,48 +39,61 @@ class Vignetting extends PostEffectsBase { separableBlurMaterial = CheckShaderAndCreateMaterial (separableBlurShader, separableBlurMaterial); chromAberrationMaterial = CheckShaderAndCreateMaterial (chromAberrationShader, chromAberrationMaterial); - if(!isSupported) + if (!isSupported) ReportAutoDisable (); return isSupported; } function OnRenderImage (source : RenderTexture, destination : RenderTexture) { - if(CheckResources()==false) { + if( CheckResources () == false) { Graphics.Blit (source, destination); return; } + var doPrepass : boolean = (Mathf.Abs(blur)>0.0f || Mathf.Abs(intensity)>0.0f); + var widthOverHeight : float = (1.0f * source.width) / (1.0f * source.height); var oneOverBaseSize : float = 1.0f / 512.0f; - var color : RenderTexture = RenderTexture.GetTemporary (source.width, source.height, 0); - var halfRezColor : RenderTexture = RenderTexture.GetTemporary (source.width / 2.0, source.height / 2.0, 0); - var quarterRezColor : RenderTexture = RenderTexture.GetTemporary (source.width / 4.0, source.height / 4.0, 0); - var secondQuarterRezColor : RenderTexture = RenderTexture.GetTemporary (source.width / 4.0, source.height / 4.0, 0); - - Graphics.Blit (source, halfRezColor, chromAberrationMaterial, 0); - Graphics.Blit (halfRezColor, quarterRezColor); - - for (var it : int = 0; it < 2; it++ ) { - separableBlurMaterial.SetVector ("offsets", Vector4 (0.0, blurSpread * oneOverBaseSize, 0.0, 0.0)); - Graphics.Blit (quarterRezColor, secondQuarterRezColor, separableBlurMaterial); - separableBlurMaterial.SetVector ("offsets", Vector4 (blurSpread * oneOverBaseSize / widthOverHeight, 0.0, 0.0, 0.0)); - Graphics.Blit (secondQuarterRezColor, quarterRezColor, separableBlurMaterial); - } - - vignetteMaterial.SetFloat ("_Intensity", intensity); - vignetteMaterial.SetFloat ("_Blur", blur); - vignetteMaterial.SetTexture ("_VignetteTex", quarterRezColor); - Graphics.Blit (source, color, vignetteMaterial); + var color : RenderTexture = null; + var halfRezColor : RenderTexture = null; + var secondHalfRezColor : RenderTexture = null; + + if (doPrepass) { + color = RenderTexture.GetTemporary (source.width, source.height, 0, source.format); + if (Mathf.Abs (blur)>0.0f) { + halfRezColor = RenderTexture.GetTemporary (source.width / 2.0f, source.height / 2.0f, 0, source.format); + secondHalfRezColor = RenderTexture.GetTemporary (source.width / 2.0f, source.height / 2.0f, 0, source.format); + + Graphics.Blit (source, halfRezColor, chromAberrationMaterial, 0); + + for(var i : int = 0; i < 2; i++) { // maybe make iteration count tweakable + separableBlurMaterial.SetVector ("offsets", Vector4 (0.0f, blurSpread * oneOverBaseSize, 0.0f, 0.0f)); + Graphics.Blit (halfRezColor, secondHalfRezColor, separableBlurMaterial); + separableBlurMaterial.SetVector ("offsets", Vector4 (blurSpread * oneOverBaseSize / widthOverHeight, 0.0f, 0.0f, 0.0f)); + Graphics.Blit (secondHalfRezColor, halfRezColor, separableBlurMaterial); + } + } + + vignetteMaterial.SetFloat ("_Intensity", intensity); // intensity for vignette + vignetteMaterial.SetFloat ("_Blur", blur); // blur intensity + vignetteMaterial.SetTexture ("_VignetteTex", halfRezColor); // blurred texture + + Graphics.Blit (source, color, vignetteMaterial, 0); // prepass blit: darken & blur corners + } + chromAberrationMaterial.SetFloat ("_ChromaticAberration", chromaticAberration); - Graphics.Blit (color, destination, chromAberrationMaterial, 1); + chromAberrationMaterial.SetFloat ("_AxialAberration", axialAberration); + chromAberrationMaterial.SetFloat ("_Luminance", 1.0f/(Mathf.Epsilon + luminanceDependency)); + + if(doPrepass) color.wrapMode = TextureWrapMode.Clamp; + else source.wrapMode = TextureWrapMode.Clamp; + Graphics.Blit (doPrepass ? color : source, destination, chromAberrationMaterial, mode == AberrationMode.Advanced ? 2 : 1); - RenderTexture.ReleaseTemporary (color); - RenderTexture.ReleaseTemporary (halfRezColor); - RenderTexture.ReleaseTemporary (quarterRezColor); - RenderTexture.ReleaseTemporary (secondQuarterRezColor); - + if (color) RenderTexture.ReleaseTemporary (color); + if (halfRezColor) RenderTexture.ReleaseTemporary (halfRezColor); + if (secondHalfRezColor) RenderTexture.ReleaseTemporary (secondHalfRezColor); } } \ No newline at end of file diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js.meta b/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js.meta index 0b2e73ec..d747bc07 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/Vignetting.js.meta @@ -3,10 +3,11 @@ guid: bef3d242a13c447ac90c2d2dc213b1ea MonoImporter: serializedVersion: 2 defaultReferences: - - vignetteShader: {fileID: 4800000, guid: 627943dc7a9a74286b70a4f694a0acd5, type: 1} + - vignetteShader: {fileID: 4800000, guid: 627943dc7a9a74286b70a4f694a0acd5, type: 3} - separableBlurShader: {fileID: 4800000, guid: e97c14fbb5ea04c3a902cc533d7fc5d1, - type: 1} + type: 3} - chromAberrationShader: {fileID: 4800000, guid: 2b4f29398d9484ccfa9fd220449f5eee, - type: 1} + type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/VortexEffect.cs.meta b/Assets/Standard Assets/Image Effects (Pro Only)/VortexEffect.cs.meta index 19a6bc96..f6b80891 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/VortexEffect.cs.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/VortexEffect.cs.meta @@ -3,6 +3,7 @@ guid: a94b781cad112c75d0008dfa8d76c639 MonoImporter: serializedVersion: 2 defaultReferences: - - shader: {fileID: 4800000, guid: 708b781cad112c75d0008dfa8d76c639, type: 1} + - shader: {fileID: 4800000, guid: 708b781cad112c75d0008dfa8d76c639, type: 3} executionOrder: 0 icon: {instanceID: 0} + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources.meta index 0d24d3cf..46ddc9a5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: c60d549d7b8ffdd479e6bedd2605e659 +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders.meta index e20ef32a..87ced2b6 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: b2145489f7c704db8acb14a52bddeee9 +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader index 68327bab..b68913aa 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader @@ -1,7 +1,7 @@ Shader "Hidden/BlendModesOverlay" { Properties { _MainTex ("Screen Blended", 2D) = "" {} - _Overlay ("Color", 2D) = "white" {} + _Overlay ("Color", 2D) = "grey" {} } CGINCLUDE @@ -24,7 +24,7 @@ Shader "Hidden/BlendModesOverlay" { o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv[0] = v.texcoord.xy; - #if SHADER_API_D3D9 || SHADER_API_D3D11 || SHADER_API_XBOX360 + #if UNITY_UV_STARTS_AT_TOP if(_MainTex_TexelSize.y<0.0) o.uv[0].y = 1.0-o.uv[0].y; #endif @@ -45,17 +45,29 @@ Shader "Hidden/BlendModesOverlay" { half4 fragScreen (v2f i) : COLOR { half4 toBlend = (tex2D(_Overlay, i.uv[0]) * _Intensity); - return 1-saturate(1-toBlend)*(1-(tex2D(_MainTex, i.uv[1]))); + return 1-(1-toBlend)*(1-(tex2D(_MainTex, i.uv[1]))); } half4 fragOverlay (v2f i) : COLOR { - half4 m = (tex2D(_Overlay, i.uv[0])) * 255.0; - half4 color = (tex2D(_MainTex, i.uv[1]))* 255.0; + half4 m = (tex2D(_Overlay, i.uv[0]));// * 255.0; + half4 color = (tex2D(_MainTex, i.uv[1]));//* 255.0; // overlay blend mode - color.rgb = (color.rgb/255.0) * (color.rgb + ((2*m.rgb)/( 255.0 )) * (255.0-color.rgb)); - color.rgb /= 255.0; - return color; + //color.rgb = (color.rgb/255.0) * (color.rgb + ((2*m.rgb)/( 255.0 )) * (255.0-color.rgb)); + //color.rgb /= 255.0; + + /* +if (Target > ½) R = 1 - (1-2x(Target-½)) x (1-Blend) +if (Target <= ½) R = (2xTarget) x Blend + */ + + float3 check = step(0.5, color.rgb); + float3 result = 0; + + result = check * (half3(1,1,1) - ( (half3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb))); + result += (1-check) * (2*color.rgb) * m.rgb; + + return half4(lerp(color.rgb, result.rgb, (_Intensity)), color.a); } half4 fragAlphaBlend (v2f i) : COLOR { diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader.meta index 43f347e9..ebf8628a 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlendModesOverlay.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 8c81db0e527d24acc9bcec04e87781bd +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlurEffectConeTaps.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlurEffectConeTaps.shader.meta index def543eb..5d9fd5e4 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlurEffectConeTaps.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/BlurEffectConeTaps.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 57e6deea7c2924e22a5138e2b70bb4dc +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader index b40f1847..8a5690a2 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader @@ -1,4 +1,4 @@ -Shader "Hidden/ChromaticAberrationShader" { +Shader "Hidden/ChromaticAberration" { Properties { _MainTex ("Base", 2D) = "" {} } @@ -15,34 +15,37 @@ Shader "Hidden/ChromaticAberrationShader" { sampler2D _MainTex; float4 _MainTex_TexelSize; - float _ChromaticAberration; - + half _ChromaticAberration; + half _AxialAberration; + half _Luminance; - v2f vert( appdata_img v ) { + v2f vert( appdata_img v ) + { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); - - #if SHADER_API_D3D9 || SHADER_API_D3D11 || SHADER_API_XBOX360 - if (_MainTex_TexelSize.y < 0) - v.texcoord.y = 1.0 - v.texcoord.y ; - #endif - o.uv = v.texcoord.xy; + return o; } - half4 fragSimpleCopy(v2f i) : COLOR { - return tex2D (_MainTex, i.uv.xy); + half4 fragDs(v2f i) : COLOR + { + half4 c = tex2D (_MainTex, i.uv.xy + _MainTex_TexelSize.xy * 0.5); + c += tex2D (_MainTex, i.uv.xy - _MainTex_TexelSize.xy * 0.5); + c += tex2D (_MainTex, i.uv.xy + _MainTex_TexelSize.xy * float2(0.5,-0.5)); + c += tex2D (_MainTex, i.uv.xy - _MainTex_TexelSize.xy * float2(0.5,-0.5)); + return c/4.0; } - half4 frag(v2f i) : COLOR { + half4 frag(v2f i) : COLOR + { half2 coords = i.uv; half2 uv = i.uv; coords = (coords - 0.5) * 2.0; half coordDot = dot (coords,coords); - float2 uvG = uv - _MainTex_TexelSize.xy * _ChromaticAberration * coords * coordDot; + half2 uvG = uv - _MainTex_TexelSize.xy * _ChromaticAberration * coords * coordDot; half4 color = tex2D (_MainTex, uv); #if SHADER_API_D3D9 // Work around Cg's code generation bug for D3D9 pixel shaders :( @@ -54,9 +57,67 @@ Shader "Hidden/ChromaticAberrationShader" { return color; } + // squeezing into SM2.0 with 9 samples: + static const int SmallDiscKernelSamples = 9; + static const half2 SmallDiscKernel[SmallDiscKernelSamples] = + { + half2(-0.926212,-0.40581), + half2(-0.695914,0.457137), + half2(-0.203345,0.820716), + half2(0.96234,-0.194983), + half2(0.473434,-0.480026), + half2(0.519456,0.767022), + half2(0.185461,-0.893124), + half2(0.89642,0.412458), + half2(-0.32194,-0.932615), + }; + + half4 fragComplex(v2f i) : COLOR + { + half2 coords = i.uv; + half2 uv = i.uv; + + // corner heuristic + coords = (coords - 0.5) * 2.0; + half coordDot = dot (coords,coords); + + half4 color = tex2D (_MainTex, uv); + half tangentialStrength = _ChromaticAberration * coordDot * coordDot; + half maxOfs = clamp(max(_AxialAberration, tangentialStrength), -2.5h, 2.5h); + + // we need a blurred sample tap for advanced aberration + + // NOTE: it's relatively important that input is HDR + // and if you do have a proper HDR setup, lerping .rb might yield better results than .g + // (see below) + + half4 blurredTap = color * 0.2h; + for(int l=0; l < SmallDiscKernelSamples; l++) + { + half2 sampleUV = uv + SmallDiscKernel[l].xy * _MainTex_TexelSize.xy * maxOfs; + half3 tap = tex2D(_MainTex, sampleUV).rgb; + blurredTap.rgb += tap; + } + blurredTap.rgb /= (float)SmallDiscKernelSamples + 0.2h; + + // debug: + //return blurredTap; + + half isEdge = saturate(_Luminance * abs(Luminance(blurredTap.rgb)-Luminance(color.rgb))); + + // debug #2: + //return isEdge; + + color.g = lerp(color.g, blurredTap.g, saturate(isEdge)); + + return color; + } + ENDCG Subshader { + + // 0: box downsample Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } @@ -64,10 +125,11 @@ Subshader { CGPROGRAM #pragma vertex vert - #pragma fragment fragSimpleCopy + #pragma fragment fragDs ENDCG } +// 1: simple chrom aberration Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } @@ -79,6 +141,19 @@ Pass { ENDCG } +// 2: simulates more chromatic aberration effects +Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + + #pragma exclude_renderers flash + #pragma vertex vert + #pragma fragment fragComplex + + ENDCG + } } Fallback off diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader.meta index 8a51a7ed..d9b22402 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ChromaticAberrationShader.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 2b4f29398d9484ccfa9fd220449f5eee +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader index ec169f45..b1032560 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader @@ -33,10 +33,10 @@ Shader "Hidden/ColorCorrectionCurves" { uniform float4 _MainTex_TexelSize; sampler2D _RgbTex; - sampler2D _ZCurve; - sampler2D _RgbDepthTex; + + fixed _Saturation; v2f vert( appdata_img v ) { @@ -45,7 +45,7 @@ Shader "Hidden/ColorCorrectionCurves" { o.uv = v.texcoord.xy; o.uv2 = TRANSFORM_TEX(v.texcoord, _CameraDepthTexture); - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv2.y = 1-o.uv2.y; #endif @@ -70,7 +70,11 @@ Shader "Hidden/ColorCorrectionCurves" { half3 depthGreen = tex2D(_RgbDepthTex, half2(color.g, ycoords.y)).rgb * half3(0,1,0); half3 depthBlue = tex2D(_RgbDepthTex, half2(color.b, ycoords.z)).rgb * half3(0,0,1); - return half4( lerp(red+green+blue, depthRed+depthBlue+depthGreen, zval), color.a); + color = half4( lerp(red+green+blue, depthRed+depthBlue+depthGreen, zval), color.a); + + half lum = Luminance(color.rgb); + color.rgb = lerp(half3(lum,lum,lum), color.rgb, _Saturation); + return color; } ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader.meta index 8441cdca..a0a6af48 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurves.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 62bcade1028c24ca1a39760ed84b9487 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader index eafe1bd2..3134586e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader @@ -17,8 +17,8 @@ Shader "Hidden/ColorCorrectionCurvesSimple" { }; sampler2D _MainTex; - sampler2D _RgbTex; + fixed _Saturation; v2f vert( appdata_img v ) { @@ -37,8 +37,10 @@ Shader "Hidden/ColorCorrectionCurvesSimple" { fixed3 blue = tex2D(_RgbTex, half2(color.b, 2.5/4.0)).rgb * fixed3(0,0,1); color = fixed4(red+green+blue, color.a); - - return color; + + fixed lum = Luminance(color.rgb); + color.rgb = lerp(fixed3(lum,lum,lum), color.rgb, _Saturation); + return color; } ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader.meta index 4837e74b..543aed53 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionCurvesSimple.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 438ddd58d82c84d9eb1fdc56111702e1 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionEffect.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionEffect.shader.meta index 3c5589a0..1f45d522 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionEffect.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionEffect.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 67f8781cad112c75d0008dfa8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader index f3cfb5be..c02e9a90 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader @@ -24,11 +24,11 @@ Shader "Hidden/ColorCorrectionSelective" { return o; } - float4 frag(v2f i) : COLOR { - float4 color = tex2D (_MainTex, i.uv); + fixed4 frag(v2f i) : COLOR { + fixed4 color = tex2D (_MainTex, i.uv); - float differenz = 1.0 - saturate (length (color.rgb - selColor.rgb)); - color = lerp (color, targetColor, differenz); + fixed diff = saturate (2.0 * length (color.rgb - selColor.rgb)); + color = lerp (targetColor, color, diff); return color; } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader.meta index db33204a..0d65c6dd 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ColorCorrectionSelective.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: e515e0f94cefc4c0db54b45cba621544 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch.meta index 9f8ff254..67d42428 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: a40c1b84cf7fe418bae97a29041b85a4 +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Adaptation.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Adaptation.shader.meta index 2f8b551d..69ea69f5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Adaptation.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Adaptation.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 257bc83cbeb544540bd0e558aa9b1383 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Apply.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Apply.shader.meta index d433bd9b..4029f205 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Apply.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Apply.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: f4901f25d4e1542589348bbb89563d8e +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Luminance.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Luminance.shader.meta index 13d02725..63583c94 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Luminance.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/Luminance.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: befbb4b9c320b4b18a08ef7afb93b6c9 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/MinMaxReduction.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/MinMaxReduction.shader.meta index f7442305..38345589 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/MinMaxReduction.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Contrast Stretch/MinMaxReduction.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 57b33a14b6d5347c5a85c36f6cb3b280 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader index caea6cb9..651fb94e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader @@ -28,7 +28,7 @@ Shader "Hidden/ContrastComposite" { o.uv[0] = v.texcoord.xy; o.uv[1] = v.texcoord.xy; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv[0].y = 1-o.uv[0].y; #endif diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader.meta index 4dba8a4a..705af05e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ContrastComposite.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 273404942eede4ea1883ca1fb2942507 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ConvertDepth.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ConvertDepth.shader.meta index 350142cf..8b325fac 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ConvertDepth.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ConvertDepth.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 14768d3865b1342e3a861fbe19ba2db2 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/CreaseApply.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/CreaseApply.shader.meta index ede544f7..648c60a5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/CreaseApply.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/CreaseApply.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: b59984d82af624bd3b0c777f038276f2 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader index 09203259..953f23ee 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader @@ -4,7 +4,6 @@ Shader "Hidden/EdgeDetectGeometry" { _MainTex ("Base (RGB)", 2D) = "" {} } - // Shader code pasted into all further CGPROGRAM blocks CGINCLUDE #include "UnityCG.cginc" @@ -14,25 +13,34 @@ Shader "Hidden/EdgeDetectGeometry" { float2 uv[5] : TEXCOORD0; }; + struct v2fd { + float4 pos : POSITION; + float2 uv[2] : TEXCOORD0; + }; + sampler2D _MainTex; - uniform half4 _MainTex_TexelSize; + uniform float4 _MainTex_TexelSize; + sampler2D _CameraDepthNormalsTexture; - - uniform half4 sensitivity; + sampler2D _CameraDepthTexture; + + uniform half4 _Sensitivity; uniform half4 _BgColor; uniform half _BgFade; + uniform half _SampleDistance; + uniform float _Exponent; inline half CheckSame (half2 centerNormal, float centerDepth, half4 sample) { // difference in normals // do not bother decoding normals - there's no need here - half2 diff = abs(centerNormal - sample.xy) * sensitivity.y; - half isSameNormal = (diff.x + diff.y) * sensitivity.y < 0.1; + half2 diff = abs(centerNormal - sample.xy) * _Sensitivity.y; + half isSameNormal = (diff.x + diff.y) * _Sensitivity.y < 0.1; // difference in depth float sampleDepth = DecodeFloatRG (sample.zw); float zdiff = abs(centerDepth-sampleDepth); // scale the required threshold by the distance - half isSameDepth = zdiff * sensitivity.x < 0.09 * centerDepth; + half isSameDepth = zdiff * _Sensitivity.x < 0.09 * centerDepth; // return: // 1 - if normals and depth are similar enough @@ -49,24 +57,18 @@ Shader "Hidden/EdgeDetectGeometry" { float2 uv = v.texcoord.xy; o.uv[0] = uv; - // On D3D when AA is used, the main texture & scene depth texture - // will come out in different vertical orientations. - // So flip sampling of depth texture when that is the case (main texture - // texel size will have negative Y) - - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) uv.y = 1-uv.y; #endif // calc coord for the X pattern - // maybe nicer TODO for the future: rotated triangles + // maybe nicer TODO for the future: 'rotated triangles' - o.uv[0] = uv; - o.uv[1] = uv + _MainTex_TexelSize.xy * half2(1,1); - o.uv[2] = uv + _MainTex_TexelSize.xy * half2(-1,-1); - o.uv[3] = uv + _MainTex_TexelSize.xy * half2(-1,1); - o.uv[4] = uv + _MainTex_TexelSize.xy * half2(1,-1); + o.uv[1] = uv + _MainTex_TexelSize.xy * half2(1,1) * _SampleDistance; + o.uv[2] = uv + _MainTex_TexelSize.xy * half2(-1,-1) * _SampleDistance; + o.uv[3] = uv + _MainTex_TexelSize.xy * half2(-1,1) * _SampleDistance; + o.uv[4] = uv + _MainTex_TexelSize.xy * half2(1,-1) * _SampleDistance; return o; } @@ -79,12 +81,7 @@ Shader "Hidden/EdgeDetectGeometry" { float2 uv = v.texcoord.xy; o.uv[0] = uv; - // On D3D when AA is used, the main texture & scene depth texture - // will come out in different vertical orientations. - // So flip sampling of depth texture when that is the case (main texture - // texel size will have negative Y) - - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) uv.y = 1-uv.y; #endif @@ -93,15 +90,116 @@ Shader "Hidden/EdgeDetectGeometry" { o.uv[4] = uv; // offsets for two additional samples - o.uv[2] = uv + float2(-_MainTex_TexelSize.x, -_MainTex_TexelSize.y); - o.uv[3] = uv + float2(+_MainTex_TexelSize.x, -_MainTex_TexelSize.y); + o.uv[2] = uv + float2(-_MainTex_TexelSize.x, -_MainTex_TexelSize.y) * _SampleDistance; + o.uv[3] = uv + float2(+_MainTex_TexelSize.x, -_MainTex_TexelSize.y) * _SampleDistance; return o; } - half4 fragRobert(v2f i) : COLOR { + v2fd vertD( appdata_img v ) + { + v2fd o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); - //half4 sample0 = tex2D(_CameraDepthNormalsTexture, i.uv[0].xy); + float2 uv = v.texcoord.xy; + o.uv[0] = uv; + + #if UNITY_UV_STARTS_AT_TOP + if (_MainTex_TexelSize.y < 0) + uv.y = 1-uv.y; + #endif + + o.uv[1] = uv; + + return o; + } + + float4 fragDCheap(v2fd i) : COLOR + { + // inspired by borderlands implementation of popular "sobel filter" + + float centerDepth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv[1]))); + float4 depthsDiag; + float4 depthsAxis; + + float2 uvDist = _SampleDistance * _MainTex_TexelSize.xy; + + depthsDiag.x = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist))); // TR + depthsDiag.y = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist*float2(-1,1)))); // TL + depthsDiag.z = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist*float2(-1,1)))); // BR + depthsDiag.w = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist))); // BL + + depthsAxis.x = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist*float2(0,1)))); // T + depthsAxis.y = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist*float2(1,0)))); // L + depthsAxis.z = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist*float2(1,0)))); // R + depthsAxis.w = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist*float2(0,1)))); // B + + depthsDiag -= centerDepth; + depthsAxis /= centerDepth; + + const float4 HorizDiagCoeff = float4(1,1,-1,-1); + const float4 VertDiagCoeff = float4(-1,1,-1,1); + const float4 HorizAxisCoeff = float4(1,0,0,-1); + const float4 VertAxisCoeff = float4(0,1,-1,0); + + float4 SobelH = depthsDiag * HorizDiagCoeff + depthsAxis * HorizAxisCoeff; + float4 SobelV = depthsDiag * VertDiagCoeff + depthsAxis * VertAxisCoeff; + + float SobelX = dot(SobelH, float4(1,1,1,1)); + float SobelY = dot(SobelV, float4(1,1,1,1)); + float Sobel = sqrt(SobelX * SobelX + SobelY * SobelY); + + Sobel = 1.0-pow(saturate(Sobel), _Exponent); + return Sobel * lerp(tex2D(_MainTex, i.uv[0].xy), _BgColor, _BgFade); + } + + // pretty much also just a sobel filter, except for that edges "outside" the silhouette get discarded + // which makes it compatible with other depth based post fx + + float4 fragD(v2fd i) : COLOR + { + // inspired by borderlands implementation of popular "sobel filter" + + float centerDepth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv[1]))); + float4 depthsDiag; + float4 depthsAxis; + + float2 uvDist = _SampleDistance * _MainTex_TexelSize.xy; + + depthsDiag.x = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist))); // TR + depthsDiag.y = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist*float2(-1,1)))); // TL + depthsDiag.z = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist*float2(-1,1)))); // BR + depthsDiag.w = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist))); // BL + + depthsAxis.x = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist*float2(0,1)))); // T + depthsAxis.y = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist*float2(1,0)))); // L + depthsAxis.z = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]+uvDist*float2(1,0)))); // R + depthsAxis.w = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv[1]-uvDist*float2(0,1)))); // B + + // make it work nicely with depth based image effects such as depth of field: + depthsDiag = (depthsDiag > centerDepth.xxxx) ? depthsDiag : centerDepth.xxxx; + depthsAxis = (depthsAxis > centerDepth.xxxx) ? depthsAxis : centerDepth.xxxx; + + depthsDiag -= centerDepth; + depthsAxis /= centerDepth; + + const float4 HorizDiagCoeff = float4(1,1,-1,-1); + const float4 VertDiagCoeff = float4(-1,1,-1,1); + const float4 HorizAxisCoeff = float4(1,0,0,-1); + const float4 VertAxisCoeff = float4(0,1,-1,0); + + float4 SobelH = depthsDiag * HorizDiagCoeff + depthsAxis * HorizAxisCoeff; + float4 SobelV = depthsDiag * VertDiagCoeff + depthsAxis * VertAxisCoeff; + + float SobelX = dot(SobelH, float4(1,1,1,1)); + float SobelY = dot(SobelV, float4(1,1,1,1)); + float Sobel = sqrt(SobelX * SobelX + SobelY * SobelY); + + Sobel = 1.0-pow(saturate(Sobel), _Exponent); + return Sobel * lerp(tex2D(_MainTex, i.uv[0].xy), _BgColor, _BgFade); + } + + half4 fragRobert(v2f i) : COLOR { half4 sample1 = tex2D(_CameraDepthNormalsTexture, i.uv[1].xy); half4 sample2 = tex2D(_CameraDepthNormalsTexture, i.uv[2].xy); half4 sample3 = tex2D(_CameraDepthNormalsTexture, i.uv[3].xy); @@ -112,7 +210,7 @@ Shader "Hidden/EdgeDetectGeometry" { edge *= CheckSame(sample1.xy, DecodeFloatRG(sample1.zw), sample2); edge *= CheckSame(sample3.xy, DecodeFloatRG(sample3.zw), sample4); - return edge * lerp(tex2D(_MainTex, i.uv[0].xy), _BgColor, _BgFade); + return edge * lerp(tex2D(_MainTex, i.uv[0]), _BgColor, _BgFade); } half4 fragThin (v2f i) : COLOR @@ -157,7 +255,26 @@ Subshader { #pragma fragment fragRobert ENDCG } + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + #pragma target 3.0 + #pragma vertex vertD + #pragma fragment fragDCheap + ENDCG + } + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + CGPROGRAM + #pragma target 3.0 + #pragma vertex vertD + #pragma fragment fragD + ENDCG + } } Fallback off diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader.meta index 7e90a8fe..328c9db5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectNormals.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 0d1644bdf064147baa97f235fc5b4903 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectX.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectX.shader.meta index 916750de..39fafb62 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectX.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/EdgeDetectX.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 4116114fad112a07d000fbfb8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/FisheyeShader.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/FisheyeShader.shader.meta index 0edbd0ed..8eb2318b 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/FisheyeShader.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/FisheyeShader.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 874ceab4425f64bccb1d14032f4452b1 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader index 601cb70d..f5dc1322 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader @@ -1,5 +1,3 @@ - - Shader "Hidden/GlobalFog" { Properties { _MainTex ("Base (RGB)", 2D) = "black" {} @@ -26,7 +24,8 @@ CGINCLUDE struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; - float4 interpolatedRay : TEXCOORD1; + float2 uv_depth : TEXCOORD1; + float4 interpolatedRay : TEXCOORD2; }; v2f vert( appdata_img v ) @@ -36,8 +35,9 @@ CGINCLUDE v.vertex.z = 0.1; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord.xy; + o.uv_depth = v.texcoord.xy; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv.y = 1-o.uv.y; #endif @@ -58,7 +58,7 @@ CGINCLUDE half4 fragAbsoluteYAndDistance (v2f i) : COLOR { - float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv))); + float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv_depth))); float4 wsDir = dpth * i.interpolatedRay; float4 wsPos = _CameraWS + wsDir; return lerp(tex2D(_MainTex, i.uv), _FogColor, ComputeFogForYAndDistance(wsDir.xyz,wsPos.xyz)); @@ -66,14 +66,14 @@ CGINCLUDE half4 fragRelativeYAndDistance (v2f i) : COLOR { - float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv))); + float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv_depth))); float4 wsDir = dpth * i.interpolatedRay; return lerp(tex2D(_MainTex, i.uv), _FogColor, ComputeFogForYAndDistance(wsDir.xyz, wsDir.xyz)); } half4 fragAbsoluteY (v2f i) : COLOR { - float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv))); + float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv_depth))); float4 wsPos = (_CameraWS + dpth * i.interpolatedRay); float fogVert = max(0.0, (wsPos.y-_Y.x) * _Y.y); fogVert *= fogVert; @@ -83,7 +83,7 @@ CGINCLUDE half4 fragDistance (v2f i) : COLOR { - float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv))); + float dpth = Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture,i.uv_depth))); float4 camDir = ( /*_CameraWS + */ dpth * i.interpolatedRay); float fogInt = saturate(length( camDir ) * _StartDistance.x - 1.0) * _StartDistance.y; return lerp(_FogColor, tex2D(_MainTex, i.uv), exp(-_GlobalDensity*fogInt)); @@ -101,6 +101,7 @@ SubShader { #pragma vertex vert #pragma fragment fragAbsoluteYAndDistance #pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers flash ENDCG } @@ -114,6 +115,7 @@ SubShader { #pragma vertex vert #pragma fragment fragAbsoluteY #pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers flash ENDCG } @@ -127,6 +129,7 @@ SubShader { #pragma vertex vert #pragma fragment fragDistance #pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers flash ENDCG } @@ -140,6 +143,7 @@ SubShader { #pragma vertex vert #pragma fragment fragRelativeYAndDistance #pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers flash ENDCG } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader.meta index 6b061bb2..bcb93d2c 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlobalFog.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 70d8568987ac0499f952b54c7c13e265 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowCompose.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowCompose.shader.meta index 92d6f2a0..32c08b1a 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowCompose.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowCompose.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 96ca71e39c7b6fb4f9bec2c5bf331349 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowConeTap.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowConeTap.shader.meta index dc69c389..0ef4b688 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowConeTap.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowConeTap.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: fb52973118cf00648825ced2fcca240c +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader index 3a08781d..36ee14d7 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader @@ -43,7 +43,7 @@ Category { ZTest Always Cull Off ZWrite Off Fog { Mode Off } // ----------------------------------------------------------- - // ARB fragment program + // DX9+ level Subshader { Pass { @@ -75,7 +75,7 @@ ENDCG } // ----------------------------------------------------------- - // Radeon 9000 + // DX8 level Subshader { Pass { @@ -83,7 +83,7 @@ ENDCG CGPROGRAM #pragma vertex vert -#pragma exclude_renderers gles xbox360 ps3 +#pragma exclude_renderers shaderonly // use the same vertex program as in FP path ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader.meta index 5270f171..cfd44f0d 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GlowEffectDownsample.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: b14b79b8936134d3f8238f0c2d40d634 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GrayscaleEffect.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GrayscaleEffect.shader.meta index bc1fc7be..5fbca77a 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GrayscaleEffect.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/GrayscaleEffect.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: daf9781cad112c75d0008dfa8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/MotionBlur.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/MotionBlur.shader.meta index 541682f1..281af895 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/MotionBlur.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/MotionBlur.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: e9ba2083ad114a07d000fbfb8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader index 0e256607..b3a96bd8 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader @@ -12,78 +12,107 @@ Shader "Hidden/NoiseAndGrain" { sampler2D _NoiseTex; float4 _NoiseTex_TexelSize; - #if SHADER_API_D3D9 || SHADER_API_XBOX360 || SHADER_API_D3D11 - uniform half4 _MainTex_TexelSize; - #endif + uniform float4 _MainTex_TexelSize; - uniform half3 _NoisePerChannel; - uniform half3 _NoiseTilingPerChannel; - uniform half3 _NoiseAmount; + uniform float3 _NoisePerChannel; + uniform float3 _NoiseTilingPerChannel; + uniform float3 _NoiseAmount; + uniform float3 _ThreshholdRGB; + uniform float3 _MidGrey; - struct v2f { + struct v2f + { float4 pos : SV_POSITION; - half2 uv : TEXCOORD0; - half2 uv2 : TEXCOORD1; - #if SHADER_API_D3D9 || SHADER_API_XBOX360 || SHADER_API_D3D11 - half4 uv_screen : TEXCOORD2; - #else - half2 uv_screen : TEXCOORD2; - #endif + float2 uv_screen : TEXCOORD0; + float4 uvRg : TEXCOORD1; + float2 uvB : TEXCOORD2; }; - struct appdata_img2 { + struct appdata_img2 + { float4 vertex : POSITION; - half2 texcoord : TEXCOORD0; - half2 texcoord1 : TEXCOORD1; + float2 texcoord : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; }; + + inline float3 Overlay(float3 m, float3 color) { + color = saturate(color); + float3 check = step(float3(0.5,0.5,0.5), color.rgb); + float3 result = check * (float3(1,1,1) - ((float3(1,1,1) - 2*(color.rgb-0.5)) * (1-m.rgb))); + result += (1-check) * (2*color.rgb) * m.rgb; + return result; + } v2f vert (appdata_img2 v) { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); - o.uv = v.texcoord.xy; - o.uv2 = v.texcoord1.xy; - #if SHADER_API_D3D9 || SHADER_API_XBOX360 || SHADER_API_D3D11 + #if UNITY_UV_STARTS_AT_TOP o.uv_screen = v.vertex.xyxy; if (_MainTex_TexelSize.y < 0) o.uv_screen.y = 1-o.uv_screen.y; - #else + #else o.uv_screen = v.vertex.xy; - #endif + #endif + // different tiling for 3 channels + o.uvRg = v.texcoord.xyxy + v.texcoord1.xyxy * _NoiseTilingPerChannel.rrgg * _NoiseTex_TexelSize.xyxy; + o.uvB = v.texcoord.xy + v.texcoord1.xy * _NoiseTilingPerChannel.bb * _NoiseTex_TexelSize.xy; + return o; } - half4 frag ( v2f i ) : COLOR + float4 frag ( v2f i ) : COLOR { - half4 color = tex2D (_MainTex, i.uv_screen.xy); + float4 color = (tex2D (_MainTex, i.uv_screen.xy)); - // curves - half2 blackWhiteCurve = half2(saturate(Luminance(color.rgb)), saturate(1.0-saturate(Luminance(color.rgb)))); - blackWhiteCurve *= blackWhiteCurve; - half blackWhiteIntensity = _NoiseAmount.z * (blackWhiteCurve.x) + _NoiseAmount.y * saturate(blackWhiteCurve.y); + // black & white intensities + float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey + blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); + + float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - // overlay noise mask - half3 m = half3(0.0, 0.0, 0.0); + // fetching & scaling noise (COMPILER BUG WORKAROUND) + float3 m = float3(0,0,0); + m += (tex2D(_NoiseTex, i.uvRg.xy) * float4(1,0,0,0)).rgb; + m += (tex2D(_NoiseTex, i.uvRg.zw) * float4(0,1,0,0)).rgb; + m += (tex2D(_NoiseTex, i.uvB.xy) * float4(0,0,1,0)).rgb; + + m = saturate(lerp(float3(0.5,0.5,0.5), m, _NoisePerChannel.rgb * float3(finalIntensity,finalIntensity,finalIntensity) )); + + return float4(Overlay(m, color.rgb), color.a); + } + + float4 fragTmp ( v2f i ) : COLOR + { + float4 color = (tex2D (_MainTex, i.uv_screen.xy)); - m.r = tex2D(_NoiseTex, i.uv.xy + i.uv2.xy*_NoiseTex_TexelSize.xy*_NoiseTilingPerChannel.r).r; - m.g = tex2D(_NoiseTex, i.uv.xy + i.uv2.xy*_NoiseTex_TexelSize.xy*_NoiseTilingPerChannel.g).g; - m.b = tex2D(_NoiseTex, i.uv.xy + i.uv2.xy*_NoiseTex_TexelSize.xy*_NoiseTilingPerChannel.b).b; + // black & white intensities + float2 blackWhiteCurve = Luminance(color.rgb) - _MidGrey.x; // maybe tweak middle grey + blackWhiteCurve.xy = saturate(blackWhiteCurve.xy * _MidGrey.yz); //float2(1.0/0.8, -1.0/0.2)); + + float finalIntensity = _NoiseAmount.x + max(0.0f, dot(_NoiseAmount.zy, blackWhiteCurve.xy)); - m = m * 2 - 1; - m *= _NoisePerChannel.rgb * color.rgb * (_NoiseAmount.x) * blackWhiteIntensity; - m = m * 0.5 + 0.5; - - color.rgb = saturate(color.rgb) * 255.0; - m = saturate(m) * 255.0; + // fetching & scaling noise (COMPILER BUG WORKAROUND) + float3 m = float3(0,0,0); + m += (tex2D(_NoiseTex, i.uvRg.xy) * float4(1,0,0,0)).rgb; + m += (tex2D(_NoiseTex, i.uvRg.zw) * float4(0,1,0,0)).rgb; + m += (tex2D(_NoiseTex, i.uvB.xy) * float4(0,0,1,0)).rgb; + + m = saturate(lerp(float3(0.5,0.5,0.5), m, _NoisePerChannel.rgb * float3(finalIntensity,finalIntensity,finalIntensity))); + + return float4(m.rgb, color.a); + } + + float4 fragOverlayBlend ( v2f i ) : COLOR + { + float4 color = tex2D(_MainTex, i.uv_screen.xy); + float4 m = tex2D(_NoiseTex, i.uv_screen.xy); - // overlay blend mode - color.rgb = (color.rgb/255.0) * (color.rgb + ((2*m)/(255.0)) * (255.0-color.rgb)); - color.rgb /= 255.0; - return color; - } + return float4(Overlay(m, color.rgb), color.a); + } ENDCG @@ -101,6 +130,30 @@ Shader "Hidden/NoiseAndGrain" { ENDCG + } + + Pass { + + CGPROGRAM + + #pragma vertex vert + #pragma fragment fragOverlayBlend + #pragma fragmentoption ARB_precision_hint_fastest + + ENDCG + + } + + Pass { + + CGPROGRAM + + #pragma vertex vert + #pragma fragment fragTmp + #pragma fragmentoption ARB_precision_hint_fastest + + ENDCG + } } FallBack Off diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader.meta index 29805cb5..4f9286ac 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseAndGrain.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: b0249d8c935344451aa4de6db76f0688 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderRGB.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderRGB.shader.meta index 04d7d37c..e11fb851 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderRGB.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderRGB.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 5d7f4c401ae8946bcb0d6ff68a9e7466 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderYUV.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderYUV.shader.meta index 0b190a0b..b817ce99 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderYUV.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/NoiseEffectShaderYUV.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 0e447868506ba49f0a73235b8a8b647a +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/PrepareSunShaftsBlur.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/PrepareSunShaftsBlur.shader.meta index c6d8a612..e32df022 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/PrepareSunShaftsBlur.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/PrepareSunShaftsBlur.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 9ad381ed8492840ab9f165df743e4826 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/RadialBlur.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/RadialBlur.shader.meta index 70502c0a..a8725c4d 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/RadialBlur.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/RadialBlur.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: f58445347fe2e4b8396487ed2bfa02ad +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader index 5dab42d0..39f1c463 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader @@ -1,282 +1,280 @@ -Shader "Hidden/SSAO" { -Properties { - _MainTex ("", 2D) = "" {} - _RandomTexture ("", 2D) = "" {} - _SSAO ("", 2D) = "" {} -} -Subshader { - ZTest Always Cull Off ZWrite Off Fog { Mode Off } - -CGINCLUDE -// Common code used by several SSAO passes below -#include "UnityCG.cginc" -#pragma exclude_renderers gles -struct v2f_ao { - float4 pos : POSITION; - float2 uv : TEXCOORD0; - float2 uvr : TEXCOORD1; -}; - -uniform float2 _NoiseScale; -float4 _CameraDepthNormalsTexture_ST; - -v2f_ao vert_ao (appdata_img v) -{ - v2f_ao o; - o.pos = mul (UNITY_MATRIX_MVP, v.vertex); - o.uv = TRANSFORM_TEX(v.texcoord, _CameraDepthNormalsTexture); - o.uvr = v.texcoord.xy * _NoiseScale; - return o; -} - -sampler2D _CameraDepthNormalsTexture; -sampler2D _RandomTexture; -float4 _Params; // x=radius, y=minz, z=attenuation power, w=SSAO power - -#if defined(SHADER_API_XBOX360)|| defined(SHADER_API_D3D11) - -# define INPUT_SAMPLE_COUNT 8 -# include "frag_ao.cginc" - -# define INPUT_SAMPLE_COUNT 14 -# include "frag_ao.cginc" - -# define INPUT_SAMPLE_COUNT 26 -# include "frag_ao.cginc" - -# define INPUT_SAMPLE_COUNT 34 -# include "frag_ao.cginc" - -#else - -# define INPUT_SAMPLE_COUNT -# include "frag_ao.cginc" - -#endif - -ENDCG - - // ---- SSAO pass, 8 samples - Pass { - -CGPROGRAM -#pragma vertex vert_ao -#pragma fragment frag -#pragma target 3.0 -#pragma fragmentoption ARB_precision_hint_fastest - - -half4 frag (v2f_ao i) : COLOR -{ - #define SAMPLE_COUNT 8 - const float3 RAND_SAMPLES[SAMPLE_COUNT] = { - float3(0.01305719,0.5872321,-0.119337), - float3(0.3230782,0.02207272,-0.4188725), - float3(-0.310725,-0.191367,0.05613686), - float3(-0.4796457,0.09398766,-0.5802653), - float3(0.1399992,-0.3357702,0.5596789), - float3(-0.2484578,0.2555322,0.3489439), - float3(0.1871898,-0.702764,-0.2317479), - float3(0.8849149,0.2842076,0.368524), - }; - return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); -} -ENDCG - - } - -// ---- SSAO pass, 14 samples - Pass { - -CGPROGRAM -#pragma vertex vert_ao -#pragma fragment frag -#pragma target 3.0 -#pragma fragmentoption ARB_precision_hint_fastest - - -half4 frag (v2f_ao i) : COLOR -{ - #define SAMPLE_COUNT 14 - const float3 RAND_SAMPLES[SAMPLE_COUNT] = { - float3(0.4010039,0.8899381,-0.01751772), - float3(0.1617837,0.1338552,-0.3530486), - float3(-0.2305296,-0.1900085,0.5025396), - float3(-0.6256684,0.1241661,0.1163932), - float3(0.3820786,-0.3241398,0.4112825), - float3(-0.08829653,0.1649759,0.1395879), - float3(0.1891677,-0.1283755,-0.09873557), - float3(0.1986142,0.1767239,0.4380491), - float3(-0.3294966,0.02684341,-0.4021836), - float3(-0.01956503,-0.3108062,-0.410663), - float3(-0.3215499,0.6832048,-0.3433446), - float3(0.7026125,0.1648249,0.02250625), - float3(0.03704464,-0.939131,0.1358765), - float3(-0.6984446,-0.6003422,-0.04016943), - }; - return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); -} -ENDCG - - } - -// ---- SSAO pass, 26 samples - Pass { - -CGPROGRAM -#pragma vertex vert_ao -#pragma fragment frag -#pragma target 3.0 -#pragma fragmentoption ARB_precision_hint_fastest - - -half4 frag (v2f_ao i) : COLOR -{ - #define SAMPLE_COUNT 26 - const float3 RAND_SAMPLES[SAMPLE_COUNT] = { - float3(0.2196607,0.9032637,0.2254677), - float3(0.05916681,0.2201506,-0.1430302), - float3(-0.4152246,0.1320857,0.7036734), - float3(-0.3790807,0.1454145,0.100605), - float3(0.3149606,-0.1294581,0.7044517), - float3(-0.1108412,0.2162839,0.1336278), - float3(0.658012,-0.4395972,-0.2919373), - float3(0.5377914,0.3112189,0.426864), - float3(-0.2752537,0.07625949,-0.1273409), - float3(-0.1915639,-0.4973421,-0.3129629), - float3(-0.2634767,0.5277923,-0.1107446), - float3(0.8242752,0.02434147,0.06049098), - float3(0.06262707,-0.2128643,-0.03671562), - float3(-0.1795662,-0.3543862,0.07924347), - float3(0.06039629,0.24629,0.4501176), - float3(-0.7786345,-0.3814852,-0.2391262), - float3(0.2792919,0.2487278,-0.05185341), - float3(0.1841383,0.1696993,-0.8936281), - float3(-0.3479781,0.4725766,-0.719685), - float3(-0.1365018,-0.2513416,0.470937), - float3(0.1280388,-0.563242,0.3419276), - float3(-0.4800232,-0.1899473,0.2398808), - float3(0.6389147,0.1191014,-0.5271206), - float3(0.1932822,-0.3692099,-0.6060588), - float3(-0.3465451,-0.1654651,-0.6746758), - float3(0.2448421,-0.1610962,0.1289366), - }; - return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); -} -ENDCG - - } - -// ---- Blur pass - Pass { -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#pragma target 3.0 -#pragma fragmentoption ARB_precision_hint_fastest -#include "UnityCG.cginc" - -struct v2f { - float4 pos : POSITION; - float2 uv : TEXCOORD0; -}; - -float4 _MainTex_ST; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = mul (UNITY_MATRIX_MVP, v.vertex); - o.uv = TRANSFORM_TEX (v.texcoord, _CameraDepthNormalsTexture); - return o; -} - -sampler2D _SSAO; -float3 _TexelOffsetScale; - -inline half CheckSame (half4 n, half4 nn) -{ - // difference in normals - half2 diff = abs(n.xy - nn.xy); - half sn = (diff.x + diff.y) < 0.1; - // difference in depth - float z = DecodeFloatRG (n.zw); - float zz = DecodeFloatRG (nn.zw); - float zdiff = abs(z-zz) * _ProjectionParams.z; - half sz = zdiff < 0.2; - return sn * sz; -} - - -half4 frag( v2f i ) : COLOR -{ - #define NUM_BLUR_SAMPLES 4 - - float2 o = _TexelOffsetScale.xy; - - half sum = tex2D(_SSAO, i.uv).r * (NUM_BLUR_SAMPLES + 1); - half denom = NUM_BLUR_SAMPLES + 1; - - half4 geom = tex2D (_CameraDepthNormalsTexture, i.uv); - - for (int s = 0; s < NUM_BLUR_SAMPLES; ++s) - { - float2 nuv = i.uv + o * (s+1); - half4 ngeom = tex2D (_CameraDepthNormalsTexture, nuv.xy); - half coef = (NUM_BLUR_SAMPLES - s) * CheckSame (geom, ngeom); - sum += tex2D (_SSAO, nuv.xy).r * coef; - denom += coef; - } - for (int s = 0; s < NUM_BLUR_SAMPLES; ++s) - { - float2 nuv = i.uv - o * (s+1); - half4 ngeom = tex2D (_CameraDepthNormalsTexture, nuv.xy); - half coef = (NUM_BLUR_SAMPLES - s) * CheckSame (geom, ngeom); - sum += tex2D (_SSAO, nuv.xy).r * coef; - denom += coef; - } - return sum / denom; -} -ENDCG - } - - // ---- Composite pass - Pass { -CGPROGRAM -#pragma vertex vert -#pragma fragment frag -#pragma fragmentoption ARB_precision_hint_fastest -#include "UnityCG.cginc" - -struct v2f { - float4 pos : POSITION; - float2 uv[2] : TEXCOORD0; -}; - -v2f vert (appdata_img v) -{ - v2f o; - o.pos = mul (UNITY_MATRIX_MVP, v.vertex); - o.uv[0] = MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord); - o.uv[1] = MultiplyUV (UNITY_MATRIX_TEXTURE1, v.texcoord); - return o; -} - -sampler2D _MainTex; -sampler2D _SSAO; - -half4 frag( v2f i ) : COLOR -{ - half4 c = tex2D (_MainTex, i.uv[0]); - half ao = tex2D (_SSAO, i.uv[1]).r; - ao = pow (ao, _Params.w); - c.rgb *= ao; - return c; -} -ENDCG - } - -} - -Fallback off -} +Shader "Hidden/SSAO" { +Properties { + _MainTex ("", 2D) = "" {} + _RandomTexture ("", 2D) = "" {} + _SSAO ("", 2D) = "" {} +} +Subshader { + ZTest Always Cull Off ZWrite Off Fog { Mode Off } + +CGINCLUDE +// Common code used by several SSAO passes below +#include "UnityCG.cginc" +#pragma exclude_renderers gles +struct v2f_ao { + float4 pos : POSITION; + float2 uv : TEXCOORD0; + float2 uvr : TEXCOORD1; +}; + +uniform float2 _NoiseScale; +float4 _CameraDepthNormalsTexture_ST; + +v2f_ao vert_ao (appdata_img v) +{ + v2f_ao o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.uv = TRANSFORM_TEX(v.texcoord, _CameraDepthNormalsTexture); + o.uvr = v.texcoord.xy * _NoiseScale; + return o; +} + +sampler2D _CameraDepthNormalsTexture; +sampler2D _RandomTexture; +float4 _Params; // x=radius, y=minz, z=attenuation power, w=SSAO power + +#ifdef UNITY_COMPILER_HLSL + +# define INPUT_SAMPLE_COUNT 8 +# include "frag_ao.cginc" + +# define INPUT_SAMPLE_COUNT 14 +# include "frag_ao.cginc" + +# define INPUT_SAMPLE_COUNT 26 +# include "frag_ao.cginc" + +# define INPUT_SAMPLE_COUNT 34 +# include "frag_ao.cginc" + +#else +# define INPUT_SAMPLE_COUNT +# include "frag_ao.cginc" +#endif + +ENDCG + + // ---- SSAO pass, 8 samples + Pass { + +CGPROGRAM +#pragma vertex vert_ao +#pragma fragment frag +#pragma target 3.0 +#pragma fragmentoption ARB_precision_hint_fastest + + +half4 frag (v2f_ao i) : COLOR +{ + #define SAMPLE_COUNT 8 + const float3 RAND_SAMPLES[SAMPLE_COUNT] = { + float3(0.01305719,0.5872321,-0.119337), + float3(0.3230782,0.02207272,-0.4188725), + float3(-0.310725,-0.191367,0.05613686), + float3(-0.4796457,0.09398766,-0.5802653), + float3(0.1399992,-0.3357702,0.5596789), + float3(-0.2484578,0.2555322,0.3489439), + float3(0.1871898,-0.702764,-0.2317479), + float3(0.8849149,0.2842076,0.368524), + }; + return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); +} +ENDCG + + } + +// ---- SSAO pass, 14 samples + Pass { + +CGPROGRAM +#pragma vertex vert_ao +#pragma fragment frag +#pragma target 3.0 +#pragma fragmentoption ARB_precision_hint_fastest + + +half4 frag (v2f_ao i) : COLOR +{ + #define SAMPLE_COUNT 14 + const float3 RAND_SAMPLES[SAMPLE_COUNT] = { + float3(0.4010039,0.8899381,-0.01751772), + float3(0.1617837,0.1338552,-0.3530486), + float3(-0.2305296,-0.1900085,0.5025396), + float3(-0.6256684,0.1241661,0.1163932), + float3(0.3820786,-0.3241398,0.4112825), + float3(-0.08829653,0.1649759,0.1395879), + float3(0.1891677,-0.1283755,-0.09873557), + float3(0.1986142,0.1767239,0.4380491), + float3(-0.3294966,0.02684341,-0.4021836), + float3(-0.01956503,-0.3108062,-0.410663), + float3(-0.3215499,0.6832048,-0.3433446), + float3(0.7026125,0.1648249,0.02250625), + float3(0.03704464,-0.939131,0.1358765), + float3(-0.6984446,-0.6003422,-0.04016943), + }; + return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); +} +ENDCG + + } + +// ---- SSAO pass, 26 samples + Pass { + +CGPROGRAM +#pragma vertex vert_ao +#pragma fragment frag +#pragma target 3.0 +#pragma fragmentoption ARB_precision_hint_fastest + + +half4 frag (v2f_ao i) : COLOR +{ + #define SAMPLE_COUNT 26 + const float3 RAND_SAMPLES[SAMPLE_COUNT] = { + float3(0.2196607,0.9032637,0.2254677), + float3(0.05916681,0.2201506,-0.1430302), + float3(-0.4152246,0.1320857,0.7036734), + float3(-0.3790807,0.1454145,0.100605), + float3(0.3149606,-0.1294581,0.7044517), + float3(-0.1108412,0.2162839,0.1336278), + float3(0.658012,-0.4395972,-0.2919373), + float3(0.5377914,0.3112189,0.426864), + float3(-0.2752537,0.07625949,-0.1273409), + float3(-0.1915639,-0.4973421,-0.3129629), + float3(-0.2634767,0.5277923,-0.1107446), + float3(0.8242752,0.02434147,0.06049098), + float3(0.06262707,-0.2128643,-0.03671562), + float3(-0.1795662,-0.3543862,0.07924347), + float3(0.06039629,0.24629,0.4501176), + float3(-0.7786345,-0.3814852,-0.2391262), + float3(0.2792919,0.2487278,-0.05185341), + float3(0.1841383,0.1696993,-0.8936281), + float3(-0.3479781,0.4725766,-0.719685), + float3(-0.1365018,-0.2513416,0.470937), + float3(0.1280388,-0.563242,0.3419276), + float3(-0.4800232,-0.1899473,0.2398808), + float3(0.6389147,0.1191014,-0.5271206), + float3(0.1932822,-0.3692099,-0.6060588), + float3(-0.3465451,-0.1654651,-0.6746758), + float3(0.2448421,-0.1610962,0.1289366), + }; + return frag_ao (i, SAMPLE_COUNT, RAND_SAMPLES); +} +ENDCG + + } + +// ---- Blur pass + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma target 3.0 +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct v2f { + float4 pos : POSITION; + float2 uv : TEXCOORD0; +}; + +float4 _MainTex_ST; + +v2f vert (appdata_img v) +{ + v2f o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.uv = TRANSFORM_TEX (v.texcoord, _CameraDepthNormalsTexture); + return o; +} + +sampler2D _SSAO; +float3 _TexelOffsetScale; + +inline half CheckSame (half4 n, half4 nn) +{ + // difference in normals + half2 diff = abs(n.xy - nn.xy); + half sn = (diff.x + diff.y) < 0.1; + // difference in depth + float z = DecodeFloatRG (n.zw); + float zz = DecodeFloatRG (nn.zw); + float zdiff = abs(z-zz) * _ProjectionParams.z; + half sz = zdiff < 0.2; + return sn * sz; +} + + +half4 frag( v2f i ) : COLOR +{ + #define NUM_BLUR_SAMPLES 4 + + float2 o = _TexelOffsetScale.xy; + + half sum = tex2D(_SSAO, i.uv).r * (NUM_BLUR_SAMPLES + 1); + half denom = NUM_BLUR_SAMPLES + 1; + + half4 geom = tex2D (_CameraDepthNormalsTexture, i.uv); + + for (int s = 0; s < NUM_BLUR_SAMPLES; ++s) + { + float2 nuv = i.uv + o * (s+1); + half4 ngeom = tex2D (_CameraDepthNormalsTexture, nuv.xy); + half coef = (NUM_BLUR_SAMPLES - s) * CheckSame (geom, ngeom); + sum += tex2D (_SSAO, nuv.xy).r * coef; + denom += coef; + } + for (int s = 0; s < NUM_BLUR_SAMPLES; ++s) + { + float2 nuv = i.uv - o * (s+1); + half4 ngeom = tex2D (_CameraDepthNormalsTexture, nuv.xy); + half coef = (NUM_BLUR_SAMPLES - s) * CheckSame (geom, ngeom); + sum += tex2D (_SSAO, nuv.xy).r * coef; + denom += coef; + } + return sum / denom; +} +ENDCG + } + + // ---- Composite pass + Pass { +CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" + +struct v2f { + float4 pos : POSITION; + float2 uv[2] : TEXCOORD0; +}; + +v2f vert (appdata_img v) +{ + v2f o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.uv[0] = MultiplyUV (UNITY_MATRIX_TEXTURE0, v.texcoord); + o.uv[1] = MultiplyUV (UNITY_MATRIX_TEXTURE1, v.texcoord); + return o; +} + +sampler2D _MainTex; +sampler2D _SSAO; + +half4 frag( v2f i ) : COLOR +{ + half4 c = tex2D (_MainTex, i.uv[0]); + half ao = tex2D (_SSAO, i.uv[1]).r; + ao = pow (ao, _Params.w); + c.rgb *= ao; + return c; +} +ENDCG + } + +} + +Fallback off +} diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader.meta index 4946b946..0e2cdcc1 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SSAOShader.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 43ca18288c424f645aaa1e9e07f04c50 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SepiaToneEffect.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SepiaToneEffect.shader.meta index d40344b0..34528f5e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SepiaToneEffect.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SepiaToneEffect.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: b6aa781cad112c75d0008dfa8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ShowAlphaChannel.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ShowAlphaChannel.shader.meta index cb26c195..37d3f861 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ShowAlphaChannel.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/ShowAlphaChannel.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: da310021e2a4142429d95c537846dc38 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SimpleClear.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SimpleClear.shader.meta index 6a59333c..eba30cb2 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SimpleClear.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SimpleClear.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: f688f89ed5eb847c5b19c934a0f1e772 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader index 416adcae..2042b73c 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader @@ -12,7 +12,7 @@ Shader "Hidden/SunShaftsComposite" { struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP float2 uv1 : TEXCOORD1; #endif }; @@ -43,7 +43,7 @@ Shader "Hidden/SunShaftsComposite" { o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord.xy; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP o.uv1 = v.texcoord.xy; if (_MainTex_TexelSize.y < 0) o.uv1.y = 1-o.uv1.y; @@ -54,7 +54,7 @@ Shader "Hidden/SunShaftsComposite" { half4 fragScreen(v2f i) : COLOR { half4 colorA = tex2D (_MainTex, i.uv.xy); - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half4 colorB = tex2D (_ColorBuffer, i.uv1.xy); #else half4 colorB = tex2D (_ColorBuffer, i.uv.xy); @@ -65,7 +65,7 @@ Shader "Hidden/SunShaftsComposite" { half4 fragAdd(v2f i) : COLOR { half4 colorA = tex2D (_MainTex, i.uv.xy); - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half4 colorB = tex2D (_ColorBuffer, i.uv1.xy); #else half4 colorB = tex2D (_ColorBuffer, i.uv.xy); @@ -101,7 +101,7 @@ Shader "Hidden/SunShaftsComposite" { } half4 frag_depth (v2f i) : COLOR { - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP float depthSample = UNITY_SAMPLE_DEPTH(tex2D (_CameraDepthTexture, i.uv1.xy)); #else float depthSample = UNITY_SAMPLE_DEPTH(tex2D (_CameraDepthTexture, i.uv.xy)); @@ -112,7 +112,7 @@ Shader "Hidden/SunShaftsComposite" { depthSample = Linear01Depth (depthSample); // consider maximum radius - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half2 vec = _SunPosition.xy - i.uv1.xy; #else half2 vec = _SunPosition.xy - i.uv.xy; @@ -129,7 +129,7 @@ Shader "Hidden/SunShaftsComposite" { } half4 frag_nodepth (v2f i) : COLOR { - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP float4 sky = (tex2D (_Skybox, i.uv1.xy)); #else float4 sky = (tex2D (_Skybox, i.uv.xy)); @@ -138,7 +138,7 @@ Shader "Hidden/SunShaftsComposite" { float4 tex = (tex2D (_MainTex, i.uv.xy)); // consider maximum radius - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half2 vec = _SunPosition.xy - i.uv1.xy; #else half2 vec = _SunPosition.xy - i.uv.xy; diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader.meta index 0d5bbb2d..82a06803 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/SunShaftsComposite.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: d3b1c8c1036784176946f5cfbfb7fe4c +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader index 0cd4c6dc..0e5de06f 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader @@ -45,21 +45,7 @@ Shader "Hidden/Tonemapper" { fLogLumSum += log( Luminance(tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * float2(1,-1)).rgb) + DELTA); float avg = fLogLumSum / 4.0; - return float4(avg,avg,avg, avg); - } - - float4 fragExpNoBlend(v2f i) : COLOR - { - float2 lum = float2(0.0f, 0.0f); - - lum += tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * float2(-1,-1)).xy; - lum += tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * float2(1,1)).xy; - lum += tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * float2(1,-1)).xy; - lum += tex2D(_MainTex, i.uv + _MainTex_TexelSize.xy * float2(-1,1)).xy; - - lum = exp(lum / 4.0f); - - return float4(lum.x, lum.y, lum.x, 1.0); + return float4(avg, avg, avg, avg); } float4 fragExp(v2f i) : COLOR @@ -140,7 +126,7 @@ Shader "Hidden/Tonemapper" { float cieLum = max(0.000001, Luminance(color.rgb)); //ToCIE(color.rgb); - float lumScaled = cieLum * _HdrParams.z / (0.001 + avgLum); + float lumScaled = cieLum * _HdrParams.z / (0.001 + avgLum.x); lumScaled = (lumScaled * (1.0f + lumScaled / (_HdrParams.w)))/(1.0f + lumScaled); @@ -263,6 +249,7 @@ Subshader { ENDCG } + // 1 Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } @@ -273,11 +260,11 @@ Subshader { #pragma fragment fragLog ENDCG } + // 2 Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } - - Blend SrcAlpha OneMinusSrcAlpha + Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest @@ -285,15 +272,17 @@ Subshader { #pragma fragment fragExp ENDCG } - + // 3 Pass { ZTest Always Cull Off ZWrite Off - Fog { Mode off } + Fog { Mode off } + + Blend Off CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragExpNoBlend + #pragma fragment fragExp ENDCG } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader.meta index e353ea58..370e2846 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/Tonemapper.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 003377fc2620a44939dadde6fe3f8190 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/TwirlEffect.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/TwirlEffect.shader.meta index 5a1602d7..a11709fb 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/TwirlEffect.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/TwirlEffect.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 641b781cad112c75d0008dfa8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader index 4cf35d30..591e2c46 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader @@ -1,7 +1,7 @@ -Shader "Hidden/VignettingShader" { +Shader "Hidden/Vignetting" { Properties { - _MainTex ("Base", 2D) = "" {} - _VignetteTex ("Vignette", 2D) = "" {} + _MainTex ("Base", 2D) = "white" {} + _VignetteTex ("Vignette", 2D) = "white" {} } CGINCLUDE @@ -11,19 +11,28 @@ Shader "Hidden/VignettingShader" { struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; + float2 uv2 : TEXCOORD1; }; sampler2D _MainTex; sampler2D _VignetteTex; + half _Intensity; + half _Blur; + float4 _MainTex_TexelSize; - float _Intensity; - float _Blur; v2f vert( appdata_img v ) { v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord.xy; + o.uv2 = v.texcoord.xy; + + #if UNITY_UV_STARTS_AT_TOP + if (_MainTex_TexelSize.y < 0) + o.uv2.y = 1.0 - o.uv2.y; + #endif + return o; } @@ -34,10 +43,10 @@ Shader "Hidden/VignettingShader" { coords = (coords - 0.5) * 2.0; half coordDot = dot (coords,coords); half4 color = tex2D (_MainTex, uv); - + float mask = 1.0 - coordDot * _Intensity * 0.1; - half4 colorBlur = tex2D (_VignetteTex, uv); + half4 colorBlur = tex2D (_VignetteTex, i.uv2); color = lerp (color, colorBlur, saturate (_Blur * coordDot)); return color * mask; diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader.meta index fcbc3430..2ecd8720 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VignettingShader.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 627943dc7a9a74286b70a4f694a0acd5 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VortexEffect.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VortexEffect.shader.meta index 0f8d1918..78ded6ff 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VortexEffect.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/VortexEffect.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 708b781cad112c75d0008dfa8d76c639 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing.meta index 34cabb73..8de1214d 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 6d55b5e91b95c41739cdf4f804dd383d +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader index 1ecb9621..8e69d908 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader @@ -310,6 +310,8 @@ SubShader { #pragma vertex vert #pragma fragment fragFirst //#pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers d3d11_9x + #pragma glsl ENDCG } @@ -324,6 +326,8 @@ SubShader { #pragma fragment fragSecond //#pragma fragmentoption ARB_precision_hint_fastest #pragma target 3.0 + #pragma exclude_renderers d3d11_9x + #pragma glsl ENDCG } @@ -338,6 +342,8 @@ SubShader { #pragma fragment fragThird //#pragma fragmentoption ARB_precision_hint_fastest #pragma target 3.0 + #pragma exclude_renderers d3d11_9x + #pragma glsl ENDCG } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader.meta index fae0957d..8db070d0 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/DLAA.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 017ca72b9e8a749058d13ebd527e98fa +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader index 527e57cd..1bcaacdd 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader @@ -9,11 +9,13 @@ SubShader { Fog { Mode off } CGPROGRAM -#pragma vertex vert + +#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" #pragma target 3.0 #pragma glsl +#pragma exclude_renderers d3d11_9x #define FXAA_HLSL_3 1 @@ -175,9 +177,9 @@ v2f vert (appdata_img v) sampler2D _MainTex; -float4 frag (float4 uv : TEXCOORD0) : COLOR0 +float4 frag (v2f i) : COLOR0 { - return float4(FxaaPixelShader(uv, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); + return float4(FxaaPixelShader(i.uv, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); } ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader.meta index 10c1b6ba..365db5f7 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA2.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: cd5b323dcc592457790ff18b528f5e67 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader index 2919948a..cc856c8f 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader @@ -46,6 +46,8 @@ Shader "Hidden/FXAA III (Console)" { #pragma glsl #pragma fragmentoption ARB_precision_hint_fastest #pragma target 3.0 + #pragma exclude_renderers d3d11_9x + #include "UnityCG.cginc" uniform sampler2D _MainTex; diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader.meta index f39fe468..63068157 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAA3Console.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: c547503fff0e8482ea5793727057041c +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader index 927490ba..eab39921 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader @@ -14,6 +14,7 @@ CGPROGRAM #include "UnityCG.cginc" #pragma target 3.0 #pragma glsl +#pragma exclude_renderers d3d11_9x // doesn't make sense to have this on consoles, it'll fallback to FXAA2 #pragma exclude_renderers xbox360 ps3 gles @@ -816,9 +817,9 @@ v2f vert (appdata_img v) sampler2D _MainTex; float4 _MainTex_TexelSize; -float4 frag (float2 uv : TEXCOORD0) : COLOR0 +float4 frag (v2f i) : COLOR0 { - return float4(FxaaPixelShader(uv.xy, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); + return float4(FxaaPixelShader(i.uv.xy, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); } ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader.meta index 4385fb4e..a0d603d3 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset2.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 6f1418cffd12146f2a83be795f6fa5a7 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader index 4bd1c2f1..6cfc2dff 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader @@ -14,6 +14,7 @@ CGPROGRAM #include "UnityCG.cginc" #pragma target 3.0 #pragma glsl +#pragma exclude_renderers d3d11_9x // Not very practical on consoles/mobile, and PS3 Cg takes ages to compile this :( #pragma exclude_renderers xbox360 ps3 gles @@ -815,9 +816,9 @@ v2f vert (appdata_img v) sampler2D _MainTex; float4 _MainTex_TexelSize; -float4 frag (float2 uv : TEXCOORD0) : COLOR0 +float4 frag (v2f i) : COLOR0 { - return float4(FxaaPixelShader(uv.xy, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); + return float4(FxaaPixelShader(i.uv.xy, _MainTex, _MainTex_TexelSize.xy).xyz, 0.0f); } ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader.meta index 1cd14e8f..053bdbf9 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/FXAAPreset3.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: c182fa94a5a0a4c02870641efcd38cd5 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader index edbc2861..cda652c9 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader @@ -126,6 +126,8 @@ SubShader { #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers d3d11_9x + #pragma glsl ENDCG } @@ -137,7 +139,9 @@ SubShader { #pragma vertex vert #pragma fragment fragDebug - #pragma fragmentoption ARB_precision_hint_fastest + #pragma fragmentoption ARB_precision_hint_fastest + #pragma exclude_renderers d3d11_9x + #pragma glsl ENDCG } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader.meta index 29ebe76a..af7b4b65 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/NFAA.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: ce0cb2621f6d84e21a87414e471a3cce +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/SSAA.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/SSAA.shader.meta index 32ad3826..e9723171 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/SSAA.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_Antialiasing/SSAA.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: b3728d1488b02490cbd196c7941bf1f8 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares.meta index 3bdce386..e3f15435 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: d6ef58fc6f637406bbe6814a19c377f8 +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader index d74b8ef3..f13d154e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader @@ -30,7 +30,7 @@ Shader "Hidden/Blend" { o.uv[0] = v.texcoord.xy; o.uv[1] = v.texcoord.xy; - #if SHADER_API_D3D9 || SHADER_API_XBOX360 || SHADER_API_D3D11 + #if UNITY_UV_STARTS_AT_TOP if (_ColorBuffer_TexelSize.y < 0) o.uv[1].y = 1-o.uv[1].y; #endif diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader.meta index 38b9735d..e9a742b0 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/Blend.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 53b3960ee3d3d4a5caa8d5473d120187 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BlendOneOne.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BlendOneOne.shader.meta index cae2e8b2..007df7fb 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BlendOneOne.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BlendOneOne.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: f7898d203e9b94c0dbe2bf9dd5cb32c0 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta index 3f3bfdbf..35204d14 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/BrightPassFilter.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 186c4c0d31e314f049595dcbaf4ca129 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader index abe20f0f..5e9a41a2 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader @@ -11,13 +11,11 @@ Shader "Hidden/LensFlareCreate" { float4 pos : POSITION; float2 uv[4] : TEXCOORD0; }; - - float4 resolution; - - float4 colorA; - float4 colorB; - float4 colorC; - float4 colorD; + + fixed4 colorA; + fixed4 colorB; + fixed4 colorC; + fixed4 colorD; sampler2D _MainTex; @@ -32,8 +30,8 @@ Shader "Hidden/LensFlareCreate" { return o; } - half4 frag(v2f i) : COLOR { - half4 color = float4 (0,0,0,0); + fixed4 frag(v2f i) : COLOR { + fixed4 color = float4 (0,0,0,0); color += tex2D(_MainTex, i.uv[0] ) * colorA; color += tex2D(_MainTex, i.uv[1] ) * colorB; color += tex2D(_MainTex, i.uv[2] ) * colorC; diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta index c06195dc..cd9c241b 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/LensFlareCreate.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 459fe69d2f6d74ddb92f04dbf45a866b +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader index b2f34f65..d482154b 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader @@ -1,159 +1,159 @@ -Shader "Hidden/MultipassHollywoodFlares" { - Properties { - _MainTex ("Base (RGB)", 2D) = "" {} - _NonBlurredTex ("Base (RGB)", 2D) = "" {} - } - - CGINCLUDE - - #include "UnityCG.cginc" - - struct v2f { - half4 pos : POSITION; - half2 uv : TEXCOORD0; - }; - - struct v2f_opts { - half4 pos : POSITION; - half2 uv[7] : TEXCOORD0; - }; - - half4 offsets; - half4 tintColor; - - half stretchWidth; - half2 _Threshhold; - - half4 _MainTex_TexelSize; - - sampler2D _MainTex; - sampler2D _NonBlurredTex; - - v2f vert (appdata_img v) { - v2f o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); - o.uv = v.texcoord.xy; - return o; - } - - v2f_opts vertStretch (appdata_img v) { - v2f_opts o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); - half b = stretchWidth; - o.uv[0] = v.texcoord.xy; - o.uv[1] = v.texcoord.xy + b * 2.0 * offsets.xy; - o.uv[2] = v.texcoord.xy - b * 2.0 * offsets.xy; - o.uv[3] = v.texcoord.xy + b * 4.0 * offsets.xy; - o.uv[4] = v.texcoord.xy - b * 4.0 * offsets.xy; - o.uv[5] = v.texcoord.xy + b * 6.0 * offsets.xy; - o.uv[6] = v.texcoord.xy - b * 6.0 * offsets.xy; - return o; - } - - v2f_opts vertVerticalCoords (appdata_img v) { - v2f_opts o; - o.pos = mul(UNITY_MATRIX_MVP, v.vertex); - o.uv[0] = v.texcoord.xy; - o.uv[1] = v.texcoord.xy + 0.5 * _MainTex_TexelSize.xy * half2(0,1); - o.uv[2] = v.texcoord.xy - 0.5 * _MainTex_TexelSize.xy * half2(0,1); - o.uv[3] = v.texcoord.xy + 1.5 * _MainTex_TexelSize.xy * half2(0,1); - o.uv[4] = v.texcoord.xy - 1.5 * _MainTex_TexelSize.xy * half2(0,1); - o.uv[5] = v.texcoord.xy + 2.5 * _MainTex_TexelSize.xy * half2(0,1); - o.uv[6] = v.texcoord.xy - 2.5 * _MainTex_TexelSize.xy * half2(0,1); - return o; - } - - // deprecated - half4 fragPrepare (v2f i) : COLOR { - half4 color = tex2D (_MainTex, i.uv); - half4 colorNb = tex2D (_NonBlurredTex, i.uv); - return color * tintColor * 0.5 + colorNb * normalize (tintColor) * 0.5; - } - - - half4 fragPreAndCut (v2f_opts i) : COLOR { - half4 color = tex2D (_MainTex, i.uv[0]); - color += tex2D (_MainTex, i.uv[1]); - color += tex2D (_MainTex, i.uv[2]); - color += tex2D (_MainTex, i.uv[3]); - color += tex2D (_MainTex, i.uv[4]); - color += tex2D (_MainTex, i.uv[5]); - color += tex2D (_MainTex, i.uv[6]); - return max(color / 7.0 - _Threshhold.x, 0.0) * _Threshhold.y * tintColor; - } - - half4 fragStretch (v2f_opts i) : COLOR { - half4 color = tex2D (_MainTex, i.uv[0]); - color = max (color, tex2D (_MainTex, i.uv[1])); - color = max (color, tex2D (_MainTex, i.uv[2])); - color = max (color, tex2D (_MainTex, i.uv[3])); - color = max (color, tex2D (_MainTex, i.uv[4])); - color = max (color, tex2D (_MainTex, i.uv[5])); - color = max (color, tex2D (_MainTex, i.uv[6])); - return color; - } - - half4 fragPost (v2f_opts i) : COLOR { - half4 color = tex2D (_MainTex, i.uv[0]); - color += tex2D (_MainTex, i.uv[1]); - color += tex2D (_MainTex, i.uv[2]); - color += tex2D (_MainTex, i.uv[3]); - color += tex2D (_MainTex, i.uv[4]); - color += tex2D (_MainTex, i.uv[5]); - color += tex2D (_MainTex, i.uv[6]); - return color * 1.0/(7.0 + Luminance(color.rgb) + 0.5); // this also makes it a little noisy - } - - ENDCG - -Subshader { - ZTest Always Cull Off ZWrite Off - Fog { Mode off } - Pass { - - CGPROGRAM - - #pragma fragmentoption ARB_precision_hint_fastest - #pragma vertex vert - #pragma fragment fragPrepare - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma fragmentoption ARB_precision_hint_fastest - #pragma vertex vertStretch - #pragma fragment fragStretch - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma fragmentoption ARB_precision_hint_fastest - #pragma vertex vertVerticalCoords - #pragma fragment fragPreAndCut - - ENDCG - } - - Pass { - - CGPROGRAM - - #pragma fragmentoption ARB_precision_hint_fastest - #pragma vertex vertVerticalCoords - #pragma fragment fragPost - - ENDCG - } -} - -Fallback off - +Shader "Hidden/MultipassHollywoodFlares" { + Properties { + _MainTex ("Base (RGB)", 2D) = "" {} + _NonBlurredTex ("Base (RGB)", 2D) = "" {} + } + + CGINCLUDE + + #include "UnityCG.cginc" + + struct v2f { + half4 pos : POSITION; + half2 uv : TEXCOORD0; + }; + + struct v2f_opts { + half4 pos : POSITION; + half2 uv[7] : TEXCOORD0; + }; + + half4 offsets; + half4 tintColor; + + half stretchWidth; + half2 _Threshhold; + + half4 _MainTex_TexelSize; + + sampler2D _MainTex; + sampler2D _NonBlurredTex; + + v2f vert (appdata_img v) { + v2f o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.uv = v.texcoord.xy; + return o; + } + + v2f_opts vertStretch (appdata_img v) { + v2f_opts o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + half b = stretchWidth; + o.uv[0] = v.texcoord.xy; + o.uv[1] = v.texcoord.xy + b * 2.0 * offsets.xy; + o.uv[2] = v.texcoord.xy - b * 2.0 * offsets.xy; + o.uv[3] = v.texcoord.xy + b * 4.0 * offsets.xy; + o.uv[4] = v.texcoord.xy - b * 4.0 * offsets.xy; + o.uv[5] = v.texcoord.xy + b * 6.0 * offsets.xy; + o.uv[6] = v.texcoord.xy - b * 6.0 * offsets.xy; + return o; + } + + v2f_opts vertVerticalCoords (appdata_img v) { + v2f_opts o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + o.uv[0] = v.texcoord.xy; + o.uv[1] = v.texcoord.xy + 0.5 * _MainTex_TexelSize.xy * half2(0,1); + o.uv[2] = v.texcoord.xy - 0.5 * _MainTex_TexelSize.xy * half2(0,1); + o.uv[3] = v.texcoord.xy + 1.5 * _MainTex_TexelSize.xy * half2(0,1); + o.uv[4] = v.texcoord.xy - 1.5 * _MainTex_TexelSize.xy * half2(0,1); + o.uv[5] = v.texcoord.xy + 2.5 * _MainTex_TexelSize.xy * half2(0,1); + o.uv[6] = v.texcoord.xy - 2.5 * _MainTex_TexelSize.xy * half2(0,1); + return o; + } + + // deprecated + half4 fragPrepare (v2f i) : COLOR { + half4 color = tex2D (_MainTex, i.uv); + half4 colorNb = tex2D (_NonBlurredTex, i.uv); + return color * tintColor * 0.5 + colorNb * normalize (tintColor) * 0.5; + } + + + half4 fragPreAndCut (v2f_opts i) : COLOR { + half4 color = tex2D (_MainTex, i.uv[0]); + color += tex2D (_MainTex, i.uv[1]); + color += tex2D (_MainTex, i.uv[2]); + color += tex2D (_MainTex, i.uv[3]); + color += tex2D (_MainTex, i.uv[4]); + color += tex2D (_MainTex, i.uv[5]); + color += tex2D (_MainTex, i.uv[6]); + return max(color / 7.0 - _Threshhold.x, 0.0) * _Threshhold.y * tintColor; + } + + half4 fragStretch (v2f_opts i) : COLOR { + half4 color = tex2D (_MainTex, i.uv[0]); + color = max (color, tex2D (_MainTex, i.uv[1])); + color = max (color, tex2D (_MainTex, i.uv[2])); + color = max (color, tex2D (_MainTex, i.uv[3])); + color = max (color, tex2D (_MainTex, i.uv[4])); + color = max (color, tex2D (_MainTex, i.uv[5])); + color = max (color, tex2D (_MainTex, i.uv[6])); + return color; + } + + half4 fragPost (v2f_opts i) : COLOR { + half4 color = tex2D (_MainTex, i.uv[0]); + color += tex2D (_MainTex, i.uv[1]); + color += tex2D (_MainTex, i.uv[2]); + color += tex2D (_MainTex, i.uv[3]); + color += tex2D (_MainTex, i.uv[4]); + color += tex2D (_MainTex, i.uv[5]); + color += tex2D (_MainTex, i.uv[6]); + return color * 1.0/(7.0 + Luminance(color.rgb) + 0.5); // this also makes it a little noisy + } + + ENDCG + +Subshader { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + Pass { + + CGPROGRAM + + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment fragPrepare + + ENDCG + } + + Pass { + + CGPROGRAM + + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vertStretch + #pragma fragment fragStretch + + ENDCG + } + + Pass { + + CGPROGRAM + + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vertVerticalCoords + #pragma fragment fragPreAndCut + + ENDCG + } + + Pass { + + CGPROGRAM + + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vertVerticalCoords + #pragma fragment fragPost + + ENDCG + } +} + +Fallback off + } \ No newline at end of file diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta index 019231ab..62c6a795 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/MultiPassHollywoodFlares.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: e2baf3cae8edc4daf94c9adc2154be00 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader index 85efab28..f7c5849c 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader @@ -60,6 +60,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vert #pragma fragment frag ENDCG diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta index 56e00acf..f675deff 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/SeparableBlurPlus.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: a9df009a214e24a5ebbf271595f8d5b6 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/VignetteShader.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/VignetteShader.shader.meta index 16880a8a..63b6b761 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/VignetteShader.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_BloomAndFlares/VignetteShader.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 562f620336e024ac99992ff05725a89a +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField.meta index 955cea4e..81fc75ac 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: d9cccf980fcb7441d85b8b3b5c2d2c34 +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader index 033583c3..1b62eeb2 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader @@ -67,9 +67,9 @@ SubShader { CGPROGRAM #pragma glsl - #pragma target 3.0 + #pragma target 3.0 + #pragma exclude_renderers d3d11_9x - #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert #pragma fragment frag diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader.meta index 2886510c..f8047daf 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/Bokeh34.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 57cdacf9b217546aaa18edf39a6151c0 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader index b9bb8a3e..3cfb9453 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader @@ -157,7 +157,7 @@ half4 fragDofApplyBg (v2fDofApply i) : COLOR { half4 tapHigh = tex2D (_MainTex, i.uv.xy); - #if SHADER_API_D3D9 || SHADER_API_D3D11 || SHADER_API_XBOX360 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) i.uv.xy = i.uv.xy * half2(1,-1)+half2(0,1); #endif @@ -185,7 +185,7 @@ half4 fragDofApplyFg (v2fDofApply i) : COLOR { half4 fgBlur = tex2D(_TapLowForeground, i.uv.xy); - #if SHADER_API_D3D9 || SHADER_API_D3D11 || SHADER_API_XBOX360 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) i.uv.xy = i.uv.xy * half2(1,-1)+half2(0,1); #endif @@ -234,7 +234,7 @@ half4 color = tex2D (_MainTex, i.uv1.xy); color.a = 0.0; - #if SHADER_API_D3D9 || SHADER_API_D3D11 || SHADER_API_XBOX360 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) i.uv1.xy = i.uv1.xy * half2(1,-1)+half2(0,1); #endif diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader.meta index c47bdbd6..b86195b1 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfField34.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 987fb0677d01f43ce8a9dbf12271e668 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader index 057dd888..8dd37bc9 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader @@ -10,101 +10,94 @@ #include "UnityCG.cginc" struct v2f { - half4 pos : POSITION; - half2 uv : TEXCOORD0; - half2 uv1 : TEXCOORD1; + float4 pos : POSITION; + float2 uv : TEXCOORD0; + float2 uv1 : TEXCOORD1; }; struct v2fRadius { - half4 pos : POSITION; - half2 uv : TEXCOORD0; - half4 uv1[4] : TEXCOORD1; + float4 pos : POSITION; + float2 uv : TEXCOORD0; + float4 uv1[4] : TEXCOORD1; }; struct v2fBlur { - half4 pos : POSITION; - half2 uv : TEXCOORD0; - half4 uv01 : TEXCOORD1; - half4 uv23 : TEXCOORD2; - half4 uv45 : TEXCOORD3; - half4 uv67 : TEXCOORD4; - half4 uv89 : TEXCOORD5; + float4 pos : POSITION; + float2 uv : TEXCOORD0; + float4 uv01 : TEXCOORD1; + float4 uv23 : TEXCOORD2; + float4 uv45 : TEXCOORD3; + float4 uv67 : TEXCOORD4; + float4 uv89 : TEXCOORD5; }; uniform sampler2D _MainTex; uniform sampler2D _CameraDepthTexture; uniform sampler2D _FgOverlap; uniform sampler2D _LowRez; - uniform half4 _CurveParams; - uniform float4 _MainTex_TexelSize; - uniform half4 _Offsets; + uniform float4 _CurveParams; + uniform float4 _MainTex_TexelSize; + uniform float4 _Offsets; - v2f vert( appdata_img v ) { + v2f vert( appdata_img v ) + { + v2f o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.uv1.xy = v.texcoord.xy; + o.uv.xy = v.texcoord.xy; + + #if UNITY_UV_STARTS_AT_TOP + if (_MainTex_TexelSize.y < 0) + o.uv.y = 1-o.uv.y; + #endif + + return o; + } + + v2f vertFlip( appdata_img v ) + { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.uv1.xy = v.texcoord.xy; o.uv.xy = v.texcoord.xy; - #if SHADER_API_D3D9 || SHADER_API_XBOX360 || SHADER_API_D3D11 + #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv.y = 1-o.uv.y; + if (_MainTex_TexelSize.y < 0) + o.uv1.y = 1-o.uv1.y; #endif return o; } - v2fBlur vertBlurPlusMinus (appdata_img v) { + v2fBlur vertBlurPlusMinus (appdata_img v) + { v2fBlur o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv.xy = v.texcoord.xy; - o.uv01 = v.texcoord.xyxy + _Offsets.xyxy * half4(1,1, -1,-1) * _MainTex_TexelSize.xyxy; - o.uv23 = v.texcoord.xyxy + _Offsets.xyxy * half4(2,2, -2,-2) * _MainTex_TexelSize.xyxy;// * 3.0; - o.uv45 = v.texcoord.xyxy + _Offsets.xyxy * half4(3,3, -3,-3) * _MainTex_TexelSize.xyxy;// * 3.0; - o.uv67 = v.texcoord.xyxy + _Offsets.xyxy * half4(4,4, -4,-4) * _MainTex_TexelSize.xyxy;// * 4.0; - o.uv89 = v.texcoord.xyxy + _Offsets.xyxy * half4(5,5, -5,-5) * _MainTex_TexelSize.xyxy;// * 5.0; + o.uv01 = v.texcoord.xyxy + _Offsets.xyxy * float4(1,1, -1,-1) * _MainTex_TexelSize.xyxy / 6.0; + o.uv23 = v.texcoord.xyxy + _Offsets.xyxy * float4(2,2, -2,-2) * _MainTex_TexelSize.xyxy / 6.0; + o.uv45 = v.texcoord.xyxy + _Offsets.xyxy * float4(3,3, -3,-3) * _MainTex_TexelSize.xyxy / 6.0; + o.uv67 = v.texcoord.xyxy + _Offsets.xyxy * float4(4,4, -4,-4) * _MainTex_TexelSize.xyxy / 6.0; + o.uv89 = v.texcoord.xyxy + _Offsets.xyxy * float4(5,5, -5,-5) * _MainTex_TexelSize.xyxy / 6.0; return o; } - - inline half3 Axis(half2 coords, half minRange) - { - half coc = tex2D(_MainTex, coords).a; - coc *= coc; - return half3( max(coc, minRange) * (_Offsets.xy), coc); - } - inline half3 AxisFromSample(half4 sample, half minRange) - { - return half3( max(sample.a, minRange) * (_Offsets.xy), sample.a); - } - - inline half2 AxisFromSamplePoisson(half4 sample, half minRange) + #define SCATTER_OVERLAP_SMOOTH (-0.265) + + inline float BokehWeightDisc(float4 sample, float sampleDistance, float4 centerSample) { - return half2( max(sample.a, minRange), sample.a); - } - - inline float4 AdjustForLowRezBuffers(half2 coords, half4 returnValue) - { - half4 highRezColor = tex2D(_MainTex, coords); - return lerp(highRezColor, returnValue, smoothstep(0.135, 0.5, highRezColor.a)); // lerp value is important as blending HR <-> LR is pretty PRETTY REALLY ugly :/ + return smoothstep(SCATTER_OVERLAP_SMOOTH, 0.0, sample.a - centerSample.a*sampleDistance); } - - inline float ForegroundOverlap(float2 coords) + + inline float2 BokehWeightDisc2(float4 sampleA, float4 sampleB, float2 sampleDistance2, float4 centerSample) { - return saturate(tex2D(_FgOverlap,coords).a); - } - - inline float BokehWeightForDisc(float4 sample, float4 center, float blurWidth, float2 tapOffset) - { - return smoothstep(-1,0, sample.a * blurWidth - length(tapOffset * blurWidth * center.a)); - } - inline float BokehWeightForDiscFg(float4 sample, float4 center, float blurWidth, float2 tapOffset) - { - return smoothstep(-1,0, length(tapOffset * blurWidth * center.a)- sample.a * blurWidth); - } + return smoothstep(float2(SCATTER_OVERLAP_SMOOTH, SCATTER_OVERLAP_SMOOTH), float2(0.0,0.0), float2(sampleA.a, sampleB.a) - centerSample.aa*sampleDistance2); } - static const float2 poisson[13] = + static const int SmallDiscKernelSamples = 12; + static const float2 SmallDiscKernel[SmallDiscKernelSamples] = { - float2(0,0), float2(-0.326212,-0.40581), float2(-0.840144,-0.07358), float2(-0.695914,0.457137), @@ -119,519 +112,473 @@ float2(-0.791559,-0.59771) }; - half4 fragBlurPoisson (v2f i) : COLOR + static const int NumDiscSamples = 28; + static const float3 DiscKernel[NumDiscSamples] = { - const int TAPS = 13; // X1 - - half4 centerTap = tex2D(_MainTex, i.uv1.xy); - half4 sum = centerTap; - half4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - - half sampleCount = centerTap.a; - sum *= sampleCount; - - for(int l=1; l < TAPS; l++) - { - half2 sampleUV = i.uv1.xy + poisson[l].xy * poissonScale; - half4 sample0 = tex2D(_MainTex, sampleUV.xy); - - half weight0 = BokehWeightForDisc(sample0, centerTap, _Offsets.w, poisson[l].xy); - - sum += sample0 * weight0; - sampleCount += weight0 ; - } - - half4 returnValue = sum / (0.00001 + sampleCount); - returnValue.a = centerTap.a; - - return returnValue; - } + float3(0.62463,0.54337,0.82790), + float3(-0.13414,-0.94488,0.95435), + float3(0.38772,-0.43475,0.58253), + float3(0.12126,-0.19282,0.22778), + float3(-0.20388,0.11133,0.23230), + float3(0.83114,-0.29218,0.88100), + float3(0.10759,-0.57839,0.58831), + float3(0.28285,0.79036,0.83945), + float3(-0.36622,0.39516,0.53876), + float3(0.75591,0.21916,0.78704), + float3(-0.52610,0.02386,0.52664), + float3(-0.88216,-0.24471,0.91547), + float3(-0.48888,-0.29330,0.57011), + float3(0.44014,-0.08558,0.44838), + float3(0.21179,0.51373,0.55567), + float3(0.05483,0.95701,0.95858), + float3(-0.59001,-0.70509,0.91938), + float3(-0.80065,0.24631,0.83768), + float3(-0.19424,-0.18402,0.26757), + float3(-0.43667,0.76751,0.88304), + float3(0.21666,0.11602,0.24577), + float3(0.15696,-0.85600,0.87027), + float3(-0.75821,0.58363,0.95682), + float3(0.99284,-0.02904,0.99327), + float3(-0.22234,-0.57907,0.62029), + float3(0.55052,-0.66984,0.86704), + float3(0.46431,0.28115,0.54280), + float3(-0.07214,0.60554,0.60982), + }; - half4 fragBlurPoissonLowRez (v2f i) : COLOR + float4 fragBlurInsaneMQ (v2f i) : COLOR { - const int TAPS = 13; // X1 - - half4 centerTap = tex2D(_LowRez, i.uv1.xy); - half4 sum = centerTap; - half4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - - half sampleCount = centerTap.a; - sum *= sampleCount; - - for(int l=1; l < TAPS; l++) - { - half2 sampleUV = i.uv1.xy + poisson[l].xy * poissonScale; - half4 sample0 = tex2D(_LowRez, sampleUV.xy); - - half weight0 = BokehWeightForDisc(sample0, centerTap, _Offsets.w, poisson[l].xy); + float4 centerTap = tex2D(_MainTex, i.uv1.xy); + float4 sum = centerTap; + float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - sum += sample0 * weight0; - sampleCount += weight0 ; - } - - half4 returnValue = sum / (0.00001 + sampleCount); - returnValue.a = centerTap.a; - - return AdjustForLowRezBuffers(i.uv1.xy, returnValue); - } - - half4 fragBlurProduction (v2f i) : COLOR - { - const int TAPS = 13; // X2 - - half4 centerTap = tex2D(_MainTex, i.uv1.xy); - half4 sum = centerTap; - half4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - - half sampleCount = centerTap.a; + float sampleCount = max(centerTap.a * 0.25, _Offsets.z); // <- weighing with 0.25 looks nicer for small high freq spec sum *= sampleCount; + + float weights = 0; - for(int l=1; l < TAPS; l++) + for(int l=0; l < NumDiscSamples; l++) { - half4 sampleUV = i.uv1.xyxy + half4(poisson[l].xy,-poisson[l].xy) * poissonScale; - - half4 sample0 = tex2D(_MainTex, sampleUV.xy); - half4 sample1 = tex2D(_MainTex, sampleUV.zw); - - half weight0 = BokehWeightForDisc(sample0, centerTap, _Offsets.w, poisson[l].xy); - half weight1 = BokehWeightForDisc(sample1, centerTap, _Offsets.w, -poisson[l].xy); - - sum += sample0 * weight0; - sum += sample1 * weight1; - sampleCount += weight0 + weight1; + float2 sampleUV = i.uv1.xy + DiscKernel[l].xy * poissonScale.xy; + float4 sample0 = tex2D(_MainTex, sampleUV.xy); + + if( sample0.a > 0.0 ) + { + weights = BokehWeightDisc(sample0, DiscKernel[l].z, centerTap); + sum += sample0 * weights; + sampleCount += weights; + } } - half4 returnValue = sum / (0.00001 + sampleCount); + float4 returnValue = sum / sampleCount; returnValue.a = centerTap.a; - - return returnValue; - } - half4 fragBlurProductionLowRez (v2f i) : COLOR + return returnValue; + } + + float4 fragBlurInsaneHQ (v2f i) : COLOR { - const int TAPS = 13; // X2 - - half4 centerTap = tex2D(_LowRez, i.uv1.xy); - half4 sum = centerTap; - half4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; - - half sampleCount = centerTap.a; + float4 centerTap = tex2D(_MainTex, i.uv1.xy); + float4 sum = centerTap; + float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w; + + float sampleCount = max(centerTap.a * 0.25, _Offsets.z); // <- weighing with 0.25 looks nicer for small high freq spec sum *= sampleCount; + + float2 weights = 0; - for(int l=1; l < TAPS; l++) + for(int l=0; l < NumDiscSamples; l++) { - half4 sampleUV = i.uv1.xyxy + half4(poisson[l].xy,-poisson[l].xy) * poissonScale; - - half4 sample0 = tex2D(_LowRez, sampleUV.xy); - half4 sample1 = tex2D(_LowRez, sampleUV.zw); - - half weight0 = BokehWeightForDisc(sample0, centerTap, _Offsets.w, poisson[l].xy); - half weight1 = BokehWeightForDisc(sample1, centerTap, _Offsets.w, -poisson[l].xy); + float4 sampleUV = i.uv1.xyxy + DiscKernel[l].xyxy * poissonScale.xyxy / float4(1.2,1.2,DiscKernel[l].zz); - sum += sample0 * weight0; - sum += sample1 * weight1; - - sampleCount += weight0 + weight1; + float4 sample0 = tex2D(_MainTex, sampleUV.xy); + float4 sample1 = tex2D(_MainTex, sampleUV.zw); + + if( (sample0.a + sample1.a) > 0.0 ) + { + weights = BokehWeightDisc2(sample0, sample1, float2(DiscKernel[l].z/1.2, 1.0), centerTap); + sum += sample0 * weights.x + sample1 * weights.y; + sampleCount += dot(weights, 1); + } } - half4 returnValue = sum / (0.00001 + sampleCount); + float4 returnValue = sum / sampleCount; returnValue.a = centerTap.a; - - return AdjustForLowRezBuffers(i.uv1.xy, returnValue); - } - - static const float3 movieTaps[60] = + + return returnValue; + } + + inline float4 BlendLowWithHighHQ(float coc, float4 low, float4 high) { - float3( 0.2165, 0.1250, 1.0000 ), - float3( 0.0000, 0.2500, 1.0000 ), - float3( -0.2165, 0.1250, 1.0000 ), - float3( -0.2165, -0.1250, 1.0000 ), - float3( -0.0000, -0.2500, 1.0000 ), - float3( 0.2165, -0.1250, 1.0000 ), - float3( 0.4330, 0.2500, 1.0000 ), - float3( 0.0000, 0.5000, 1.0000 ), - float3( -0.4330, 0.2500, 1.0000 ), - float3( -0.4330, -0.2500, 1.0000 ), - float3( -0.0000, -0.5000, 1.0000 ), - float3( 0.4330, -0.2500, 1.0000 ), - float3( 0.6495, 0.3750, 1.0000 ), - float3( 0.0000, 0.7500, 1.0000 ), - float3( -0.6495, 0.3750, 1.0000 ), - float3( -0.6495, -0.3750, 1.0000 ), - float3( -0.0000, -0.7500, 1.0000 ), - float3( 0.6495, -0.3750, 1.0000 ), - float3( 0.8660, 0.5000, 1.0000 ), - float3( 0.0000, 1.0000, 1.0000 ), - float3( -0.8660, 0.5000, 1.0000 ), - float3( -0.8660, -0.5000, 1.0000 ), - float3( -0.0000, -1.0000, 1.0000 ), - float3( 0.8660, -0.5000, 1.0000 ), - float3( 0.2163, 0.3754, 0.8670 ), - float3( -0.2170, 0.3750, 0.8670 ), - float3( -0.4333, -0.0004, 0.8670 ), - float3( -0.2163, -0.3754, 0.8670 ), - float3( 0.2170, -0.3750, 0.8670 ), - float3( 0.4333, 0.0004, 0.8670 ), - float3( 0.4328, 0.5004, 0.8847 ), - float3( -0.2170, 0.6250, 0.8847 ), - float3( -0.6498, 0.1246, 0.8847 ), - float3( -0.4328, -0.5004, 0.8847 ), - float3( 0.2170, -0.6250, 0.8847 ), - float3( 0.6498, -0.1246, 0.8847 ), - float3( 0.6493, 0.6254, 0.9065 ), - float3( -0.2170, 0.8750, 0.9065 ), - float3( -0.8663, 0.2496, 0.9065 ), - float3( -0.6493, -0.6254, 0.9065 ), - float3( 0.2170, -0.8750, 0.9065 ), - float3( 0.8663, -0.2496, 0.9065 ), - float3( 0.2160, 0.6259, 0.8851 ), - float3( -0.4340, 0.5000, 0.8851 ), - float3( -0.6500, -0.1259, 0.8851 ), - float3( -0.2160, -0.6259, 0.8851 ), - float3( 0.4340, -0.5000, 0.8851 ), - float3( 0.6500, 0.1259, 0.8851 ), - float3( 0.4325, 0.7509, 0.8670 ), - float3( -0.4340, 0.7500, 0.8670 ), - float3( -0.8665, -0.0009, 0.8670 ), - float3( -0.4325, -0.7509, 0.8670 ), - float3( 0.4340, -0.7500, 0.8670 ), - float3( 0.8665, 0.0009, 0.8670 ), - float3( 0.2158, 0.8763, 0.9070 ), - float3( -0.6510, 0.6250, 0.9070 ), - float3( -0.8668, -0.2513, 0.9070 ), - float3( -0.2158, -0.8763, 0.9070 ), - float3( 0.6510, -0.6250, 0.9070 ), - float3( 0.8668, 0.2513, 0.9070 ) - }; + float blend = smoothstep(0.65,0.85, coc); + return lerp(low, high, blend); + } - // insane movie quality - half4 fragBlurMovie (v2f i) : COLOR + inline float4 BlendLowWithHighMQ(float coc, float4 low, float4 high) { - const int TAPS = 60; - - half4 centerTap = tex2D(_MainTex, i.uv1.xy); - half4 sum = centerTap; - half4 poissonScale = _MainTex_TexelSize.xyxy * (centerTap.a) * _Offsets.w; + float blend = smoothstep(0.4,0.6, coc); + return lerp(low, high, blend); + } + + float4 fragBlurUpsampleCombineHQ (v2f i) : COLOR + { + float4 bigBlur = tex2D(_LowRez, i.uv1.xy); + float4 centerTap = tex2D(_MainTex, i.uv1.xy); + + float4 smallBlur = centerTap; + float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w ; - half sampleCount = centerTap.a; - sum *= sampleCount; + float sampleCount = max(centerTap.a * 0.25, 0.1f); // <- weighing with 0.25 looks nicer for small high freq spec + smallBlur *= sampleCount; - for(int l=0; l < TAPS; l++) + for(int l=0; l < NumDiscSamples; l++) { - half2 sampleUV = i.uv1.xy + movieTaps[l].xy * poissonScale; - half4 sample0 = tex2D(_MainTex, sampleUV.xy); - half weight0 = saturate( BokehWeightForDisc(sample0, centerTap, _Offsets.w, movieTaps[l].xy) * movieTaps[l].z); - sum += sample0 * weight0; - sampleCount += weight0; + float2 sampleUV = i.uv1.xy + DiscKernel[l].xy * poissonScale.xy; + + float4 sample0 = tex2D(_MainTex, sampleUV); + float weight0 = BokehWeightDisc(sample0, DiscKernel[l].z, centerTap); + smallBlur += sample0 * weight0; sampleCount += weight0; } - - half4 returnValue = sum / (0.00001 + sampleCount); - returnValue.a = centerTap.a; - return returnValue; - } + smallBlur /= (sampleCount+1e-5f); + smallBlur = BlendLowWithHighHQ(centerTap.a, smallBlur, bigBlur); - // insane movie quality in low resolution - half4 fragBlurMovieLowRez (v2f i) : COLOR - { - const int TAPS = 60; - - half4 centerTap = tex2D(_LowRez, i.uv1.xy); - half4 sum = centerTap; - half4 poissonScale = _MainTex_TexelSize.xyxy * (centerTap.a) * _Offsets.w; + return centerTap.a < 1e-2f ? centerTap : float4(smallBlur.rgb,centerTap.a); + } + + float4 fragBlurUpsampleCombineMQ (v2f i) : COLOR + { + float4 bigBlur = tex2D(_LowRez, i.uv1.xy); + float4 centerTap = tex2D(_MainTex, i.uv1.xy); + + float4 smallBlur = centerTap; + float4 poissonScale = _MainTex_TexelSize.xyxy * centerTap.a * _Offsets.w ; - half sampleCount = centerTap.a; - sum *= sampleCount; + float sampleCount = max(centerTap.a * 0.25, 0.1f); // <- weighing with 0.25 looks nicer for small high freq spec + smallBlur *= sampleCount; - for(int l=1; l < TAPS; l++) + for(int l=0; l < SmallDiscKernelSamples; l++) { - half2 sampleUV = i.uv1.xy + movieTaps[l].xy * poissonScale; - half4 sample0 = tex2D(_LowRez, sampleUV.xy); - half weight0 = BokehWeightForDisc(sample0, centerTap, _Offsets.w, movieTaps[l].xy) * movieTaps[l].z; - sum += sample0 * weight0; - sampleCount += weight0; + float2 sampleUV = i.uv1.xy + SmallDiscKernel[l].xy * poissonScale.xy*1.1; + + float4 sample0 = tex2D(_MainTex, sampleUV); + float weight0 = BokehWeightDisc(sample0, length(SmallDiscKernel[l].xy*1.1), centerTap); + smallBlur += sample0 * weight0; sampleCount += weight0; } + + smallBlur /= (sampleCount+1e-5f); - half4 returnValue = sum / (0.00001 + sampleCount); - returnValue.a = centerTap.a; - - return AdjustForLowRezBuffers(i.uv1.xy, returnValue); - } + smallBlur = BlendLowWithHighMQ(centerTap.a, smallBlur, bigBlur); + + return centerTap.a < 1e-2f ? centerTap : float4(smallBlur.rgb,centerTap.a); + } + + float4 fragBlurUpsampleCheap (v2f i) : COLOR + { + float4 centerTap = tex2D(_MainTex, i.uv1.xy); + float4 bigBlur = tex2D(_LowRez, i.uv1.xy); + + float fgCoc = tex2D(_FgOverlap, i.uv1.xy).a; + float4 smallBlur = lerp(centerTap, bigBlur, saturate( max(centerTap.a,fgCoc)*8.0 )); + + return float4(smallBlur.rgb, centerTap.a); + } - half4 fragBlurHighSampleCount (v2f i) : COLOR + float4 fragBlurBox (v2f i) : COLOR { const int TAPS = 12; - const half FILTER_KERNEL_WEIGHTS[12] = {1.0, 0.8, 0.65, 0.5, 0.4, 0.2, 0.1, 0.05, 0.025, 0.0125, 0.005, 0.00175}; - //const half FILTER_KERNEL_WEIGHTS[10] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; - - half fgOverlap = saturate(tex2D(_FgOverlap, i.uv1.xy).a*3); // CheckForegroundOverlap(i.uv.xy); - + + float4 centerTap = tex2D(_MainTex, i.uv1.xy); + + // TODO: important ? breaks when HR blur is being used + //centerTap.a = max(centerTap.a, 0.1f); + + float sampleCount = centerTap.a; + float4 sum = centerTap * sampleCount; - half4 centerTap = tex2D(_MainTex, i.uv1.xy); - half4 sum = centerTap;// * FILTER_KERNEL_WEIGHTS[0]; + float2 lenStep = centerTap.aa * (1.0 / (TAPS-1.0)); + float4 steps = (_Offsets.xyxy * _MainTex_TexelSize.xyxy) * lenStep.xyxy * float4(1,1, -1,-1); - half2 offset = AxisFromSample(sum, fgOverlap); //GetFirstAxis(TexCoord); - half amount = length(offset.xy); - - // half centerDepth = Linear01Depth(tex2D(_CameraDepthTexture, i.uv.xy).x); - - half sampleCount = FILTER_KERNEL_WEIGHTS[0]; - half4 steps = (offset.xy * _MainTex_TexelSize.xy).xyxy; - steps.zw *= -1; - for(int l=1; l < TAPS; l++) + for(int l=1; l 1e-5f) outColor.rgb = color.rgb/sumWeights; - half4 color = (tapA + tapB * tapB.a + tapC * tapC.a + tapD * tapD.a) / (1.0 + tapB.a + tapC.a + tapD.a); - color.a = tapA.a; - return color; - } - - half4 fragApplyDebug (v2f i) : COLOR - { - float4 tapHigh = tex2D (_MainTex, i.uv1.xy); - float4 outColor = lerp(tapHigh, half4(0,1,0,1), tapHigh.a); return outColor; - } + } + + float4 fragCaptureColorAndSignedCoc (v2f i) : COLOR + { + float4 color = tex2D (_MainTex, i.uv1.xy); + float d = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv1.xy)); + d = Linear01Depth (d); + color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 1e-5f); + color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x) * sign(d - _CurveParams.w); + return color; + } + float4 fragCaptureCoc (v2f i) : COLOR { - float4 color = half4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); + float4 color = float4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); float d = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv1.xy)); d = Linear01Depth (d); - color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 0.0001); - color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, 1.0); + color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 1e-5f); + color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); return color; - - /* - float4 color = half4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); - //float4 lowTap = tex2D(_TapLowA, i.uv1.xy); - + } + + float4 AddFgCoc (v2f i) : COLOR + { + return tex2D (_MainTex, i.uv1.xy); + } + + float4 fragMergeCoc (v2f i) : COLOR + { + float4 color = tex2D (_FgOverlap, i.uv1.xy); // this is the foreground overlap value + float fgCoc = color.a; + float d = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv1.xy)); d = Linear01Depth (d); + color.a = _CurveParams.z * abs(d - _CurveParams.w) / (d + 1e-5f); + color.a = clamp( max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); - float focalDistance01 = _CurveParams.w + _CurveParams.z; - - //if (d > focalDistance01) - color.a = (d - focalDistance01); - - half coc = saturate(color.a * _CurveParams.y); - coc += saturate(-color.a * _CurveParams.x); - - // we are mixing the newly calculated BG COC with the foreground COC - // also, for foreground COC, let's scale the COC a bit to get nicer overlaps - //color.a = max(lowTap.a, color.a); - - //color.a = saturate(color.a);// + COC_SMALL_VALUE); - //color.rgb *= color.a; - - color.a = coc; - - return saturate(color); - */ + return max(color.aaaa, float4(fgCoc,fgCoc,fgCoc,fgCoc)); + } + + float4 fragCombineCocWithMaskBlur (v2f i) : COLOR + { + float bgAndFgCoc = tex2D (_MainTex, i.uv1.xy).a; + float fgOverlapCoc = tex2D (_FgOverlap, i.uv1.xy).a; + + return (bgAndFgCoc < 0.01) * saturate(fgOverlapCoc-bgAndFgCoc); } - half4 fragCaptureForegroundCoc (v2f i) : COLOR + float4 fragCaptureForegroundCoc (v2f i) : COLOR { - float4 color = half4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); + float4 color = float4(0,0,0,0); //tex2D (_MainTex, i.uv1.xy); float d = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv1.xy)); d = Linear01Depth (d); - color.a = _CurveParams.z * (_CurveParams.w-d) / (d + 0.0001); - color.a = clamp(max(0.0, color.a - _CurveParams.y), 0.0, 1.0); + color.a = _CurveParams.z * (_CurveParams.w-d) / (d + 1e-5f); + color.a = clamp(max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); return color; - - /* - half4 color = tex2D (_MainTex, i.uv.xy); - color.a = 0.0; - - //#if SHADER_API_D3D9 - //if (_MainTex_TexelSize.y < 0) - // i.uv1.xy = i.uv1.xy * half2(1,-1)+half2(0,1); - //#endif + } + float4 fragCaptureForegroundCocMask (v2f i) : COLOR + { + float4 color = float4(0,0,0,0); float d = UNITY_SAMPLE_DEPTH(tex2D(_CameraDepthTexture, i.uv1.xy)); - d = Linear01Depth (d); - - float focalDistance01 = (_CurveParams.w - _CurveParams.z); - - if (d < focalDistance01) - color.a = (focalDistance01 - d); + d = Linear01Depth (d); + color.a = _CurveParams.z * (_CurveParams.w-d) / (d + 1e-5f); + color.a = clamp(max(0.0, color.a - _CurveParams.y), 0.0, _CurveParams.x); - color.a = saturate(color.a * _CurveParams.x); - - return color; - */ + return color.a > 0; } - half4 fragCopyAlpha4Tap (v2f i) : COLOR { - half4 tapA = tex2D(_MainTex, i.uv.xy + 0.5*_MainTex_TexelSize.xy); - half4 tapB = tex2D(_MainTex, i.uv.xy - 0.5*_MainTex_TexelSize.xy); - half4 tapC = tex2D(_MainTex, i.uv.xy + 0.5*_MainTex_TexelSize.xy * half2(1,-1)); - half4 tapD = tex2D(_MainTex, i.uv.xy - 0.5*_MainTex_TexelSize.xy * half2(1,-1)); - return (tapA+tapB+tapC+tapD)/4; + float4 fragBlendInHighRez (v2f i) : COLOR + { + float4 tapHighRez = tex2D(_MainTex, i.uv.xy); + return float4(tapHighRez.rgb, 1.0-saturate(tapHighRez.a*5.0)); } - half4 fragPrepare (v2f i) : COLOR { - half4 from = tex2D(_MainTex, i.uv1.xy); - half square = from.a * from.a; - square*=square; - from.a = saturate(square*square); - //from.rgb = 0;//half3(0,0,1); // debug + float4 fragBlendInLowRezParts (v2f i) : COLOR + { + float4 from = tex2D(_MainTex, i.uv1.xy); + from.a = saturate(from.a * _Offsets.w) / (_CurveParams.x + 1e-5f); + float square = from.a * from.a; + from.a = square * square * _CurveParams.x; return from; } + + float4 fragUpsampleWithAlphaMask(v2f i) : COLOR + { + float4 c = tex2D(_MainTex, i.uv1.xy); + return c; + } + + float4 fragAlphaMask(v2f i) : COLOR + { + float4 c = tex2D(_MainTex, i.uv1.xy); + c.a = saturate(c.a*100.0); + return c; + } ENDCG -Subshader { +Subshader +{ // pass 0 @@ -641,11 +588,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert #pragma fragment fragCaptureCoc + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -655,15 +604,16 @@ Subshader { Pass { ZTest Always Cull Off ZWrite Off - ColorMask RGB Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest - #pragma vertex vert - #pragma fragment fragApplyDebug + #pragma vertex vertBlurPlusMinus + #pragma fragment fragGaussBlur + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -675,11 +625,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vertBlurPlusMinus #pragma fragment fragBlurForFgCoc + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -696,11 +648,13 @@ Subshader { Blend One One, One One CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragCaptureCoc + #pragma fragment AddFgCoc + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -715,11 +669,13 @@ Subshader { ColorMask A CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert #pragma fragment fragCaptureForegroundCoc + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -731,11 +687,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurHighSampleCount + #pragma fragment fragBlurBox + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -748,9 +706,12 @@ Subshader { CGPROGRAM + #pragma glsl + #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert #pragma fragment frag4TapBlurForLRSpawn + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -759,15 +720,18 @@ Subshader { Pass { ZTest Always Cull Off ZWrite Off - ColorMask A + ColorMask RGB + Blend SrcAlpha OneMinusSrcAlpha Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragCopyAlpha4Tap + #pragma fragment fragBlendInHighRez + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -777,15 +741,18 @@ Subshader { Pass { ZTest Always Cull Off ZWrite Off - ColorMask RGB - Blend SrcAlpha OneMinusSrcAlpha + ColorMask A Fog { Mode off } CGPROGRAM + #pragma glsl + #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragPrepare + #pragma fragment fragCaptureForegroundCocMask + #pragma exclude_renderers d3d11_9x flash + ENDCG } @@ -797,11 +764,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurLowSampleCount + #pragma fragment fragBlurUpsampleCheap + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -813,11 +782,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurPoisson + #pragma fragment fragCaptureColorAndSignedCoc + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -829,11 +800,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurProduction + #pragma fragment fragBlurInsaneMQ + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -845,11 +818,13 @@ Subshader { Fog { Mode off } CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurProductionLowRez + #pragma fragment fragBlurUpsampleCombineMQ + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -857,14 +832,18 @@ Subshader { // pass 13 Pass { ZTest Always Cull Off ZWrite Off - Fog { Mode off } + Fog { Mode off } + + ColorMask A CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurPoissonLowRez + #pragma fragment fragMergeCoc + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -873,14 +852,20 @@ Subshader { Pass { ZTest Always Cull Off ZWrite Off - Fog { Mode off } + Fog { Mode off } + + ColorMask A + BlendOp Max, Max + Blend One One, One One CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurMovie + #pragma fragment fragCombineCocWithMaskBlur + #pragma exclude_renderers d3d11_9x flash ENDCG } @@ -892,14 +877,148 @@ Subshader { Fog { Mode off } CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment fragBoxDownsample + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 16 + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment fragVisualize + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 17 + + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment fragBlurInsaneHQ + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 18 + + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment fragBlurUpsampleCombineHQ + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 19 + + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vertBlurPlusMinus + #pragma fragment fragBlurAlphaWeighted + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 20 + + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vert + #pragma fragment fragAlphaMask + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 21 + + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + BlendOp Add, Add + Blend DstAlpha OneMinusDstAlpha, Zero One + + CGPROGRAM + + #pragma glsl + #pragma target 3.0 + #pragma fragmentoption ARB_precision_hint_fastest + #pragma vertex vertFlip + #pragma fragment fragBlurBox + #pragma exclude_renderers d3d11_9x flash + + ENDCG + } + + // pass 22 + + Pass { + ZTest Always Cull Off ZWrite Off + Fog { Mode off } + + // destination alpha needs to stay intact as we have layed alpha before + BlendOp Add, Add + Blend DstAlpha One, Zero One + + CGPROGRAM + #pragma glsl #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert - #pragma fragment fragBlurMovieLowRez + #pragma fragment fragUpsampleWithAlphaMask + #pragma exclude_renderers d3d11_9x flash ENDCG - } + } } Fallback off diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta index 8bcfda81..b38c9740 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/DepthOfFieldScatter.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: acd613035ff3e455e8abf23fdc8c8c24 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableBlur.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableBlur.shader.meta index de38ccd3..b9f6a84f 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableBlur.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableBlur.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: e97c14fbb5ea04c3a902cc533d7fc5d1 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader index c3333fd8..7930a115 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader @@ -73,7 +73,7 @@ Shader "Hidden/SeparableWeightedBlurDof34" { blurredColor *= 0.2; - blurredColor.a = max(tex2D(_TapHigh, i.uv.xy).a, blurredColor.a); + blurredColor.a = max(UNITY_SAMPLE_1CHANNEL(_TapHigh, i.uv.xy), blurredColor.a); return blurredColor; } @@ -161,7 +161,7 @@ Shader "Hidden/SeparableWeightedBlurDof34" { blurredColor /= 3.5; - blurredColor.a = max(tex2D(_TapHigh, i.uv.xy).a, blurredColor.a); + blurredColor.a = max(UNITY_SAMPLE_1CHANNEL(_TapHigh, i.uv.xy), blurredColor.a); return blurredColor; } diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta index 87364d19..2fae7fc8 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/SeparableWeightedBlurDof34.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: bb4af680337344a4abad65a4e8873c50 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader index fa5e426e..dab86e54 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader @@ -12,7 +12,7 @@ struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP float2 uv1 : TEXCOORD1; #endif }; @@ -46,7 +46,7 @@ o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.uv.xy = v.texcoord; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP o.uv1.xy = v.texcoord; if (_MainTex_TexelSize.y < 0) o.uv1.y = 1-o.uv1.y; @@ -58,7 +58,7 @@ } half4 fragCocFg (v2f i) : COLOR { - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP float d = UNITY_SAMPLE_DEPTH(tex2D (_CameraDepthTexture, i.uv1.xy)); #else float d = UNITY_SAMPLE_DEPTH(tex2D (_CameraDepthTexture, i.uv.xy)); @@ -78,7 +78,7 @@ half4 fragCocBgAfterFg (v2f i) : COLOR { - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP float d = UNITY_SAMPLE_DEPTH(tex2D (_CameraDepthTexture, i.uv1.xy)); #else float d = UNITY_SAMPLE_DEPTH(tex2D (_CameraDepthTexture, i.uv.xy)); @@ -95,7 +95,7 @@ coc = clamp ( ( (coc / (curve))), 0.0, 0.999); - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half4 cocTex = tex2D (_Coc, i.uv1.xy); #else half4 cocTex = tex2D (_Coc, i.uv.xy); @@ -108,13 +108,13 @@ { half4 color = tex2D (_MainTex, i.uv.xy); - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half4 blurred = tex2D (_Blurred, i.uv1.xy); #else half4 blurred = tex2D (_Blurred, i.uv.xy); #endif - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half coc = DecodeFloatRGBA (tex2D (_Coc, i.uv1.xy)); #else half coc = DecodeFloatRGBA (tex2D (_Coc, i.uv.xy)); @@ -127,7 +127,7 @@ { half4 color = tex2D (_MainTex, i.uv.xy); - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half4 blurred = tex2D (_Blurred, i.uv1.xy); #else half4 blurred = tex2D (_Blurred, i.uv.xy); @@ -135,7 +135,7 @@ blurred = (half4(0,1,0,1) + blurred) * 0.5; - #if SHADER_API_D3D9 + #if UNITY_UV_STARTS_AT_TOP half coc = DecodeFloatRGBA (tex2D (_Coc, i.uv1.xy)); #else half coc = DecodeFloatRGBA (tex2D (_Coc, i.uv.xy)); @@ -250,6 +250,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vert #pragma fragment fragCocFg @@ -261,6 +263,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vert #pragma fragment fragDofApply @@ -272,6 +276,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vertBlur #pragma fragment fragDependentBlur @@ -283,6 +289,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vertBlur #pragma fragment fragBlurMax @@ -294,6 +302,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vert #pragma fragment fragDofDebug @@ -305,6 +315,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vert #pragma fragment fragCocBgAfterFg @@ -316,6 +328,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vertBlur #pragma fragment fragBlurWeighted @@ -327,6 +341,8 @@ Subshader { CGPROGRAM #pragma fragmentoption ARB_precision_hint_fastest + // not enough temporary registers for flash + #pragma exclude_renderers flash #pragma vertex vert #pragma fragment fragUp diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader.meta index a934d790..103d9123 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/_DepthOfField/TiltShift.shader.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 926e6b8704ae248539bd7d7d6bdb7f16 +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/frag_ao.cginc.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/frag_ao.cginc.meta index 556f1131..604d5f5e 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/frag_ao.cginc.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Shaders/frag_ao.cginc.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: 51ae11a5cd82fda468a85179946d672a +ShaderImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures.meta index 9e8d4aa4..20cbfa0b 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures.meta @@ -1,2 +1,4 @@ fileFormatVersion: 2 guid: f9372f23586ef470b97d53856af88487 +DefaultImporter: + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/Noise.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/Noise.png.meta index ff5d47d6..b48fd5f2 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/Noise.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/Noise.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: 3 maxTextureSize: 64 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseAndGrain.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseAndGrain.png.meta index 6756df32..387edde9 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseAndGrain.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseAndGrain.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 1 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 64 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: 5 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectGrain.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectGrain.png.meta index eb6d57be..47510dad 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectGrain.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectGrain.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: 3 maxTextureSize: 1024 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectScratch.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectScratch.png.meta index f8e498c5..3d3e680a 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectScratch.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/NoiseEffectScratch.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: 0 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/RandomVectors.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/RandomVectors.png.meta index dc989e31..3c35afc5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/RandomVectors.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/RandomVectors.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: 3 maxTextureSize: 1024 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/VignetteMask.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/VignetteMask.png.meta index 1119caca..1764d4c5 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/VignetteMask.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/VignetteMask.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/color correction ramp.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/color correction ramp.png.meta index 36622438..be398a06 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/color correction ramp.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/color correction ramp.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/grayscale ramp.png.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/grayscale ramp.png.meta index 39b1594d..395fa267 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/grayscale ramp.png.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/grayscale ramp.png.meta @@ -19,6 +19,7 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: 3 maxTextureSize: 1024 textureSettings: @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/hexShape.psd b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/hexShape.psd index 50e9d3ecf8dc9dd4beef0098c8baf23da2545e10..eef48cbe86b6b9047c7772f43abdaeded1bcc333 100644 GIT binary patch literal 478144 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�ac0WR6N^*{V8-(sYK?Q~1m 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�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 NfBXOc-~SgR@P92b81Dc8 literal 428419 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�Ci~E9>G%XI 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

@9CB zHjSv$vUN(P^ePse+Ur=@PmGV$&#LEKSB0EySDYPl>t7661jj(;R&nVjcq{FgZH zFOTM|P1WMUxtN_?s!ZIlhTn?wL|V8YTiaw@o`6DygbenqCtF}CK*+z5RNpntw^MwZ z7vcjbqYFbSDhQlLt3OCQLn70N4wTJ^S?nD>Y=UOIIAf$}#a+35k&z6Q2+r7L4W`yAQA<1h)5Ko z1aTCCAPP|cK_U)B5I`g$5g}#D-ZQo_w&|GaiVH5djAvZ1XZGy!U)O!V-&$+TIY%&_ zJ!`M^t?#?vr`%6@pV!xvj5Vy&fK8hXaqyYd#3YM&%)GHol~4oSRG7tX!cwzfz%XHW zk3v7NlfHOY!7d2`R^2uUvLhI_A#rIo0KarssjEud)M|jPN-jPLxv>27qvA)-f z_iE)Fz_u$pV&#=V;d&E79if`?6 zt#N_&1vpSXA1z?_$LXnu2y#Mfem~)b3jtZLlP@<=&+!Ug0%smE4q)aJ6sy%mu(mEd z4fSk~D1qjTW0*plxIgS0Qjb{#X$?DI^GpDMo}-`(o7>( zDn0K>>d5x$t2Oo-E#n?FzwM#GSsf4dQWZ5j91N_?O6?-?bLMDWk&TVC?7S)OmY+_o zjQeiCdguFIc5(>*6+mT?^T-E3_L;x;nQu=veqfnWXz1szLSmgGI zjj^#Us@|^H{cMKT7~K{5FspX$lrgRS*ATCvS0=I*(>|?vwU*$tV4>^$I%~0yK4Qrj zr2w}8*JdhWwSV5#24P}6`3haxDH{ZCCUA{8lJekDK zi7$E2f2Cb9bE;AXxpquvVE6pDzcrPNXey2v(d`j+<5_@XFCsMX$>VaH4pw9XNvxN* zZLLceIac0ZYm2q$awVSKP^qdX2{#ASphbU{T&(;Y9zqIV{IJPX>jI4{p&q7Ou(9(_ zAhf5z%kgqVy#&Jd0h&$OWOo)o!%U@PRRJfFaFW@~8veA_rm}FzC0!>jt?Osd4QGDgc#41PkP_lC}}`9%&BDl zu7|3qXg=8iNSSs!Q1Hx_?36N4^6P93;uJFDR6s-hjG`q3?SfiM$Yr2do0&FG6G*z{ zVZV@M)pAzGtq1IOlBtC_?TDknha~k)-~7~DO0bHUWyzPmcgK|rxtrNM8TY$2#BL~L z)4GUh3zk=S%6p<|05g^}rddhRa+r5=b5Uud@r_X<)*embN$o!zAb_oJRJ@cWF|*}R zPFbDff%$mMG`Pm3jldMNRt=iA`+vDaE&dYc4z%_GQn|at{#-;Gs6&;yZtXme``NY2 zP_o$^`GdW%6Mul7DsVGff7|8%{wFW|70H(9oo0gnoHzd6rEKb*vaTaXU2$7T0FK4#*U|D*-TFik64t( zo~0{{xDm3^Dj`wY8KJT4hnC0?sQ!Cq_{-d@E!{JTipp}H% zTj^Sn<0&8;;G_d;NNak4vD2jtW*l}cRYl)uH86BLvs<6Wm!)b?pBK{ zCEaENqs`~xW$5TOjFvue_|kl#A!4O%2gnC4uST=Pks6OSFT>@OjIi;GuC0LB@htO-Md)Q6|9kFyW_9w zDjVk9gEEMceRdEgd;V$oHED|RiS+@i1JM`9EFhCSE}xhMliP($jy5?^Ci(#YN(8{0 zPL8Po+pq#a+EM#t)1!aO8930vl?13P7b`NkQlqq0xYkn^xmGt*&bd}3tKs!+SN`Xp zy(s#3)zVEP?RD;(KK|9AfPJz88x~!Xj@p{4@~gI?lgQ}-8N+Vbh!+~xAhD&%yY^gv(T84r#v}BTSA!en zB5EIt8rkhi*9|_=u7N>N?Rq6yxWT>nRPbuB^5#uQqnbRW+{$uVvWbX9H~D3=vI}ml zI$P+sBV|R3&-0R2SOQQQP~1az`Ass6T032d)J0_#wMrYPrT-6Uwl-iGVa-&u5Hr3e zC)yDWtfpK4aA0ES%t^Efn|?@iIPI^Q%=@HnI7W7$FO+GQ` zgtW`)A59bnC+LJZE~92dX9g0{8UE>BU{VP5=yGpO(=_YLwqcD_0>A{-neaT!z1M7_ zFo8BAD|}i-#i72HW8hQD@|LF@)_(i$uHDLDCWTMY`hqJ+XGM3rfZs#Qc?nO4c4_tP9Q?R`hCG;k)Y7G()VnxLdh*+z(@pruD7=*|j7bDQv&Ib;(7T?X9;^fzft*XE-u1yj)XW}1IL;DJd zWk)Z{Xj`mVRl8zQ#(2kTFZk=vh_pQNG>vrEu12w=B%_@ zqM(6AD7k{rdM-(lK1DJzrTm%kC~C5{wHO2IQ*o=v7aLD7_1v=}MpzrfwsxN}h*vVv zBgZA7aJ%3vZFAQkt-41MJA2urAf(l4169jG^Cz{OCAgBnA0j48%1!LZv#2BX8L2Ko zEjvS}+njJKozz!`4*`!xFdTFqZE|3P;SxrO2h{z6u!c`nS6F+3iOWy{QUp!v2TL(B zy=Ww^D`JBVUYXB#pF{%LgW%^9kD#5WXi{|nKynmquvpx*>K3j9O1J*#i+^kfQ~`YI z^5Mrm>g?BlZ1g`ZqzH%GoZ30>hmt?hOs!lz zEHDC~gWsSy>Z&qoJeN{BKl5eg5|eQ~Yk}a}-#Kf)P=n`T0Q2sCyz4IsJ1yz{cYK%gI7rV)n$Kr`HY!Z}f&%Ceom1DS@Z9bZUAsaJW=oq%LPsx@n zzx!Y`=5+v~tpd6wbz>Xq9T-F~9E+v0DOm$xOr$irRvHCi&_Z^Nrn7EV1LYC|+VUy{^W%u8lY~uCMj@W4Mtigww4qyAkZ=XvZXmj~m5MyA-Q4c-g#mxe# z!I|K;NN`90T|KKtZx@HE#7t$OWh3O4ZC%wo6ZY}IYk<@Ci(&Ms%EbU}HIxxQo((*= z?cuF*PxW7UG&nctT%Ytmg2&5>a`fE`A#>)&Yi#>(^P(A_R6lwtd1({-zi=84^k1q3ZxK~LB@mwRGLg0n z1=Pz_LA9`3iQH6KKUDixne@CAU!zTMrovI{e4#wYa5w$$pvna-nC!yfWTqE5GHZ&% zc~8AC9X}2PFpBbvpcjAN&fSyQtA8bI(zx_5VD+;{^0mQiz8KX$zf_SBMCj=8? zw7zl;Rsm(ICHRU6BO7M%5}(O}y)m!OK%`bprFM_$1i??u zoxMR8$CD3fL=EFBwPmaoA%5LUB$M^fK_@5b>)>LSj2Iq><1T*kBg@KuM$3rRaFv6j z%`dd3UvQdRs^dvoBW@00N-m8G`<4IoXHCI@;~klWbHp)^JnQv;d+Aj09OagU&c~^s zP_=dkzjOV5R?Pt!QBiUDqfJ{Hxe!&cAr#)w#xwBcEz!`J0V9U=5o|Yit7#zX8>fnC zK+u3CM#~NNf8BF>bkDBWg9z>yc*NX(=m&hcAY3;k$MR?+ve1BT z!whXqn+>7GHe*bFRwkXJhJa~kB#%-7(yCY0#n=0`{>e;nUYCQEtSK&Al$t|=b^=%5 zY8zx@+z|^V_r8(A5`y8pZJkl^iYJcND_eeUsxjDg?u<6xtSJ>QS%e1VsiD*9y+!`a zZZ>}F-n_KNPf3Ei2u8l~$v2(DCX5NQ6X@rA;;+5y-!HE{JR}D-_Vom_`G8P*)Ubz3 zFq)Vu1jU+^D$O&OqA3~{pB%erJEH~SoxrxH)g+VGB%5|pwO!xws5xxNTAWbhE#7f2 zpO?T{M6;7m2fxNQA&RM=nm^T6Mzn%j-(}Vr_ty*<1s=YTO#fg{F)VERVq?N={B$~M3J3m0Ah z_lwtEaff=Zs@ng;6Tj!C#7? zvOU<5kc}jZ?wDT)CFzIYp35fF!@|0RxdJQEP?NM{&@?Q{P4Hz_{qc=w*beSK&?c>5 zG@c+3Uu^s~E3odFo4p%wA)37-j{D`O|K4X?H*7dE<=Z=dn~XxrhV;uAi@qh0Nqeg4^i8no!hMLXgLP^8hL!JmboLR$J&u&>wvRMO4B4MFC$l-+6 zZ@3M#Dd{0@GOEr4Yplb)OCJ&i=gC^RiTmZvWil%Wnp-)M8!i9D1qDEgm|0EON8T^| z_O~8PLy0}Z#MawL^Tcxa(ReIy78wcSeI5Vm+V23W)Z{FcST5^QnI()MZtb?w=49au zdejpq%ea_5y=(7JzyD8fmlRIuopbn64?F3l?^~TXp{c;`fgGH0WVTE=C*91=a5v~d z7BY@D+PZ`wv`Cen8zNU1cQ{<6tjR8&Z>DTS_WZP#Ek~#Dck0wyf^K5445uo_;PGqa zi`9t1bLXj{u#ua1HM=v!m(P?%{kI*ujn+K8sxh(gh^j3yH#Sru(k_wQR@+qVhRzt= zDDz0Crp3ffk@CSO*`pc>%vdMdRA2kiOAg_K*=T!3=L@vE-rRx`7;Oeb&0H0^23<8) z{j_GT@6t|Jmm9Pb;Gi!en*xHM5K)v=q*Y`U@vW%AWfY`xM|QlkSbhsHTAdvPag^iQ zv*g=-hgmO8rnw874aC=bFh3Ksl7A=a;ns7TbW|JU`R!XBpTzxgxP&rNh~-KqQ8Zml z2GC$?G1J#NDfuDxvQsbiTzkP^z2cOIkv+T~bD13<1k!K)hi;w8R_0l=c^J=#0P#P> z(M5P|Jb@*Mk`4b3Z42@yPIRL^-&lX*zU2j6hdl^vx_Eb&roB)xs*a{b!WboZAls4v zpI7gzcy`6QQkuZ7n#-$oP+YyC&UeXin{kEQ2YU$9X%T3vMF{RNp02)&>C$LeqFdnm zl(~OTL;vV{O{Qm_PNYfdrmuhe4QE-ME4=iN9sl^}zVlyyxDa5^z0tfSLnC0l+*1uP zqW3{9bhP?jicfji5nCvss%=fb;5Pl=_*dIdDiv!R+t6ZWCmN^@d> zy-9gQ@PNdY1&t}-dr9+TiCmZL<;wUQ&&X316lf#wEfLd&+gN7jPcyKWUomPZ3k88& zzWce~d-`LJJ7OUA>pT8t+ z*ULYNQ9S$bV;_0;8$SNkpJZ28H^D7rw3D439UCN!%xHt)I$x~R*k8zxmeEyTfe^tA zLPR%w)Fk%#xm*w_O5Iig@!@^6^w8-!RCB?P*X6^NSY=%+OH;5i9iwK-vNBeWV<^4f zbck1tmxvg;IN3%W-xNulKBd3+_I!#h^0_YX(YhfN+4DC}FrkxbXs7>=!ocW!x$DmB zFZvrZ5X{NAF)*G46Mx3$;Q2z#o`G@|NOr^r(^%SP6s2Ikt_)-4! zchaT$m*yqwgRI-Tl)lEbG}8GZ3KVe5npQurL5`^p>p25NTc%HEgF&KWFUfm1&p68T z`+oYpe|+0B+=;Ted=r44LdohEPyF@w?zAV%oJF&Y1=L2#5pqv0Y!(h$<*0*eMbqH0 zEY9=MG>0>7G>2QWW{n9_%o{6FN1>}DQ6ruiXsq9Kbz~cQ0$ZJn=sH^se7`GIgyUR5 zM~CBLBonrV@cSXxs_EPcv|5bN^6tTE>daDv43;fw__oc}Gr>~+sK2HGX|}J&8p5=Z z%q@7gU-6|seqJ^cL^z*90sogyebrxI*v$mBm9s+3%-NJZ#!jw*WmBwOY|G&)-C7E6 z6-wE?1Bg@o7iWAHu>#5?a z`_9=njPC7;(Fo^>Qo*-g5;dtjx(8Rjqb!Dh7r&7Jx}wfH8}V9$nK_%v;%W2;KJx6> z(|0=aH5nze*p}4pt<;(~lYcU3Xzg;k$IYF40-pjI=>b4lo(5BMUMeFyvq)^dOPS=; zrlAAB`l(5kI!$eJ{yWYfkBw+0IcJb3&~)rz)-b)sHp1pxwH}o|g)~PZ`$Y(`M!*%Z zFMEU2Z`W3yGAv?}JX%D$xrnX7Y|5D>>u3||g&%yS8~!KEa4f_u7XR91(|rf2TFtkw zlvD2}O=ixnk$@zcpjD*|VA*}(GxBVmY*SO$C}Nnspr^<&HX#p6;TaL+p+LbIFj_eu z+St%*X}`?Ks=K3G&N7OiiG(sebvcdM>Lft9_*J+m+@7)WQNH$P)7s7<4 z$u2_5K;mKbqFy1BK9UHVtq|Xr@ATCj6W_ty+`+e~1y7R=AOk>G>=K-WT2F$vkX>XB z%w?Z>>(dBM0^Oa&%cr^H_(kv8mQ9SabT`@BsojPhFIG%PLc-ntlt_GjH4oUz{q$os zSUd-|#B_B6WC=$Jh}wjS&*P}l`eA?p{%j@Y0wUfX(8ZKeqrjwFv8CeSbj}Ep*=X4O-mtKuh5= z6Ei$%!;Y|$X@e|-)7WgbZDhNO*6DPpp8i`O{>sb~&_9Fg(QO`KJzseCbygH}^s6 z7E=FrUjOA5j|1dWI)Y;Au1QibTdyohEp8;TbbJVq83KU#C0Pfks#q*k@>$6)Ox=2( z7A!MOHKc?>UxEnDKx`ok@zA)nSOSQ7$nu(0R=`m7H3ia*{k&U3iKoV(Du={8UN{%G zA|vL?sbA*0>zMt$7FzAsOiDO?&E&(z%9*Q9iRoZcn{1k2&AATQ!adv7z$VE{Kla)) z$^UIG-;4>&c)G_u>wo@}`(-9yI~Dgpa<+SP;wt75Jla%YNqQ-F<ND6D8+KMOjR3s5ylb4lc=D*HOam+CK<=^4b?;5z z`upEG_tBYICz8nIk;l(V^KG%2ax(Kh%lKWRw)08IFi>*!XzM#dGwxCH;yt_IVOG4Z zFeHo;k{Cp8G+|SrxX1VMD=Y!RBkkM97#@X0jXO4~og7{PQ=Bs5Dp8@rh!D#5gfoTC z2&I#Z81Xkyv~FkPI(9JD(9P)DWPSBPT+9)xp1PIE-;204*0sMn$*kaJtVYcP5sCM$bs)js7RJ1keYF2ah zAd!*@|M>Cj`p#@Vb*X~qBS{=J_ySc84z0<8sIi*d2ou*cFCgfCJvMb4S+t0fP%_n% z>nN$}z5Yi*_Iu1xFEi+a+16WM-n!@{RW__8CFEoW=1u$@>hPsMetw%X2VzG(?37pj z^_RyEU9$sYo@5I0Oe&gskmSc}If)p>G#CdkH`*#L)gT>*_GbdG95?C`wX_*J0E*>A za{XJF_VZCb3=Aoot_?H{d_~NKF$bXW+$4*m;T$;dZ-j}(F}RgEH^_DBO0qAxxb;H( zY+AKsD{0)fu;Cc%g#7~~$;vEjtymfMKm3f>erzFZ4MyTWY`R zL4B7|e|?0@oAeVFjdYLVk>98_mVFFaIl+L(?(8}RL-A>VmJd~2wUCbLN8?-nM#@ag z{el(?WuHwkiuCd=-or+~Yc_vyAU-yQgMt>u%^mGef6)jY24)M+VCpSTtH)i0trz^| z%TKn}b`zR-Mk4(;ec~IlQ3BccJ+Tw^%6IO*sghW*G$bfcKD`CO*s|7l>M&^-BNnPjb1;&S3eXzQd4N}&N%D1_rK*hZKwnfu(F(`F z>gzMc!MofT3Lo)v!w;@F%cwx}u^Lsw6FBv-MI#Gw|We|c(fdIImxAW zQum=7sZI26ZUN>P`^AmvqNIXw0SJ}VUIn3|zqKfcJ?XP?S$YHUr9ZiGUSflk{O#)` zCDq+CmXnwN{L~m&5b0ITB(~HfY5KJ>uoLSD`l*=8gYb&p`pCB{Qn&+>#wIr=AnW98 zrtqzmM1Nahl5J%WlVQXfzL*3jB5a&nOQ6W;hJ6Jn^(FDkT+2Wt6mr8;04(Jp`>>q= zsGORuma^4;dKITWg#hqnxgTAu3Li;CDi8o(Irx7*s}SA%Lcf7z|DZy%*z z+hrbQnqId7stG<;c|}Z=8AnnlVG;(wp_pZiJtjP$qMM; zgwx+BpF%I&_i_AL-ly!Qfihk?2XAZpBb;fT;UC%oCAwEJVdc`@7x$nJAH)J=s5P#I zf10y#8$}=#XTMA5y$GSUS{q{)Q1LdwVQck>J!UY@o6_6cKjw<;z4_ape#?0oD|;pO17LKpx@NMndBORX%RBbMn^GQ!jjc1*}&BAzPuP961G9j;p%;=2l2$m_wGmpIy^)ieq{`~JhBm2#lZvnuQmXCbMlV0@h zB&ZGra5&}(Ku#|F1uf*ty%7f=NTjqcIq%3)L^@f$Ssv2;z9Cw?Ug%tDeaC&~U^1XO zpA{VKRm$&!c_e%uE<_Q*UIIsuQibz5*DgN;k(;CqT+*sxVn=UJ%R**#iM%>)GNzqm zKhsQ7S0Fu^R*g2ogwUjke-N65)E>HBG8O;WTI>sza&i`54H zbQ&?2jB#GOe*xHR;ce6{_cNHSY{1vMinB+rQ#Q!gYn0vO4E7p(;a0_Txj@X{+3R6X zgKk3j_1Efb^|m{t3!Wh9xzy>lcyvf;fE%Sz-zj#)DvGqa4R-yEN|AF>4AAU4u+wD> z$sYUA+d4hCO}3J7?EURm{^y^*;E8F~624QYsGahvzqzPW*c+Xh>6@~m42?A{3Ve>O zFMMu?^ODqTO36p)KS-D`8_I` z?W`~wce!i5in0#3@+^`aM-dyavO#hUJb#7|roYn_RQ9wA(?Ab$ykrTC(sGpCoYGv8 z3edt9ShgIlyq9(ZBeY81QNMKBYd$t>Hqaf9B#CHC8np=(;7FZT#B8mBYG;|82sSe zanVnjE3)kPh4t;t4qBDq{_y??uh%9<!{&{u>;>?k zN+EH;wn-M&yX>{}2W)dW|5Oayp@5AJv^ijR-f+?1ypo^;vRCOk`VnWn@sr=0mCEMQ zH3y7xg$LO_sQb}ZS$$(AO^&?QlpGS0*5n3msfTLDTkh&J_$(oa9nz0@@%)J(>M2bC z!|0MM0#}>Hck*~eG3|r=ZlHKigf#v~o}3_%JHR0J(zN2l~#RT>RnR%*@ZCXL0toKlSbT462!KE}{of z-n?K5!?v}{@Bs8U;Ic%PB%Btf1sJoFF}qWK$wa^$L)k!*qJbTL2YTt8EHNnESa+ng zDi?vNuKMpu2EF8c{*Ki%?Y73xin_-*a%Wc79rl^x4sd6QamD&Fg;?j~Ytn$RJCqB! zf@iH-aRfw$8jo!?sn-5nM<3zFM}I3JTQEH3@M9iz&YS-sT|h}dG0ncmb4W-G*-WQ2 zV%r=okf}-=HE;{tltq(p890K(koVvwl}nksf5$~GfM*_x%%~Ppj$B>0^kzHs(6>B$ z#|@fmvs2H;Mk$C()IV};=ihW=VZTPKOf%rDv$PseB^xsL0H8dCdR~~t5u|Z%K~-=3 z>fgThjEp>s4?UdN_N|}&?g$`mM^kTfK8acPky4ofWy2I+6k)UVq`427XQ@I<0Vtz% zN^31c(Px!I;3r^I-Z3wix*Gx2T*=$iGz>gH6+%Be**n7rhzHh(eT)fB@sdezY~RCsbdMe-sXoRWk<|024)qd8h0G%vtUy2>Jt+Zv+almqo8g>j zUTiW7to(ZiW`t^D)p|i~Siw>4b+elnoZ`IWOF9m1I;C#fifQRKdq3Xz)a(q7D3T#~ z=G*`2`{@uEY;FwdokX!S?MYQ_WJF;LkT!C+8gLK@m(nnycaW2zQ3%#uz|!#|8hamB ztu)H=?>^9e;BGac`N6sfvnt(KX+0yl7;q27W<{iwo2Kn_oS?=VX-3eUMa+R$!|Ze+ zs*G5(*%=*+(2R**Fx|xYdvE^Mr+$Y`g2SPnk}&^YevpRlInhO)y4`KIyC`jqo!)3& zSQQ+!O`U;+2uGzTZqfZJZLT%!*7%9gffd@t* zZgou1loS8faB1ib=qg{zT_xSbf<}^Dtr#1zuCJUeV_SgB3fQz)pDxhFw8-9DzVn&4 zo=4#(SrO2B{B!^Ci``#-2wEMO-R#)5kSvM_D}l)Bm{Q*3G@Y zV#B8g5ZQ>*^M|bHh$T>FQ{WIoGY&D?xkqwnxpxh(86tB;-kAtm!~q%NoNg5tJuM=i z1~l_yWeW}-uxw)+l?tc1Dv0rhTvMm=e*;mwAaY~O7y?E<0R(l zh7HB6lX$17R`W_y;b!J$<%^#~@YWxE;T_M)l!GGpkSD(I&;IMm+cx(;X%WGalYt;C zE;(ZW+-Mz9XH^Upln|r{lG>#)a-Hv<1|`+p3#Y-gwA~vw!C|9Q9!AARAeu-^oktYv zH*kJ=lXPUXj{6Hi9%RR;RryLoHZ+o`VFlH|GGh@-=agn-Ir_cE@5)`Yl@_`+Av^|m z5V>E$TJ6HdvqSKd8J;7QO)0}+VN;^>)*t?h-BI+C4LnWLE#f(qWg&ZWJbQekcuLw- z1n)v;s$(sny|X@?fNI+0Dw;inB4{d9qG%yo??{3;I*Ky#8!*5%CdtIL3#3Ba(*bKj zOhT!&Y!o(@*g2$8qJs6^#+8M=V*y3Ywd1%)iQ4O3o&Xz=PDah@=~7O1>q z=WAQ6c4kvOLB=ccnwU-L056#xnq1kB@vG>1NH1Q(UGEU}rU{g4S?`F1Ky)V{?;}$s?U`s|hvfogM{rnXn{P$mdn?k%1S{%(TeE>wy)*Cwx88U5w0Od`WSskTmW83@06~- zWQ?njHchz>;@4(*?P7_G8*Kc%5sNz!z&GOScXaPNzX(=`e3269>-p+!xj3(=-Ci0Q zu)$)JF6UKI%$S69ow^(0yWe+&#{*Ej{VH~;&rm!S6kqn2=g(T4MbW`eQ_^NORW{x9 zo})3UGUAvjZH%NOXKHib=wu-Tb`z%3I(Ot(zjYsPlLl6X#K~^GipHU6iZ29<6-tXV z){du!%5xF*yvG@MAqB2Q7#C=idv#dxMYRyJUHflFX)wDbFhJ_PzN-%EpeT+a$iyxm zz=ozwYv!PIufMYRb104-35+32mn5=iTE86$V+a{D4R)f7XmnQCq9P)er)gqPAA&|Q z?64rlh9SWfA_cHV@7C1=C>d)-SQyPFbNFb~c4L7UYJ81vT>sdVRK+y4 z<@y*s8FdRF+Jb&~(&`9UC;tSp*j-8QSy5+$MIg-1=_%4i4i}ns=^x+zo)=|W0%K2Z z2gIjNqBwT7rN5{n1vxH33rYU);>?k0Z_F;UT^gQdVb*3o*|b5oSZwb6#TC)uBzh?c zDvuf62#89T`i_}j(P5}k+JQ7XYByWrm9Ts4ptBEr^9HAvr4fhKO9a(&Q(`|Q(^{5W z-1QqZi}$s&E)i&KithrcUURP>=i8Dn<8nQFyPiYaC9HRg|2D(ET$o!-q^W+VFNUB%EtkHV zgw_AW)kKWtrkvurd+YpD*y$U&n*b!kI;LjLOTWYZ6~Lny|M}~G!I+cHy-zFwj{%%2 zznT6y()$3o%LBbCa@KgI7`Y)JLKX7dIyRRyg9gE`&1C$tk)Am*4Sq7%;$j_n+WKN_ z;wZ|d$ow83QvGv>EBP7zWhPf_eQ2^=CcH($DhOn5AYz|FZpveqHgYe{Qny~GCVpDB6uDOaf=;y zZS8uHOOp=dv6E!fE%JcISpppUJ~|~1pl3>;UOXF}TpiFbCAa4*pub}uW4%9LM| zuSk!Vj^ZHDneg;gZ`*hD!a5CCeQoDKayUwx@GV4lf$y5d0e4J>Xh<@H?-byBk+Je{ z5H>bTp(n1AY^+We_zv!hl|f9h?@=?caA?VBm=_3axkz$n8ZG~5wK?ttrHjxQ5A(c= zNw`?#vW`<2dypK#G@wcTlt=ZivaD)P=fjH@<^r_no{7L&o~d-lG|un}!X@vU7+ge~ zx$YBc*thl^5XiM5yn$SLPTk@>kBK96pf)vBEi}+~z@3qt+@xvP3udUf-U(<09Oh|Ww|Gc$uF#aaX0I^rfZww{?}LV+91*k;`VH)Uo9aK}F> zDZ`16%#Mob$;bkyXHeb_cGt^VIFdGE;HEU`48%<{uIW*WymeE94Z!4mX6!}Ht{&-D zKF51Zd}+G!n0##87!9bU&-Ma-E7$Q|l55?n6{!Xnj3P7^q_5@y)w*P_~7 z%o03%_me|NV||BEE`m0lA+XQ1;Im0*Z4L`ZqWVurR4-sQZDBJ5lf4HM58jyRXq#ox zjI_*c~hXbWH%5zR4l39(v>( zX*=f&iW*xjTims-WHm&)sK0gLh(%`C*Q?+i3fVe3z$!V%m=xeCGp|6GM&j7nAmhP6 z?q=2+Qz#$n2y(pwMW!b_uPvjKf~Lj`1?d3FHr7YZOj@yh`9QlN4ptbvJMgKdYIU_P zW9z4K0dyfJeCz=j+W?Qzd}=NEtY zQ}?FfO@BJ+XBsn*HT^+@uJpFdar5xEgFB9EU|^b!rIw%V&q8+^lh#ggQ>08#tG)Mx zlX_C!;((nm44Kmi{OhgG1a7qi;tp9m4UR_cG-u&IF zs%0n{oK21*HnFua8tA+1|86VGA%I=>+23{lcLnX#BaVCQv)=KAA1nYi`A;WZ2v|Eb zuxN;~g65On<7y+}9B#(F0h*kH2lTGdvqbg0qE4W*vFhrkTR07z)K_&`HY*n%PbOAw z`G_I~Ju|6AXQYvvBGmEX0q_mU`X_zo7B5G2CiBc?)Nc)-?-eFJN$rNhpZ&!)P@SLr zND;eC#76tYf{0D++-*Mtv0r}1+uZ(`K@FZ3HV{j1BZz%1F{zwG#I{zu;Y=oG09YUD zoz2fSX7gR{R^3+>{nmRn3e#bxrSGXUiZ{u;bk3tix3*u;)tN%gE-cCzllgrm5U zH20*VJGQ~Hol2{~>N!~xF2}m?PFKeoipbgdEQ)&0sqL)E&P&~)@qa;$-HyLK?=g7t z;m1DaX*R8h+Me_xFQ67D0MCtPUNC5GYl%LiyfMvB{213)>N2oaE@Gm=Z-8NoC9G1o&Q%-njLV)h{fBoNDeaRtzM2b0x^w(?mI`L z@EbYW&!a_ccczuCq&e_xpF1xyAgMA2TJ%kQh6b}4TBCn9K|vbK+CUpx+X%|rX?&Dq zD{Xk)u{s`u+l?~DI_WqSF?DO-3@snYS|TB&&O!F&Kvv!g#>&$Km_|ssz}v5=M&pd^Cr(EFWFf5$_M#xbq~KzW+I?-bEY9NA`I5GrZatj=;gK46cUR{E4D7CQHy z_{HC%nhKwu)8|xmr|oMPxHd#8zGgh6d(*sE$=K+|1yl7=5!Y6(@kP1`cD-q%#utlp z7xsRxk+>{^>ua)Qhv!!I?&VfwC1yG|rfmapp<`xvL#iB-HKi>%{p713qi4_aVv@JC zLG(?3KW`AFM`LP~8ZMy`sR8LOYq$x#0mS53?k7^=tI459Qe0}EBLxaI(TbUlVTz)Z z2OqeHBG_mL`@j$D5rTN=TN>Tb`z(k$hN$u-iLNp=S|=%=yN_=Rr=>^}#i&3ka(<0? z^RtdxF&p>Y!^RY5*|yrEeNYw9u+`IdrD#?-J(7YXX3CG(E*z!cp~9DZ;7RhUEfxP?&!^4`5GeF(F%UR;uJ$?i!;@*Q>9fY_!d2)}7SR4)eX=H^CT=uyq&~un5~tcc(7y|TOP-~}TD6*Lh6rkh z{1vwa+N7^du}o};xqPd?u*;Iq=9f?GEP`)oFBhbA4&(J-{@^Rz$XggsI_&6QI_=d9 zLy7HZ?ir{A9OZ#XDU^nj_tbh0zJWcs>BbcB68j^xWZfK^Y+G!aFq-P-o!$1iZreoZ zo@y25r(COuKK~khNHu&1y0Mws>aN3f$?dd(mbSR$G>220tc}jzgXn~&l-1!YOj;?d z){d=0$izbld9@-d1)H=%WWDO@YUi}KYIgCZ^P^|7D`C;&+;Q#h_rLT+4=uB^?Pzuj zo&1UqUU=Odn|mK~=*;0+#75v@S3Sp4?IvejA#&DMTYU5s{M>#&TTi?c8FE!DLLaz=a+Z>Qx`b`mfHC_E0+Ntq$1zZvP=lio^ zwWiV-O{7fPa0f|k$RSFuy(g`vwCEhZZr5(5u~^Em=SQceAyx04Ez#6{cKojw|B73$ z2A0&t|6;}b`vb5X^oN)vyN50~jQl&NF1g~WX?SlCmFOuby60IjjDI`0nK!ptbeyTc z11I)X6gF*MiGwOh-qEt?wifZ(8o6c^cpKJ9B~# z#qX*sre=&0@tG`@`nXNOO*}jmPidtkku$et%98(=M5jbrN@!I^t#7u=fI<(9A?LXj zGb3DHZa$2=2YLvj5p_!;!=FjbQ08%&mc9}a}v;+5pei--s)2j7V5aehIog< ztJPO9E0k)#mNFro!sC-q_Sc9~6d{q0$>JADG3ecf6uTalN@9bzKLo=7UQwVCh;sE__FbZm`Z$4#w-!LUR%c8Ck* zwltp!!TtCzWyk0=yZs}jLZ2-H+Y&#oZC6-LMTpP@B94zwHfk-b)%C%Dc%P!FpVDlY z+BkeQ3F{}fmAaj5XuAP-Mq_s>liO?Vyy23Mz9u`pI>qGhV;*tV8~*p#Z*=Bsj;NVK zNJVLEi8J7yAoNRhjxxKo(n7jh5Yec)j}VH%O_~S2e?G*ac~I^Z2>7(;EHqTyE_<=8 z!8N#uoJE^9I|03NqiNW7eD+%)Vr`=V2eA_5iS^fzT2GmBy+&XF~F6Rdsjby~Z;Uf;qqzBzehGR8&AHOH86hHobzOy+6+RwJ%+){#dSQNEds{B&%&~j>wJ`eozWkf9^B0UtC|t?5xU(&&ok{ARHe+B;XC-Re`G4$wa>{P z1V1<{TBao}arw*ov_#b7XU(iB%^vOGRj?8x-UUPuF0$T3kRho3h&F~6WG9DFNA4Fps-p*qS^Zo=YszXd1 zY(Vu;ZlymS&x?%u>^dxWCHuhO?Y3EY*%*_;8kuD?E2qx8y>=W+$<1g!2{;YNg_D0- z6jAXTlU} zsQ<_u9RxogO|pn(=SCGUpa^yv%GRK)U`dHuAnEJgvY=T2kohGx0VqLhHq6J5H4O|0 zVlVYA9S$d8=q3L)63xX}tl-cKXS@QxbURdccoTnWYU-l|EGvP#tle;u&}^Fap)|=3 zr0mbjF#NH{%y}^mgAQ`XJ@%Pz`+QEUC*aAvosq$e;T$tlGgi@@(5l0XyLklN0T=0H zk(8WF2uc_CBXufeMXJ`TBgCt`4NW2vSS$&$Xzg-uM2O~ z-bO#BfzS-+2Ek5GWifzD}5!|7x< zMjmq<;@>$AW$)ldZK$5M>P=Jf5(puX%A;_MNgkd6>@6nG$WO9KZIZ??ZWV$VmNP*} zhqXmnOUVkM$hi(Gn6XVG9chv^};IybW1t~2BU(c)745kW7f zmiSrd1WobU?w|47)~O|Ob`l8Tdb7MX0(&5Fi#b2I9A6@U9r+mm8Ii(~UXI8sfFyZO z`^^u{M)Az{IyMwHgRyw*s{o2mPSitVcbHQ!Mkn+QEUPEa_(v z_9>9HqcfdDqY9F>lFN(aex?&@%!F;aTZ(yww-$iq(JVCRm7O2?rEo~dOn zU|xFh=2woQi^-vlIci|CYxMwCM!S+sXPe6Ku6%+CNm-xBRQ;3;{|u5D6|3OHN%etw zSYrNl2jKx=DSQhR($Msli)Y<@$Cq25@c`MZ3HP!^z%Bb{Ql>+gb!PifB5%ZLzsG7~ z5k>WQbJt;HH8w9iSy41KiC0c9Q`* zlhL5rtb`~9ZiFq4xFG0AHw8l6_WLFc$7rNd>P#DD?UcT_W|bzI(vLYBNdo3=H>YAW z(aSKrXZIFIv{Ra$@{t3=sYQpp8uCZW<_~hfE_t;9AqU7k=N z2-ilce6jCE%Vk1PjfFnv*|HfsAqX!gVz@ULc3@L_P@{+78tmmrBP$ERu2A~8av_5o zIa0M;?G+XGgyJHyJ{zlAMk7K=U^3%;?bz=UGWEVou3($H9Epj=|;he{()+0{O(W9%U3m*#*=k1NafyEX!~ z9bngHpti4l7zU7Z0e$|I9F0?kn^p)lDb@eDXpQZVK^^uqGp9--kCLix#=+oT785|j zLr=p&hKIi7qZw)*Ah(u})Dtv7v<-SlbsA5Dsh0OO+9L{W->NRl9MH666- z_9w&HD%u=C5d3f4Ac$uJ18sRi6J-Y2Dn%dbeUKaP2%D2$uWcm6Mq zSpnqi5ROVZft#(_(azvv_^-@Hmob&W zz3;nOwMU!^c3(-(rtsW=O~u+^--1rWIqAbZ zepZ{w3wLWEk-~hzwiaO5kXqBbd?&f4EEo;4sIb$xy3+(^Gr9w=xY}5yMTTS^JR;*g zJuJHjo=)oFgcrYuUGooUkA>TK*m(UhDy-yD!rt6v%Y`)~6k?krg)~##rMIriNg8-0 z*@SYUkZPXMGP^6-S^2+lqq1_lmtMdeRas8jz%ZI6Gwc+L^Ez6 z9V5x_MpT2`bd$-LELK0^{K@DbkCw6^p#(^V(qj+x*~UI?e2U9$z$BWQwjj%G4ZfrU z(WdDAMJ#t0uN?FU@Ykq}{VWuL{LLXyY6-)%+jl%Bo4Li?kdG-zw|v)jP-fc%%B|%m zJ6$RVQKiPv;Q6{A4|>RKvr%KXh^%8;Xgxtm=cb5Nf-E11>fj`mM{`cH*S<-dnyo0C ztuLLCmHUWWhdQ^9olj}+fK9O!jL{6x2?rwTd9B(AS5Dz{->o0Xze$4~;KTYm-_>(m zV1bM@IoK{xWv(&Fgj8wtykp|Vul-%8aCwxtKpp$YvtIYHOK!LW#XU6Ry*Nm(v(HD5 zHa--rSXK>+L2#$TC~$`AHP4w7fES3e8jR|kdHc4WPKJv4AnSBg4-{l1ax@|8Ac6i2#tm@WP2>R8MBgpXekJ7?mBZfWr493Y=C46JO1H;vn|J2 z%mXC-!^=Og5NynL!T!i*vZP{c$gX1Mtl$mu9SvPESgvdX^h~8Fb---^h~z=`r2^>< zRSh%l#w5I>pt0b_DV#Hn4_144TPm?UqcuFwikqG5p+Q{0s^M=oR9E&ikNRO(&%eD3 z5;s~$ew;N&kO#(;ZSFoj{bG(XR|63%8gXWg|5Mdjhw$$1dA$Lby1D#}!#R$Ndi|n9 z7_G9@O}pn6m+FRzk@!n=G2+ycV(pdB+E88j5yNHxQpJojv|K`L72qVO=8LAnTD#66 zH$EpQqqq8;MkFm$Tlv#`M#<1g&18GlR6W7Fm&Lo=8>yG-l4u8mS2Ph{;T&K6iCydo zD$YM`Y8eS`W=oSINNx0|8m{;NPUf;&?-9Y`b{0;6b7}s$6W;bL^!|@YA5Htkks4MQ zm8p;Lg~Uu+_Q<>f6vPw;Gi@DkM*@I+4Sp&zYt6Mvio(_C|wj_->_)Fm^u#!-@-3U57uWmST&tc1t{TH>6f8 zEL2MF?hR-Hqj^4v%~I|BOc+~9S$suYpJ1>CAX@{eXI9l97r1K{Or*GisOof5tCq-? z4=Jf3kSv{xRq!K=cRjPf{hrttxX9#P$d=Ze>c@xjASfAxnh zvc2mGJw58@XCkCPgjVj}wO^k|FP>)XZkAXmG)X$HLggl}(aQxAkONoyZX`vnrew%L zr*J~0E^hUJCW|p>6K*Px!le#dRPJC6(`}92JCt7qmFM}reu*NeohWGb93oV}x~@>A z<0GjN=i&}jhDA*TTG&29RS*iZwlhn5v4lH-?|lEQ7V-dw;OwZ}~EI%CQi zcLvAUp?S5Ty(!PpeZ*)OyS7X;4Uv=7KIacO({i9WbtNPwb@)LWw;Yz2#x2{}MROCg zhJN|n6%ioKzzm?nVoBB~AP;KIxMLs9PTie`5I(izI`ym0jZlco-F=BqaK;grH;pxl z$Xylff6;Wmx$+Fru_)D-VI4i~)4a3fCS!Z1uQYn;w)JsJqil8tB9Epw%~qZEa0SIH z6Q4$J@d|r6!J^{^(}Q&V((SOcGY{isvf{{& zRUS>T(*%srjYV^;{_p2V|yU=X$6kaDBJT+-^V+R z-xTbK96*UoH8ytl?;pyQLQVZX|<=#g_;W8 z+WmxpYmFC|>twBDpGGdU6xe>GpL`VxY}*VndOI3V`0x3Sn8h^CFlu7fHf)bqG`@9n zQ^_1GrPm7gMCi2Nnjt05ht%3lz{;vbZoATEDnkRfNsa`&r(MV3%Wo9Xyd&?jrc_;= zipL4<>r#ZvZ_qa6viz)%HNz+W7WNb=!-TcIrUdwfyr64fr*p=bZIi!%`gYe;#5F4j zyJVt0#1o?3UYwe5Nen^7EE}-7?-)$z2h67&wtU^vZHVjXn9vh{{m*CP%0~D_LIn~N z!fdIdod~kObv*MH`rZhCWFsQ5*7a)@Crr%*tQl6J&mbk9`c?7FgD4|)3hVs)KEz7F z7dP~FMStrRgj@tmC)0#!0aW8V0ceum3k~?F8A&s9H|?l558=3eq0=}(zzD;zlY{p` zWbBEX#`-3Kl7JQ7M|bPL|H%t7Bc_m@de{+D@Nbne8a{PzHO6Sfn%<-H*LOoPXF{m; z?wxBgjiVEw@>B8Y%Bo+PY&Fd4tT9f9~&5xy=D_r2J(J@UmN3$9RWA^U1H3s)KJU$+{?<)lb``rX*FAbSjI(1Rt*l7O%wIf*|_IL$0CC!+*lmKop8ewr)vAI1+!#~ zbF}UCW{mHg5AH~DJRNVe42_VOQ3xwk8YQ{c5)u5MEwOmn){wjP$(^Px z_0g?QZduh*fexg3PlM`}AxB)hJD>!i^itzz!K@Lr9-QL_0+hIU4zS-X1CQnwJ=G$P zczxGXs8Dnp9>jSzD|vX}Src1G;mdkh!*#I2_2pBkn4O?Wn-ZKoMT+EHs<#UnB?H=x z&VY|Xx#H$tH9-Ubzo#LBjF05I=1NibAXoROpEV6s0#K^*}w zAFk0dO;iE)Ynxh0{d&7O;hq|q&O@(^R7MIl1SBmqrVdfImae?R$AB%-#>JP|J!O?~ zShZ#}C-�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

3??#;yu$@u` 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

0PX$!GaX5Iq0xDf)2XKfHHm2R*v4uM0wz89# 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 z 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Ðly%L)BAdZ?m2Cy$7gIk%kJ7J*;kD|NB!fT0p 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 E_ka5o3htMra%v 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 diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/sphereShape.psd.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/sphereShape.psd.meta index 8ebcec20..159ca4d3 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/sphereShape.psd.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/sphereShape.psd.meta @@ -19,8 +19,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 1024 + maxTextureSize: 64 textureSettings: filterMode: -1 aniso: -1 @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Doxyfile b/Doxyfile index 25f88f67..a3046dee 100644 --- a/Doxyfile +++ b/Doxyfile @@ -47,7 +47,7 @@ * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. * - * $Id: Doxyfile 214 2013-04-06 21:15:15Z baaden $ + * $Id: Doxyfile 642 2014-08-04 07:30:33Z tubiana $ * * References : * If you use this code, please cite the following reference : @@ -220,7 +220,7 @@ STRIP_FROM_INC_PATH = # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. -SHORT_NAMES = NO +SHORT_NAMES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style diff --git a/LICENCE b/LICENCE index 15a34902..b4ed8a5f 100644 --- a/LICENCE +++ b/LICENCE @@ -1,6 +1,6 @@ /* * Copyright Centre National de la Recherche Scientifique (CNRS) - * This source code is part of MDDriver, a general purpose library for + * This source code is part of UnityMol, a general purpose library for * interactive simulations. This software is governed by the CeCILL-C license * under French law and abiding by the rules of distribution of free software. * You can use, modify and/or redistribute the software under the terms of the diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index a602f0a06b29cd0cebfc27cdfa39cc28698298e6..c61fb3a014cba37a636e5a6e672c80705452d904 100644 GIT binary patch delta 85 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 literal 15936 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 YXH_i}AJ@~-hklSv>1TUF@kt8uUu!7K761SM diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index cdefd0eefccd34df5056b368f4201af1a7df22f2..d7dd14b7d0b3f9507daf50da486b375cd08e4c32 100644 GIT binary patch delta 701 zcmZuvy-&hG6n_T=Au4T6aIlIfe&GNlD1#(I7>tQ=Y2xJ6(26yR1j?X`H|i$23I6~$ zCl*I`amT?B{|qO5ca)?=Zn%5z*WbsxOS_4FLIVi?0;qie2m>g10PLmqQ<;lgOFNir zRvUJuYMF7n>a@<^{CKbkIU)<}jGXYU^Ge=*>|2^)&pt`38Fj}lUt79yS2h|>scBX$ z2PE`dV!D)*F-|PP_ea_qL^I1+@z#aFhc)^_!@jqKas>gt1R+G(K#Iz-5i}N|kG|?s zgx4|s?-TcENQjEAd}-9dG#o=XtxYo6O&}?+doZAUVm*P7Na3I8l%x%>2B_$2hV3Q| zacz1TlrlNEC~r+-nDnrX&^U<{rzGuoG{jAsyi;-tLp-llzO9<#fprGW!V5 zhWj``8nJZeCpZj|01GIEc|O!jyM4&H5<6A$0{QIq1fsB(%gJW51_F+}g;#RlmMclSPT-uIU$xevoPQh@db=stiXK=}cfrE+PtUGAke zw8OgNnd?34Q9B4Srjs3_vm>%63xfyp9Ah_1k<7AFV$?YhL@rzdF`oa9!nH42P`FO> zB|`KeAvVDEI<|9+rsY}q<}oK|g$#cZ(#Y<3+B|zAIg;i36uVdRlevH=>0Pi_b^2-{ z!a;XD$B53!{M@oTBTxBghonf~ZM)-of$_q>CSjkwtJGQK$=|os#(P+b42xb7jT1|H z5S8ViHX;dWJ09Ft6Lt^YsPo>2TlkiPIO-zLG1HW2mfB*mh diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index a03f3376f089975e7a0e39a0933cedd92055c102..afc13465a5ad2144848f512d8b0ae30d6a930bee 100644 GIT binary patch literal 6968 zcmchb>08`35QjyYtGP)_n>Ib@ebYehp3Ab3kibHANz$8ocZG29xJnruV0Q z>|a_sBiS%AqxHAyd5k>c-;Q2O@*qiwp?g9cKPQB^Ux=Z9pcbb_PLG^eIwStw*w`2V zyAIcaomdKZw1HYIs1ZFOo`z~&wv#XtiQ~pfqn?3Z)pvD09z{-9=)V|e zNA^6|pzQ^Th`l>f>;&UJxUeX}UVR@Ykr%k4<0Ou12z6NUAXpb0+Lb-WX9E|7*w)Z) zcz{I-vWD8rPNbVb?;iEsRAeaC)bkTB7@l#uG8#UisInL;;E|sGS&<6*T{j5zV1=RD z2M@4d`-AFE2$O1m=A{ajYE)4jAaWbkLC~mffSRQ`M1t^ChZzM+HKwSJ5V?&C8|q7S zlmy|a9$*wK)k#J5Ad%ashRUcOB0+enhZzM+bxKhkBXS$nBV|;Nk{~?QaYn&XomNzj z5xI@(@iM9>ND!XtNk+j^ol#W7L~f&c3N(G^73MZ9DB`J}QO`{UOLbOJJxk;^s^_u> zRihOqGdxd%@Ki4_ij3-N3~5Ryt8)tJMWV%gj?EU6)l1;ZJ8Gc9AiWF%EV&5p&1Cfo zx}Z?ScBJzP=~XRNS{u@9Bo>P_LV{qUSWKkXwX+0iROj>)L~LUk1x@~bEYlbX!ZV#@ z6x+LLRA=;4L~LU^UB+~V1mT&^G75%C=W|?BU{RrZx-L$q^VxINR~2SDy#WF&N}z8G zWA|p}r3!{gXY;p+*w#;Pljhj5dxr#3F9)_cpWbB@43o~~6(Y7Vje{nCL6)gXg78ce zjDlg(nY>2CHm1okrYRDHXS%>B7$%*^VZo+~3f1H1(=;gh_R}RDV^f5tId+#B1;eDX z_zV%-`e_z4eVK55jU^Z1y~#9(E+|yNFzGZtueC~SW4c0uvGb`xf?%syOs1xGmNDr( zzCgq_rmLXIUyxMJF}+{L^Z^ONGkwS?7$%*^KO$lq)5m2@ zpO7Ft(;}l_m~8Pg3CglAe|6bzHj<317Fm{!Y}0uqF03K<2%r1SV15!;wp*v9ll8Pk^} z2+#Btqu9=LQs?m=5!;x)1`Rf)t_qW%z9B()rf(Sq!=&^0cSLMs`W`fWnSLNac%~m2 zMRo$Wy4VaOIF54F4o@G(-6e7x)lY;9H9NpI4NL9%<=)MSuE-K}%EdsN;N>O3#& zw!m4{2Z_HFH2AW`ox-o+>)Ttuksy3;{mv-TAokoqc82jCQ`iwt*A(I(M4R0TQyX|U zQ<a| zs^M*QEQ<9`@J;w>3*Q=liSGc4osG|FY`m*{oq^6 zd|oiBGz*av#Nd=cGLg2VItR%$OP=&Qz8By>-6L>Kp*;h37Vr@GnrXD;v~!OT`@k1# z-&_?I=10Mv^x*(`(Tl^ywJ`P)Zyf@f{y@5p_U{G#e65;8#Q?(JmYIFr;)cJgJOTfz{79dW&B4p2v=R+Ds~qh(2IuGYK6gE>jvB- zdjr1ksxN~M)cC2^VZd>YtaVyr9T})TUby8!M?~sJI1bku^YwXnLmAD=cv+9bmQN^d zv~zCNf3;c!gArky&D3=w4H9F&Z!(SRSetgWV8f&|^tFOLS+J)H_Jx9dv0%gQ&xn7i zU|%lSGX;CLV8h2`#Dl&yZ1|WA8+KKO-6+`b5gN~7S7g|*12Syb@EA61ZwwngV#9{r zieba%1iyp1$aB3wfA7$R>br-bQZ;V6a9+*b?&>KH_d{^eFD2pt~)S$ Wp~m@r6~_4gDwrSfTgtg3zsmT|a6er8E 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 C8l+rEwDyis!vS5!l+JZ(Ks$8 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�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 diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/hexShape.psd.meta b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/hexShape.psd.meta index 937dd799..fec782b2 100644 --- a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/hexShape.psd.meta +++ b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/hexShape.psd.meta @@ -19,8 +19,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + seamlessCubemap: 0 textureFormat: -1 - maxTextureSize: 1024 + maxTextureSize: 64 textureSettings: filterMode: -1 aniso: -1 @@ -31,3 +32,4 @@ TextureImporter: compressionQuality: 50 textureType: -1 buildTargetSettings: [] + userData: diff --git a/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/sphereShape.psd b/Assets/Standard Assets/Image Effects (Pro Only)/_Sources/Textures/sphereShape.psd index 45c5c554e6f85a65e9b7c42d1c2edbcc614ea73c..a100649160719b85b695058e36dcc0d725bdcf69 100644 GIT binary patch literal 492716 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∋_-ezr-! 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