Spóźniłem się na odpowiedź, ale próbowałem osiągnąć to samo i pomyślałem, że podzielę się rozwiązaniem, którego używam.
Podobny efekt można uzyskać w operacji pojedynczego wyciągnięcia z niezbyt skomplikowanym modułem cieniującym.
W module cieniującym obliczysz kolor fragmentu na podstawie pioruna i tekstury, podając nie wyróżniony kolor "colorA".
Twój drugi kolor to kolor obrysu, "colorB".
Powinieneś otrzymać fragment do wektora kamery, znormalizować go, a następnie otrzymać iloczyn iloczynowy tego wektora z normalnym fragmentem.
Fragment do wektora kamery jest po prostu odwrotnością położenia fragmentu w przestrzeni oczu.
kolor fragmentu wynosi:
float CameraFacingPercentage = dot(v_fragmentToCamera, v_Normal);
gl_FragColor = ColorA * CameraFacingPercentage + ColorB * (1 - FacingCameraPercentage);
Jest to podstawowa idea, ale będziesz musiał bawić się mieć bardziej lub mniej koloru konturu. Ponadto podświetlone zostaną wklęsłe części modelu, ale tak samo jest w przypadku obrazu zamieszczonego w pytaniu.
Rysujemy obiekt z jednolitym kolorem na fakturze, a następnie narysujemy tę teksturę na ekranie za pomocą zacienionego shadera? – dupersuper
Tak, ale prawdopodobnie nie jest to jedyny sposób, aby to zrobić. – weltensturm
Zasadniczo to zostało zrobione na tytule, nad którym pracowałem, chociaż dla nas było problematycznie wolne. Zastanów się, jak duża część ekranu będzie zawierała Twój zarys, zanim podejmiesz się tego podejścia - dostępne są tańsze efekty, które informują, że "ten model jest podświetlony". W przypadku nowoczesnego tytułu prawdopodobnie nie masz do dyspozycji współczynnika wypełnienia. – Philip