a nice cavern filled with lava

Ask for help about creating mods and scripts for Grimrock 2 or share your tips, scripts, tools and assets with other modders here. Warning: forum contains spoilers!

Re: a nice cavern filled with lava

Postby minmay » Sat Aug 01, 2015 8:12 pm

AndakRainor wrote:I don't know if the formula is good but I tried to follow the advise in the code commentary of water_surface_calm "compensate this by increasing wave amplitude to unrealistic value..." setting it to a proportion of the time parameter.
That's just going to break even worse...the unrealistic wave amplitude is because of heightmap goofiness. If you are set on having an animated mesh I highly recommend you just...animate the mesh instead of using the water shader, since that shader 1. doesn't work in this case, 2. isn't needed in this case (you don't want reflections!), 3. will be much worse for performance. But again, I think you would get just as good of an effect with the wall_fire shader and any decent displacement map, without having to do any actual mesh animation at all. (Your lava does have a normal map, yes?)
minmay
 
Posts: 2379
Joined: Mon Sep 23, 2013 2:24 am

Re: a nice cavern filled with lava

Postby AndakRainor » Sat Aug 01, 2015 8:34 pm

Okay, also I don't understand anything about the behavior of this shader, which changes between reloads of the mod or reloads of the editor itself. So, time to try other things. What exactly is a displacement map ? (I have diffuse, normal and emissive textures, didn't touch the displacement one as I don't know what it is used for!)
PS: back from wikipedia, okay I see how it could be useful. But I must admit, in the editor, I don't see any difference with or without one displacement map or another. Is there a specific shader needed or another parameter to set for those maps to be used ?
User avatar
AndakRainor
 
Posts: 636
Joined: Thu Nov 20, 2014 5:18 pm

Re: a nice cavern filled with lava

Postby minmay » Sat Aug 01, 2015 9:30 pm

Displacement maps are used with the water shader and the wall_fire shader that I recommended.
minmay
 
Posts: 2379
Joined: Mon Sep 23, 2013 2:24 am

Re: a nice cavern filled with lava

Postby AndakRainor » Sat Aug 01, 2015 10:17 pm

It seems this shader does not use my emissiveMap... The result is a black surface.
User avatar
AndakRainor
 
Posts: 636
Joined: Thu Nov 20, 2014 5:18 pm

Re: a nice cavern filled with lava

Postby minmay » Sat Aug 01, 2015 11:00 pm

use a different blend mode, it doesn't work with opaque iirc. I doubt it will ever use an emissive map but it will not have lighting anyway.
minmay
 
Posts: 2379
Joined: Mon Sep 23, 2013 2:24 am

Re: a nice cavern filled with lava

Postby AndakRainor » Sat Aug 01, 2015 11:19 pm

The other modes make the surface nearly invisible... but the textures are opaque (dds dxt1). Should I use another format ?
User avatar
AndakRainor
 
Posts: 636
Joined: Thu Nov 20, 2014 5:18 pm

Re: a nice cavern filled with lava

Postby minmay » Sun Aug 02, 2015 12:00 am

if you use "Additive" and put a black surface right below it, it should look the same as "Opaque" does without lighting. I'm afraid this will be needed if you want the displacement effect (still better performance than water shader though).
minmay
 
Posts: 2379
Joined: Mon Sep 23, 2013 2:24 am

Re: a nice cavern filled with lava

Postby AndakRainor » Sun Aug 02, 2015 2:24 pm

Okay I give up on the idea of animating the surface, and use the default shader instead with just texture moves. It is so much better than anything I can do with with other shaders...

So here it is:
Spoiler: show
Image


The code:
Spoiler: show
Code: Select all
defineObject{
  name = "lava_effects",
  components = {
    { class = "Light",
      offset = vec(0, -0.5, 0),
      range = 6,
      color = vec(2.8, 1.2, 0.7),
      brightness = 10,
      castShadow = true,
      shadowMapSize = 64,
      staticShadows = true,
      staticShadowDistance = 0,   -- use static shadows always
    },
    { class = "Particle",
      particleSystem = "lava_effects",
      offset = vec(0, -0.4, 0),
    },
    {
      class = "TileDamager",
      attackPower = 3,
      damageType = "fire",
      repeatCount = math.huge,
      repeatDelay = 1,
      onInit = function(self)
        if self.go.map:getElevation(self.go.x, self.go.y) < self.go.elevation then
          spawn("under_lava_effects", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
        end
      end,
    },
    { class = "Timer",
      timerInterval = 1,
      triggerOnStart = true,
      onActivate = function(self)
        self.go:playSound("magma_explosion")
        spawn("magma_golem_meteor_impact_ground", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
        self:setTimerInterval(300*(0.1+0.9*math.random()))
      end,
      onInit = function(self)
        self:setTimerInterval(300*math.random())
      end,
    },
    { class = "Sound",
      sound = "fire_pit",
      volume = 0.5,
    },
  },
  placement = "floor",
  editorIcon = 88,
}

defineObject{
  name = "under_lava_effects",
  components = {
    { class = "Particle",
      particleSystem = "under_lava_effects",
    },
    {
      class = "TileDamager",
      attackPower = 1000,
      damageType = "fire",
      repeatCount = math.huge,
      repeatDelay = 1,
      onInit = function(self)
        if self.go.map:getElevation(self.go.x, self.go.y) < self.go.elevation then
          spawn("under_lava_effects", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
        end
      end,
    },
  },
  placement = "floor",
  editorIcon = 88,
}

defineObject{
  name = "lava_surface",
  components = {
    {
      class = "Model",
      model = "assets/models/env/ocean_water.fbx",
      material = "lava_surface",
      offset = vec(0, -0.4, 0),
    },
  },
  placement = "floor",
  dontAdjustHeight = true,
  editorIcon = 264,
  reflectionMode = "never",
}

defineObject{
  name = "lava_surface_tiles",
  baseObject = "base_floor_decoration",
  components = {
    {
      -- updates global reflection and refraction maps
      class = "WaterSurface",
      planeY = -0.4,
      fogColor = math.saturation(vec(0.26, 0.09, 0.042), 0.5) * 0.5,
      fogDensity = 0.4,
      reflectionColor = vec(1.5, 0.9, 0.27) * 0.9,
      refractionColor = vec(1.5,1.0,0.5),
    },
    {
      -- builds a continuous mesh from underwater tiles
      class = "WaterSurfaceMesh",
      material = "lava_surface_tiles",
      underwaterMaterial = "lava_surface_tiles",
      offset = vec(0, -0.4, 0),
    },
  },
  dontAdjustHeight = true,
  editorIcon = 264,
}

defineMaterial{
  name = "lava_surface",
  diffuseMap = "mod_assets/textures/env/lava_dif.tga",
  normalMap = "assets/textures/env/beach_ground_normal.tga",
  emissiveMap = "mod_assets/textures/env/lava_emissive.tga",
  displacementMap = "assets/textures/env/ocean_disp.tga",
  doubleSided = true,
  lighting = true,
  alphaTest = false,
  castShadow = false,
  blendMode = "Opaque",
  textureAddressMode = "Wrap",
  glossiness = 60,
  depthBias = 0,
  onUpdate = function(self, time)
    self:setTexcoordScaleOffset(0.5, 0.5, math.cos(time*0.0625)*0.0625, math.sin(time*0.0625)*0.0625)
  end,
}

defineMaterial{
  name = "lava_surface_tiles",
  diffuseMap = "mod_assets/textures/env/lava_dif.tga",
  normalMap = "assets/textures/env/beach_ground_normal.tga",
  emissiveMap = "mod_assets/textures/env/lava_emissive.tga",
  displacementMap = "assets/textures/env/ocean_disp.tga",
  doubleSided = true,
  lighting = true,
  alphaTest = false,
  castShadow = false,
  blendMode = "Opaque",
  textureAddressMode = "Wrap",
  glossiness = 60,
  depthBias = 0,
  onUpdate = function(self, time)
    self:setTexcoordScaleOffset(0.5, 0.5, math.cos(time*0.0625)*0.0625, math.sin(time*0.0625)*0.0625)
  end,
}

defineParticleSystem{
  name = "lava_effects",
  emitters = {
    -- stars
    {
      emissionRate = 40,
      emissionTime = 0,
      maxParticles = 200,
      boxMin = {-1.3, 0.0,-1.3},
      boxMax = { 1.3, 0.5, 1.3},
      sprayAngle = {0,360},
      velocity = {0,0},
      objectSpace = true,
      texture = "assets/textures/particles/firefly_dif.tga",
      lifetime = {0.5,5.0},
      color0 = {4, 0.4, 0.2},
      opacity = 1,
      fadeIn = 0.1,
      fadeOut = 1.0,
      size = {0.05, 0.1},
      gravity = {0,0.5,0},
      airResistance = 0.1,
      rotationSpeed = 5,
      blendMode = "Additive",
    },
    -- flames 1
    {
      emissionRate = 5,
      emissionTime = 0,
      maxParticles = 5,
      boxMin = {-1.5, -0.1,-1.5},
      boxMax = { 1.5, -0.1, 1.5},
      sprayAngle = {0,360},
      velocity = {0,0},
      objectSpace = false,
      texture = "assets/textures/particles/flame.tga",
      frameSize = 32,
      frameCount = 40,
      frameRate = 60,
      lifetime = {0.5,1.0},
      color0 = {4, 0.4, 0.2},
      opacity = 0.5,
      fadeIn = 0.5,
      fadeOut = 0.5,
      size = {0.5, 0.5},
      gravity = {0,0.02,0},
      airResistance = 0.1,
      rotationSpeed = 1,
      blendMode = "Additive",
    },
    -- flames 2
    {
      emissionRate = 5,
      emissionTime = 0,
      maxParticles = 5,
      boxMin = {-1.5, -0.1,-1.5},
      boxMax = { 1.5, -0.1, 1.5},
      sprayAngle = {0,360},
      velocity = {0,0},
      objectSpace = false,
      texture = "assets/textures/particles/flame.tga",
      frameSize = 32,
      frameCount = 40,
      frameRate = 60,
      lifetime = {0.5,1.0},
      color0 = {4, 0.4, 0.2},
      opacity = 0.5,
      fadeIn = 0.5,
      fadeOut = 0.5,
      size = {0.5, 0.5},
      gravity = {0,0.02,0},
      airResistance = 0.1,
      rotationSpeed = -1,
      blendMode = "Additive",
    },
    -- smoke
    {
      emissionRate = 4,
      emissionTime = 0,
      maxParticles = 40,
      boxMin = {-1.3, 0, -1.3},
      boxMax = { 1.3, 1.0, 1.3},
      sprayAngle = {0,20},
      velocity = {0.4, 0.8},
      texture = "assets/textures/particles/smoke_01.tga",
      lifetime = {1,5},
      color0 = {0.25, 0.20, 0.17},
      opacity = 0.5,
      fadeIn = 0.3,
      fadeOut = 0.9,
      size = {1.5, 2},
      gravity = {0,0.3,0},
      airResistance = 0.1,
      rotationSpeed = 0.5,
      blendMode = "Translucent",
    },
  }
}

defineParticleSystem{
  name = "under_lava_effects",
  emitters = {
    -- fog under 1
    {
      emissionRate = 1,
      emissionTime = 0,
      maxParticles = 10,
      boxMin = {-1.5, -1.0, -1.5},
      boxMax = { 1.5,  2.0,  1.5},
      sprayAngle = {0,360},
      velocity = {0,0},
      objectSpace = true,
      texture = "assets/textures/particles/fog.tga",
      lifetime = {10,10},
      color0 = {1.75,0.6,0.2},
      opacity = 1,
      fadeIn = 2.5,
      fadeOut = 2.5,
      size = {5, 5},
      gravity = {0,0,0},
      airResistance = 0.5,
      rotationSpeed = -0.3,
      blendMode = "Translucent",
    },
    -- fog under 2
    {
      emissionRate = 1,
      emissionTime = 0,
      maxParticles = 10,
      boxMin = {-1.5, -1.0, -1.5},
      boxMax = { 1.5,  2.0,  1.5},
      sprayAngle = {0,360},
      velocity = {0,0},
      objectSpace = true,
      texture = "assets/textures/particles/fog.tga",
      lifetime = {10,10},
      color0 = {1.75,0.6,0.2},
      opacity = 1,
      fadeIn = 2.5,
      fadeOut = 2.5,
      size = {5, 5},
      gravity = {0,0,0},
      airResistance = 0.5,
      rotationSpeed = 0.3,
      blendMode = "Translucent",
    },
  }
}

defineSound{
   name = "magma_explosion",
   filename = "assets/samples/monsters/magma_golem_meteor_fall_01.wav",
   loop = false,
   volume = 2.5,
   minDistance = 1,
   maxDistance = 10,
}
User avatar
AndakRainor
 
Posts: 636
Joined: Thu Nov 20, 2014 5:18 pm

Re: a nice cavern filled with lava

Postby bongobeat » Mon Aug 03, 2015 8:10 pm

well it looks nice for me. It's better than the original stuff or both can be mixed. Yours can be used for large surface with lava. I will try to test some on exterior area when I will have time.
did you try to make an eruption particle?
My asset pack: viewtopic.php?f=22&t=9320

Log1 mod : Toorum Manor: viewtopic.php?f=14&t=5505
bongobeat
 
Posts: 871
Joined: Thu May 16, 2013 5:58 pm
Location: France

Re: a nice cavern filled with lava

Postby AndakRainor » Tue Aug 04, 2015 8:48 pm

For the eruption effect it seems a particle is not enough to draw a trail. I will try with an object...
User avatar
AndakRainor
 
Posts: 636
Joined: Thu Nov 20, 2014 5:18 pm

PreviousNext

Return to Mod Creation

Who is online

Users browsing this forum: Google [Bot] and 3 guests