Jump to content


Photo

Custom frob idea

frob shader

26 replies to this topic

#1 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 16 July 2017 - 06:07 AM

*
POPULAR

Lately, I was fiddling with TDM frob shader, because often I find it too subtle for my taste. Don’t get me wrong, it works as intended, but it looks best in complete darkness. In more lit rooms, e.g. while putting out candles, it’s a bit hard to see whether you’re able to interact with an object or not. Modern games use Fresnel-based shader to achieve this, so an object gets a bright outline. This is very in-your-face and something more like the “atomic-blue frob” from Thief Deadly Shadows we all hated back in the day. That said, I think you can achieve some middle ground here.

 

I couldn’t get the proper fresnel program to work, since I’m not that good at shaders, but I don’t think I will need it. Instead, I created a “fake Fresnel” cubemap, which looks like this:

 

fres_back.png

 

You can easily make it in Gimp. It’s a 256 texture with radial gradient from black to white, and offset of 50, so the color transition starts further away from the center. If you just want an outline, use pure black as starting color. I wanted both some highlight and an outline, so I used RGB 32. Now you have to save it 6 times with _back, _down, _forward etc., so it gets recognized as a cubemap.

Then you have to go to your material definition and put this instead of standard frob code:

 // This is the code required for frob highlighting this texture
{
  if ( parm11 > 0 )
  maskcolor
  map makealpha (_white)
  alpha .2  // modify it as you wish
}
{
        if ( parm11 > 0 )
  blend gl_dst_alpha, gl_one
  maskalpha
  cameraCubeMap cubemap/path/here
  texgen  reflect
}

 

Cool thing is, you can tweak the cubemap intensity with alpha parameter, so you’ll get more consistent look when you need different values for e.g. wooden and glass objects (the latter typically require more visible frob). This effect also looks a bit different on .ase models and on brushes / func_statics made in DR, so you can tweak it to look the same across all materials and types of surfaces.

 

Small comparison:

 

Clipboard01.png


  • Bikerdude, HMart, jaxa and 3 others like this

#2 Bikerdude

Bikerdude

    Mod hero

  • Member
  • PipPipPipPipPip
  • 20223 posts

Posted 16 July 2017 - 08:28 AM

Ohh I see where your going, its like the frob we have seen in a lot of other games.

 

Also what the heck is that thing...?



#3 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 16 July 2017 - 09:40 AM

Yup, this is more like Bioshock / Dishonored kind of frob, only not that super shiny. I don't have any interactive objects in my FM yet, so I use what I can ;) This is my electric lamp model. It's a good example of an object with high specularity. Notice that standard TDM frob highlights mostly the shiny parts, while contrast remains similar. Cubemap frob looks more like a layer put on top of the object, that's why it's more distinct.


  • Bikerdude likes this

#4 HMart

HMart

    Advanced Member

  • Member
  • PipPipPip
  • 742 posts

Posted 16 July 2017 - 08:18 PM

Nice done, not exaggerated like i like it, btw while editing the fhDoom engine, i found idsoftware played with item highlight for Doom 3, but disabled it for the final game, i was able to enable it again and it was just the case of changing a bool from false to true, i also found that the material shader for it is still in the game and it also uses a cubemap.

itemHighlightShell
{
   nonSolid
	{
     	    blend add
	    cubeMap	env/sheen
            texgen	reflect
	    rgb		parm4
	}
} 

Unfortunately, is a pulse based highlight (on and off) system so it looks to obvious and in your face, but was cool to find how they did it.  


Edited by HMart, 16 July 2017 - 08:19 PM.

  • Judith likes this

#5 VanishedOne

VanishedOne

    Advanced Member

  • Member
  • PipPipPip
  • 860 posts

Posted 17 September 2017 - 09:27 PM

I couldn’t get the proper fresnel program to work

 

frob.vfp was designed to give a fresnel-like frob highlight, but it's unused because of a bug with TGA textures.

 

http://forums.thedar...ht/#entry174954

http://forums.thedar...es/#entry199639


Some things I'm repeatedly thinking about...

- louder scream when you're dying


#6 Bikerdude

Bikerdude

    Mod hero

  • Member
  • PipPipPipPipPip
  • 20223 posts

Posted 19 September 2017 - 06:00 AM

Now that we are open source can the issue Greebo mentioned un the second post be now looked at?

#7 NeonsStyle

NeonsStyle

    Advanced Member

  • Member
  • PipPipPip
  • 1419 posts

Posted 20 September 2017 - 09:10 AM

Sorry, but I really don't like it. One of the worst thing with T3 and T4 was the horrid frob glow.

 

TDMs frob is perfect, not too bright, not too dark. When you know what can be frobbed, it's perfectly easy, and it's something we enjoy learning

about the game; what is touchable and what isn't. Making it obvious just ruins that discovery.


I have an eclectic YouTube channel making videos on a variety of games. Come and have look here:
 
https://www.youtube.com/c/NeonsStyleHD

 

Dark Mod Missions: Briarwood Manor - available here or in game

http://forums.thedar...2017-update-16/

 

 

 


#8 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 20 September 2017 - 11:17 AM

The default frob is far from perfect; it works well in the dark, but as I said above, finding what is frobable or extinguishing candles, in rooms which are better lit, can be a pain. This fake-fresnel frob is more pronounced and can be tweaked per material, so it's not so in your face, and it works more consistently.



#9 duzenko

duzenko

    Advanced Member

  • Active Developer
  • PipPipPip
  • 1707 posts

Posted 22 September 2017 - 01:47 PM

My 5 cents.

I don't like how TDM handles frob now. Each frobable material has these two extra stages, and not only it makes loading a map slower (because of extra data parsing) but it also adds extra draw call when an entity is selected.

Instead I would propose to highlight the entity in the standard ambient shader by simple color add. (cubemap wrap, etc).

This way once changed in the GPU shader code it would apply to all materials.

It would also allow different. configurable frob visuals.


  • OrbWeaver and Judith like this

#10 Springheel

Springheel

    Creative Director (retired)

  • Admin
  • 37406 posts

Posted 22 September 2017 - 02:03 PM

We've had lots of proposals for alternate frobs over the years.  It really takes a test-map, or at least a video, to get a good sense of whether a proposal is preferable to what we already have.


TDM Missions:   A Score to Settle   *   A Reputation to Uphold   *   A New Job   *    A Matter of Hours
 
Video Series:   Springheel's Modules   *   Speedbuild Challenge   *   New Mappers Workshop  *   Building Traps

#11 VanishedOne

VanishedOne

    Advanced Member

  • Member
  • PipPipPip
  • 860 posts

Posted 22 September 2017 - 02:30 PM

Slightly tweaked frobs per material aren't unknown: tdm_pagan_orb_glow adds some white twice, which gives the orb a bluish frob glow.
 
I remember finding the frob highlight of textures/darkmod/wood/panels/beam_brown_old too dark to see easily; had I needed to keep that entity frobable I'd probably have tweaked the material def.
 
(I wondered whether it was a deliberate choice not to give bc_doublebass_* materials frob highlights: a frobable double bass will have only the strings highlighted. Whether that's helpful visual language probably depends on whether one intends to have the frob play a sound or pick up the entity.)
 
So there's something to be said for being able to control the frob highlight on a per-material basis.
 
Edit: quoting this here before I forget it's there:
 

It blends in a portion of _white plus a portion of the diffuse. This is 99.9% effective but there were a few dark textures we had to boost that portion. I recall dark bottles were hard to see. The padlock also. [...] We may from time to time find a texture that needs adjusting. Fortunately its settable individually in every material.


Edited by VanishedOne, 07 November 2017 - 01:29 PM.

Some things I'm repeatedly thinking about...

- louder scream when you're dying


#12 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 08 January 2018 - 06:26 AM

You asked for more tangible example, so here it is:

 

 

This is a bit refined version, although it's probably not that much visible in the video. This material actually uses the same cubemap twice: first stage uses specular texture as alpha to give the grate a subtle shimmer to indicate it's interactive. It's not very pronounced, as lights make the cubemap more dim. But, it's very useful for finding objects in darker scenes. Second stage is actual frob and it uses diffuse texture as alpha, so it's a bit more pronounced.


  • STiFU, nbohr1more and Obsttorte like this

#13 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 08 January 2018 - 08:56 AM

Also, I was a bit worried that in stronger lighting this frob will be less visible, which often happens with standard frob. But, instead of making material instances for different situations, you can just add parm3 to the alpha value and then set it in the model. So the base alpha value in the material can be, e.g. for models lit only with ambient_world (with shaderparm3 = 0). And if you need stronger outline for frob, e.g. in well lit room, you increase shaderparm3 value. For example:

 

Shaderparm3 = 0

obraz.png

 

Shaderparm = 0.5

obraz.png

 

Code:

	// Frobable object outline
	
	{
		maskcolor
		map makealpha (texture)
		alpha .2 + parm3		// modify it as you wish, set shaderparm3 in the model to at least 0!
	}
	{
		blend gl_dst_alpha, gl_one
		maskalpha
		cameraCubeMap	fake_fresnel_cubemap
		texgen		reflect
        }
	
	//	Better frob
	
	{
		if ( parm11 > 0 )
		maskcolor
		map makealpha (texture)
		alpha .4 + parm3	// modify it as you wish, set shaderparm3 in the model to at least 0!
	}
	{
        if ( parm11 > 0 )
		blend gl_dst_alpha, gl_one
		maskalpha
		cameraCubeMap	fake_fresnel_cubemap
		texgen		reflect
        }

Edited by Judith, 08 January 2018 - 09:56 AM.


#14 the_deep

the_deep

    Member

  • Member
  • PipPip
  • 104 posts

Posted 08 January 2018 - 04:50 PM

I like it. I agree that it can be hard to see what your focusing on in well-lit areas. Slightly annoying at times, especially when you're in a hurry.



#15 Obsttorte

Obsttorte

    Scripting guru, Mapper

  • Active Developer
  • PipPipPipPipPip
  • 5701 posts

Posted 11 January 2018 - 03:12 AM

I really like what I am seeing. It looks a bit odd on the screenies, but in the video it looks good to me (strange, I know).


  • Bikerdude likes this
FM's: Builder Roads, Old Habits, Old Habits Rebuild
WIP's: Several. Although after playing Thief 4 I really wanna make a city mission.
Mapping and Scripting: Apples and Peaches
Sculptris Models and Tutorials: Obsttortes Models
My wiki articles: Obstipedia
Let's Map TDM YouTube playlist: ObstlerTube
Texture Blending in DR: DR ASE Blend Exporter

End of shameless self promotion.

#16 Bikerdude

Bikerdude

    Mod hero

  • Member
  • PipPipPipPipPip
  • 20223 posts

Posted 11 January 2018 - 01:56 PM

@Judith could you do a video showing the new fron on some stock items..?



#17 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 12 March 2018 - 12:11 PM

@Judith could you do a video showing the new fron on some stock items..?

 

Should have done this long time ago, but here goes. This is the default frob in action. Notice that in such lighting conditions it's hard to tell whether these chalices are loot or not, especially if player is in a hurry, sweeping the room in a risky move:

https://www.dropbox....efault.mp4?dl=0

 

Now this has both an initial outline for interactive objects, and the new frob. You may argue that the white outline doesn't fit here, maybe something more orange would be more suitable. And I agree :) Still, IMO with that kind of frob player can see better what's interactive and what's not:

https://www.dropbox....ob_new.mp4?dl=0


  • Bikerdude and Obsttorte like this

#18 Bikerdude

Bikerdude

    Mod hero

  • Member
  • PipPipPipPipPip
  • 20223 posts

Posted 12 March 2018 - 03:55 PM

I like this alot, its very T4 inspired and the frob is both easier to see while at the same time being less garish and in your face as it is now!

 

Have you approched the team about getting this added to the core mod..?



#19 Abusimplea

Abusimplea

    Member

  • Member
  • PipPip
  • 485 posts

Posted 12 March 2018 - 07:46 PM

It looks to me as if in the two videos the lighting on the candle holders differs in unfrobbed state too. They seem to be brighter in frob_new.mp4 . Unfrobbable items like the vases seem not to be affected.



#20 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 13 March 2018 - 03:03 AM

I like this alot, its very T4 inspired and the frob is both easier to see while at the same time being less garish and in your face as it is now!

 

Have you approched the team about getting this added to the core mod..?

 

Thanks! No, I didn't think about adding it to the core mod yet. I'll add it as a feature proposal in the bugtracker. But I think it might need refinment and more extensive tests (not just loot but doors, junk objects, etc).

 

It looks to me as if in the two videos the lighting on the candle holders differs in unfrobbed state too. They seem to be brighter in frob_new.mp4 . Unfrobbable items like the vases seem not to be affected.

 

Great, that means my idea works ;) That's the "frobable object outline" code at work. That said, this is a gameplay-changing feature i.e. it helps the player see what's static and what's interactive. It might be better if it was left optional, as originally TDM doesn't do that. The way I see it, TDM model of presenting interaction is more like Thief 1-2. What I'm proposing here is more like Dishonored and the like, only a bit more subtle. There are still more tests needed IMO. The outline may work for loot, but what about doors or junk objects? I'm not so sure about that. Best PoC would be a complete list of shaders modified for e.g. Tears of Saint Lucia or A New Job, to see how it works as a system. I have a lot on my plate right now, so no promises, but I'll get back to it, sooner or later.



#21 Obsttorte

Obsttorte

    Scripting guru, Mapper

  • Active Developer
  • PipPipPipPipPip
  • 5701 posts

Posted 13 March 2018 - 04:52 AM

BTW: What is "texture" in your code referring to? Is it the diffusemap or do you use a standard texture material-independently?


Best PoC would be a complete list of shaders modified for e.g. Tears of Saint Lucia or A New Job, to see how it works as a system.

This should be doable via a script, similar to the one modifying missions for I18N. So you don't have to change all materials manually.


FM's: Builder Roads, Old Habits, Old Habits Rebuild
WIP's: Several. Although after playing Thief 4 I really wanna make a city mission.
Mapping and Scripting: Apples and Peaches
Sculptris Models and Tutorials: Obsttortes Models
My wiki articles: Obstipedia
Let's Map TDM YouTube playlist: ObstlerTube
Texture Blending in DR: DR ASE Blend Exporter

End of shameless self promotion.

#22 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 13 March 2018 - 05:25 AM

BTW: What is "texture" in your code referring to? Is it the diffusemap or do you use a standard texture material-independently?

 

For the chalice, I used its normalmap for the outline, as it's a bit more subtle. I used diffuse for the actual frob. You can also use _white in both cases, but it looks more like a plastic wrap or TDS-like frob.

 

Code:

	// Frobable object outline
	
	{
		maskcolor
		map makealpha (models/darkmod/props/textures/gold_chalice_ornate_local) // Object normalmap for outline mask
		alpha .5		// modify it as you wish
	}
	{
		blend gl_dst_alpha, gl_one
		maskalpha
		cameraCubeMap	env/fres
		texgen		reflect
    }


	//	Better frob
	
	{
		if ( parm11 > 0 )
		maskcolor
		map makealpha (models/darkmod/props/textures/gold_chalice_ornate)
		alpha .3		// modify it as you wish
	}
	{
        if ( parm11 > 0 )
		blend gl_dst_alpha, gl_one
		maskalpha
		cameraCubeMap	env/fres
		texgen		reflect
    }

Btw. one thing against the "frobable object outline" is that it adds to the drawcall and triangle count of a model (two additional stages). The frob itself is not an issue, because it doesn't add anything to the scene unless you're highlighting an object. That's why I'd also exclude "junk items" from the outline, since many missions use them extensively.



#23 OrbWeaver

OrbWeaver

    Mod hero

  • Active Developer
  • PipPipPipPipPip
  • 7516 posts

Posted 13 March 2018 - 05:29 AM

+1 from me. I always felt the default TDM frob was ridiculously weak, verging on invisible except in almost complete darkness.



#24 Destined

Destined

    Advanced Member

  • Member
  • PipPipPip
  • 1595 posts

Posted 13 March 2018 - 07:15 AM

I also like it, but I would leave the outline as it might give away hidden switches and the like. I think it might give away some puzzles too easily.


  • Judith likes this

#25 Judith

Judith

    Advanced Member

  • Member
  • PipPipPip
  • 1644 posts

Posted 13 March 2018 - 12:25 PM

I changed a bunch of material files and replaced the standard frob. I ended up using _white so I could replace the code faster. Unfortunately, there's no one-size-fits-all solution in this case. Some objects look pretty decent, other, especially those with darker textures, not so much. Doors and boxy stuff looks like from TDS. This would need tweaking per object. Here are the material files, make sure you backup the originals before using these:

 

https://www.dropbox....erials.zip?dl=1

 

Edit:

 

Oh, and to properly use these, you need to put this cubemap in the mod env folder: https://www.dropbox....dc/env.zip?dl=1


Edited by Judith, 13 March 2018 - 12:29 PM.




Reply to this topic



  



Also tagged with one or more of these keywords: frob, shader

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users